From df2304001704fe6e96d47c004af4dd56a2dd7905 Mon Sep 17 00:00:00 2001 From: itsskaiya Date: Tue, 18 Nov 2025 12:42:47 -0500 Subject: [PATCH] Initial Commit --- .gitignore | 2 + README.md | Bin 0 -> 30 bytes build/waifuboards.ico | Bin 0 -> 125811 bytes index.html | 381 +++ main.js | 300 +++ package-lock.json | 5477 +++++++++++++++++++++++++++++++++++++++++ package.json | 40 + preload.js | 21 + renderer.js | 727 ++++++ updateNotification.js | 93 + 10 files changed, 7041 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build/waifuboards.ico create mode 100644 index.html create mode 100644 main.js create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 preload.js create mode 100644 renderer.js create mode 100644 updateNotification.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b2d59d1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/node_modules +/dist \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2e5a1639f3bae9d7ad5999ff5195c7d9b882c17c GIT binary patch literal 30 kcmezWPnki1A)FzRA(J7Ep_IXiAs@&tVn|`&W#D1}0DIB~JOBUy literal 0 HcmV?d00001 diff --git a/build/waifuboards.ico b/build/waifuboards.ico new file mode 100644 index 0000000000000000000000000000000000000000..12deec3081e29eaa42b450f5f50b88ef1b896fca GIT binary patch literal 125811 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 B3mE_a literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..d5f8435 --- /dev/null +++ b/index.html @@ -0,0 +1,381 @@ + + + + + + + + Waifu Board + + + + + + + + + + +
+ +
+

Browse

+
+
+ + + +
+ +
+ + + + + + + +
+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main.js b/main.js new file mode 100644 index 0000000..a09ea5a --- /dev/null +++ b/main.js @@ -0,0 +1,300 @@ +/* + main.js (Electron Main Process) + MODIFIED: Swapped 'better-sqlite3' for 'sqlite3' to remove C++ dependency. +*/ +const { app, BrowserWindow, ipcMain } = require('electron'); +const path = require('path'); +const fs = require('fs'); +const sqlite3 = require('sqlite3').verbose(); +// --- NEW: Get paths for *both* dependencies --- +const fetchPath = require.resolve('node-fetch'); +const cheerioPath = require.resolve('cheerio'); +// --- END NEW --- + +// --- Core paths --- +const waifuBoardsPath = path.join(app.getPath('home'), 'WaifuBoards'); +const pluginsPath = path.join(waifuBoardsPath, 'extensions'); +const dbPath = path.join(waifuBoardsPath, 'favorites.db'); + +// --- Ensure directories exist --- +try { + if (!fs.existsSync(waifuBoardsPath)) { + fs.mkdirSync(waifuBoardsPath); + } + if (!fs.existsSync(pluginsPath)) { + // Use recursive: true in case WaifuBoards doesn't exist yet + fs.mkdirSync(pluginsPath, { recursive: true }); + } +} catch (error) { + console.error('Failed to create directories:', error); + // We can probably continue, but loading/saving will fail. +} + +// --- API Scraper Loader --- +// This will hold our instantiated scraper classes, e.g. { 'Gelbooru': new Gelbooru() } +const loadedScrapers = {}; + +function loadScrapers() { + console.log('Loading scrapers...'); + console.log(`Checking for plugins in: ${pluginsPath}`); + + const files = fs.readdirSync(pluginsPath); + files + .filter((file) => file.endsWith('.js')) + .forEach((file) => { + const filePath = path.join(pluginsPath, file); + try { + // Dynamically require the scraper file + const scraperModule = require(filePath); + // We assume the export is an object like { Gelbooru: class... } + const className = Object.keys(scraperModule)[0]; + const ScraperClass = scraperModule[className]; + + // Basic check to see if it's a valid scraper class + if ( + typeof ScraperClass === 'function' && + ScraperClass.prototype.fetchSearchResult + ) { + // --- MODIFIED: Inject *both* paths --- + const instance = new ScraperClass(fetchPath, cheerioPath); + // --- END MODIFIED --- + + // Store the instance and its baseUrl + loadedScrapers[className] = { + instance: instance, + baseUrl: instance.baseUrl, + }; + console.log( + `Successfully loaded scraper: ${className} from ${instance.baseUrl}` + ); + } else { + console.warn(`File ${file} does not export a valid scraper class.`); + } + } catch (error) { + console.error(`Failed to load scraper from ${file}:`, error); + } + }); +} +// -------------------- + +// Load scrapers at startup +loadScrapers(); + +// --- MODIFIED: Initialize sqlite3 (async) --- +const db = new sqlite3.Database(dbPath, (err) => { + if (err) { + console.error('Error opening database:', err.message); + } else { + console.log('Connected to the favorites database.'); + runDatabaseMigrations(); // Run migrations after connecting + } +}); + +// --- MODIFIED: Database functions are now async --- +function runDatabaseMigrations() { + db.serialize(() => { + // Create the 'favorites' table + db.run( + ` + CREATE TABLE IF NOT EXISTS favorites ( + id TEXT PRIMARY KEY, + title TEXT NOT NULL, + image_url TEXT NOT NULL, + thumbnail_url TEXT NOT NULL DEFAULT "", + tags TEXT NOT NULL DEFAULT "" + ) + `, + (err) => { + if (err) console.error('Error creating table:', err.message); + } + ); + + // --- Migration (Add thumbnail_url) --- + console.log('Checking database schema for "thumbnail_url"...'); + db.all('PRAGMA table_info(favorites)', (err, columns) => { + if (err) { + console.error('Failed to get table info:', err.message); + return; + } + const hasThumbnailColumn = columns.some( + (col) => col.name === 'thumbnail_url' + ); + + if (!hasThumbnailColumn) { + console.log( + 'MIGRATION: Adding "thumbnail_url" column...' + ); + db.run( + 'ALTER TABLE favorites ADD COLUMN thumbnail_url TEXT NOT NULL DEFAULT ""', + (err) => { + if (err) + console.error('Migration error (thumbnail_url):', err.message); + else console.log('MIGRATION: "thumbnail_url" added successfully.'); + } + ); + } else { + console.log('"thumbnail_url" column is up-to-date.'); + } + }); + + // --- Migration (Add tags) --- + console.log('Checking database schema for "tags" column...'); + db.all('PRAGMA table_info(favorites)', (err, columns) => { + if (err) { + console.error('Failed to get table info:', err.message); + return; + } + const hasTagsColumn = columns.some((col) => col.name === 'tags'); + + if (!hasTagsColumn) { + console.log('MIGRATION: Adding "tags" column...'); + db.run( + 'ALTER TABLE favorites ADD COLUMN tags TEXT NOT NULL DEFAULT ""', + (err) => { + if (err) console.error('Migration error (tags):', err.message); + else console.log('MIGRATION: "tags" column added successfully.'); + } + ); + } else { + console.log('"tags" column is up-to-date.'); + } + }); + }); +} + +function createWindow() { + // Create the browser window. + const mainWindow = new BrowserWindow({ + width: 1000, + height: 800, + webPreferences: { + // Attach the 'preload.js' script to the window + // This is the secure way to expose Node.js functions to the renderer (frontend) + preload: path.join(__dirname, 'preload.js'), + // contextIsolation is true by default and is a critical security feature + contextIsolation: true, + // nodeIntegration should be false + nodeIntegration: false, + }, + }); + + // Load the index.html file into the window + mainWindow.loadFile('index.html'); + + // --- Add this line to remove the menu bar --- + mainWindow.setMenu(null); +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +app.whenReady().then(() => { + // loadScrapers(); // MOVED: This is now called at the top + createWindow(); + + app.on('activate', function () { + // On macOS it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (BrowserWindow.getAllWindows().length === 0) createWindow(); + }); +}); + +// Quit when all windows are closed, except on macOS. +app.on('window-all-closed', function () { + if (process.platform !== 'darwin') { + db.close((err) => { + if (err) console.error('Error closing database:', err.message); + }); + app.quit(); + } +}); + +// --- IPC Handlers (Backend Functions) --- +// These functions listen for calls from the 'preload.js' script + +// NEW: Send the list of loaded scrapers to the frontend +ipcMain.handle('api:getSources', () => { + // Returns an array of objects: [{ name: 'Gelbooru', url: 'https://gelbooru.com' }, ...] + return Object.keys(loadedScrapers).map((name) => { + return { + name: name, + url: loadedScrapers[name].baseUrl, + }; + }); +}); + +// MODIFIED: Generic search handler now accepts a page number +ipcMain.handle('api:search', async (event, source, query, page) => { + try { + // Check if the requested source was successfully loaded + if (loadedScrapers[source] && loadedScrapers[source].instance) { + // Pass the page number to the scraper + const results = await loadedScrapers[source].instance.fetchSearchResult( + query, + page + ); + return { success: true, data: results }; + } else { + throw new Error(`Unknown source or source failed to load: ${source}`); + } + } catch (error) { + console.error(`Error searching ${source}:`, error); + return { success: false, error: error.message }; + } +}); + +// --- MODIFIED: All db handlers are now async Promises --- + +// Handle request to get all favorites +ipcMain.handle('db:getFavorites', () => { + return new Promise((resolve, reject) => { + db.all('SELECT * FROM favorites', [], (err, rows) => { + if (err) { + console.error('Error getting favorites:', err.message); + resolve([]); // Resolve with empty array on error + } else { + resolve(rows); + } + }); + }); +}); + +// Handle request to add a favorite +ipcMain.handle('db:addFavorite', (event, fav) => { + return new Promise((resolve) => { + const stmt = + 'INSERT INTO favorites (id, title, image_url, thumbnail_url, tags) VALUES (?, ?, ?, ?, ?)'; + db.run( + stmt, + [fav.id, fav.title, fav.imageUrl, fav.thumbnailUrl, fav.tags], + function (err) { + // Must use 'function' to get 'this' + if (err) { + if (err.code.includes('SQLITE_CONSTRAINT')) { + resolve({ success: false, error: 'Item is already a favorite.' }); + } else { + console.error('Error adding favorite:', err.message); + resolve({ success: false, error: err.message }); + } + } else { + resolve({ success: true, id: fav.id }); + } + } + ); + }); +}); + +// Handle request to remove a favorite +ipcMain.handle('db:removeFavorite', (event, id) => { + return new Promise((resolve) => { + const stmt = 'DELETE FROM favorites WHERE id = ?'; + db.run(stmt, id, function (err) { + // Must use 'function' to get 'this' + if (err) { + console.error('Error removing favorite:', err.message); + resolve({ success: false, error: err.message }); + } else { + resolve({ success: this.changes > 0 }); + } + }); + }); +}); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..08485b9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5477 @@ +{ + "name": "waifu-board", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "waifu-board", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cheerio": "^1.1.2", + "node-fetch": "^2.7.0", + "sqlite3": "^5.1.7" + }, + "devDependencies": { + "@electron/rebuild": "^3.6.0", + "electron": "^39.2.1", + "electron-builder": "^24.13.3" + } + }, + "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.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/@electron/asar/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@electron/node-gyp": { + "version": "10.2.0-electron.1", + "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", + "integrity": "sha512-4MSBTT8y07YUDqf69/vSh80Hh791epYqGtWHO3zSKhYFwQg+gx9wi1PqbqP6YqC4WMsNxZ5l9oDmnWdK5pfCKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^8.1.0", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.2.1", + "nopt": "^6.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "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/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/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/rebuild": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.2.tgz", + "integrity": "sha512-19/KbIR/DAxbsCkiaGMXIdPnMCJLkcf8AvGnduJtWBs/CBwiAjY1apCqOLVxrXg+rtXFCngbXhBanWjxLUt1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "node-abi": "^3.45.0", + "node-api-version": "^0.2.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.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/@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/@electron/universal/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "devOptional": true, + "license": "MIT" + }, + "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.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "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": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "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": ">= 12.13.0" + } + }, + "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/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.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/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "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/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "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": "22.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", + "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.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/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "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/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.8.11", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.11.tgz", + "integrity": "sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "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/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "devOptional": true, + "license": "ISC" + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", + "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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-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==", + "devOptional": 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/aproba": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.1.0.tgz", + "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", + "license": "ISC", + "optional": true + }, + "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/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "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/archiver-utils/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "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/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.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/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": 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==", + "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/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "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/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "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==", + "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/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/cheerio": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.1.2.tgz", + "integrity": "sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.2", + "encoding-sniffer": "^0.2.1", + "htmlparser2": "^10.0.0", + "parse5": "^7.3.0", + "parse5-htmlparser2-tree-adapter": "^7.1.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^7.12.0", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=20.18.1" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "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/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "license": "ISC", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "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==", + "devOptional": true, + "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.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "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.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "license": "ISC", + "optional": true + }, + "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/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "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.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "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.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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-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/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "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": "39.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-39.2.1.tgz", + "integrity": "sha512-5oSki3qzLBsJAcXl0yWOLRArkufugbXd1qBb2UNZRrrKkYiVhM8GLE+KE3P16PC8UxGxGqCCfaB3Y1TK1dUuHg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^22.7.7", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "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-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/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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding-sniffer": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.1.tgz", + "integrity": "sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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==", + "devOptional": true, + "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==", + "devOptional": 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.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "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/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "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/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "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==", + "dev": true, + "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/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/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "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/foreground-child/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/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==", + "license": "MIT" + }, + "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/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", + "dependencies": { + "minipass": "^3.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==", + "devOptional": 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/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "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==", + "devOptional": 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-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "license": "ISC", + "optional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "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/htmlparser2": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz", + "integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.2.1", + "entities": "^6.0.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "devOptional": true, + "license": "BSD-2-Clause" + }, + "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/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "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==", + "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==", + "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "devOptional": true, + "license": "ISC" + }, + "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.", + "devOptional": 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==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "devOptional": 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.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "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-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "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/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "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/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^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": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "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==", + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "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==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "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==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-abi": { + "version": "3.85.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.85.0.tgz", + "integrity": "sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "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-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", + "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", + "optional": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^9.1.0", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp/node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", + "optional": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-gyp/node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "optional": true, + "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/node-gyp/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", + "optional": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", + "optional": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/node-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/socks-proxy-agent": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/node-gyp/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-gyp/node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/node-gyp/node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", + "optional": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "optional": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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==", + "devOptional": 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/path-scurry/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "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/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.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-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "devOptional": true, + "license": "ISC" + }, + "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==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "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/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, + "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==", + "license": "MIT", + "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/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "devOptional": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "devOptional": 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/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "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==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC", + "optional": true + }, + "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": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "devOptional": true, + "license": "ISC" + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "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==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "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/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/sqlite3": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", + "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1", + "tar": "^6.1.11" + }, + "optionalDependencies": { + "node-gyp": "8.x" + }, + "peerDependencies": { + "node-gyp": "8.x" + }, + "peerDependenciesMeta": { + "node-gyp": { + "optional": true + } + } + }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.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==", + "license": "MIT", + "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==", + "devOptional": 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==", + "devOptional": 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/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "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-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "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/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "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/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "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/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "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/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "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.16.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.16.0.tgz", + "integrity": "sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "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/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/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==", + "license": "MIT" + }, + "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/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "devOptional": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "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==", + "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==", + "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" + } + }, + "node_modules/zip-stream/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zip-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "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/zip-stream/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..a7e4431 --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "waifu-board", + "version": "1.0.0", + "description": "An image board app to store and browse your favorite waifus!", + "main": "main.js", + "scripts": { + "start": "electron .", + "rebuild": "npx electron-rebuild", + "build": "npx electron-builder", + "dist": "electron-builder" + }, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "devDependencies": { + "@electron/rebuild": "^3.6.0", + "electron": "^39.2.1", + "electron-builder": "^24.13.3" + }, + "dependencies": { + "cheerio": "^1.1.2", + "node-fetch": "^2.7.0", + "sqlite3": "^5.1.7" + }, + "build": { + "appId": "com.yourname.waifuboard", + "productName": "Waifu Board", + "win": { + "target": "portable", + "icon": "build/waifuboards.ico" + }, + "files": [ + "**/*", + "!**/*.ts", + "!*.map", + "!package-lock.json" + ] + } +} diff --git a/preload.js b/preload.js new file mode 100644 index 0000000..460af87 --- /dev/null +++ b/preload.js @@ -0,0 +1,21 @@ +/* + preload.js + This script runs in a special, isolated context before the web page (index.html) + is loaded. It uses 'contextBridge' to securely expose specific functions + from the main process (like database access) to the renderer process (frontend). +*/ +const { contextBridge, ipcRenderer } = require('electron'); + +// Expose a 'db' object to the global 'window' object in the renderer +contextBridge.exposeInMainWorld('api', { + // --- Database Functions --- + getFavorites: () => ipcRenderer.invoke('db:getFavorites'), + addFavorite: (fav) => ipcRenderer.invoke('db:addFavorite', fav), + removeFavorite: (id) => ipcRenderer.invoke('db:removeFavorite', id), + + // --- API Function --- + // This is now a generic search function that takes the source + search: (source, query) => ipcRenderer.invoke('api:search', source, query), + // NEW: This function gets the list of available sources from main.js + getSources: () => ipcRenderer.invoke('api:getSources'), +}); \ No newline at end of file diff --git a/renderer.js b/renderer.js new file mode 100644 index 0000000..e2f735b --- /dev/null +++ b/renderer.js @@ -0,0 +1,727 @@ +/* + renderer.js + MODIFIED: Now includes infinite scrolling +*/ +document.addEventListener('DOMContentLoaded', () => { + // --- Page Elements --- + const browseButton = document.getElementById('browse-button'); + const favoritesButton = document.getElementById('favorites-button'); + const settingsButton = document.getElementById('settings-button'); + const browsePage = document.getElementById('browse-page'); + const favoritesPage = document.getElementById('favorites-page'); + const settingsPage = document.getElementById('settings-page'); + const pageTitle = document.getElementById('page-title'); + const headerContext = document.getElementById('header-context'); + + // --- Search Modal Elements --- + const searchIconButton = document.getElementById('search-icon-button'); + const searchModal = document.getElementById('search-modal'); + const searchCloseButton = document.getElementById('search-close-button'); + const searchInput = document.getElementById('search-input'); + const searchButton = document.getElementById('search-button'); + + // --- Gallery Elements --- + const sourceList = document.getElementById('source-list'); + const contentGallery = document.getElementById('content-gallery'); + const favoritesGallery = document.getElementById('favorites-gallery'); + const loadingSpinner = document.getElementById('loading-spinner'); + // NEW: Get the infinite loading spinner + const infiniteLoadingSpinner = document.getElementById( + 'infinite-loading-spinner' + ); + const messageBar = document.getElementById('message-bar'); + const galleryPlaceholder = document.getElementById('gallery-placeholder'); + + // --- Settings Elements --- + const layoutRadios = document.querySelectorAll('input[name="layout"]'); + const layoutScroll = document.getElementById('layout-scroll'); + const layoutGrid = document.getElementById('layout-grid'); + const layoutCompact = document.getElementById('layout-compact'); + + // --- Tag Info Modal Elements --- + const tagInfoModal = document.getElementById('tag-info-modal'); + const tagInfoCloseButton = document.getElementById( + 'tag-info-close-button' + ); + const tagInfoContent = document.getElementById('tag-info-content'); + + // --- App State --- + let currentFavorites = []; // Cache for favorites + let currentSource = ''; + let currentQuery = ''; + let currentLayout = 'scroll'; // Default layout + // --- NEW: State for infinite scroll --- + let currentPage = 1; + let isLoading = false; + let hasNextPage = true; + + // --- Populate Sources Sidebar --- + async function populateSources() { + console.log('Requesting sources from main process...'); + const sources = await window.api.getSources(); // e.g., [{ name: 'Gelbooru', url: '...' }] + sourceList.innerHTML = ''; // Clear "Loading..." + + if (sources && sources.length > 0) { + sources.forEach((source) => { + const button = document.createElement('button'); + button.className = + 'source-button w-12 h-12 flex items-center justify-center rounded-xl text-gray-400 hover:bg-gray-700 hover:text-white transition-all duration-200'; + button.dataset.source = source.name; + button.title = source.name; + + // Create and add favicon + const favicon = document.createElement('img'); + favicon.className = 'w-8 h-8 rounded'; + + // Parse main domain from URL to get correct favicon + let mainDomain = source.url; // Default to the full URL + try { + const hostname = new URL(source.url).hostname; // e.g., 'api.waifu.pics' + const parts = hostname.split('.'); + if (parts.length > 2 && ['api', 'www'].includes(parts[0])) { + // Get the last two parts (e.g., 'waifu.pics' from 'api.waifu.pics') + mainDomain = parts.slice(1).join('.'); + } else { + // It's already a main domain (e.g., 'gelbooru.com') + mainDomain = hostname; + } + } catch (e) { + console.warn(`Could not parse domain from ${source.url}:`, e); + mainDomain = source.name; + } + // --- END NEW --- + + // Use Google's favicon service. sz=32 requests a 32x32 icon. + favicon.src = `https://www.google.com/s2/favicons?domain=${mainDomain}&sz=32`; + favicon.alt = source.name; + // Fallback in case favicon fails to load + favicon.onerror = () => { + button.innerHTML = `${source.name.substring( + 0, + 2 + )}`; + favicon.remove(); + }; + + button.appendChild(favicon); + sourceList.appendChild(button); + }); + console.log('Sources populated:', sources); + + // Set first source as active by default + if (sourceList.children.length > 0) { + const firstButton = sourceList.children[0]; + firstButton.classList.add('active'); + currentSource = firstButton.dataset.source; + updateHeader(); + } + } else { + console.warn('No sources were loaded from the main process.'); + } + } + + // --- Source Selection --- + sourceList.addEventListener('click', (e) => { + const button = e.target.closest('.source-button'); + if (button) { + // ... (remove/add active class) ... + sourceList + .querySelectorAll('.source-button') + .forEach((btn) => btn.classList.remove('active')); + button.classList.add('active'); + + currentSource = button.dataset.source; + console.log('Source changed to:', currentSource); + updateHeader(); + // Automatically re-search when changing source if a query exists + if (currentQuery) { + // This will reset the gallery and start a new search + performSearch(); + } + } + }); + + // --- Tab Switching Logic (Sidebar) --- + function showPage(pageId) { + // Hide all pages + document.querySelectorAll('.page').forEach((page) => { + page.classList.add('hidden'); + }); + // De-activate all icon buttons + document.querySelectorAll('.nav-button').forEach((tab) => { + tab.classList.remove('bg-indigo-600', 'text-white'); + tab.classList.add('text-gray-400', 'hover:bg-gray-700'); + }); + + // Show the active page + const activePage = document.getElementById(pageId); + activePage.classList.remove('hidden'); + + // Highlight the active icon button + let activeTab; + if (pageId === 'browse-page') { + activeTab = browseButton; + pageTitle.textContent = 'Browse'; + updateHeader(); // Update header context + } else if (pageId === 'favorites-page') { + activeTab = favoritesButton; + pageTitle.textContent = 'Favorites'; + headerContext.textContent = ''; // Clear context + // When switching to favorites, refresh the list + loadFavorites(); + } else if (pageId === 'settings-page') { + activeTab = settingsButton; + pageTitle.textContent = 'Settings'; + headerContext.textContent = ''; // Clear context + } + activeTab.classList.add('bg-indigo-600', 'text-white'); + activeTab.classList.remove('text-gray-400', 'hover:bg-gray-700'); + } + + browseButton.addEventListener('click', () => showPage('browse-page')); + favoritesButton.addEventListener('click', () => showPage('favorites-page')); + settingsButton.addEventListener('click', () => showPage('settings-page')); + + // --- Search Modal Logic --- + searchIconButton.addEventListener('click', () => { + searchModal.classList.remove('hidden'); + searchInput.focus(); // Auto-focus the search bar + searchInput.select(); + }); + searchCloseButton.addEventListener('click', () => { + searchModal.classList.add('hidden'); + }); + searchButton.addEventListener('click', () => { + // Sanitize search query to allow multiple tags + // MODIFIED: This just calls performSearch, which now handles its own state + performSearch(); + }); + // Close search modal on Escape key + document.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + searchModal.classList.add('hidden'); + } + }); + + // --- Tag Info Modal Logic --- + tagInfoCloseButton.addEventListener('click', () => { + tagInfoModal.classList.add('hidden'); + }); + // Close tag modal by clicking the backdrop + tagInfoModal.addEventListener('click', (e) => { + if (e.target === tagInfoModal) { + tagInfoModal.classList.add('hidden'); + } + }); + + // Function to show the tag info modal + function showTagModal(tags) { + tagInfoContent.innerHTML = ''; // Clear old tags + + if (!tags || tags.length === 0) { + tagInfoContent.innerHTML = + '

No tags available for this image.

'; + tagInfoModal.classList.remove('hidden'); + return; + } + + const fragment = document.createDocumentFragment(); + tags.forEach((tag) => { + if (tag) { + const tagPill = document.createElement('span'); + tagPill.className = + 'px-2.5 py-1 bg-gray-700 text-gray-300 text-xs font-medium rounded-full'; + tagPill.textContent = tag.replace(/_/g, ' '); // Replace underscores + fragment.appendChild(tagPill); + } + }); + tagInfoContent.appendChild(fragment); + tagInfoModal.classList.remove('hidden'); + } + + // --- Header Update --- + function updateHeader() { + if (currentSource) { + headerContext.textContent = `Source: ${currentSource}`; + } else { + headerContext.textContent = 'No source selected'; + } + } + + // --- Search Function --- + async function performSearch() { + if (!currentSource) { + showMessage('Please select a source from the sidebar.', 'error'); + return; + } + + // --- NEW: Reset state for a new search --- + currentPage = 1; + hasNextPage = true; + isLoading = false; + currentQuery = searchInput.value.trim().replace(/[, ]+/g, ' '); + + if (galleryPlaceholder) galleryPlaceholder.classList.add('hidden'); + // Clear and apply layout classes + applyLayoutToGallery(contentGallery, currentLayout); + contentGallery.innerHTML = ''; // Clear previous results + updateHeader(); // Update header to show source + + // Close modal after search + searchModal.classList.add('hidden'); + + // Load the first page of results + loadMoreResults(); + } + + // --- NEW: Infinite Scroll Loader --- + async function loadMoreResults() { + // Don't load if we're already loading or if there are no more pages + if (isLoading || !hasNextPage) { + return; + } + + isLoading = true; + + // Show the correct spinner + if (currentPage === 1) { + loadingSpinner.classList.remove('hidden'); // Show main spinner + } else { + infiniteLoadingSpinner.classList.remove('hidden'); // Show bottom spinner + } + + // Use the new API function with the current page + const result = await window.api.search( + currentSource, + currentQuery, + currentPage + ); + + // Hide all spinners + loadingSpinner.classList.add('hidden'); + infiniteLoadingSpinner.classList.add('hidden'); + + if ( + !result.success || + !result.data.results || + result.data.results.length === 0 + ) { + hasNextPage = false; // Stop trying to load more + if (currentPage === 1) { + // If it's the first page and no results, show "No results" + applyLayoutToGallery(contentGallery, currentLayout); + contentGallery.innerHTML = + '

No results found. Please try another search term.

'; + } + // If it's not the first page, we just stop loading (no message needed) + isLoading = false; + return; + } + + const validResults = result.data.results.filter((item) => item.image); + + if (validResults.length === 0) { + hasNextPage = false; // Stop trying to load more + if (currentPage === 1) { + applyLayoutToGallery(contentGallery, currentLayout); + contentGallery.innerHTML = + '

Found results, but none had valid images.

'; + } + isLoading = false; + return; + } + + // Use a DocumentFragment for performance + const fragment = document.createDocumentFragment(); + validResults.forEach((item) => { + const thumbnailUrl = item.image; + // const fullImageUrl = getFullImageUrl(thumbnailUrl, currentSource); + const displayUrl = item.sampleImageUrl || item.fullImageUrl || thumbnailUrl; + + const card = createImageCard( + item.id.toString(), + item.tags, // Pass the whole tags array + displayUrl, // Pass the new *real* URL + thumbnailUrl, // Pass the *real* thumbnail as a fallback + 'browse' + ); + fragment.appendChild(card); + }); + // Append the new results instead of overwriting + contentGallery.appendChild(fragment); + + // Update state for the next scroll + hasNextPage = result.data.hasNextPage; + currentPage++; + isLoading = false; + } + + // --- NEW: Scroll Event Listener for Browse Page --- + browsePage.addEventListener('scroll', () => { + // Check if user is near the bottom of the scrollable area + if ( + browsePage.scrollTop + browsePage.clientHeight >= + browsePage.scrollHeight - 600 // Load 600px before the end + ) { + loadMoreResults(); + } + }); + + // --- Favorites Logic --- + async function loadFavorites() { + // Apply layout classes + applyLayoutToGallery(favoritesGallery, currentLayout); + favoritesGallery.innerHTML = + '

Loading favorites...

'; + currentFavorites = await window.api.getFavorites(); + + if (currentFavorites.length === 0) { + // Apply layout classes + applyLayoutToGallery(favoritesGallery, currentLayout); + favoritesGallery.innerHTML = + '

You haven\'t saved any favorites yet.

'; + return; + } + + // Apply layout classes + applyLayoutToGallery(favoritesGallery, currentLayout); + favoritesGallery.innerHTML = ''; // Clear loading message + const fragment = document.createDocumentFragment(); + currentFavorites.forEach((fav) => { + const card = createImageCard( + fav.id, + // Read from the new 'tags' column instead of 'title' + fav.tags ? fav.tags.split(',') : [], + fav.image_url, + fav.thumbnail_url, + 'fav' + ); + fragment.appendChild(card); + }); + favoritesGallery.appendChild(fragment); + } + + async function handleAddFavorite(id, tags, imageUrl, thumbnailUrl) { + // Ensure 'tags' is an array before using array methods + const safeTags = Array.isArray(tags) ? tags : []; + // Title is just the first tag (or a default), for simplicity + const title = safeTags.length > 0 ? safeTags[0] : 'Favorite'; + // Create a string of all tags to store + const allTags = safeTags.join(','); + + const result = await window.api.addFavorite({ + id, + title, + imageUrl, + thumbnailUrl, + tags: allTags, // Pass all tags to the backend + }); + if (result.success) { + showMessage('Added to favorites!', 'success'); + } else { + showMessage(result.error, 'error'); + } + } + + async function handleRemoveFavorite(id) { + const result = await window.api.removeFavorite(id); + if (result.success) { + showMessage('Removed from favorites.', 'success'); + // Find the card to remove, regardless of layout + const cardToRemove = document.querySelector( + `#favorites-gallery [data-id='${id}']` + ); + if (cardToRemove) { + cardToRemove.classList.add('opacity-0', 'scale-90'); + setTimeout(() => { + cardToRemove.remove(); + if (favoritesGallery.children.length === 0) { + // Apply layout classes + applyLayoutToGallery(favoritesGallery, currentLayout); + favoritesGallery.innerHTML = + '

You haven\'t saved any favorites yet.

'; + } + }, 300); // Wait for animation + } + } else { + showMessage(result.error, 'error'); + } + } + + // --- UI Helpers --- + + /** + * REWRITTEN: Creates a professional image card based on current layout. + * @param {string} id - The unique ID of the artwork. + * @param {string[]} tags - An array of tags. + * @param {string} imageUrl - The full URL of the image to display. + * @param {string} thumbnailUrl - The fallback thumbnail URL. + * @param {'browse' | 'fav'} type - The type of card to create. + * @returns {HTMLElement} The card element. + */ + function createImageCard(id, tags, imageUrl, thumbnailUrl, type) { + // Ensure 'tags' is an array before using array methods + const safeTags = Array.isArray(tags) ? tags : []; + + // --- All layouts use this as the base card --- + const entry = document.createElement('div'); + entry.dataset.id = id; + entry.className = `image-entry group relative bg-gray-800 rounded-lg shadow-lg overflow-hidden transition-all duration-300`; + + // --- "Compact" layout gets a special style --- + if (currentLayout === 'compact') { + // Use aspect-ratio to keep cards square and uniform + entry.classList.add('aspect-square'); + } + + // Image container with pulse animation for loading + const imageContainer = document.createElement('div'); + imageContainer.className = + 'w-full bg-gray-700 animate-pulse relative'; + + // For "Compact" layout, image container is also square + if (currentLayout === 'compact') { + imageContainer.classList.add('h-full'); + } else { + imageContainer.classList.add('min-h-[200px]'); + } + + entry.appendChild(imageContainer); + + const img = document.createElement('img'); + img.src = imageUrl; // Try to load the full-res image first + img.alt = safeTags.join(', '); // Use safeTags + img.className = 'w-full h-auto object-contain bg-gray-900 opacity-0'; // Start hidden + img.loading = 'lazy'; + img.referrerPolicy = 'no-referrer'; + + // "Compact" layout uses "object-cover" to fill the square + if (currentLayout === 'compact') { + img.className = 'w-full h-full object-cover bg-gray-900 opacity-0'; + } + + img.onload = () => { + imageContainer.classList.remove('animate-pulse', 'bg-gray-700'); + img.classList.remove('opacity-0'); + img.classList.add('transition-opacity', 'duration-500'); + }; + + img.onerror = () => { + console.warn(`Failed to load full image: ${imageUrl}. Falling back to thumbnail.`); + img.src = thumbnailUrl; // Fallback + imageContainer.classList.remove('animate-pulse', 'bg-gray-700'); + img.classList.remove('opacity-0'); + img.classList.add('transition-opacity', 'duration-500'); + img.onerror = null; // Prevent infinite loop + }; + imageContainer.appendChild(img); + + // --- Add buttons (overlay on hover) --- + const buttonContainer = document.createElement('div'); + buttonContainer.className = + 'image-buttons absolute top-3 right-3 flex flex-col space-y-2 opacity-0 group-hover:opacity-100 transition-opacity duration-200'; + + // Add Info Button + buttonContainer.appendChild(createInfoButton(safeTags)); + + if (type === 'browse') { + buttonContainer.appendChild( + createAddFavoriteButton(id, safeTags, imageUrl, thumbnailUrl) + ); + } else { + buttonContainer.appendChild(createRemoveFavoriteButton(id)); + } + imageContainer.appendChild(buttonContainer); // Add buttons to image container + + return entry; + } + + /** + * Tries to guess the full-resolution image URL from a thumbnail URL. + * This is a "best guess" based on common patterns. + * @param {string} thumbnailUrl - The URL of the thumbnail. + * @param {string} source - The name of the source (e.g., 'Gelbooru', 'Rule34'). + * @returns {string} The guessed full-resolution URL. + */ + function getFullImageUrl(thumbnailUrl, source) { + if (!thumbnailUrl) return ''; + + try { + // Waifu.pics API already provides the full URL + if (source === 'WaifuPics') { + return thumbnailUrl; + } + + // Rule34 (API): preview_url -> file_url + if (source === 'Rule34' && thumbnailUrl.includes('thumbnail_')) { + return thumbnailUrl + .replace('/thumbnails/', '/images/') + .replace('thumbnail_', ''); + } + + // Gelbooru (Scraper): /thumbnails/ -> /images/ + if (source === 'Gelbooru' && thumbnailUrl.includes('/thumbnails/')) { + return thumbnailUrl + .replace('/thumbnails/', '/images/') + .replace('thumbnail_', ''); + } + + // Safebooru (Scraper): /thumbnails/ -> /images/ + if (source === 'Safebooru' && thumbnailUrl.includes('/thumbnails/')) { + return thumbnailUrl + .replace('/thumbnails/', '/images/') + .replace('thumbnail_', ''); + } + + // Fallback for unknown scrapers + if (thumbnailUrl.includes('/thumbnails/')) { + return thumbnailUrl + .replace('/thumbnails/', '/images/') + .replace('thumbnail_', ''); + } + + } catch (e) { + console.error('Error parsing full image URL:', e); + } + // If no rules match, just return the thumbnail URL + return thumbnailUrl; + } + + // --- Button Creation Helpers --- + function createInfoButton(safeTags) { + const button = document.createElement('button'); + button.title = 'Show Info'; + button.className = + 'p-2 rounded-full bg-black/50 text-white hover:bg-blue-600 backdrop-blur-sm transition-colors'; + button.innerHTML = ` + + `; + button.onclick = (e) => { + e.stopPropagation(); // Prevent card click + showTagModal(safeTags); + }; + return button; + } + + function createAddFavoriteButton(id, safeTags, imageUrl, thumbnailUrl) { + const button = document.createElement('button'); + button.title = 'Add to Favorites'; + button.className = + 'p-2 rounded-full bg-black/50 text-white hover:bg-indigo-600 backdrop-blur-sm transition-colors'; + button.innerHTML = ` + + `; + button.onclick = (e) => { + e.stopPropagation(); // Prevent card click + handleAddFavorite(id, safeTags, imageUrl, thumbnailUrl); + }; + return button; + } + + function createRemoveFavoriteButton(id) { + const button = document.createElement('button'); + button.title = 'Remove from Favorites'; + button.className = + 'p-2 rounded-full bg-black/50 text-white hover:bg-red-600 backdrop-blur-sm transition-colors'; + button.innerHTML = ` + + `; + button.onclick = (e) => { + e.stopPropagation(); // Prevent card click + handleRemoveFavorite(id); + }; + return button; + } + // --- END NEW: Button Creation Helpers --- + + /** + * Shows a green/red message bar at the bottom of the screen. + * @param {string} message - The text to display. + * @param {'success' | 'error'} type - The type of message. + */ + function showMessage(message, type = 'success') { + if (!messageBar) return; + messageBar.textContent = message; + + // Set color + if (type === 'error') { + messageBar.classList.remove('bg-green-600'); + messageBar.classList.add('bg-red-600'); + } else { + messageBar.classList.remove('bg-red-600'); + messageBar.classList.add('bg-green-600'); + } + + // Show + messageBar.classList.remove('hidden', 'translate-y-16'); + + // Hide after 3 seconds + setTimeout(() => { + messageBar.classList.add('hidden', 'translate-y-16'); + }, 3000); + } + + // --- NEW: Settings Logic --- + function loadSettings() { + const savedLayout = localStorage.getItem('waifuBoardLayout') || 'scroll'; + currentLayout = savedLayout; + + // Check if the saved layout element exists before trying to check it + const savedRadio = document.querySelector( + `input[name="layout"][value="${savedLayout}"]` + ); + if (savedRadio) { + savedRadio.checked = true; + } else { + // Fallback if saved layout is invalid + document.getElementById('layout-scroll').checked = true; + currentLayout = 'scroll'; + localStorage.setItem('waifuBoardLayout', 'scroll'); + } + } + + function handleLayoutChange(e) { + const newLayout = e.target.value; + localStorage.setItem('waifuBoardLayout', newLayout); + currentLayout = newLayout; + console.log('Layout changed to:', newLayout); + + // Re-render the current view + if (browsePage.classList.contains('hidden')) { + loadFavorites(); // Re-render favorites + } else { + // --- FIX --- + // Only re-run the search if there was a query. + if (currentQuery) { + performSearch(); // Re-render browse (will reset to page 1) + } else { + applyLayoutToGallery(contentGallery, currentLayout); + } + } + } + + function applyLayoutToGallery(galleryElement, layout) { + // Reset all layout classes + galleryElement.className = 'p-4 w-full'; // Base classes + + if (layout === 'scroll') { + galleryElement.classList.add('max-w-3xl', 'mx-auto', 'space-y-8'); + } else if (layout === 'grid') { + // Use the Masonry layout class + galleryElement.classList.add('gallery-masonry'); + } else if (layout === 'compact') { + // Use the standard grid layout (formerly 'gallery-grid') + galleryElement.classList.add('gallery-grid'); + } + } + + layoutRadios.forEach((radio) => { + radio.addEventListener('change', handleLayoutChange); + }); + // --- END NEW: Settings Logic --- + + // --- Initial Load --- + loadSettings(); // NEW: Load settings on startup + populateSources(); // Load the sources into the dropdown on startup + showPage('browse-page'); // Show the browse page on startup +}); \ No newline at end of file diff --git a/updateNotification.js b/updateNotification.js new file mode 100644 index 0000000..71653a8 --- /dev/null +++ b/updateNotification.js @@ -0,0 +1,93 @@ +// --- Configuration --- +const GITHUB_OWNER = 'ItsSkaiya'; // e.g., 'google' +const GITHUB_REPO = 'WaifuBoard'; // e.g., 'gemini-api-cookbook' +const CURRENT_VERSION = '1.0.0'; // Manually set this, or pull from a package.json/config file + +// --- DOM Elements --- +const currentVersionDisplay = document.getElementById('currentVersionDisplay'); +const latestVersionDisplay = document.getElementById('latestVersionDisplay'); +const updateToast = document.getElementById('updateToast'); + +// Display the current version on load +document.addEventListener('DOMContentLoaded', () => { + currentVersionDisplay.textContent = CURRENT_VERSION; +}); + + +/** + * Shows the update notification toast. + * @param {string} latestVersion - The latest version string from GitHub. + */ +function showToast(latestVersion) { + latestVersionDisplay.textContent = latestVersion; + updateToast.classList.add('update-available'); + updateToast.classList.remove('hidden'); + // NOTE: The toast will NOT close until the user clicks 'X' +} + +/** + * Hides the update notification toast. + */ +function hideToast() { + updateToast.classList.add('hidden'); + updateToast.classList.remove('update-available'); +} + +/** + * Compares two semantic version strings (e.g., "1.2.3" vs "1.2.4"). + * Returns true if version A is older than version B. + * @param {string} versionA - The current version. + * @param {string} versionB - The latest version. + * @returns {boolean} True if A is older than B. + */ +function isVersionOutdated(versionA, versionB) { + // Clean up version strings (e.g., remove 'v' prefix) and split by '.' + const vA = versionA.replace(/^v/, '').split('.').map(Number); + const vB = versionB.replace(/^v/, '').split('.').map(Number); + + for (let i = 0; i < Math.max(vA.length, vB.length); i++) { + const numA = vA[i] || 0; + const numB = vB[i] || 0; + + if (numA < numB) return true; // A is older + if (numA > numB) return false; // A is newer + } + + return false; // Versions are the same or incomparable +} + +/** + * Main function to fetch the latest GitHub release and check for updates. + */ +async function checkForUpdates() { + console.log(`Checking for updates for ${GITHUB_OWNER}/${GITHUB_REPO}...`); + const apiUrl = `https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/releases/latest`; + + try { + const response = await fetch(apiUrl); + + if (!response.ok) { + throw new Error(`GitHub API error: ${response.statusText}`); + } + + const data = await response.json(); + + // The tag_name often contains the version (e.g., "v1.0.1") + const latestVersion = data.tag_name; + console.log(`Latest GitHub Release: ${latestVersion}`); + + if (isVersionOutdated(CURRENT_VERSION, latestVersion)) { + // Package is out of date! Issue the red toast notification. + console.warn('Update available!'); + showToast(latestVersion); + } else { + // Package is up to date or newer. Do not show the toast. + console.info('Package is up to date.'); + hideToast(); // Ensure it's hidden in case a previous check showed it + } + + } catch (error) { + console.error('Failed to fetch GitHub release:', error); + // You might want a different toast here for a failure notification + } +} \ No newline at end of file