From d39e202de2a5cc20f3088790db4241e599240282 Mon Sep 17 00:00:00 2001 From: taco Date: Tue, 9 Jun 2026 02:29:12 -0600 Subject: [PATCH] Initial code commit for project --- .gitignore | 14 + .idea/.gitignore | 10 + .idea/corsair-lcd-control.iml | 8 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + README.md | 57 + cat.jpg | Bin 0 -> 110216 bytes main.js | 231 ++ package-lock.json | 3922 +++++++++++++++++++++++++++++++++ package.json | 52 + preload.js | 21 + src/index.html | 63 + src/renderer.js | 78 + src/styles.css | 113 + 14 files changed, 4583 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/corsair-lcd-control.iml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 cat.jpg create mode 100644 main.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 preload.js create mode 100644 src/index.html create mode 100644 src/renderer.js create mode 100644 src/styles.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f43127b --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +node_modules/ +dist/ +out/ +release/ + +.DS_Store +Thumbs.db +*.log +.env +.env.local + +npm-debug.log* +yarn-error.log* +yarn-debug.log* diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/corsair-lcd-control.iml b/.idea/corsair-lcd-control.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/.idea/corsair-lcd-control.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..50bcb64 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index a2cb91a..9c7f275 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,59 @@ # corsair-lcd-control +Electron app to control Corsair LCD displays. Monitors system stats (CPU temp, RAM, GPU temp), detects USB devices, and manages preferences. + +## Prerequisites + +- [Node.js](https://nodejs.org/) >= 18 +- npm >= 9 +- **Linux**: `libusb-1.0-0-dev`, `build-essential`, `python3` +- **macOS**: Xcode Command Line Tools (`xcode-select --install`) +- **Windows**: Build Tools for Visual Studio + +## Setup + +```bash +git clone +cd corsair-lcd-control +npm install +``` + +`postinstall` automatically rebuilds native modules for Electron using `@electron/rebuild`. + +## Development + +```bash +npm start +``` + +## Build + +```bash +npm run build +``` + +Produces platform-specific packages: + +| Platform | Format | +|----------|--------| +| Linux | `.AppImage`, `.deb` | +| macOS | `.dmg` | +| Windows | `.exe` (NSIS) | + +## Rebuild Native Modules + +If native modules fail to load after a Node.js or Electron upgrade: + +```bash +npm run rebuild +``` + +## Capabilities + +- **USB** — `usb` module enumerates and connects to devices +- **System Tray** — background process with context menu (Show/Hide/Quit) +- **Preferences** — persisted via `electron-store` (JSON) +- **File Pickers** — native OS dialogs via Electron's `dialog` API +- **CPU Temperature** — `systeminformation.cpuTemperature()` +- **RAM Usage** — `systeminformation.mem()` +- **GPU Temperature** — `systeminformation.graphics()` diff --git a/cat.jpg b/cat.jpg new file mode 100644 index 0000000000000000000000000000000000000000..084ce98dbcaac5bc7b76bad117b2a21e04f60510 GIT binary patch literal 110216 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 GAOG1#kzbqu literal 0 HcmV?d00001 diff --git a/main.js b/main.js new file mode 100644 index 0000000..2cac87c --- /dev/null +++ b/main.js @@ -0,0 +1,231 @@ +const { app, BrowserWindow, ipcMain, Tray, Menu, nativeImage, dialog } = require('electron'); +const path = require('path'); +const Store = require('electron-store'); +const si = require('systeminformation'); +const usb = require('usb'); + +const store = new Store({ defaults: { preferences: {} } }); + +let mainWindow = null; +let tray = null; + +function createTrayIcon() { + const size = 16; + const canvas = Buffer.alloc(size * size * 4); + for (let y = 0; y < size; y++) { + for (let x = 0; x < size; x++) { + const idx = (y * size + x) * 4; + const cx = x - size / 2, cy = y - size / 2; + if (Math.sqrt(cx * cx + cy * cy) < size / 2 - 1) { + canvas[idx] = 0; + canvas[idx + 1] = 120; + canvas[idx + 2] = 255; + canvas[idx + 3] = 255; + } else { + canvas[idx] = 0; + canvas[idx + 1] = 0; + canvas[idx + 2] = 0; + canvas[idx + 3] = 0; + } + } + } + return nativeImage.createFromBuffer(canvas, { width: size, height: size }); +} + +function createWindow() { + mainWindow = new BrowserWindow({ + width: 900, + height: 600, + webPreferences: { + preload: path.join(__dirname, 'preload.js'), + contextIsolation: true, + nodeIntegration: false, + }, + }); + mainWindow.loadFile(path.join(__dirname, 'src', 'index.html')); + mainWindow.on('close', (e) => { + if (!app.isQuitting) { + e.preventDefault(); + mainWindow.hide(); + } + }); +} + +function createTray() { + tray = new Tray(createTrayIcon()); + tray.setToolTip('Corsair LCD Control'); + const contextMenu = Menu.buildFromTemplate([ + { label: 'Show', click: () => mainWindow.show() }, + { label: 'Hide', click: () => mainWindow.hide() }, + { type: 'separator' }, + { label: 'Quit', click: () => { app.isQuitting = true; app.quit(); } }, + ]); + tray.setContextMenu(contextMenu); + tray.on('double-click', () => mainWindow.show()); +} + +const VENDORS = { + 0x1B1C: 'Corsair', + 0x046D: 'Logitech', + 0x0A5C: 'Broadcom', + 0x8087: 'Intel', + 0x05E3: 'Genesys Logic', + 0x04F2: 'Chicony', + 0x0BDA: 'Realtek', + 0x1D6B: 'Linux Foundation', + 0x3034: 'Realtek', + 0x5964: 'Asmedia', +}; + +function formatHexId(vendorId, productId) { + const hex = `${vendorId.toString(16).padStart(4, '0')}:${productId.toString(16).padStart(4, '0')}`; + const name = VENDORS[vendorId] || ''; + return name ? `${name} [${hex}]` : hex; +} + +function readStringDescriptor(device, index) { + return new Promise((resolve) => { + if (!index) return resolve(''); + try { + device.getStringDescriptor(index, (err, desc) => { + resolve(err ? '' : desc); + }); + } catch { + resolve(''); + } + }); +} + +// --- USB --- + +ipcMain.handle('usb:listDevices', async () => { + try { + const devices = usb.getDeviceList(); + const results = []; + for (const d of devices) { + const entry = { + vendorId: d.deviceDescriptor.idVendor, + productId: d.deviceDescriptor.idProduct, + displayName: formatHexId(d.deviceDescriptor.idVendor, d.deviceDescriptor.idProduct), + manufacturer: '', + product: '', + serialNumber: '', + }; + try { + d.open(true); + const [mfg, prod, sn] = await Promise.all([ + readStringDescriptor(d, d.deviceDescriptor.iManufacturer), + readStringDescriptor(d, d.deviceDescriptor.iProduct), + readStringDescriptor(d, d.deviceDescriptor.iSerialNumber), + ]); + if (mfg || prod) { + entry.manufacturer = mfg; + entry.product = prod; + entry.displayName = [mfg, prod].filter(Boolean).join(' '); + } + entry.serialNumber = sn; + d.close(); + } catch { + // no permission — keep the hex-based displayName + } + results.push(entry); + } + return results; + } catch (err) { + return { error: err.message }; + } +}); + +ipcMain.handle('usb:connect', async (_e, { vendorId, productId }) => { + try { + const device = usb.findByIds(vendorId, productId); + if (!device) throw new Error('Device not found'); + device.open(); + return { success: true }; + } catch (err) { + return { error: err.message }; + } +}); + +// --- Preferences --- +ipcMain.handle('prefs:get', (_e, key) => { + if (key) return store.get(key); + return store.store; +}); + +ipcMain.handle('prefs:set', (_e, key, value) => { + store.set(key, value); + return { success: true }; +}); + +ipcMain.handle('prefs:delete', (_e, key) => { + store.delete(key); + return { success: true }; +}); + +// --- File Picker --- +ipcMain.handle('dialog:openFile', async (_e, options) => { + const result = await dialog.showOpenDialog(mainWindow, { + properties: ['openFile'], + ...options, + }); + return result; +}); + +ipcMain.handle('dialog:saveFile', async (_e, options) => { + const result = await dialog.showSaveDialog(mainWindow, options); + return result; +}); + +// --- System Info --- +ipcMain.handle('system:cpuTemp', async () => { + try { + const data = await si.cpuTemperature(); + return data; + } catch (err) { + return { error: err.message }; + } +}); + +ipcMain.handle('system:ram', async () => { + try { + const data = await si.mem(); + return { + total: data.total, + free: data.free, + used: data.used, + usedPercent: ((data.used / data.total) * 100).toFixed(1), + }; + } catch (err) { + return { error: err.message }; + } +}); + +ipcMain.handle('system:gpu', async () => { + try { + const data = await si.graphics(); + const controllers = data.controllers.map((c) => ({ + vendor: c.vendor, + model: c.model, + temperatureGpu: c.temperatureGpu, + memoryUsed: c.memoryUsed, + memoryTotal: c.memoryTotal, + })); + return controllers; + } catch (err) { + return { error: err.message }; + } +}); + +app.whenReady().then(() => { + createWindow(); + createTray(); +}); + +app.on('window-all-closed', () => { + if (process.platform !== 'darwin') app.quit(); +}); + +app.on('activate', () => { + if (BrowserWindow.getAllWindows().length === 0) createWindow(); +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a0989a9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3922 @@ +{ + "name": "corsair-lcd-control", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "corsair-lcd-control", + "version": "0.1.0", + "dependencies": { + "electron-store": "^8.1.0", + "systeminformation": "^5.21.0", + "usb": "^2.9.0" + }, + "devDependencies": { + "electron": "^42.3.3", + "electron-builder": "^24.9.0" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/get": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz", + "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", + "progress": "^2.0.3", + "semver": "^7.6.3", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=22.12.0" + }, + "optionalDependencies": { + "undici": "^7.24.4" + } + }, + "node_modules/@electron/get/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/notarize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", + "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", + "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", + "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.2.1", + "@malept/cross-spawn-promise": "^1.1.0", + "debug": "^4.3.1", + "dir-compare": "^3.0.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz", + "integrity": "sha512-HqmEUIGRJ5fSXchkVgR5F7qn48bDBzv0kWj/Kfu5e6uci4UlEeng4331LnBkWffb++Ei3FOVLxo8JJWMFBDMeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.1.tgz", + "integrity": "sha512-RSpUJGmvsJ1ZeBehQZFhIdpsz+bIpES0nIQXko4Ybq+N+kX6XvOq3Jo+iJ82FWLdblFq85AsMikd3m35jgezYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/w3c-web-usb": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/@types/w3c-web-usb/-/w3c-web-usb-1.0.14.tgz", + "integrity": "sha512-Qu3Nn6JFuF4+sHKYl+IcX9vYiI40ogleXzFFSxoE1W94rG98o/kXs8uJ0QSfFzuwBCZWlGfUGpPkgwuuX4PchA==", + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@xmldom/xmldom": { + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.10.tgz", + "integrity": "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true, + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", + "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/notarize": "2.2.1", + "@electron/osx-sign": "1.0.5", + "@electron/universal": "1.5.1", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.8", + "electron-publish": "24.13.1", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^5.1.1", + "read-config-file": "6.3.2", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "24.13.3", + "electron-builder-squirrel-windows": "24.13.3" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atomically": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", + "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==", + "license": "MIT", + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", + "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", + "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/conf": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", + "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==", + "license": "MIT", + "dependencies": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/conf/node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/conf/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/config-file-ts": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", + "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.3.10", + "typescript": "^5.3.3" + } + }, + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz", + "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", + "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "42.3.3", + "resolved": "https://registry.npmjs.org/electron/-/electron-42.3.3.tgz", + "integrity": "sha512-0MwYp9wTb7TrtTalOYqeW+suqd9T/Znstr/nDLKqFGIjHdBZX339guo3mQqTPURRZ/UQmYM4uMpzKpI5wLptfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js", + "install-electron": "install.js" + }, + "engines": { + "node": ">= 22.12.0" + } + }, + "node_modules/electron-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", + "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "dmg-builder": "24.13.3", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.3.2", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", + "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "24.13.3", + "archiver": "^5.3.1", + "builder-util": "24.13.1", + "fs-extra": "^10.1.0" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-publish": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", + "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/electron-store": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.2.0.tgz", + "integrity": "sha512-ukLL5Bevdil6oieAOXz3CMy+OgaItMiVBg701MNlG6W5RaC0AHN7rvlqTCmeb6O7jP0Qa1KKYTE0xV0xbhF4Hw==", + "license": "MIT", + "dependencies": { + "conf": "^10.2.0", + "type-fest": "^2.17.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz", + "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==", + "license": "BSD-2-Clause" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/plist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.1.tgz", + "integrity": "sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.9.10", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/read-config-file": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", + "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-file-ts": "^0.2.4", + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/semver": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.3.tgz", + "integrity": "sha512-wnilbGyMxzbY7dNOl7jpKbLSjcfeweJWU5j4+u5qW+6/wuGD9KzIGOyZnQVSBM9E7DtWaaH3CyHkppYrKYoxwg==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/systeminformation": { + "version": "5.31.7", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.31.7.tgz", + "integrity": "sha512-/8NC53e5nP9nmhn42/ncdOkyJnOoue/Vy+tJOyUGd1Yv66G069wK4rrziwhrqDETgk78CudTQupw5z19S5uoZw==", + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.27.2.tgz", + "integrity": "sha512-uZsKNuzQxDMUY6M3pIMvy5tvlGmtq8XJ2oLAkfRKGNu+1VQAIvLy2xIVG5ATZl5wDXl/tddByAWCizRbOme+TA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/usb": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/usb/-/usb-2.18.0.tgz", + "integrity": "sha512-klAJPUTaSxRvTgrIh7om6UTrgRxdzioD+rJc/MaoiN8+OGdqRzai39tR00asnoCesPNikItWB9zBZoo0pJsWaA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@types/w3c-web-usb": "^1.0.6", + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.5.0" + }, + "engines": { + "node": ">=12.22.0 <13.0 || >=14.17.0" + } + }, + "node_modules/usb/node_modules/node-addon-api": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.8.0.tgz", + "integrity": "sha512-c5Ko1fZJIJmzhFIkhRN76WTq+fC6tWnGy9CXA0fA+XygsWZmEwG8vmbkNqxMyoaa0Tin4djul49NzdVcJJcjeA==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1b53a46 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "corsair-lcd-control", + "version": "0.1.0", + "author": "xerotacovix ", + "homepage": "https://github.com/xerotacovix/corsair-lcd-control", + "description": "Electron app to control Corsair LCD displays", + "main": "main.js", + "scripts": { + "start": "electron .", + "build": "electron-builder", + "postinstall": "CXXFLAGS='-std=c++17' npx @electron/rebuild", + "rebuild": "CXXFLAGS='-std=c++17' npx @electron/rebuild" + }, + "build": { + "appId": "com.corsair-lcd-control.app", + "productName": "Corsair LCD Control", + "files": [ + "main.js", + "preload.js", + "src/**/*" + ], + "linux": { + "target": [ + "AppImage", + "deb" + ] + }, + "mac": { + "target": [ + "dmg" + ] + }, + "win": { + "target": [ + "nsis" + ] + } + }, + "dependencies": { + "electron-store": "^8.1.0", + "systeminformation": "^5.21.0", + "usb": "^2.9.0" + }, + "devDependencies": { + "electron": "^42.3.3", + "electron-builder": "^24.9.0" + }, + "allowScripts": { + "usb@2.18.0": true, + "electron@42.3.3": true + } +} diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..a2ef7b4 --- /dev/null +++ b/preload.js @@ -0,0 +1,21 @@ +const { contextBridge, ipcRenderer } = require('electron'); + +contextBridge.exposeInMainWorld('electronAPI', { + // USB + usbListDevices: () => ipcRenderer.invoke('usb:listDevices'), + usbConnect: (vendorId, productId) => ipcRenderer.invoke('usb:connect', { vendorId, productId }), + + // Preferences + prefsGet: (key) => ipcRenderer.invoke('prefs:get', key), + prefsSet: (key, value) => ipcRenderer.invoke('prefs:set', key, value), + prefsDelete: (key) => ipcRenderer.invoke('prefs:delete', key), + + // File Picker + dialogOpenFile: (options) => ipcRenderer.invoke('dialog:openFile', options), + dialogSaveFile: (options) => ipcRenderer.invoke('dialog:saveFile', options), + + // System Info + systemCpuTemp: () => ipcRenderer.invoke('system:cpuTemp'), + systemRam: () => ipcRenderer.invoke('system:ram'), + systemGpu: () => ipcRenderer.invoke('system:gpu'), +}); diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..4dedec4 --- /dev/null +++ b/src/index.html @@ -0,0 +1,63 @@ + + + + + + Corsair LCD Control + + + +

+
+

Corsair LCD Control

+
+ +
+
+

System Monitoring

+
+
+

CPU Temperature

+

--

+
+
+

RAM Usage

+

--

+
+
+

GPU Temperature

+

--

+
+
+ +
+ +
+

USB Devices

+ +
    +
    + +
    +

    Preferences

    +
    + + +
    +
    + + +
    +
    + +
    +

    File Picker

    + + +

    +
    +
    +
    + + + diff --git a/src/renderer.js b/src/renderer.js new file mode 100644 index 0000000..bb47a2e --- /dev/null +++ b/src/renderer.js @@ -0,0 +1,78 @@ +const api = window.electronAPI; + +// --- System Info --- +async function refreshSystemInfo() { + const [cpuTemp, ram, gpu] = await Promise.all([ + api.systemCpuTemp(), + api.systemRam(), + api.systemGpu(), + ]); + + document.getElementById('cpu-temp').textContent = + cpuTemp.error ? `Error: ${cpuTemp.error}` : + cpuTemp.main ? `${cpuTemp.main}°C` : 'N/A'; + + document.getElementById('ram-usage').textContent = + ram.error ? `Error: ${ram.error}` : + `${ram.usedPercent}%`; + + document.getElementById('gpu-temp').textContent = + gpu.error ? `Error: ${gpu.error}` : + gpu.length > 0 && gpu[0].temperatureGpu != null ? `${gpu[0].temperatureGpu}°C` : + 'N/A'; +} + +document.getElementById('refresh-sysinfo').addEventListener('click', refreshSystemInfo); + +// --- USB --- +document.getElementById('scan-usb').addEventListener('click', async () => { + const result = await api.usbListDevices(); + const list = document.getElementById('usb-list'); + list.innerHTML = ''; + if (result.error) { + list.innerHTML = `
  • Error: ${result.error}
  • `; + return; + } + if (result.length === 0) { + list.innerHTML = '
  • No USB devices found
  • '; + return; + } + for (const dev of result) { + const li = document.createElement('li'); + li.textContent = dev.displayName; + list.appendChild(li); + } +}); + +// --- Preferences --- +document.getElementById('save-prefs').addEventListener('click', async () => { + const interval = document.getElementById('refresh-interval').value; + await api.prefsSet('refreshInterval', parseInt(interval, 10)); +}); + +document.getElementById('load-prefs').addEventListener('click', async () => { + const interval = await api.prefsGet('refreshInterval'); + if (interval != null) { + document.getElementById('refresh-interval').value = interval; + } +}); + +// --- File Picker --- +document.getElementById('open-file').addEventListener('click', async () => { + const result = await api.dialogOpenFile({ + filters: [{ name: 'All Files', extensions: ['*'] }], + }); + document.getElementById('file-result').textContent = + result.canceled ? 'Cancelled' : `Selected: ${result.filePaths.join(', ')}`; +}); + +document.getElementById('save-file').addEventListener('click', async () => { + const result = await api.dialogSaveFile({ + filters: [{ name: 'All Files', extensions: ['*'] }], + }); + document.getElementById('file-result').textContent = + result.canceled ? 'Cancelled' : `Save path: ${result.filePath}`; +}); + +// Auto-refresh on load +refreshSystemInfo(); diff --git a/src/styles.css b/src/styles.css new file mode 100644 index 0000000..b3b093f --- /dev/null +++ b/src/styles.css @@ -0,0 +1,113 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; + background: #1a1a2e; + color: #e0e0e0; + padding: 20px; +} + +.app { + max-width: 800px; + margin: 0 auto; +} + +header { + margin-bottom: 30px; +} + +header h1 { + color: #0078ff; + font-size: 1.5rem; +} + +section { + background: #16213e; + border-radius: 8px; + padding: 20px; + margin-bottom: 20px; +} + +section h2 { + font-size: 1.1rem; + margin-bottom: 15px; + color: #a0a0c0; +} + +.info-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 15px; + margin-bottom: 15px; +} + +.card { + background: #0f3460; + border-radius: 6px; + padding: 15px; + text-align: center; +} + +.card h3 { + font-size: 0.85rem; + color: #8888aa; + margin-bottom: 8px; +} + +.card p { + font-size: 1.4rem; + font-weight: bold; + color: #0078ff; +} + +button { + background: #0078ff; + color: white; + border: none; + padding: 8px 16px; + border-radius: 4px; + cursor: pointer; + font-size: 0.9rem; + margin-right: 8px; +} + +button:hover { + background: #005fcc; +} + +#usb-list { + list-style: none; + margin-top: 10px; +} + +#usb-list li { + padding: 8px; + background: #0f3460; + border-radius: 4px; + margin-bottom: 5px; + font-size: 0.85rem; +} + +#file-result { + margin-top: 10px; + font-size: 0.85rem; + color: #8888aa; + word-break: break-all; +} + +label { + margin-right: 10px; +} + +input[type="number"] { + background: #0f3460; + border: 1px solid #333; + color: #e0e0e0; + padding: 6px 10px; + border-radius: 4px; + margin-bottom: 10px; +}