diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..a3dac38
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,32 @@
+# Dependencies
+node_modules/
+.pnpm-store/
+
+# Build outputs
+dist/
+build/
+release/
+out/
+
+# Logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+pnpm-debug.log*
+
+# Environment
+.env
+.env.local
+
+# IDE
+.vscode/
+.idea/
+
+# OS
+.DS_Store
+Thumbs.db
+
+# Electron
+*.asar
+EOF
+node_modules
\ No newline at end of file
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000..841ac30
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1,2 @@
+# 打包前让 pnpm 扁平化 node_modules,避免 asar 里缺嵌套依赖
+shamefully-hoist=true
diff --git a/01/004.jpg b/01/004.jpg
new file mode 100644
index 0000000..5f526ce
Binary files /dev/null and b/01/004.jpg differ
diff --git a/config_nano_banana.json b/config_nano_banana.json
new file mode 100644
index 0000000..eb34bac
--- /dev/null
+++ b/config_nano_banana.json
@@ -0,0 +1,14 @@
+{
+ "api_key": "i0jpgqNGp1h92yKDAkBo3G6N79",
+ "poll_interval_seconds": 10,
+ "prompt": "扩展参考图片内容,使其尺寸为4K,比例为16:9,清晰度为高清,细节丰富,清晰对焦,高对比度,专业摄影",
+ "size": "4K",
+ "aspect-ratio": "16:9",
+ "reference_urls": [],
+ "r2_account_id": "11d255a38a61526815d6c95a713bff12",
+ "r2_access_key_id": "f5d1db252f937b93fe84ba92329f5a7b",
+ "r2_secret_access_key": "b57b47be255263885ca37d0ec768d78ed1d07f3bf16d269e464e1d19166df63c",
+ "r2_bucket": "703",
+ "r2_public_url": "https://pub-cbc7501389e744aabf4dd3814483a61c.r2.dev"
+}
+
diff --git a/core/generator.js b/core/generator.js
new file mode 100644
index 0000000..34a93fc
--- /dev/null
+++ b/core/generator.js
@@ -0,0 +1,241 @@
+const fs = require("fs");
+const path = require("path");
+const axios = require("axios");
+const { S3Client, PutObjectCommand, DeleteObjectsCommand } = require("@aws-sdk/client-s3");
+
+const IMAGE_EXTS = new Set([".jpg", ".jpeg", ".png", ".webp", ".bmp", ".gif"]);
+const CONTENT_TYPES = {
+ ".jpg": "image/jpeg",
+ ".jpeg": "image/jpeg",
+ ".png": "image/png",
+ ".webp": "image/webp",
+ ".bmp": "image/bmp",
+ ".gif": "image/gif",
+};
+
+function isR2Configured(config) {
+ return (
+ config &&
+ config.r2_account_id &&
+ config.r2_access_key_id &&
+ config.r2_secret_access_key &&
+ config.r2_bucket &&
+ config.r2_public_url
+ );
+}
+
+function createR2Client(config) {
+ const endpoint = `https://${config.r2_account_id}.r2.cloudflarestorage.com`;
+ return new S3Client({
+ region: "auto",
+ endpoint,
+ forcePathStyle: true,
+ credentials: {
+ accessKeyId: config.r2_access_key_id,
+ secretAccessKey: config.r2_secret_access_key,
+ },
+ });
+}
+
+/** 将指定本地文件路径上传到 R2,返回 { urls, keys } */
+async function uploadRefFilesToR2({ client, bucket, publicBaseUrl, filePaths }) {
+ const runId = Date.now().toString(36) + "-" + Math.random().toString(36).slice(2, 8);
+ const prefix = `ref/${runId}`;
+ const urls = [];
+ const keys = [];
+ const base = (publicBaseUrl || "").replace(/\/$/, "");
+
+ for (let i = 0; i < filePaths.length; i++) {
+ const filePath = filePaths[i];
+ if (!fs.existsSync(filePath)) continue;
+ const ext = path.extname(filePath).toLowerCase();
+ if (!IMAGE_EXTS.has(ext)) continue;
+ const name = path.basename(filePath);
+ const key = `${prefix}/${name}`;
+ const body = fs.readFileSync(filePath);
+ const contentType = CONTENT_TYPES[ext] || "application/octet-stream";
+
+ await client.send(
+ new PutObjectCommand({
+ Bucket: bucket,
+ Key: key,
+ Body: body,
+ ContentType: contentType,
+ })
+ );
+ urls.push(`${base}/${key}`);
+ keys.push(key);
+ }
+ return { urls, keys };
+}
+
+async function deleteR2Objects({ client, bucket, keys }) {
+ if (!keys || keys.length === 0) return;
+ await client.send(
+ new DeleteObjectsCommand({
+ Bucket: bucket,
+ Delete: { Objects: keys.map((Key) => ({ Key })) },
+ })
+ );
+}
+
+function extractImageUrls(dataObj) {
+ if (!dataObj) return [];
+ const candidates = [];
+ if (Array.isArray(dataObj)) {
+ dataObj.forEach((v) => v && candidates.push(String(v)));
+ } else if (typeof dataObj === "object") {
+ for (const key of ["img_url", "img_urls", "image_urls", "urls", "images", "result"]) {
+ const val = dataObj[key];
+ if (!val) continue;
+ if (typeof val === "string") candidates.push(val);
+ else if (Array.isArray(val)) val.forEach((v) => v && candidates.push(String(v)));
+ }
+ }
+ const seen = new Set();
+ return candidates.filter((u) => !seen.has(u) && seen.add(u));
+}
+
+/**
+ * 执行一次生图流程,支持进度回调
+ * @param {object} config - 完整配置(api_key, r2_*, api_create_url, api_result_url, poll_interval_seconds, max_wait_seconds 等)
+ * @param {object} options - { prompt, size, aspectRatio, refFilePaths [], saveDir, extraParams {} }
+ * @param {function} onProgress - (step, message) => void
+ */
+async function runGeneration(config, options, onProgress = () => {}) {
+ const apiKey = config.api_key || process.env.WUYIN_API_KEY;
+ if (!apiKey) throw new Error("未配置 API 密钥");
+
+ const prompt = (options.prompt || "").trim();
+ if (!prompt) throw new Error("请输入提示词");
+
+ const createUrl = config.api_create_url || "https://api.wuyinkeji.com/api/async/image_nanoBanana2";
+ const resultUrl = config.api_result_url || "https://api.wuyinkeji.com/api/async/detail";
+ const pollIntervalMs = (config.poll_interval_seconds || 5) * 1000;
+ const maxWaitMs = (config.max_wait_seconds || 300) * 1000;
+ const saveDir = options.saveDir || config.default_save_dir || path.join(process.cwd(), "save");
+ const extraParams = options.extraParams || config.extra_params || {};
+
+ let r2KeysToDelete = [];
+ let combinedUrls = [];
+
+ if (isR2Configured(config) && options.refFilePaths && options.refFilePaths.length > 0) {
+ onProgress("upload", "正在上传参考图到 R2…");
+ const client = createR2Client(config);
+ const { urls, keys } = await uploadRefFilesToR2({
+ client,
+ bucket: config.r2_bucket,
+ publicBaseUrl: config.r2_public_url,
+ filePaths: options.refFilePaths,
+ });
+ r2KeysToDelete = keys;
+ combinedUrls = urls;
+ onProgress("upload_done", `已上传 ${urls.length} 张参考图`);
+ }
+
+ try {
+ onProgress("create", "正在创建生图任务…");
+ const body = {
+ prompt,
+ size: options.size || "1K",
+ aspectRatio: options.aspectRatio || "auto",
+ key: apiKey,
+ ...extraParams,
+ };
+ if (combinedUrls.length > 0) body.urls = combinedUrls;
+
+ const createResp = await axios.post(createUrl, body, {
+ headers: {
+ Authorization: apiKey,
+ "Content-Type": "application/json;charset=utf-8;",
+ },
+ timeout: 30000,
+ });
+ const payload = createResp.data;
+ if (!payload || payload.code !== 200) {
+ throw new Error("创建任务失败: " + (payload?.msg || JSON.stringify(payload)));
+ }
+ const taskId = (payload.data || {}).id;
+ if (!taskId) throw new Error("返回数据中缺少任务 id");
+
+ onProgress("poll", "正在等待生成结果…");
+ const imageUrls = await pollResult({
+ apiKey,
+ taskId,
+ resultUrl,
+ pollIntervalMs,
+ maxWaitMs,
+ });
+
+ if (!imageUrls || imageUrls.length === 0) {
+ throw new Error("任务完成但未获取到图片 URL");
+ }
+
+ onProgress("download", `正在保存 ${imageUrls.length} 张图片…`);
+ if (!fs.existsSync(saveDir)) fs.mkdirSync(saveDir, { recursive: true });
+ const savedPaths = [];
+ for (let i = 0; i < imageUrls.length; i++) {
+ const url = imageUrls[i];
+ const resp = await axios.get(url, { responseType: "arraybuffer", timeout: 60000 });
+ let ext = ".jpg";
+ for (const e of [".png", ".jpeg", ".jpg", ".webp", ".bmp", ".gif"]) {
+ if (url.toLowerCase().includes(e)) {
+ ext = e;
+ break;
+ }
+ }
+ const filePath = path.join(saveDir, `${taskId}_${i + 1}${ext}`);
+ fs.writeFileSync(filePath, resp.data);
+ savedPaths.push(filePath);
+ }
+ onProgress("done", `已保存到 ${saveDir}`);
+ return { taskId, saveDir, count: imageUrls.length, savedPaths };
+ } finally {
+ if (r2KeysToDelete.length > 0 && isR2Configured(config)) {
+ try {
+ const client = createR2Client(config);
+ await deleteR2Objects({ client, bucket: config.r2_bucket, keys: r2KeysToDelete });
+ onProgress("cleanup", "已删除 R2 临时参考图");
+ } catch (e) {
+ onProgress("cleanup_error", "删除 R2 参考图失败: " + e.message);
+ }
+ }
+ }
+}
+
+async function pollResult({ apiKey, taskId, resultUrl, pollIntervalMs, maxWaitMs }) {
+ const start = Date.now();
+ const headers = {
+ Authorization: apiKey,
+ "Content-Type": "application/x-www-form-urlencoded;charset=utf-8;",
+ };
+ while (true) {
+ const resp = await axios.get(resultUrl, {
+ params: { key: apiKey, id: taskId },
+ headers,
+ timeout: 30000,
+ });
+ const payload = resp.data;
+ if (!payload || payload.code !== 200) {
+ throw new Error(`查询失败: ${payload?.msg || "未知错误"}`);
+ }
+ const data = payload.data || {};
+ const status = data.status;
+ if (status === 2) return extractImageUrls(data);
+ if (status === 3) throw new Error("任务生成失败: " + (data.message || payload.msg || "未知原因"));
+ const urls = extractImageUrls(data);
+ if (urls.length > 0) return urls;
+ if (Date.now() - start > maxWaitMs) {
+ throw new Error("等待结果超时");
+ }
+ await new Promise((r) => setTimeout(r, pollIntervalMs));
+ }
+}
+
+module.exports = {
+ runGeneration,
+ isR2Configured,
+ uploadRefFilesToR2,
+ deleteR2Objects,
+ createR2Client,
+};
diff --git a/electron/main.js b/electron/main.js
new file mode 100644
index 0000000..9764308
--- /dev/null
+++ b/electron/main.js
@@ -0,0 +1,166 @@
+const path = require("path");
+const fs = require("fs");
+const { app, BrowserWindow, ipcMain, dialog } = require("electron");
+const { runGeneration } = require("../core/generator");
+
+const isDev = process.env.NODE_ENV === "development" || !app.isPackaged;
+const configPath = path.join(app.getPath("userData"), "config_nano_banana.json");
+
+const defaultConfig = {
+ api_key: "",
+ api_create_url: "https://api.wuyinkeji.com/api/async/image_nanoBanana2",
+ api_result_url: "https://api.wuyinkeji.com/api/async/detail",
+ poll_interval_seconds: 10,
+ max_wait_seconds: 300,
+ r2_account_id: "",
+ r2_access_key_id: "",
+ r2_secret_access_key: "",
+ r2_bucket: "",
+ r2_public_url: "",
+ default_save_dir: "",
+ extra_params: [],
+};
+
+function loadConfig() {
+ try {
+ const raw = fs.readFileSync(configPath, "utf8");
+ const data = JSON.parse(raw);
+ return { ...defaultConfig, ...data };
+ } catch {
+ const fallback = path.join(app.getAppPath(), "config_nano_banana.json");
+ try {
+ if (fs.existsSync(fallback)) {
+ const raw = fs.readFileSync(fallback, "utf8");
+ const data = JSON.parse(raw);
+ return { ...defaultConfig, ...data };
+ }
+ } catch (_) {}
+ return { ...defaultConfig };
+ }
+}
+
+function saveConfig(config) {
+ fs.mkdirSync(path.dirname(configPath), { recursive: true });
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2), "utf8");
+}
+
+function createWindow() {
+ const win = new BrowserWindow({
+ width: 900,
+ height: 680,
+ minWidth: 640,
+ minHeight: 480,
+ webPreferences: {
+ preload: path.join(__dirname, "preload.js"),
+ contextIsolation: true,
+ nodeIntegration: false,
+ },
+ title: "NanoBanana 生图",
+ show: false,
+ });
+ win.once("ready-to-show", () => win.show());
+
+ if (isDev) {
+ win.loadURL("http://localhost:5173");
+ win.webContents.openDevTools();
+ } else {
+ win.loadFile(path.join(__dirname, "../dist/index.html"));
+ }
+}
+
+app.whenReady().then(() => {
+ createWindow();
+ app.on("activate", () => {
+ if (BrowserWindow.getAllWindows().length === 0) createWindow();
+ });
+});
+
+app.on("window-all-closed", () => {
+ if (process.platform !== "darwin") app.quit();
+});
+
+ipcMain.handle("getConfig", () => loadConfig());
+
+ipcMain.handle("saveConfig", (_e, config) => {
+ const current = loadConfig();
+ const merged = { ...current, ...config };
+ saveConfig(merged);
+ return loadConfig();
+});
+
+ipcMain.handle("selectDirectory", async (_e, defaultPath) => {
+ const { canceled, filePaths } = await dialog.showOpenDialog({
+ properties: ["openDirectory"],
+ defaultPath: defaultPath || undefined,
+ });
+ if (canceled || !filePaths.length) return null;
+ return filePaths[0];
+});
+
+ipcMain.handle("selectReferenceFiles", async () => {
+ const { canceled, filePaths } = await dialog.showOpenDialog({
+ properties: ["openFile", "multiSelections"],
+ filters: [
+ { name: "图片", extensions: ["jpg", "jpeg", "png", "webp", "bmp", "gif"] },
+ ],
+ });
+ if (canceled || !filePaths.length) return [];
+ return filePaths;
+});
+
+ipcMain.handle("getImageDataUrl", async (_e, filePath) => {
+ if (!filePath || typeof filePath !== "string") return null;
+ try {
+ const ext = filePath.replace(/^.*\./, "").toLowerCase();
+ const mime = { jpg: "image/jpeg", jpeg: "image/jpeg", png: "image/png", webp: "image/webp", bmp: "image/bmp", gif: "image/gif" }[ext] || "image/jpeg";
+ const buf = fs.readFileSync(filePath);
+ return `data:${mime};base64,${buf.toString("base64")}`;
+ } catch {
+ return null;
+ }
+});
+
+ipcMain.handle(
+ "startGeneration",
+ async (
+ _e,
+ {
+ prompt,
+ size,
+ aspectRatio,
+ refFilePaths,
+ saveDir,
+ extraParams,
+ }
+ ) => {
+ const config = loadConfig();
+ const win = BrowserWindow.getFocusedWindow() || BrowserWindow.getAllWindows()[0];
+ const send = (step, message) => {
+ if (win && !win.isDestroyed()) win.webContents.send("generationProgress", { step, message });
+ };
+ const extra = Array.isArray(config.extra_params)
+ ? config.extra_params.reduce((acc, { key, value }) => {
+ if (key != null && key !== "") acc[key] = value;
+ return acc;
+ }, {})
+ : {};
+ const mergedExtra = { ...extra, ...(extraParams || {}) };
+ try {
+ const result = await runGeneration(
+ config,
+ {
+ prompt,
+ size: size || config.size || "1K",
+ aspectRatio: aspectRatio || config.aspectRatio || "auto",
+ refFilePaths: refFilePaths || [],
+ saveDir: saveDir || config.default_save_dir,
+ extraParams: Object.keys(mergedExtra).length ? mergedExtra : undefined,
+ },
+ send
+ );
+ return { success: true, ...result };
+ } catch (err) {
+ return { success: false, error: err.message || String(err) };
+ }
+ }
+);
diff --git a/electron/preload.js b/electron/preload.js
new file mode 100644
index 0000000..04eac02
--- /dev/null
+++ b/electron/preload.js
@@ -0,0 +1,15 @@
+const { contextBridge, ipcRenderer } = require("electron");
+
+contextBridge.exposeInMainWorld("electronAPI", {
+ getConfig: () => ipcRenderer.invoke("getConfig"),
+ saveConfig: (config) => ipcRenderer.invoke("saveConfig", config),
+ selectDirectory: (defaultPath) => ipcRenderer.invoke("selectDirectory", defaultPath),
+ selectReferenceFiles: () => ipcRenderer.invoke("selectReferenceFiles"),
+ getImageDataUrl: (filePath) => ipcRenderer.invoke("getImageDataUrl", filePath),
+ startGeneration: (options) => ipcRenderer.invoke("startGeneration", options),
+ onGenerationProgress: (cb) => {
+ const handler = (_e, data) => cb(data);
+ ipcRenderer.on("generationProgress", handler);
+ return () => ipcRenderer.removeListener("generationProgress", handler);
+ },
+});
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..a929a4d
--- /dev/null
+++ b/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ NanoBanana 生图
+
+
+
+
+
+
diff --git a/nano_banana_client.js b/nano_banana_client.js
new file mode 100644
index 0000000..664cc26
--- /dev/null
+++ b/nano_banana_client.js
@@ -0,0 +1,389 @@
+const fs = require("fs");
+const path = require("path");
+const axios = require("axios");
+const { S3Client, PutObjectCommand, DeleteObjectsCommand } = require("@aws-sdk/client-s3");
+
+// NanoBanana2 生图接口,文档 https://api.wuyinkeji.com/doc/65
+const NANOBANANA_URL = "https://api.wuyinkeji.com/api/async/image_nanoBanana2";
+// 全模型通用结果详情接口,文档见 https://api.wuyinkeji.com/doc/47
+const RESULT_DETAIL_URL = "https://api.wuyinkeji.com/api/async/detail";
+const CONFIG_FILE_NAME = "config_nano_banana.json";
+
+function loadConfig(baseDir) {
+ const configPath = path.join(baseDir, CONFIG_FILE_NAME);
+ if (!fs.existsSync(configPath)) return {};
+ try {
+ const raw = fs.readFileSync(configPath, "utf8");
+ return JSON.parse(raw) || {};
+ } catch (e) {
+ console.log("读取配置文件失败,将忽略配置文件。错误:", e.message);
+ return {};
+ }
+}
+
+function ensureApiKey(config) {
+ const key = config.api_key || process.env.WUYIN_API_KEY;
+ if (!key) {
+ throw new Error(
+ "未找到 API 密钥,请在 config_nano_banana.json 中填写 api_key," +
+ "或设置环境变量 WUYIN_API_KEY。"
+ );
+ }
+ return key;
+}
+
+function ensurePrompt(config) {
+ const prompt = config.prompt;
+ if (!prompt || !prompt.trim()) {
+ throw new Error(
+ "未在 config_nano_banana.json 中找到有效的 prompt,请先在文件中填写默认提示词。"
+ );
+ }
+ return prompt.trim();
+}
+
+/** 检查是否配置了 R2 图床(用于 01 参考图上传) */
+function isR2Configured(config) {
+ return (
+ config &&
+ config.r2_account_id &&
+ config.r2_access_key_id &&
+ config.r2_secret_access_key &&
+ config.r2_bucket &&
+ config.r2_public_url
+ );
+}
+
+/** 创建 R2(S3 兼容)客户端 */
+function createR2Client(config) {
+ const accountId = config.r2_account_id;
+ const endpoint = `https://${accountId}.r2.cloudflarestorage.com`;
+ return new S3Client({
+ region: "auto",
+ endpoint,
+ // 对不少 S3 兼容服务更稳:强制使用 path-style
+ // 形如 https://.r2.cloudflarestorage.com//
+ forcePathStyle: true,
+ credentials: {
+ accessKeyId: config.r2_access_key_id,
+ secretAccessKey: config.r2_secret_access_key,
+ },
+ });
+}
+
+/**
+ * 将 01 目录中的参考图上传到 R2,返回可公网访问的 URL 列表及本次上传的 key 列表(用于事后删除)
+ */
+async function uploadRefImagesToR2({ client, bucket, publicBaseUrl, inputDir, maxFiles = 14 }) {
+ if (!fs.existsSync(inputDir)) return { urls: [], keys: [] };
+
+ const exts = new Set([".jpg", ".jpeg", ".png", ".webp", ".bmp", ".gif"]);
+ const files = fs
+ .readdirSync(inputDir)
+ .map((name) => path.join(inputDir, name))
+ .filter((p) => exts.has(path.extname(p).toLowerCase()))
+ .slice(0, maxFiles);
+
+ const runId = Date.now().toString(36) + "-" + Math.random().toString(36).slice(2, 8);
+ const prefix = `ref/${runId}`;
+ const urls = [];
+ const keys = [];
+
+ for (const filePath of files) {
+ const name = path.basename(filePath);
+ const key = `${prefix}/${name}`;
+ const body = fs.readFileSync(filePath);
+ const ext = path.extname(name).toLowerCase();
+ const contentType = { ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png", ".webp": "image/webp", ".bmp": "image/bmp", ".gif": "image/gif" }[ext] || "application/octet-stream";
+
+ await client.send(
+ new PutObjectCommand({
+ Bucket: bucket,
+ Key: key,
+ Body: body,
+ ContentType: contentType,
+ })
+ );
+ const base = publicBaseUrl.replace(/\/$/, "");
+ urls.push(`${base}/${key}`);
+ keys.push(key);
+ }
+ return { urls, keys };
+}
+
+/** 从 R2 删除指定 key 的对象 */
+async function deleteR2Objects({ client, bucket, keys }) {
+ if (!keys || keys.length === 0) return;
+ await client.send(
+ new DeleteObjectsCommand({
+ Bucket: bucket,
+ Delete: { Objects: keys.map((Key) => ({ Key })) },
+ })
+ );
+}
+
+async function collectReferenceImages(inputDir, maxFiles = 14) {
+ if (!fs.existsSync(inputDir)) return [];
+
+ const exts = new Set([".jpg", ".jpeg", ".png", ".webp", ".bmp", ".gif"]);
+ const files = fs
+ .readdirSync(inputDir)
+ .map((name) => path.join(inputDir, name))
+ .filter((p) => exts.has(path.extname(p).toLowerCase()))
+ .slice(0, maxFiles);
+
+ const result = [];
+ for (const file of files) {
+ const buf = fs.readFileSync(file);
+ result.push(buf.toString("base64"));
+ }
+ return result;
+}
+
+async function createTask({ apiKey, prompt, size, aspectRatio, refB64List }) {
+ const headers = {
+ Authorization: apiKey,
+ "Content-Type": "application/json;charset=utf-8;",
+ };
+
+ const body = {
+ prompt,
+ size,
+ aspectRatio,
+ key: apiKey,
+ };
+ if (refB64List && refB64List.length > 0) {
+ body.urls = refB64List;
+ }
+
+ const resp = await axios.post(NANOBANANA_URL, body, {
+ headers,
+ timeout: 30000,
+ });
+ const payload = resp.data;
+
+ if (!payload || payload.code !== 200) {
+ throw new Error("创建任务失败: " + JSON.stringify(payload));
+ }
+
+ const data = payload.data || {};
+ const taskId = data.id;
+ if (!taskId) {
+ throw new Error("返回数据中缺少任务 id: " + JSON.stringify(payload));
+ }
+ return taskId;
+}
+
+function extractImageUrls(dataObj) {
+ if (!dataObj) return [];
+
+ const candidates = [];
+ if (Array.isArray(dataObj)) {
+ for (const v of dataObj) {
+ if (v) candidates.push(String(v));
+ }
+ } else if (typeof dataObj === "object") {
+ // 兼容多种字段命名,包括结果详情返回的 result 数组
+ for (const key of ["img_url", "img_urls", "image_urls", "urls", "images", "result"]) {
+ if (dataObj[key]) {
+ const val = dataObj[key];
+ if (typeof val === "string") {
+ candidates.push(val);
+ } else if (Array.isArray(val)) {
+ for (const v of val) {
+ if (v) candidates.push(String(v));
+ }
+ }
+ }
+ }
+ }
+
+ const seen = new Set();
+ const result = [];
+ for (const url of candidates) {
+ if (!seen.has(url)) {
+ seen.add(url);
+ result.push(url);
+ }
+ }
+ return result;
+}
+
+async function queryResult({ apiKey, taskId, pollIntervalMs, maxWaitMs }) {
+ const headers = {
+ Authorization: apiKey,
+ "Content-Type": "application/x-www-form-urlencoded;charset=utf-8;",
+ };
+ const params = { key: apiKey, id: taskId };
+ const start = Date.now();
+
+ while (true) {
+ const resp = await axios.get(RESULT_DETAIL_URL, {
+ params,
+ headers,
+ timeout: 30000,
+ });
+ const payload = resp.data;
+
+ if (!payload || payload.code !== 200) {
+ const msg = (payload && payload.msg) || "未知错误";
+ throw new Error(`查询任务失败: code=${payload && payload.code}, msg=${msg}`);
+ }
+
+ const data = payload.data || {};
+ const status = data.status;
+
+ if (status === 2) {
+ const urls = extractImageUrls(data);
+ return urls;
+ }
+ if (status === 3) {
+ const reason = data.message || payload.msg || "未知原因";
+ throw new Error("任务生成失败: " + reason);
+ }
+
+ const urls = extractImageUrls(data);
+ if (urls.length > 0) return urls;
+
+ if (Date.now() - start > maxWaitMs) {
+ throw new Error("等待任务结果超时,请稍后在控制台或结果查询接口自行确认。");
+ }
+
+ await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
+ }
+}
+
+async function downloadImages({ urls, outputDir, taskId }) {
+ if (!fs.existsSync(outputDir)) {
+ fs.mkdirSync(outputDir, { recursive: true });
+ }
+
+ for (let i = 0; i < urls.length; i++) {
+ const url = urls[i];
+ try {
+ const resp = await axios.get(url, {
+ responseType: "arraybuffer",
+ timeout: 60000,
+ });
+
+ let ext = ".jpg";
+ for (const cand of [".png", ".jpeg", ".jpg", ".webp", ".bmp", ".gif"]) {
+ if (url.toLowerCase().includes(cand)) {
+ ext = cand;
+ break;
+ }
+ }
+
+ const filename = path.join(outputDir, `${taskId}_${i + 1}${ext}`);
+ fs.writeFileSync(filename, resp.data);
+ console.log("已保存:", filename);
+ } catch (e) {
+ console.log("下载失败:", url, "| 错误:", e.message);
+ }
+ }
+}
+
+async function main() {
+ const baseDir = __dirname;
+ const config = loadConfig(baseDir);
+
+ const apiKey = ensureApiKey(config);
+ const prompt = ensurePrompt(config);
+
+ const size = config.size || "1K";
+ const aspectRatio = config.aspectRatio || "auto";
+ const pollIntervalMs = (config.poll_interval_seconds || 5) * 1000;
+ const maxWaitMs = (config.max_wait_seconds || 300) * 1000;
+
+ const inputDir = path.join(baseDir, config.input_dir || "01");
+ const outputDir = path.join(baseDir, config.output_dir || "save");
+
+ let combinedUrls = [];
+ let r2KeysToDelete = [];
+ const useR2 = isR2Configured(config);
+
+ if (useR2) {
+ // 使用 R2 图床:将 01 目录的图片上传到 R2,用返回的 URL 作为参考图
+ const client = createR2Client(config);
+ const { urls: r2Urls, keys } = await uploadRefImagesToR2({
+ client,
+ bucket: config.r2_bucket,
+ publicBaseUrl: config.r2_public_url,
+ inputDir,
+ maxFiles: 14,
+ });
+ r2KeysToDelete = keys;
+ if (r2Urls.length > 0) {
+ console.log(`已上传 ${r2Urls.length} 张参考图到 R2 图床。`);
+ }
+ combinedUrls = [...r2Urls];
+ } else {
+ // 未配置 R2:本地 01 转为 base64
+ const refB64List = await collectReferenceImages(inputDir);
+ if (refB64List.length > 0) {
+ console.log(`已从目录 ${inputDir} 读取 ${refB64List.length} 张本地参考图(base64)。`);
+ }
+ combinedUrls = [...refB64List];
+ }
+
+ // 配置中的参考图 URL(直接透传给接口)
+ let extraUrls = [];
+ if (typeof config.reference_urls === "string") {
+ extraUrls = [config.reference_urls];
+ } else if (Array.isArray(config.reference_urls)) {
+ extraUrls = config.reference_urls.filter((u) => !!u).map(String);
+ }
+ combinedUrls = [...combinedUrls, ...extraUrls];
+
+ if (extraUrls.length > 0) {
+ console.log(`已从配置文件读取 ${extraUrls.length} 个参考图 URL。`);
+ }
+ if (combinedUrls.length === 0) {
+ console.log(`未找到任何参考图,将仅根据提示词生成。`);
+ }
+
+ try {
+ console.log("正在创建 NanoBanana2 任务...");
+ const taskId = await createTask({
+ apiKey,
+ prompt,
+ size,
+ aspectRatio,
+ refB64List: combinedUrls,
+ });
+ console.log("任务已创建,任务 id:", taskId);
+
+ console.log("开始轮询任务结果...");
+ const urls = await queryResult({
+ apiKey,
+ taskId,
+ pollIntervalMs,
+ maxWaitMs,
+ });
+
+ if (!urls || urls.length === 0) {
+ console.log("任务完成,但未在结果中找到图片 URL,请登录速创API控制台或检查结果详情接口。");
+ return;
+ }
+
+ console.log(`任务完成,共获取到 ${urls.length} 个图片 URL,开始下载...`);
+ await downloadImages({ urls, outputDir, taskId });
+ console.log("全部处理完成。");
+ } finally {
+ if (useR2 && r2KeysToDelete.length > 0) {
+ try {
+ const client = createR2Client(config);
+ await deleteR2Objects({ client, bucket: config.r2_bucket, keys: r2KeysToDelete });
+ console.log("已删除本次上传的 R2 参考图。");
+ } catch (e) {
+ console.warn("删除 R2 参考图失败:", e.message);
+ }
+ }
+ }
+}
+
+main().catch((err) => {
+ console.error("执行出错:", err.message || err);
+ process.exit(1);
+});
+
diff --git a/nano_banana_client.py b/nano_banana_client.py
new file mode 100644
index 0000000..bbe50e8
--- /dev/null
+++ b/nano_banana_client.py
@@ -0,0 +1,343 @@
+import argparse
+import base64
+import json
+import os
+import time
+from pathlib import Path
+from typing import List, Optional
+
+import requests
+
+
+# NanoBanana2 生图接口,文档 https://api.wuyinkeji.com/doc/65
+NANOBANANA_URL = "https://api.wuyinkeji.com/api/async/image_nanoBanana2"
+# 全模型通用结果详情接口,文档见 https://api.wuyinkeji.com/doc/47
+RESULT_DETAIL_URL = "https://api.wuyinkeji.com/api/async/detail"
+CONFIG_FILE_NAME = "config_nano_banana.json"
+
+
+def load_config(base_dir: Path) -> dict:
+ """
+ 从配置文件中读取默认参数(如 api_key、prompt 等)。
+ """
+ config_path = base_dir / CONFIG_FILE_NAME
+ if not config_path.exists():
+ return {}
+ try:
+ with config_path.open("r", encoding="utf-8") as f:
+ return json.load(f) or {}
+ except Exception as e:
+ print(f"读取配置文件失败,将忽略配置文件。错误: {e}")
+ return {}
+
+
+def load_api_key(cli_key: Optional[str], config: dict) -> str:
+ """
+ 优先级:命令行参数 > 配置文件 > 环境变量 WUYIN_API_KEY。
+ """
+ key_from_config = config.get("api_key") if isinstance(config, dict) else None
+ key = cli_key or key_from_config or os.environ.get("WUYIN_API_KEY")
+ if not key:
+ raise SystemExit(
+ "未找到 API 密钥,请在 config_nano_banana.json 中填写 api_key,"
+ "或通过参数 --api-key 传入,或在环境变量 WUYIN_API_KEY 中设置。"
+ )
+ return key
+
+
+def collect_reference_images(input_dir: Path, max_files: int = 14) -> List[str]:
+ """
+ 从指定目录读取参考图,返回 base64 字符串数组。
+ """
+ if not input_dir.exists():
+ return []
+
+ exts = {".jpg", ".jpeg", ".png", ".webp", ".bmp", ".gif"}
+ files = [p for p in sorted(input_dir.iterdir()) if p.suffix.lower() in exts]
+ files = files[:max_files]
+
+ encoded_list: List[str] = []
+ for p in files:
+ with p.open("rb") as f:
+ b64 = base64.b64encode(f.read()).decode("ascii")
+ encoded_list.append(b64)
+ return encoded_list
+
+
+def create_task(
+ api_key: str,
+ prompt: str,
+ size: str,
+ aspect_ratio: str,
+ ref_b64_list: List[str],
+) -> str:
+ """
+ 调用 NanoBanana2 异步图片生成接口,返回任务 id。
+ 使用 JSON 请求体,urls 字段为数组,避免类型错误。
+ """
+ headers = {
+ "Authorization": api_key,
+ "Content-Type": "application/json;charset=utf-8;",
+ }
+
+ data: dict = {
+ "prompt": prompt,
+ "size": size,
+ "aspectRatio": aspect_ratio,
+ "key": api_key,
+ }
+
+ if ref_b64_list:
+ # urls 为字符串数组,元素可以是 URL 或 Base64
+ data["urls"] = ref_b64_list
+
+ resp = requests.post(NANOBANANA_URL, json=data, headers=headers, timeout=30)
+ resp.raise_for_status()
+ payload = resp.json()
+
+ if payload.get("code") != 200:
+ raise RuntimeError(f"创建任务失败: {payload}")
+
+ data_obj = payload.get("data") or {}
+ task_id = data_obj.get("id")
+ if not task_id:
+ raise RuntimeError(f"返回数据中缺少任务 id: {payload}")
+
+ return task_id
+
+
+def extract_image_urls(data_obj) -> List[str]:
+ """
+ 尝试从结果详情 data 字段中提取图片 URL,兼容多种字段命名。
+ """
+ if not data_obj:
+ return []
+
+ # 常见字段名兼容
+ candidates = []
+ if isinstance(data_obj, dict):
+ # 兼容多种字段命名,包括结果详情返回的 result 数组
+ for key in ("img_url", "img_urls", "image_urls", "urls", "images", "result"):
+ if key in data_obj and data_obj[key]:
+ val = data_obj[key]
+ if isinstance(val, str):
+ candidates.append(val)
+ elif isinstance(val, list):
+ candidates.extend(str(v) for v in val if v)
+ elif isinstance(data_obj, list):
+ candidates.extend(str(v) for v in data_obj if v)
+
+ # 去重
+ seen = set()
+ result: List[str] = []
+ for u in candidates:
+ if u not in seen:
+ seen.add(u)
+ result.append(u)
+ return result
+
+
+def query_result(
+ api_key: str,
+ task_id: str,
+ poll_interval: float = 5.0,
+ max_wait: float = 300.0,
+) -> List[str]:
+ """
+ 轮询结果详情接口,直到任务完成或超时,返回图片 URL 列表。
+ """
+ start = time.time()
+ params = {"key": api_key, "id": task_id}
+ headers = {
+ "Authorization": api_key,
+ "Content-Type": "application/x-www-form-urlencoded;charset=utf-8;",
+ }
+
+ while True:
+ resp = requests.get(RESULT_DETAIL_URL, params=params, headers=headers, timeout=30)
+ resp.raise_for_status()
+ payload = resp.json()
+
+ if payload.get("code") != 200:
+ # 有些平台在排队/处理中阶段也返回 code=200,这里仅在明确失败时直接抛出
+ msg = payload.get("msg") or "未知错误"
+ raise RuntimeError(f"查询任务失败: code={payload.get('code')}, msg={msg}")
+
+ data_obj = payload.get("data") or {}
+ status = data_obj.get("status")
+
+ # 约定:0 排队中,1 生成中,2 成功,3 失败
+ if status == 2:
+ urls = extract_image_urls(data_obj)
+ if urls:
+ return urls
+ # 没有找到 URL 但状态为成功,直接返回空列表交由上层处理
+ return []
+ elif status == 3:
+ reason = data_obj.get("fail_reason") or payload.get("msg") or "未知原因"
+ raise RuntimeError(f"任务生成失败: {reason}")
+
+ # 如果未提供 status,但已经带有图片 URL,也视为成功
+ urls = extract_image_urls(data_obj)
+ if urls:
+ return urls
+
+ if time.time() - start > max_wait:
+ raise TimeoutError("等待任务结果超时,请稍后在控制台或结果查询接口自行确认。")
+
+ time.sleep(poll_interval)
+
+
+def download_images(urls: List[str], output_dir: Path, task_id: str) -> None:
+ """
+ 将图片 URL 下载到指定目录。
+ """
+ output_dir.mkdir(parents=True, exist_ok=True)
+
+ for idx, url in enumerate(urls, start=1):
+ try:
+ resp = requests.get(url, stream=True, timeout=60)
+ resp.raise_for_status()
+ except Exception as e:
+ print(f"下载失败: {url} | 错误: {e}")
+ continue
+
+ # 根据 URL 粗略推断扩展名
+ ext = ".jpg"
+ for cand in (".png", ".jpeg", ".jpg", ".webp", ".bmp", ".gif"):
+ if cand in url.lower():
+ ext = cand
+ break
+
+ filename = output_dir / f"{task_id}_{idx}{ext}"
+ with filename.open("wb") as f:
+ for chunk in resp.iter_content(chunk_size=8192):
+ if chunk:
+ f.write(chunk)
+
+ print(f"已保存: {filename}")
+
+
+def parse_args() -> argparse.Namespace:
+ parser = argparse.ArgumentParser(
+ description=(
+ "NanoBanana2 调用脚本:"
+ "读取 ./01 目录中的参考图,生成图片并保存到 ./save 目录。"
+ )
+ )
+ parser.add_argument(
+ "-p",
+ "--prompt",
+ required=False,
+ help="提示词,可在此修改,也可留空在运行时输入。",
+ )
+ parser.add_argument(
+ "--size",
+ default="1K",
+ choices=["1K", "2K", "4K"],
+ help="输出图像大小,支持 1K/2K/4K,默认 1K。",
+ )
+ parser.add_argument(
+ "--aspect-ratio",
+ default="auto",
+ help="输出图像比例,如 auto、1:1、16:9 等,默认 auto。",
+ )
+ parser.add_argument(
+ "--input-dir",
+ default="01",
+ help="参考图目录,相对于当前脚本所在目录,默认 01。",
+ )
+ parser.add_argument(
+ "--output-dir",
+ default="save",
+ help="生成图片保存目录,相对于当前脚本所在目录,默认 save。",
+ )
+ parser.add_argument(
+ "--api-key",
+ help="速创API接口密钥;如未提供,将尝试从环境变量 WUYIN_API_KEY 读取。",
+ )
+ parser.add_argument(
+ "--poll-interval",
+ type=float,
+ default=5.0,
+ help="轮询结果详情接口的间隔秒数,默认 5 秒。",
+ )
+ parser.add_argument(
+ "--max-wait",
+ type=float,
+ default=300.0,
+ help="等待结果的最长时间(秒),默认 300 秒。",
+ )
+ return parser.parse_args()
+
+
+def main() -> None:
+ args = parse_args()
+
+ base_dir = Path(__file__).resolve().parent
+ config = load_config(base_dir)
+
+ api_key = load_api_key(args.api_key, config)
+
+ # 提示词优先级:命令行参数 > 配置文件 > 运行时输入
+ prompt = args.prompt or (config.get("prompt") if isinstance(config, dict) else None)
+ if not prompt:
+ prompt = input("请输入提示词(prompt):").strip()
+ if not prompt:
+ raise SystemExit("提示词不能为空。")
+
+ input_dir = base_dir / args.input_dir
+ output_dir = base_dir / args.output_dir
+
+ # 本地参考图(转为 base64)
+ ref_b64_list = collect_reference_images(input_dir)
+
+ # 配置中的参考图 URL(直接透传给接口)
+ extra_urls_cfg = config.get("reference_urls") if isinstance(config, dict) else None
+ extra_urls: List[str] = []
+ if isinstance(extra_urls_cfg, str):
+ extra_urls = [extra_urls_cfg]
+ elif isinstance(extra_urls_cfg, list):
+ extra_urls = [str(u) for u in extra_urls_cfg if u]
+
+ combined_urls: List[str] = []
+ combined_urls.extend(ref_b64_list)
+ combined_urls.extend(extra_urls)
+
+ if ref_b64_list:
+ print(f"已从目录 {input_dir} 读取 {len(ref_b64_list)} 张本地参考图。")
+ if extra_urls:
+ print(f"已从配置文件读取 {len(extra_urls)} 个参考图 URL。")
+ if not combined_urls:
+ print(f"未找到任何参考图,将仅根据提示词生成。")
+
+ print("正在创建 NanoBanana2 任务...")
+ task_id = create_task(
+ api_key=api_key,
+ prompt=prompt,
+ size=args.size,
+ aspect_ratio=args.aspect_ratio,
+ ref_b64_list=combined_urls,
+ )
+ print(f"任务已创建,任务 id: {task_id}")
+
+ print("开始轮询任务结果(结果详情接口地址可根据官方文档调整)...")
+ urls = query_result(
+ api_key=api_key,
+ task_id=task_id,
+ poll_interval=args.poll_interval,
+ max_wait=args.max_wait,
+ )
+
+ if not urls:
+ print("任务完成,但未在结果中找到图片 URL,请登录速创API控制台或检查结果详情接口。")
+ return
+
+ print(f"任务完成,共获取到 {len(urls)} 个图片 URL,开始下载...")
+ download_images(urls, output_dir=output_dir, task_id=task_id)
+ print("全部处理完成。")
+
+
+if __name__ == "__main__":
+ main()
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..95b6591
--- /dev/null
+++ b/package.json
@@ -0,0 +1,66 @@
+{
+ "name": "nano-banana-img",
+ "version": "1.0.0",
+ "description": "NanoBanana2 本地图片生成脚本与桌面应用",
+ "main": "electron/main.js",
+ "scripts": {
+ "dev": "node nano_banana_client.js",
+ "ui": "vite --open",
+ "electron": "electron .",
+ "app": "concurrently -k \"vite\" \"wait-on http://localhost:5173 && electron .\"",
+ "build": "vite build",
+ "start": "electron .",
+ "pack": "npm run build && electron-builder --dir",
+ "dist": "npm run build && cross-env ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --win",
+ "dist:clean": "rimraf release && npm run dist",
+ "deps:check": "node -e \"require('./core/generator.js'); console.log('主进程依赖完整');\""
+ },
+ "build": {
+ "appId": "com.nanobanana.img",
+ "productName": "NanoBanana生图",
+ "directories": {
+ "output": "release"
+ },
+ "files": [
+ "dist/**/*",
+ "electron/**/*",
+ "core/**/*",
+ "node_modules/**/*",
+ "package.json"
+ ],
+ "win": {
+ "target": [
+ { "target": "dir", "arch": ["x64"] }
+ ],
+ "icon": null,
+ "signAndEditExecutable": false
+ },
+ "nsis": {
+ "oneClick": false,
+ "allowToChangeInstallationDirectory": true,
+ "installerLanguages": ["zh_CN"],
+ "shortcutName": "NanoBanana生图"
+ }
+ },
+ "dependencies": {
+ "axios": "^1.7.0",
+ "form-data": "^4.0.0",
+ "combined-stream": "^1.0.8",
+ "delayed-stream": "^1.0.0",
+ "mime-types": "^2.1.35",
+ "mime-db": "^1.52.0",
+ "@aws-sdk/client-s3": "^3.700.0",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@vitejs/plugin-react": "^4.2.0",
+ "vite": "^5.0.0",
+ "electron": "^28.0.0",
+ "electron-builder": "^24.9.1",
+ "cross-env": "^7.0.3",
+ "concurrently": "^8.2.0",
+ "wait-on": "^7.2.0",
+ "rimraf": "^5.0.5"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..a2df588
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,4627 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@aws-sdk/client-s3':
+ specifier: ^3.700.0
+ version: 3.1000.0
+ axios:
+ specifier: ^1.7.0
+ version: 1.13.6
+ combined-stream:
+ specifier: ^1.0.8
+ version: 1.0.8
+ delayed-stream:
+ specifier: ^1.0.0
+ version: 1.0.0
+ form-data:
+ specifier: ^4.0.0
+ version: 4.0.5
+ mime-db:
+ specifier: ^1.52.0
+ version: 1.52.0
+ mime-types:
+ specifier: ^2.1.35
+ version: 2.1.35
+ react:
+ specifier: ^18.2.0
+ version: 18.3.1
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.3.1(react@18.3.1)
+ devDependencies:
+ '@vitejs/plugin-react':
+ specifier: ^4.2.0
+ version: 4.7.0(vite@5.4.21(@types/node@18.19.130))
+ concurrently:
+ specifier: ^8.2.0
+ version: 8.2.2
+ cross-env:
+ specifier: ^7.0.3
+ version: 7.0.3
+ electron:
+ specifier: ^28.0.0
+ version: 28.3.3
+ electron-builder:
+ specifier: ^24.9.1
+ version: 24.13.3(electron-builder-squirrel-windows@24.13.3)
+ rimraf:
+ specifier: ^5.0.5
+ version: 5.0.10
+ vite:
+ specifier: ^5.0.0
+ version: 5.4.21(@types/node@18.19.130)
+ wait-on:
+ specifier: ^7.2.0
+ version: 7.2.0
+
+packages:
+
+ 7zip-bin@5.2.0:
+ resolution: {integrity: sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==}
+
+ '@aws-crypto/crc32@5.2.0':
+ resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/crc32c@5.2.0':
+ resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==}
+
+ '@aws-crypto/sha1-browser@5.2.0':
+ resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==}
+
+ '@aws-crypto/sha256-browser@5.2.0':
+ resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==}
+
+ '@aws-crypto/sha256-js@5.2.0':
+ resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==}
+ engines: {node: '>=16.0.0'}
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==}
+
+ '@aws-crypto/util@5.2.0':
+ resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==}
+
+ '@aws-sdk/client-s3@3.1000.0':
+ resolution: {integrity: sha512-7kPy33qNGq3NfwHC0412T6LDK1bp4+eiPzetX0sVd9cpTSXuQDKpoOFnB0Njj6uZjJDcLS3n2OeyarwwgkQ0Ow==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/core@3.973.15':
+ resolution: {integrity: sha512-AlC0oQ1/mdJ8vCIqu524j5RB7M8i8E24bbkZmya1CuiQxkY7SdIZAyw7NDNMGaNINQFq/8oGRMX0HeOfCVsl/A==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/crc64-nvme@3.972.3':
+ resolution: {integrity: sha512-UExeK+EFiq5LAcbHm96CQLSia+5pvpUVSAsVApscBzayb7/6dJBJKwV4/onsk4VbWSmqxDMcfuTD+pC4RxgZHg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-env@3.972.13':
+ resolution: {integrity: sha512-6ljXKIQ22WFKyIs1jbORIkGanySBHaPPTOI4OxACP5WXgbcR0nDYfqNJfXEGwCK7IzHdNbCSFsNKKs0qCexR8Q==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-http@3.972.15':
+ resolution: {integrity: sha512-dJuSTreu/T8f24SHDNTjd7eQ4rabr0TzPh2UTCwYexQtzG3nTDKm1e5eIdhiroTMDkPEJeY+WPkA6F9wod/20A==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-ini@3.972.13':
+ resolution: {integrity: sha512-JKSoGb7XeabZLBJptpqoZIFbROUIS65NuQnEHGOpuT9GuuZwag2qciKANiDLFiYk4u8nSrJC9JIOnWKVvPVjeA==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-login@3.972.13':
+ resolution: {integrity: sha512-RtYcrxdnJHKY8MFQGLltCURcjuMjnaQpAxPE6+/QEdDHHItMKZgabRe/KScX737F9vJMQsmJy9EmMOkCnoC1JQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-node@3.972.14':
+ resolution: {integrity: sha512-WqoC2aliIjQM/L3oFf6j+op/enT2i9Cc4UTxxMEKrJNECkq4/PlKE5BOjSYFcq6G9mz65EFbXJh7zOU4CvjSKQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-process@3.972.13':
+ resolution: {integrity: sha512-rsRG0LQA4VR+jnDyuqtXi2CePYSmfm5GNL9KxiW8DSe25YwJSr06W8TdUfONAC+rjsTI+aIH2rBGG5FjMeANrw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-sso@3.972.13':
+ resolution: {integrity: sha512-fr0UU1wx8kNHDhTQBXioc/YviSW8iXuAxHvnH7eQUtn8F8o/FU3uu6EUMvAQgyvn7Ne5QFnC0Cj0BFlwCk+RFw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/credential-provider-web-identity@3.972.13':
+ resolution: {integrity: sha512-a6iFMh1pgUH0TdcouBppLJUfPM7Yd3R9S1xFodPtCRoLqCz2RQFA3qjA8x4112PVYXEd4/pHX2eihapq39w0rA==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-bucket-endpoint@3.972.6':
+ resolution: {integrity: sha512-3H2bhvb7Cb/S6WFsBy/Dy9q2aegC9JmGH1inO8Lb2sWirSqpLJlZmvQHPE29h2tIxzv6el/14X/tLCQ8BQU6ZQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-expect-continue@3.972.6':
+ resolution: {integrity: sha512-QMdffpU+GkSGC+bz6WdqlclqIeCsOfgX8JFZ5xvwDtX+UTj4mIXm3uXu7Ko6dBseRcJz1FA6T9OmlAAY6JgJUg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-flexible-checksums@3.973.1':
+ resolution: {integrity: sha512-QLXsxsI6VW8LuGK+/yx699wzqP/NMCGk/hSGP+qtB+Lcff+23UlbahyouLlk+nfT7Iu021SkXBhnAuVd6IZcPw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-host-header@3.972.6':
+ resolution: {integrity: sha512-5XHwjPH1lHB+1q4bfC7T8Z5zZrZXfaLcjSMwTd1HPSPrCmPFMbg3UQ5vgNWcVj0xoX4HWqTGkSf2byrjlnRg5w==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-location-constraint@3.972.6':
+ resolution: {integrity: sha512-XdZ2TLwyj3Am6kvUc67vquQvs6+D8npXvXgyEUJAdkUDx5oMFJKOqpK+UpJhVDsEL068WAJl2NEGzbSik7dGJQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-logger@3.972.6':
+ resolution: {integrity: sha512-iFnaMFMQdljAPrvsCVKYltPt2j40LQqukAbXvW7v0aL5I+1GO7bZ/W8m12WxW3gwyK5p5u1WlHg8TSAizC5cZw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-recursion-detection@3.972.6':
+ resolution: {integrity: sha512-dY4v3of5EEMvik6+UDwQ96KfUFDk8m1oZDdkSc5lwi4o7rFrjnv0A+yTV+gu230iybQZnKgDLg/rt2P3H+Vscw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-sdk-s3@3.972.15':
+ resolution: {integrity: sha512-WDLgssevOU5BFx1s8jA7jj6cE5HuImz28sy9jKOaVtz0AW1lYqSzotzdyiybFaBcQTs5zxXOb2pUfyMxgEKY3Q==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-ssec@3.972.6':
+ resolution: {integrity: sha512-acvMUX9jF4I2Ew+Z/EA6gfaFaz9ehci5wxBmXCZeulLuv8m+iGf6pY9uKz8TPjg39bdAz3hxoE0eLP8Qz+IYlA==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/middleware-user-agent@3.972.15':
+ resolution: {integrity: sha512-ABlFVcIMmuRAwBT+8q5abAxOr7WmaINirDJBnqGY5b5jSDo00UMlg/G4a0xoAgwm6oAECeJcwkvDlxDwKf58fQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/nested-clients@3.996.3':
+ resolution: {integrity: sha512-AU5TY1V29xqwg/MxmA2odwysTez+ccFAhmfRJk+QZT5HNv90UTA9qKd1J9THlsQkvmH7HWTEV1lDNxkQO5PzNw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/region-config-resolver@3.972.6':
+ resolution: {integrity: sha512-Aa5PusHLXAqLTX1UKDvI3pHQJtIsF7Q+3turCHqfz/1F61/zDMWfbTC8evjhrrYVAtz9Vsv3SJ/waSUeu7B6gw==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/signature-v4-multi-region@3.996.3':
+ resolution: {integrity: sha512-gQYI/Buwp0CAGQxY7mR5VzkP56rkWq2Y1ROkFuXh5XY94DsSjJw62B3I0N0lysQmtwiL2ht2KHI9NylM/RP4FA==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/token-providers@3.999.0':
+ resolution: {integrity: sha512-cx0hHUlgXULfykx4rdu/ciNAJaa3AL5xz3rieCz7NKJ68MJwlj3664Y8WR5MGgxfyYJBdamnkjNSx5Kekuc0cg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/types@3.973.4':
+ resolution: {integrity: sha512-RW60aH26Bsc016Y9B98hC0Plx6fK5P2v/iQYwMzrSjiDh1qRMUCP6KrXHYEHe3uFvKiOC93Z9zk4BJsUi6Tj1Q==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/util-arn-parser@3.972.2':
+ resolution: {integrity: sha512-VkykWbqMjlSgBFDyrY3nOSqupMc6ivXuGmvci6Q3NnLq5kC+mKQe2QBZ4nrWRE/jqOxeFP2uYzLtwncYYcvQDg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/util-endpoints@3.996.3':
+ resolution: {integrity: sha512-yWIQSNiCjykLL+ezN5A+DfBb1gfXTytBxm57e64lYmwxDHNmInYHRJYYRAGWG1o77vKEiWaw4ui28e3yb1k5aQ==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/util-locate-window@3.965.4':
+ resolution: {integrity: sha512-H1onv5SkgPBK2P6JR2MjGgbOnttoNzSPIRoeZTNPZYyaplwGg50zS3amXvXqF0/qfXpWEC9rLWU564QTB9bSog==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws-sdk/util-user-agent-browser@3.972.6':
+ resolution: {integrity: sha512-Fwr/llD6GOrFgQnKaI2glhohdGuBDfHfora6iG9qsBBBR8xv1SdCSwbtf5CWlUdCw5X7g76G/9Hf0Inh0EmoxA==}
+
+ '@aws-sdk/util-user-agent-node@3.973.0':
+ resolution: {integrity: sha512-A9J2G4Nf236e9GpaC1JnA8wRn6u6GjnOXiTwBLA6NUJhlBTIGfrTy+K1IazmF8y+4OFdW3O5TZlhyspJMqiqjA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ aws-crt: '>=1.0.0'
+ peerDependenciesMeta:
+ aws-crt:
+ optional: true
+
+ '@aws-sdk/xml-builder@3.972.8':
+ resolution: {integrity: sha512-Ql8elcUdYCha83Ol7NznBsgN5GVZnv3vUd86fEc6waU6oUdY0T1O9NODkEEOS/Uaogr87avDrUC6DSeM4oXjZg==}
+ engines: {node: '>=20.0.0'}
+
+ '@aws/lambda-invoke-store@0.2.3':
+ resolution: {integrity: sha512-oLvsaPMTBejkkmHhjf09xTgk71mOqyr/409NKhRIL08If7AhVfUsJhVsx386uJaqNd42v9kWamQ9lFbkoC2dYw==}
+ engines: {node: '>=18.0.0'}
+
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.0':
+ resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1':
+ resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1':
+ resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/runtime@7.28.6':
+ resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@develar/schema-utils@2.6.5':
+ resolution: {integrity: sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==}
+ engines: {node: '>= 8.9.0'}
+
+ '@electron/asar@3.4.1':
+ resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==}
+ engines: {node: '>=10.12.0'}
+ hasBin: true
+
+ '@electron/get@2.0.3':
+ resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==}
+ engines: {node: '>=12'}
+
+ '@electron/notarize@2.2.1':
+ resolution: {integrity: sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==}
+ engines: {node: '>= 10.0.0'}
+
+ '@electron/osx-sign@1.0.5':
+ resolution: {integrity: sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
+ '@electron/universal@1.5.1':
+ resolution: {integrity: sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==}
+ engines: {node: '>=8.6'}
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@hapi/hoek@9.3.0':
+ resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
+
+ '@hapi/topo@5.1.0':
+ resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@malept/cross-spawn-promise@1.1.1':
+ resolution: {integrity: sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==}
+ engines: {node: '>= 10'}
+
+ '@malept/flatpak-bundler@0.4.0':
+ resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==}
+ engines: {node: '>= 10.0.0'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@rolldown/pluginutils@1.0.0-beta.27':
+ resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==}
+
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.59.0':
+ resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.59.0':
+ resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@sideway/address@4.1.5':
+ resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==}
+
+ '@sideway/formula@3.0.1':
+ resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==}
+
+ '@sideway/pinpoint@2.0.0':
+ resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==}
+
+ '@sindresorhus/is@4.6.0':
+ resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==}
+ engines: {node: '>=10'}
+
+ '@smithy/abort-controller@4.2.10':
+ resolution: {integrity: sha512-qocxM/X4XGATqQtUkbE9SPUB6wekBi+FyJOMbPj0AhvyvFGYEmOlz6VB22iMePCQsFmMIvFSeViDvA7mZJG47g==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/chunked-blob-reader-native@4.2.2':
+ resolution: {integrity: sha512-QzzYIlf4yg0w5TQaC9VId3B3ugSk1MI/wb7tgcHtd7CBV9gNRKZrhc2EPSxSZuDy10zUZ0lomNMgkc6/VVe8xg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/chunked-blob-reader@5.2.1':
+ resolution: {integrity: sha512-y5d4xRiD6TzeP5BWlb+Ig/VFqF+t9oANNhGeMqyzU7obw7FYgTgVi50i5JqBTeKp+TABeDIeeXFZdz65RipNtA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/config-resolver@4.4.9':
+ resolution: {integrity: sha512-ejQvXqlcU30h7liR9fXtj7PIAau1t/sFbJpgWPfiYDs7zd16jpH0IsSXKcba2jF6ChTXvIjACs27kNMc5xxE2Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/core@3.23.6':
+ resolution: {integrity: sha512-4xE+0L2NrsFKpEVFlFELkIHQddBvMbQ41LRIP74dGCXnY1zQ9DgksrBcRBDJT+iOzGy4VEJIeU3hkUK5mn06kg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/credential-provider-imds@4.2.10':
+ resolution: {integrity: sha512-3bsMLJJLTZGZqVGGeBVFfLzuRulVsGTj12BzRKODTHqUABpIr0jMN1vN3+u6r2OfyhAQ2pXaMZWX/swBK5I6PQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-codec@4.2.10':
+ resolution: {integrity: sha512-A4ynrsFFfSXUHicfTcRehytppFBcY3HQxEGYiyGktPIOye3Ot7fxpiy4VR42WmtGI4Wfo6OXt/c1Ky1nUFxYYQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-browser@4.2.10':
+ resolution: {integrity: sha512-0xupsu9yj9oDVuQ50YCTS9nuSYhGlrwqdaKQel9y2Fz7LU9fNErVlw9N0o4pm4qqvWEGbSTI4HKc6XJfB30MVw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-config-resolver@4.3.10':
+ resolution: {integrity: sha512-8kn6sinrduk0yaYHMJDsNuiFpXwQwibR7n/4CDUqn4UgaG+SeBHu5jHGFdU9BLFAM7Q4/gvr9RYxBHz9/jKrhA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-node@4.2.10':
+ resolution: {integrity: sha512-uUrxPGgIffnYfvIOUmBM5i+USdEBRTdh7mLPttjphgtooxQ8CtdO1p6K5+Q4BBAZvKlvtJ9jWyrWpBJYzBKsyQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/eventstream-serde-universal@4.2.10':
+ resolution: {integrity: sha512-aArqzOEvcs2dK+xQVCgLbpJQGfZihw8SD4ymhkwNTtwKbnrzdhJsFDKuMQnam2kF69WzgJYOU5eJlCx+CA32bw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/fetch-http-handler@5.3.11':
+ resolution: {integrity: sha512-wbTRjOxdFuyEg0CpumjZO0hkUl+fetJFqxNROepuLIoijQh51aMBmzFLfoQdwRjxsuuS2jizzIUTjPWgd8pd7g==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-blob-browser@4.2.11':
+ resolution: {integrity: sha512-DrcAx3PM6AEbWZxsKl6CWAGnVwiz28Wp1ZhNu+Hi4uI/6C1PIZBIaPM2VoqBDAsOWbM6ZVzOEQMxFLLdmb4eBQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-node@4.2.10':
+ resolution: {integrity: sha512-1VzIOI5CcsvMDvP3iv1vG/RfLJVVVc67dCRyLSB2Hn9SWCZrDO3zvcIzj3BfEtqRW5kcMg5KAeVf1K3dR6nD3w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/hash-stream-node@4.2.10':
+ resolution: {integrity: sha512-w78xsYrOlwXKwN5tv1GnKIRbHb1HygSpeZMP6xDxCPGf1U/xDHjCpJu64c5T35UKyEPwa0bPeIcvU69VY3khUA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/invalid-dependency@4.2.10':
+ resolution: {integrity: sha512-vy9KPNSFUU0ajFYk0sDZIYiUlAWGEAhRfehIr5ZkdFrRFTAuXEPUd41USuqHU6vvLX4r6Q9X7MKBco5+Il0Org==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/is-array-buffer@2.2.0':
+ resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/is-array-buffer@4.2.1':
+ resolution: {integrity: sha512-Yfu664Qbf1B4IYIsYgKoABt010daZjkaCRvdU/sPnZG6TtHOB0md0RjNdLGzxe5UIdn9js4ftPICzmkRa9RJ4Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/md5-js@4.2.10':
+ resolution: {integrity: sha512-Op+Dh6dPLWTjWITChFayDllIaCXRofOed8ecpggTC5fkh8yXes0vAEX7gRUfjGK+TlyxoCAA05gHbZW/zB9JwQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-content-length@4.2.10':
+ resolution: {integrity: sha512-TQZ9kX5c6XbjhaEBpvhSvMEZ0klBs1CFtOdPFwATZSbC9UeQfKHPLPN9Y+I6wZGMOavlYTOlHEPDrt42PMSH9w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-endpoint@4.4.20':
+ resolution: {integrity: sha512-9W6Np4ceBP3XCYAGLoMCmn8t2RRVzuD1ndWPLBbv7H9CrwM9Bprf6Up6BM9ZA/3alodg0b7Kf6ftBK9R1N04vw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-retry@4.4.37':
+ resolution: {integrity: sha512-/1psZZllBBSQ7+qo5+hhLz7AEPGLx3Z0+e3ramMBEuPK2PfvLK4SrncDB9VegX5mBn+oP/UTDrM6IHrFjvX1ZA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-serde@4.2.11':
+ resolution: {integrity: sha512-STQdONGPwbbC7cusL60s7vOa6He6A9w2jWhoapL0mgVjmR19pr26slV+yoSP76SIssMTX/95e5nOZ6UQv6jolg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/middleware-stack@4.2.10':
+ resolution: {integrity: sha512-pmts/WovNcE/tlyHa8z/groPeOtqtEpp61q3W0nW1nDJuMq/x+hWa/OVQBtgU0tBqupeXq0VBOLA4UZwE8I0YA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-config-provider@4.3.10':
+ resolution: {integrity: sha512-UALRbJtVX34AdP2VECKVlnNgidLHA2A7YgcJzwSBg1hzmnO/bZBHl/LDQQyYifzUwp1UOODnl9JJ3KNawpUJ9w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/node-http-handler@4.4.12':
+ resolution: {integrity: sha512-zo1+WKJkR9x7ZtMeMDAAsq2PufwiLDmkhcjpWPRRkmeIuOm6nq1qjFICSZbnjBvD09ei8KMo26BWxsu2BUU+5w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/property-provider@4.2.10':
+ resolution: {integrity: sha512-5jm60P0CU7tom0eNrZ7YrkgBaoLFXzmqB0wVS+4uK8PPGmosSrLNf6rRd50UBvukztawZ7zyA8TxlrKpF5z9jw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/protocol-http@5.3.10':
+ resolution: {integrity: sha512-2NzVWpYY0tRdfeCJLsgrR89KE3NTWT2wGulhNUxYlRmtRmPwLQwKzhrfVaiNlA9ZpJvbW7cjTVChYKgnkqXj1A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-builder@4.2.10':
+ resolution: {integrity: sha512-HeN7kEvuzO2DmAzLukE9UryiUvejD3tMp9a1D1NJETerIfKobBUCLfviP6QEk500166eD2IATaXM59qgUI+YDA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/querystring-parser@4.2.10':
+ resolution: {integrity: sha512-4Mh18J26+ao1oX5wXJfWlTT+Q1OpDR8ssiC9PDOuEgVBGloqg18Fw7h5Ct8DyT9NBYwJgtJ2nLjKKFU6RP1G1Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/service-error-classification@4.2.10':
+ resolution: {integrity: sha512-0R/+/Il5y8nB/By90o8hy/bWVYptbIfvoTYad0igYQO5RefhNCDmNzqxaMx7K1t/QWo0d6UynqpqN5cCQt1MCg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/shared-ini-file-loader@4.4.5':
+ resolution: {integrity: sha512-pHgASxl50rrtOztgQCPmOXFjRW+mCd7ALr/3uXNzRrRoGV5G2+78GOsQ3HlQuBVHCh9o6xqMNvlIKZjWn4Euug==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/signature-v4@5.3.10':
+ resolution: {integrity: sha512-Wab3wW8468WqTKIxI+aZe3JYO52/RYT/8sDOdzkUhjnLakLe9qoQqIcfih/qxcF4qWEFoWBszY0mj5uxffaVXA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/smithy-client@4.12.0':
+ resolution: {integrity: sha512-R8bQ9K3lCcXyZmBnQqUZJF4ChZmtWT5NLi6x5kgWx5D+/j0KorXcA0YcFg/X5TOgnTCy1tbKc6z2g2y4amFupQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/types@4.13.0':
+ resolution: {integrity: sha512-COuLsZILbbQsdrwKQpkkpyep7lCsByxwj7m0Mg5v66/ZTyenlfBc40/QFQ5chO0YN/PNEH1Bi3fGtfXPnYNeDw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/url-parser@4.2.10':
+ resolution: {integrity: sha512-uypjF7fCDsRk26u3qHmFI/ePL7bxxB9vKkE+2WKEciHhz+4QtbzWiHRVNRJwU3cKhrYDYQE3b0MRFtqfLYdA4A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-base64@4.3.1':
+ resolution: {integrity: sha512-BKGuawX4Doq/bI/uEmg+Zyc36rJKWuin3py89PquXBIBqmbnJwBBsmKhdHfNEp0+A4TDgLmT/3MSKZ1SxHcR6w==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-browser@4.2.1':
+ resolution: {integrity: sha512-SiJeLiozrAoCrgDBUgsVbmqHmMgg/2bA15AzcbcW+zan7SuyAVHN4xTSbq0GlebAIwlcaX32xacnrG488/J/6g==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-body-length-node@4.2.2':
+ resolution: {integrity: sha512-4rHqBvxtJEBvsZcFQSPQqXP2b/yy/YlB66KlcEgcH2WNoOKCKB03DSLzXmOsXjbl8dJ4OEYTn31knhdznwk7zw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-buffer-from@2.2.0':
+ resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-buffer-from@4.2.1':
+ resolution: {integrity: sha512-/swhmt1qTiVkaejlmMPPDgZhEaWb/HWMGRBheaxwuVkusp/z+ErJyQxO6kaXumOciZSWlmq6Z5mNylCd33X7Ig==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-config-provider@4.2.1':
+ resolution: {integrity: sha512-462id/00U8JWFw6qBuTSWfN5TxOHvDu4WliI97qOIOnuC/g+NDAknTU8eoGXEPlLkRVgWEr03jJBLV4o2FL8+A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-browser@4.3.36':
+ resolution: {integrity: sha512-R0smq7EHQXRVMxkAxtH5akJ/FvgAmNF6bUy/GwY/N20T4GrwjT633NFm0VuRpC+8Bbv8R9A0DoJ9OiZL/M3xew==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-defaults-mode-node@4.2.39':
+ resolution: {integrity: sha512-otWuoDm35btJV1L8MyHrPl462B07QCdMTktKc7/yM+Psv6KbED/ziXiHnmr7yPHUjfIwE9S8Max0LO24Mo3ZVg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-endpoints@3.3.1':
+ resolution: {integrity: sha512-xyctc4klmjmieQiF9I1wssBWleRV0RhJ2DpO8+8yzi2LO1Z+4IWOZNGZGNj4+hq9kdo+nyfrRLmQTzc16Op2Vg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-hex-encoding@4.2.1':
+ resolution: {integrity: sha512-c1hHtkgAWmE35/50gmdKajgGAKV3ePJ7t6UtEmpfCWJmQE9BQAQPz0URUVI89eSkcDqCtzqllxzG28IQoZPvwA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-middleware@4.2.10':
+ resolution: {integrity: sha512-LxaQIWLp4y0r72eA8mwPNQ9va4h5KeLM0I3M/HV9klmFaY2kN766wf5vsTzmaOpNNb7GgXAd9a25P3h8T49PSA==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-retry@4.2.10':
+ resolution: {integrity: sha512-HrBzistfpyE5uqTwiyLsFHscgnwB0kgv8vySp7q5kZ0Eltn/tjosaSGGDj/jJ9ys7pWzIP/icE2d+7vMKXLv7A==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-stream@4.5.15':
+ resolution: {integrity: sha512-OlOKnaqnkU9X+6wEkd7mN+WB7orPbCVDauXOj22Q7VtiTkvy7ZdSsOg4QiNAZMgI4OkvNf+/VLUC3VXkxuWJZw==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-uri-escape@4.2.1':
+ resolution: {integrity: sha512-YmiUDn2eo2IOiWYYvGQkgX5ZkBSiTQu4FlDo5jNPpAxng2t6Sjb6WutnZV9l6VR4eJul1ABmCrnWBC9hKHQa6Q==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-utf8@2.3.0':
+ resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
+ engines: {node: '>=14.0.0'}
+
+ '@smithy/util-utf8@4.2.1':
+ resolution: {integrity: sha512-DSIwNaWtmzrNQHv8g7DBGR9mulSit65KSj5ymGEIAknmIN8IpbZefEep10LaMG/P/xquwbmJ1h9ectz8z6mV6g==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/util-waiter@4.2.10':
+ resolution: {integrity: sha512-4eTWph/Lkg1wZEDAyObwme0kmhEb7J/JjibY2znJdrYRgKbKqB7YoEhhJVJ4R1g/SYih4zuwX7LpJaM8RsnTVg==}
+ engines: {node: '>=18.0.0'}
+
+ '@smithy/uuid@1.1.1':
+ resolution: {integrity: sha512-dSfDCeihDmZlV2oyr0yWPTUfh07suS+R5OB+FZGiv/hHyK3hrFBW5rR1UYjfa57vBsrP9lciFkRPzebaV1Qujw==}
+ engines: {node: '>=18.0.0'}
+
+ '@szmarczak/http-timer@4.0.6':
+ resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
+ engines: {node: '>=10'}
+
+ '@tootallnate/once@2.0.0':
+ resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
+ engines: {node: '>= 10'}
+
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/cacheable-request@6.0.3':
+ resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==}
+
+ '@types/debug@4.1.12':
+ resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/fs-extra@9.0.13':
+ resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
+
+ '@types/http-cache-semantics@4.2.0':
+ resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==}
+
+ '@types/keyv@3.1.4':
+ resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
+
+ '@types/ms@2.1.0':
+ resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+
+ '@types/node@18.19.130':
+ resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==}
+
+ '@types/plist@3.0.5':
+ resolution: {integrity: sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==}
+
+ '@types/responselike@1.0.3':
+ resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
+
+ '@types/verror@1.10.11':
+ resolution: {integrity: sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==}
+
+ '@types/yauzl@2.10.3':
+ resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
+
+ '@vitejs/plugin-react@4.7.0':
+ resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
+
+ '@xmldom/xmldom@0.8.11':
+ resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==}
+ engines: {node: '>=10.0.0'}
+
+ agent-base@6.0.2:
+ resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+ engines: {node: '>= 6.0.0'}
+
+ ajv-keywords@3.5.2:
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+
+ ajv@6.14.0:
+ resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
+ app-builder-bin@4.0.0:
+ resolution: {integrity: sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==}
+
+ app-builder-lib@24.13.3:
+ resolution: {integrity: sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ dmg-builder: 24.13.3
+ electron-builder-squirrel-windows: 24.13.3
+
+ archiver-utils@2.1.0:
+ resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==}
+ engines: {node: '>= 6'}
+
+ archiver-utils@3.0.4:
+ resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==}
+ engines: {node: '>= 10'}
+
+ archiver@5.3.2:
+ resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==}
+ engines: {node: '>= 10'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ assert-plus@1.0.0:
+ resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==}
+ engines: {node: '>=0.8'}
+
+ astral-regex@2.0.0:
+ resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
+ engines: {node: '>=8'}
+
+ async-exit-hook@2.0.1:
+ resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==}
+ engines: {node: '>=0.12.0'}
+
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ at-least-node@1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+
+ axios@1.13.6:
+ resolution: {integrity: sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ baseline-browser-mapping@2.10.0:
+ resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+ bluebird-lst@1.0.9:
+ resolution: {integrity: sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==}
+
+ bluebird@3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+
+ boolean@3.2.0:
+ resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
+ deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+ bowser@2.14.1:
+ resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==}
+
+ brace-expansion@1.1.12:
+ resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
+ buffer-equal@1.0.1:
+ resolution: {integrity: sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==}
+ engines: {node: '>=0.4'}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+ builder-util-runtime@9.2.4:
+ resolution: {integrity: sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==}
+ engines: {node: '>=12.0.0'}
+
+ builder-util@24.13.1:
+ resolution: {integrity: sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==}
+
+ cacheable-lookup@5.0.4:
+ resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==}
+ engines: {node: '>=10.6.0'}
+
+ cacheable-request@7.0.4:
+ resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==}
+ engines: {node: '>=8'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ caniuse-lite@1.0.30001775:
+ resolution: {integrity: sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ chownr@2.0.0:
+ resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+ engines: {node: '>=10'}
+
+ chromium-pickle-js@0.2.0:
+ resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==}
+
+ ci-info@3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+
+ cli-truncate@2.1.0:
+ resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
+ engines: {node: '>=8'}
+
+ cliui@8.0.1:
+ resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+ engines: {node: '>=12'}
+
+ clone-response@1.0.3:
+ resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@5.1.0:
+ resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
+ engines: {node: '>= 6'}
+
+ compare-version@0.1.2:
+ resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==}
+ engines: {node: '>=0.10.0'}
+
+ compress-commons@4.1.2:
+ resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==}
+ engines: {node: '>= 10'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ concurrently@8.2.2:
+ resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==}
+ engines: {node: ^14.13.0 || >=16.0.0}
+ hasBin: true
+
+ config-file-ts@0.2.6:
+ resolution: {integrity: sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ core-util-is@1.0.2:
+ resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+
+ crc32-stream@4.0.3:
+ resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==}
+ engines: {node: '>= 10'}
+
+ crc@3.8.0:
+ resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==}
+
+ cross-env@7.0.3:
+ resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==}
+ engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
+ hasBin: true
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ date-fns@2.30.0:
+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+ engines: {node: '>=0.11'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ defer-to-connect@2.0.1:
+ resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
+ engines: {node: '>=10'}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ detect-node@2.1.0:
+ resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
+
+ dir-compare@3.3.0:
+ resolution: {integrity: sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==}
+
+ dmg-builder@24.13.3:
+ resolution: {integrity: sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==}
+
+ dmg-license@1.0.11:
+ resolution: {integrity: sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==}
+ engines: {node: '>=8'}
+ os: [darwin]
+ hasBin: true
+
+ dotenv-expand@5.1.0:
+ resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
+
+ dotenv@9.0.2:
+ resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
+ engines: {node: '>=10'}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ ejs@3.1.10:
+ resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+ engines: {node: '>=0.10.0'}
+ hasBin: true
+
+ electron-builder-squirrel-windows@24.13.3:
+ resolution: {integrity: sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==}
+
+ electron-builder@24.13.3:
+ resolution: {integrity: sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ electron-publish@24.13.1:
+ resolution: {integrity: sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==}
+
+ electron-to-chromium@1.5.302:
+ resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==}
+
+ electron@28.3.3:
+ resolution: {integrity: sha512-ObKMLSPNhomtCOBAxFS8P2DW/4umkh72ouZUlUKzXGtYuPzgr1SYhskhFWgzAsPtUzhL2CzyV2sfbHcEW4CXqw==}
+ engines: {node: '>= 12.20.55'}
+ hasBin: true
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
+ env-paths@2.2.1:
+ resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+ engines: {node: '>=6'}
+
+ err-code@2.0.3:
+ resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es6-error@4.1.1:
+ resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ extract-zip@2.0.1:
+ resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==}
+ engines: {node: '>= 10.17.0'}
+ hasBin: true
+
+ extsprintf@1.4.1:
+ resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==}
+ engines: {'0': node >=0.6.0}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-xml-parser@5.3.6:
+ resolution: {integrity: sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA==}
+ hasBin: true
+
+ fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+
+ filelist@1.0.6:
+ resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+
+ fs-extra@8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+
+ fs-extra@9.1.0:
+ resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+ engines: {node: '>=10'}
+
+ fs-minipass@2.1.0:
+ resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+ engines: {node: '>= 8'}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-stream@5.2.0:
+ resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
+ engines: {node: '>=8'}
+
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+ hasBin: true
+
+ glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+
+ global-agent@3.0.0:
+ resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
+ engines: {node: '>=10.0'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ got@11.8.6:
+ resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==}
+ engines: {node: '>=10.19.0'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hosted-git-info@4.1.0:
+ resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+ engines: {node: '>=10'}
+
+ http-cache-semantics@4.2.0:
+ resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==}
+
+ http-proxy-agent@5.0.0:
+ resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
+ engines: {node: '>= 6'}
+
+ http2-wrapper@1.0.3:
+ resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==}
+ engines: {node: '>=10.19.0'}
+
+ https-proxy-agent@5.0.1:
+ resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+ engines: {node: '>= 6'}
+
+ iconv-corefoundation@1.1.7:
+ resolution: {integrity: sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==}
+ engines: {node: ^8.11.2 || >=10}
+ os: [darwin]
+
+ iconv-lite@0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ inflight@1.0.6:
+ resolution: {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.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-ci@3.0.1:
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ hasBin: true
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isbinaryfile@4.0.10:
+ resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==}
+ engines: {node: '>= 8.0.0'}
+
+ isbinaryfile@5.0.7:
+ resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==}
+ engines: {node: '>= 18.0.0'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jake@10.9.4:
+ resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ joi@17.13.3:
+ resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==}
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stringify-safe@5.0.1:
+ resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+
+ jsonfile@6.2.0:
+ resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ lazy-val@1.0.5:
+ resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==}
+
+ lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+
+ lodash.defaults@4.2.0:
+ resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
+
+ lodash.difference@4.5.0:
+ resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
+
+ lodash.flatten@4.4.0:
+ resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
+
+ lodash.isplainobject@4.0.6:
+ resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+ lodash.union@4.6.0:
+ resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
+
+ lodash@4.17.23:
+ resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==}
+
+ loose-envify@1.4.0:
+ resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+ hasBin: true
+
+ lowercase-keys@2.0.0:
+ resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==}
+ engines: {node: '>=8'}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+
+ matcher@3.0.0:
+ resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
+ engines: {node: '>=10'}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ mime@2.6.0:
+ resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+ engines: {node: '>=4.0.0'}
+ hasBin: true
+
+ mimic-response@1.0.1:
+ resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==}
+ engines: {node: '>=4'}
+
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
+ minimatch@3.1.5:
+ resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+
+ minimatch@5.1.9:
+ resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.9:
+ resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+ minipass@3.3.6:
+ resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+ engines: {node: '>=8'}
+
+ minipass@5.0.0:
+ resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+ engines: {node: '>=8'}
+
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@2.1.2:
+ resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+ engines: {node: '>= 8'}
+
+ mkdirp@1.0.4:
+ resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-addon-api@1.7.2:
+ resolution: {integrity: sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==}
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-url@6.1.0:
+ resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==}
+ engines: {node: '>=10'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ p-cancelable@2.1.1:
+ resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==}
+ engines: {node: '>=8'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ plist@3.1.0:
+ resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==}
+ engines: {node: '>=10.4.0'}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ progress@2.0.3:
+ resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+ engines: {node: '>=0.4.0'}
+
+ promise-retry@2.0.1:
+ resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+ engines: {node: '>=10'}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ pump@3.0.4:
+ resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ quick-lru@5.1.1:
+ resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
+ engines: {node: '>=10'}
+
+ react-dom@18.3.1:
+ resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ peerDependencies:
+ react: ^18.3.1
+
+ react-refresh@0.17.0:
+ resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==}
+ engines: {node: '>=0.10.0'}
+
+ react@18.3.1:
+ resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+ engines: {node: '>=0.10.0'}
+
+ read-config-file@6.3.2:
+ resolution: {integrity: sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==}
+ engines: {node: '>=12.0.0'}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
+ readdir-glob@1.1.3:
+ resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
+
+ require-directory@2.1.1:
+ resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+ engines: {node: '>=0.10.0'}
+
+ resolve-alpn@1.2.1:
+ resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
+
+ responselike@2.0.1:
+ resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==}
+
+ retry@0.12.0:
+ resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+ engines: {node: '>= 4'}
+
+ rimraf@5.0.10:
+ resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==}
+ hasBin: true
+
+ roarr@2.15.4:
+ resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
+ engines: {node: '>=8.0'}
+
+ rollup@4.59.0:
+ resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ safer-buffer@2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+ sanitize-filename@1.6.3:
+ resolution: {integrity: sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==}
+
+ sax@1.5.0:
+ resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==}
+ engines: {node: '>=11.0.0'}
+
+ scheduler@0.23.2:
+ resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+ semver-compare@1.0.0:
+ resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ serialize-error@7.0.1:
+ resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
+ engines: {node: '>=10'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ simple-update-notifier@2.0.0:
+ resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==}
+ engines: {node: '>=10'}
+
+ slice-ansi@3.0.0:
+ resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==}
+ engines: {node: '>=8'}
+
+ smart-buffer@4.2.0:
+ resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+ engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ spawn-command@0.0.2:
+ resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==}
+
+ sprintf-js@1.1.3:
+ resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+
+ stat-mode@1.0.0:
+ resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==}
+ engines: {node: '>= 6'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.2.0:
+ resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
+ engines: {node: '>=12'}
+
+ strnum@2.2.0:
+ resolution: {integrity: sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==}
+
+ sumchecker@3.0.1:
+ resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==}
+ engines: {node: '>= 8.0'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
+ tar@6.2.1:
+ resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+ engines: {node: '>=10'}
+ deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+
+ temp-file@3.4.0:
+ resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==}
+
+ tmp-promise@3.0.3:
+ resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==}
+
+ tmp@0.2.5:
+ resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
+ engines: {node: '>=14.14'}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ truncate-utf8-bytes@1.0.2:
+ resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-fest@0.13.1:
+ resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
+ engines: {node: '>=10'}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+
+ universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+
+ universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ utf8-byte-length@1.0.5:
+ resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ verror@1.10.1:
+ resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==}
+ engines: {node: '>=0.6.0'}
+
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ wait-on@7.2.0:
+ resolution: {integrity: sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==}
+ engines: {node: '>=12.0.0'}
+ hasBin: true
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ xmlbuilder@15.1.1:
+ resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==}
+ engines: {node: '>=8.0'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+ yargs-parser@21.1.1:
+ resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+ engines: {node: '>=12'}
+
+ yargs@17.7.2:
+ resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+ engines: {node: '>=12'}
+
+ yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
+ zip-stream@4.1.1:
+ resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==}
+ engines: {node: '>= 10'}
+
+snapshots:
+
+ 7zip-bin@5.2.0: {}
+
+ '@aws-crypto/crc32@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.973.4
+ tslib: 2.8.1
+
+ '@aws-crypto/crc32c@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.973.4
+ tslib: 2.8.1
+
+ '@aws-crypto/sha1-browser@5.2.0':
+ dependencies:
+ '@aws-crypto/supports-web-crypto': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-locate-window': 3.965.4
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha256-browser@5.2.0':
+ dependencies:
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-crypto/supports-web-crypto': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-locate-window': 3.965.4
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-crypto/sha256-js@5.2.0':
+ dependencies:
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/types': 3.973.4
+ tslib: 2.8.1
+
+ '@aws-crypto/supports-web-crypto@5.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-crypto/util@5.2.0':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/util-utf8': 2.3.0
+ tslib: 2.8.1
+
+ '@aws-sdk/client-s3@3.1000.0':
+ dependencies:
+ '@aws-crypto/sha1-browser': 5.2.0
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/credential-provider-node': 3.972.14
+ '@aws-sdk/middleware-bucket-endpoint': 3.972.6
+ '@aws-sdk/middleware-expect-continue': 3.972.6
+ '@aws-sdk/middleware-flexible-checksums': 3.973.1
+ '@aws-sdk/middleware-host-header': 3.972.6
+ '@aws-sdk/middleware-location-constraint': 3.972.6
+ '@aws-sdk/middleware-logger': 3.972.6
+ '@aws-sdk/middleware-recursion-detection': 3.972.6
+ '@aws-sdk/middleware-sdk-s3': 3.972.15
+ '@aws-sdk/middleware-ssec': 3.972.6
+ '@aws-sdk/middleware-user-agent': 3.972.15
+ '@aws-sdk/region-config-resolver': 3.972.6
+ '@aws-sdk/signature-v4-multi-region': 3.996.3
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-endpoints': 3.996.3
+ '@aws-sdk/util-user-agent-browser': 3.972.6
+ '@aws-sdk/util-user-agent-node': 3.973.0
+ '@smithy/config-resolver': 4.4.9
+ '@smithy/core': 3.23.6
+ '@smithy/eventstream-serde-browser': 4.2.10
+ '@smithy/eventstream-serde-config-resolver': 4.3.10
+ '@smithy/eventstream-serde-node': 4.2.10
+ '@smithy/fetch-http-handler': 5.3.11
+ '@smithy/hash-blob-browser': 4.2.11
+ '@smithy/hash-node': 4.2.10
+ '@smithy/hash-stream-node': 4.2.10
+ '@smithy/invalid-dependency': 4.2.10
+ '@smithy/md5-js': 4.2.10
+ '@smithy/middleware-content-length': 4.2.10
+ '@smithy/middleware-endpoint': 4.4.20
+ '@smithy/middleware-retry': 4.4.37
+ '@smithy/middleware-serde': 4.2.11
+ '@smithy/middleware-stack': 4.2.10
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/node-http-handler': 4.4.12
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ '@smithy/url-parser': 4.2.10
+ '@smithy/util-base64': 4.3.1
+ '@smithy/util-body-length-browser': 4.2.1
+ '@smithy/util-body-length-node': 4.2.2
+ '@smithy/util-defaults-mode-browser': 4.3.36
+ '@smithy/util-defaults-mode-node': 4.2.39
+ '@smithy/util-endpoints': 3.3.1
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-retry': 4.2.10
+ '@smithy/util-stream': 4.5.15
+ '@smithy/util-utf8': 4.2.1
+ '@smithy/util-waiter': 4.2.10
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/core@3.973.15':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/xml-builder': 3.972.8
+ '@smithy/core': 3.23.6
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/property-provider': 4.2.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/signature-v4': 5.3.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ '@smithy/util-base64': 4.3.1
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@aws-sdk/crc64-nvme@3.972.3':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-env@3.972.13':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/types': 3.973.4
+ '@smithy/property-provider': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-http@3.972.15':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/types': 3.973.4
+ '@smithy/fetch-http-handler': 5.3.11
+ '@smithy/node-http-handler': 4.4.12
+ '@smithy/property-provider': 4.2.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ '@smithy/util-stream': 4.5.15
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-ini@3.972.13':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/credential-provider-env': 3.972.13
+ '@aws-sdk/credential-provider-http': 3.972.15
+ '@aws-sdk/credential-provider-login': 3.972.13
+ '@aws-sdk/credential-provider-process': 3.972.13
+ '@aws-sdk/credential-provider-sso': 3.972.13
+ '@aws-sdk/credential-provider-web-identity': 3.972.13
+ '@aws-sdk/nested-clients': 3.996.3
+ '@aws-sdk/types': 3.973.4
+ '@smithy/credential-provider-imds': 4.2.10
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-login@3.972.13':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/nested-clients': 3.996.3
+ '@aws-sdk/types': 3.973.4
+ '@smithy/property-provider': 4.2.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-node@3.972.14':
+ dependencies:
+ '@aws-sdk/credential-provider-env': 3.972.13
+ '@aws-sdk/credential-provider-http': 3.972.15
+ '@aws-sdk/credential-provider-ini': 3.972.13
+ '@aws-sdk/credential-provider-process': 3.972.13
+ '@aws-sdk/credential-provider-sso': 3.972.13
+ '@aws-sdk/credential-provider-web-identity': 3.972.13
+ '@aws-sdk/types': 3.973.4
+ '@smithy/credential-provider-imds': 4.2.10
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-process@3.972.13':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/types': 3.973.4
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/credential-provider-sso@3.972.13':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/nested-clients': 3.996.3
+ '@aws-sdk/token-providers': 3.999.0
+ '@aws-sdk/types': 3.973.4
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/credential-provider-web-identity@3.972.13':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/nested-clients': 3.996.3
+ '@aws-sdk/types': 3.973.4
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/middleware-bucket-endpoint@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-arn-parser': 3.972.2
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-config-provider': 4.2.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-expect-continue@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-flexible-checksums@3.973.1':
+ dependencies:
+ '@aws-crypto/crc32': 5.2.0
+ '@aws-crypto/crc32c': 5.2.0
+ '@aws-crypto/util': 5.2.0
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/crc64-nvme': 3.972.3
+ '@aws-sdk/types': 3.973.4
+ '@smithy/is-array-buffer': 4.2.1
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-stream': 4.5.15
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-host-header@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-location-constraint@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-logger@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-recursion-detection@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@aws/lambda-invoke-store': 0.2.3
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-sdk-s3@3.972.15':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-arn-parser': 3.972.2
+ '@smithy/core': 3.23.6
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/signature-v4': 5.3.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ '@smithy/util-config-provider': 4.2.1
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-stream': 4.5.15
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-ssec@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/middleware-user-agent@3.972.15':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-endpoints': 3.996.3
+ '@smithy/core': 3.23.6
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/nested-clients@3.996.3':
+ dependencies:
+ '@aws-crypto/sha256-browser': 5.2.0
+ '@aws-crypto/sha256-js': 5.2.0
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/middleware-host-header': 3.972.6
+ '@aws-sdk/middleware-logger': 3.972.6
+ '@aws-sdk/middleware-recursion-detection': 3.972.6
+ '@aws-sdk/middleware-user-agent': 3.972.15
+ '@aws-sdk/region-config-resolver': 3.972.6
+ '@aws-sdk/types': 3.973.4
+ '@aws-sdk/util-endpoints': 3.996.3
+ '@aws-sdk/util-user-agent-browser': 3.972.6
+ '@aws-sdk/util-user-agent-node': 3.973.0
+ '@smithy/config-resolver': 4.4.9
+ '@smithy/core': 3.23.6
+ '@smithy/fetch-http-handler': 5.3.11
+ '@smithy/hash-node': 4.2.10
+ '@smithy/invalid-dependency': 4.2.10
+ '@smithy/middleware-content-length': 4.2.10
+ '@smithy/middleware-endpoint': 4.4.20
+ '@smithy/middleware-retry': 4.4.37
+ '@smithy/middleware-serde': 4.2.11
+ '@smithy/middleware-stack': 4.2.10
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/node-http-handler': 4.4.12
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ '@smithy/url-parser': 4.2.10
+ '@smithy/util-base64': 4.3.1
+ '@smithy/util-body-length-browser': 4.2.1
+ '@smithy/util-body-length-node': 4.2.2
+ '@smithy/util-defaults-mode-browser': 4.3.36
+ '@smithy/util-defaults-mode-node': 4.2.39
+ '@smithy/util-endpoints': 3.3.1
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-retry': 4.2.10
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/region-config-resolver@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/config-resolver': 4.4.9
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/signature-v4-multi-region@3.996.3':
+ dependencies:
+ '@aws-sdk/middleware-sdk-s3': 3.972.15
+ '@aws-sdk/types': 3.973.4
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/signature-v4': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/token-providers@3.999.0':
+ dependencies:
+ '@aws-sdk/core': 3.973.15
+ '@aws-sdk/nested-clients': 3.996.3
+ '@aws-sdk/types': 3.973.4
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - aws-crt
+
+ '@aws-sdk/types@3.973.4':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/util-arn-parser@3.972.2':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-endpoints@3.996.3':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/types': 4.13.0
+ '@smithy/url-parser': 4.2.10
+ '@smithy/util-endpoints': 3.3.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-locate-window@3.965.4':
+ dependencies:
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-browser@3.972.6':
+ dependencies:
+ '@aws-sdk/types': 3.973.4
+ '@smithy/types': 4.13.0
+ bowser: 2.14.1
+ tslib: 2.8.1
+
+ '@aws-sdk/util-user-agent-node@3.973.0':
+ dependencies:
+ '@aws-sdk/middleware-user-agent': 3.972.15
+ '@aws-sdk/types': 3.973.4
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@aws-sdk/xml-builder@3.972.8':
+ dependencies:
+ '@smithy/types': 4.13.0
+ fast-xml-parser: 5.3.6
+ tslib: 2.8.1
+
+ '@aws/lambda-invoke-store@0.2.3': {}
+
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/runtime@7.28.6': {}
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+
+ '@babel/traverse@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.29.0
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@develar/schema-utils@2.6.5':
+ dependencies:
+ ajv: 6.14.0
+ ajv-keywords: 3.5.2(ajv@6.14.0)
+
+ '@electron/asar@3.4.1':
+ dependencies:
+ commander: 5.1.0
+ glob: 7.2.3
+ minimatch: 3.1.5
+
+ '@electron/get@2.0.3':
+ dependencies:
+ debug: 4.4.3
+ env-paths: 2.2.1
+ fs-extra: 8.1.0
+ got: 11.8.6
+ progress: 2.0.3
+ semver: 6.3.1
+ sumchecker: 3.0.1
+ optionalDependencies:
+ global-agent: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/notarize@2.2.1':
+ dependencies:
+ debug: 4.4.3
+ fs-extra: 9.1.0
+ promise-retry: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/osx-sign@1.0.5':
+ dependencies:
+ compare-version: 0.1.2
+ debug: 4.4.3
+ fs-extra: 10.1.0
+ isbinaryfile: 4.0.10
+ minimist: 1.2.8
+ plist: 3.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@electron/universal@1.5.1':
+ dependencies:
+ '@electron/asar': 3.4.1
+ '@malept/cross-spawn-promise': 1.1.1
+ debug: 4.4.3
+ dir-compare: 3.3.0
+ fs-extra: 9.1.0
+ minimatch: 3.1.5
+ plist: 3.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@hapi/hoek@9.3.0': {}
+
+ '@hapi/topo@5.1.0':
+ dependencies:
+ '@hapi/hoek': 9.3.0
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.2.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@malept/cross-spawn-promise@1.1.1':
+ dependencies:
+ cross-spawn: 7.0.6
+
+ '@malept/flatpak-bundler@0.4.0':
+ dependencies:
+ debug: 4.4.3
+ fs-extra: 9.1.0
+ lodash: 4.17.23
+ tmp-promise: 3.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-beta.27': {}
+
+ '@rollup/rollup-android-arm-eabi@4.59.0':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.59.0':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.59.0':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.59.0':
+ optional: true
+
+ '@sideway/address@4.1.5':
+ dependencies:
+ '@hapi/hoek': 9.3.0
+
+ '@sideway/formula@3.0.1': {}
+
+ '@sideway/pinpoint@2.0.0': {}
+
+ '@sindresorhus/is@4.6.0': {}
+
+ '@smithy/abort-controller@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/chunked-blob-reader-native@4.2.2':
+ dependencies:
+ '@smithy/util-base64': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/chunked-blob-reader@5.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/config-resolver@4.4.9':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-config-provider': 4.2.1
+ '@smithy/util-endpoints': 3.3.1
+ '@smithy/util-middleware': 4.2.10
+ tslib: 2.8.1
+
+ '@smithy/core@3.23.6':
+ dependencies:
+ '@smithy/middleware-serde': 4.2.11
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-base64': 4.3.1
+ '@smithy/util-body-length-browser': 4.2.1
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-stream': 4.5.15
+ '@smithy/util-utf8': 4.2.1
+ '@smithy/uuid': 1.1.1
+ tslib: 2.8.1
+
+ '@smithy/credential-provider-imds@4.2.10':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/property-provider': 4.2.10
+ '@smithy/types': 4.13.0
+ '@smithy/url-parser': 4.2.10
+ tslib: 2.8.1
+
+ '@smithy/eventstream-codec@4.2.10':
+ dependencies:
+ '@aws-crypto/crc32': 5.2.0
+ '@smithy/types': 4.13.0
+ '@smithy/util-hex-encoding': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-browser@4.2.10':
+ dependencies:
+ '@smithy/eventstream-serde-universal': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-config-resolver@4.3.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-node@4.2.10':
+ dependencies:
+ '@smithy/eventstream-serde-universal': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/eventstream-serde-universal@4.2.10':
+ dependencies:
+ '@smithy/eventstream-codec': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/fetch-http-handler@5.3.11':
+ dependencies:
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/querystring-builder': 4.2.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-base64': 4.3.1
+ tslib: 2.8.1
+
+ '@smithy/hash-blob-browser@4.2.11':
+ dependencies:
+ '@smithy/chunked-blob-reader': 5.2.1
+ '@smithy/chunked-blob-reader-native': 4.2.2
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/hash-node@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ '@smithy/util-buffer-from': 4.2.1
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/hash-stream-node@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/invalid-dependency@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@2.2.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/is-array-buffer@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/md5-js@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/middleware-content-length@4.2.10':
+ dependencies:
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-endpoint@4.4.20':
+ dependencies:
+ '@smithy/core': 3.23.6
+ '@smithy/middleware-serde': 4.2.11
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ '@smithy/url-parser': 4.2.10
+ '@smithy/util-middleware': 4.2.10
+ tslib: 2.8.1
+
+ '@smithy/middleware-retry@4.4.37':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/service-error-classification': 4.2.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-retry': 4.2.10
+ '@smithy/uuid': 1.1.1
+ tslib: 2.8.1
+
+ '@smithy/middleware-serde@4.2.11':
+ dependencies:
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/middleware-stack@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/node-config-provider@4.3.10':
+ dependencies:
+ '@smithy/property-provider': 4.2.10
+ '@smithy/shared-ini-file-loader': 4.4.5
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/node-http-handler@4.4.12':
+ dependencies:
+ '@smithy/abort-controller': 4.2.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/querystring-builder': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/property-provider@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/protocol-http@5.3.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/querystring-builder@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ '@smithy/util-uri-escape': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/querystring-parser@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/service-error-classification@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+
+ '@smithy/shared-ini-file-loader@4.4.5':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/signature-v4@5.3.10':
+ dependencies:
+ '@smithy/is-array-buffer': 4.2.1
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-hex-encoding': 4.2.1
+ '@smithy/util-middleware': 4.2.10
+ '@smithy/util-uri-escape': 4.2.1
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/smithy-client@4.12.0':
+ dependencies:
+ '@smithy/core': 3.23.6
+ '@smithy/middleware-endpoint': 4.4.20
+ '@smithy/middleware-stack': 4.2.10
+ '@smithy/protocol-http': 5.3.10
+ '@smithy/types': 4.13.0
+ '@smithy/util-stream': 4.5.15
+ tslib: 2.8.1
+
+ '@smithy/types@4.13.0':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/url-parser@4.2.10':
+ dependencies:
+ '@smithy/querystring-parser': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/util-base64@4.3.1':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.1
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-browser@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-body-length-node@4.2.2':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@2.2.0':
+ dependencies:
+ '@smithy/is-array-buffer': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-buffer-from@4.2.1':
+ dependencies:
+ '@smithy/is-array-buffer': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/util-config-provider@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-browser@4.3.36':
+ dependencies:
+ '@smithy/property-provider': 4.2.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/util-defaults-mode-node@4.2.39':
+ dependencies:
+ '@smithy/config-resolver': 4.4.9
+ '@smithy/credential-provider-imds': 4.2.10
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/property-provider': 4.2.10
+ '@smithy/smithy-client': 4.12.0
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/util-endpoints@3.3.1':
+ dependencies:
+ '@smithy/node-config-provider': 4.3.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/util-hex-encoding@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-middleware@4.2.10':
+ dependencies:
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/util-retry@4.2.10':
+ dependencies:
+ '@smithy/service-error-classification': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/util-stream@4.5.15':
+ dependencies:
+ '@smithy/fetch-http-handler': 5.3.11
+ '@smithy/node-http-handler': 4.4.12
+ '@smithy/types': 4.13.0
+ '@smithy/util-base64': 4.3.1
+ '@smithy/util-buffer-from': 4.2.1
+ '@smithy/util-hex-encoding': 4.2.1
+ '@smithy/util-utf8': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/util-uri-escape@4.2.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@2.3.0':
+ dependencies:
+ '@smithy/util-buffer-from': 2.2.0
+ tslib: 2.8.1
+
+ '@smithy/util-utf8@4.2.1':
+ dependencies:
+ '@smithy/util-buffer-from': 4.2.1
+ tslib: 2.8.1
+
+ '@smithy/util-waiter@4.2.10':
+ dependencies:
+ '@smithy/abort-controller': 4.2.10
+ '@smithy/types': 4.13.0
+ tslib: 2.8.1
+
+ '@smithy/uuid@1.1.1':
+ dependencies:
+ tslib: 2.8.1
+
+ '@szmarczak/http-timer@4.0.6':
+ dependencies:
+ defer-to-connect: 2.0.1
+
+ '@tootallnate/once@2.0.0': {}
+
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.29.0
+ '@babel/types': 7.29.0
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@types/cacheable-request@6.0.3':
+ dependencies:
+ '@types/http-cache-semantics': 4.2.0
+ '@types/keyv': 3.1.4
+ '@types/node': 18.19.130
+ '@types/responselike': 1.0.3
+
+ '@types/debug@4.1.12':
+ dependencies:
+ '@types/ms': 2.1.0
+
+ '@types/estree@1.0.8': {}
+
+ '@types/fs-extra@9.0.13':
+ dependencies:
+ '@types/node': 18.19.130
+
+ '@types/http-cache-semantics@4.2.0': {}
+
+ '@types/keyv@3.1.4':
+ dependencies:
+ '@types/node': 18.19.130
+
+ '@types/ms@2.1.0': {}
+
+ '@types/node@18.19.130':
+ dependencies:
+ undici-types: 5.26.5
+
+ '@types/plist@3.0.5':
+ dependencies:
+ '@types/node': 18.19.130
+ xmlbuilder: 15.1.1
+ optional: true
+
+ '@types/responselike@1.0.3':
+ dependencies:
+ '@types/node': 18.19.130
+
+ '@types/verror@1.10.11':
+ optional: true
+
+ '@types/yauzl@2.10.3':
+ dependencies:
+ '@types/node': 18.19.130
+ optional: true
+
+ '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@18.19.130))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0)
+ '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-beta.27
+ '@types/babel__core': 7.20.5
+ react-refresh: 0.17.0
+ vite: 5.4.21(@types/node@18.19.130)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@xmldom/xmldom@0.8.11': {}
+
+ agent-base@6.0.2:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ ajv-keywords@3.5.2(ajv@6.14.0):
+ dependencies:
+ ajv: 6.14.0
+
+ ajv@6.14.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.3: {}
+
+ app-builder-bin@4.0.0: {}
+
+ app-builder-lib@24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3):
+ 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.4.3
+ dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3)
+ ejs: 3.1.10
+ electron-builder-squirrel-windows: 24.13.3(dmg-builder@24.13.3)
+ electron-publish: 24.13.1
+ form-data: 4.0.5
+ fs-extra: 10.1.0
+ hosted-git-info: 4.1.0
+ is-ci: 3.0.1
+ isbinaryfile: 5.0.7
+ js-yaml: 4.1.1
+ lazy-val: 1.0.5
+ minimatch: 5.1.9
+ read-config-file: 6.3.2
+ sanitize-filename: 1.6.3
+ semver: 7.7.4
+ tar: 6.2.1
+ temp-file: 3.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ archiver-utils@2.1.0:
+ dependencies:
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ lazystream: 1.0.1
+ 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.3.8
+
+ archiver-utils@3.0.4:
+ dependencies:
+ glob: 7.2.3
+ graceful-fs: 4.2.11
+ lazystream: 1.0.1
+ 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.2
+
+ archiver@5.3.2:
+ dependencies:
+ archiver-utils: 2.1.0
+ async: 3.2.6
+ buffer-crc32: 0.2.13
+ readable-stream: 3.6.2
+ readdir-glob: 1.1.3
+ tar-stream: 2.2.0
+ zip-stream: 4.1.1
+
+ argparse@2.0.1: {}
+
+ assert-plus@1.0.0:
+ optional: true
+
+ astral-regex@2.0.0:
+ optional: true
+
+ async-exit-hook@2.0.1: {}
+
+ async@3.2.6: {}
+
+ asynckit@0.4.0: {}
+
+ at-least-node@1.0.0: {}
+
+ axios@1.13.6:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ base64-js@1.5.1: {}
+
+ baseline-browser-mapping@2.10.0: {}
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ bluebird-lst@1.0.9:
+ dependencies:
+ bluebird: 3.7.2
+
+ bluebird@3.7.2: {}
+
+ boolean@3.2.0:
+ optional: true
+
+ bowser@2.14.1: {}
+
+ brace-expansion@1.1.12:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.10.0
+ caniuse-lite: 1.0.30001775
+ electron-to-chromium: 1.5.302
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ buffer-crc32@0.2.13: {}
+
+ buffer-equal@1.0.1: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ builder-util-runtime@9.2.4:
+ dependencies:
+ debug: 4.4.3
+ sax: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
+ builder-util@24.13.1:
+ dependencies:
+ 7zip-bin: 5.2.0
+ '@types/debug': 4.1.12
+ 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.6
+ debug: 4.4.3
+ fs-extra: 10.1.0
+ http-proxy-agent: 5.0.0
+ https-proxy-agent: 5.0.1
+ is-ci: 3.0.1
+ js-yaml: 4.1.1
+ source-map-support: 0.5.21
+ stat-mode: 1.0.0
+ temp-file: 3.4.0
+ transitivePeerDependencies:
+ - supports-color
+
+ cacheable-lookup@5.0.4: {}
+
+ cacheable-request@7.0.4:
+ dependencies:
+ clone-response: 1.0.3
+ get-stream: 5.2.0
+ http-cache-semantics: 4.2.0
+ keyv: 4.5.4
+ lowercase-keys: 2.0.0
+ normalize-url: 6.1.0
+ responselike: 2.0.1
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ caniuse-lite@1.0.30001775: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ chownr@2.0.0: {}
+
+ chromium-pickle-js@0.2.0: {}
+
+ ci-info@3.9.0: {}
+
+ cli-truncate@2.1.0:
+ dependencies:
+ slice-ansi: 3.0.0
+ string-width: 4.2.3
+ optional: true
+
+ cliui@8.0.1:
+ dependencies:
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+ wrap-ansi: 7.0.0
+
+ clone-response@1.0.3:
+ dependencies:
+ mimic-response: 1.0.1
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@5.1.0: {}
+
+ compare-version@0.1.2: {}
+
+ compress-commons@4.1.2:
+ dependencies:
+ buffer-crc32: 0.2.13
+ crc32-stream: 4.0.3
+ normalize-path: 3.0.0
+ readable-stream: 3.6.2
+
+ concat-map@0.0.1: {}
+
+ concurrently@8.2.2:
+ dependencies:
+ chalk: 4.1.2
+ date-fns: 2.30.0
+ lodash: 4.17.23
+ rxjs: 7.8.2
+ shell-quote: 1.8.3
+ spawn-command: 0.0.2
+ supports-color: 8.1.1
+ tree-kill: 1.2.2
+ yargs: 17.7.2
+
+ config-file-ts@0.2.6:
+ dependencies:
+ glob: 10.5.0
+ typescript: 5.9.3
+
+ convert-source-map@2.0.0: {}
+
+ core-util-is@1.0.2:
+ optional: true
+
+ core-util-is@1.0.3: {}
+
+ crc-32@1.2.2: {}
+
+ crc32-stream@4.0.3:
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 3.6.2
+
+ crc@3.8.0:
+ dependencies:
+ buffer: 5.7.1
+ optional: true
+
+ cross-env@7.0.3:
+ dependencies:
+ cross-spawn: 7.0.6
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ date-fns@2.30.0:
+ dependencies:
+ '@babel/runtime': 7.28.6
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ defer-to-connect@2.0.1: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+ optional: true
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+ optional: true
+
+ delayed-stream@1.0.0: {}
+
+ detect-node@2.1.0:
+ optional: true
+
+ dir-compare@3.3.0:
+ dependencies:
+ buffer-equal: 1.0.1
+ minimatch: 3.1.5
+
+ dmg-builder@24.13.3(electron-builder-squirrel-windows@24.13.3):
+ dependencies:
+ app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3)
+ builder-util: 24.13.1
+ builder-util-runtime: 9.2.4
+ fs-extra: 10.1.0
+ iconv-lite: 0.6.3
+ js-yaml: 4.1.1
+ optionalDependencies:
+ dmg-license: 1.0.11
+ transitivePeerDependencies:
+ - electron-builder-squirrel-windows
+ - supports-color
+
+ dmg-license@1.0.11:
+ dependencies:
+ '@types/plist': 3.0.5
+ '@types/verror': 1.10.11
+ ajv: 6.14.0
+ crc: 3.8.0
+ iconv-corefoundation: 1.1.7
+ plist: 3.1.0
+ smart-buffer: 4.2.0
+ verror: 1.10.1
+ optional: true
+
+ dotenv-expand@5.1.0: {}
+
+ dotenv@9.0.2: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ eastasianwidth@0.2.0: {}
+
+ ejs@3.1.10:
+ dependencies:
+ jake: 10.9.4
+
+ electron-builder-squirrel-windows@24.13.3(dmg-builder@24.13.3):
+ dependencies:
+ app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3)
+ archiver: 5.3.2
+ builder-util: 24.13.1
+ fs-extra: 10.1.0
+ transitivePeerDependencies:
+ - dmg-builder
+ - supports-color
+
+ electron-builder@24.13.3(electron-builder-squirrel-windows@24.13.3):
+ dependencies:
+ app-builder-lib: 24.13.3(dmg-builder@24.13.3)(electron-builder-squirrel-windows@24.13.3)
+ builder-util: 24.13.1
+ builder-util-runtime: 9.2.4
+ chalk: 4.1.2
+ dmg-builder: 24.13.3(electron-builder-squirrel-windows@24.13.3)
+ fs-extra: 10.1.0
+ is-ci: 3.0.1
+ lazy-val: 1.0.5
+ read-config-file: 6.3.2
+ simple-update-notifier: 2.0.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - electron-builder-squirrel-windows
+ - supports-color
+
+ electron-publish@24.13.1:
+ dependencies:
+ '@types/fs-extra': 9.0.13
+ 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.6.0
+ transitivePeerDependencies:
+ - supports-color
+
+ electron-to-chromium@1.5.302: {}
+
+ electron@28.3.3:
+ dependencies:
+ '@electron/get': 2.0.3
+ '@types/node': 18.19.130
+ extract-zip: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
+ env-paths@2.2.1: {}
+
+ err-code@2.0.3: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ es6-error@4.1.1:
+ optional: true
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@4.0.0:
+ optional: true
+
+ extract-zip@2.0.1:
+ dependencies:
+ debug: 4.4.3
+ get-stream: 5.2.0
+ yauzl: 2.10.0
+ optionalDependencies:
+ '@types/yauzl': 2.10.3
+ transitivePeerDependencies:
+ - supports-color
+
+ extsprintf@1.4.1:
+ optional: true
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-xml-parser@5.3.6:
+ dependencies:
+ strnum: 2.2.0
+
+ fd-slicer@1.1.0:
+ dependencies:
+ pend: 1.2.0
+
+ filelist@1.0.6:
+ dependencies:
+ minimatch: 5.1.9
+
+ follow-redirects@1.15.11: {}
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ fs-constants@1.0.0: {}
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-extra@8.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+
+ fs-extra@9.1.0:
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
+ fs-minipass@2.1.0:
+ dependencies:
+ minipass: 3.3.6
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-intrinsic@1.3.0:
+ 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
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ get-stream@5.2.0:
+ dependencies:
+ pump: 3.0.4
+
+ glob@10.5.0:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.9
+ minipass: 7.1.3
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@7.2.3:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.5
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+
+ global-agent@3.0.0:
+ dependencies:
+ boolean: 3.2.0
+ es6-error: 4.1.1
+ matcher: 3.0.0
+ roarr: 2.15.4
+ semver: 7.7.4
+ serialize-error: 7.0.1
+ optional: true
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+ optional: true
+
+ gopd@1.2.0: {}
+
+ got@11.8.6:
+ dependencies:
+ '@sindresorhus/is': 4.6.0
+ '@szmarczak/http-timer': 4.0.6
+ '@types/cacheable-request': 6.0.3
+ '@types/responselike': 1.0.3
+ cacheable-lookup: 5.0.4
+ cacheable-request: 7.0.4
+ decompress-response: 6.0.0
+ http2-wrapper: 1.0.3
+ lowercase-keys: 2.0.0
+ p-cancelable: 2.1.1
+ responselike: 2.0.1
+
+ graceful-fs@4.2.11: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+ optional: true
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hosted-git-info@4.1.0:
+ dependencies:
+ lru-cache: 6.0.0
+
+ http-cache-semantics@4.2.0: {}
+
+ http-proxy-agent@5.0.0:
+ dependencies:
+ '@tootallnate/once': 2.0.0
+ agent-base: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ http2-wrapper@1.0.3:
+ dependencies:
+ quick-lru: 5.1.1
+ resolve-alpn: 1.2.1
+
+ https-proxy-agent@5.0.1:
+ dependencies:
+ agent-base: 6.0.2
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ iconv-corefoundation@1.1.7:
+ dependencies:
+ cli-truncate: 2.1.0
+ node-addon-api: 1.7.2
+ optional: true
+
+ iconv-lite@0.6.3:
+ dependencies:
+ safer-buffer: 2.1.2
+
+ ieee754@1.2.1: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-ci@3.0.1:
+ dependencies:
+ ci-info: 3.9.0
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ isarray@1.0.0: {}
+
+ isbinaryfile@4.0.10: {}
+
+ isbinaryfile@5.0.7: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jake@10.9.4:
+ dependencies:
+ async: 3.2.6
+ filelist: 1.0.6
+ picocolors: 1.1.1
+
+ joi@17.13.3:
+ dependencies:
+ '@hapi/hoek': 9.3.0
+ '@hapi/topo': 5.1.0
+ '@sideway/address': 4.1.5
+ '@sideway/formula': 3.0.1
+ '@sideway/pinpoint': 2.0.0
+
+ js-tokens@4.0.0: {}
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stringify-safe@5.0.1:
+ optional: true
+
+ json5@2.2.3: {}
+
+ jsonfile@4.0.0:
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ jsonfile@6.2.0:
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ lazy-val@1.0.5: {}
+
+ lazystream@1.0.1:
+ dependencies:
+ readable-stream: 2.3.8
+
+ 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: {}
+
+ lodash@4.17.23: {}
+
+ loose-envify@1.4.0:
+ dependencies:
+ js-tokens: 4.0.0
+
+ lowercase-keys@2.0.0: {}
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ lru-cache@6.0.0:
+ dependencies:
+ yallist: 4.0.0
+
+ matcher@3.0.0:
+ dependencies:
+ escape-string-regexp: 4.0.0
+ optional: true
+
+ math-intrinsics@1.1.0: {}
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ mime@2.6.0: {}
+
+ mimic-response@1.0.1: {}
+
+ mimic-response@3.1.0: {}
+
+ minimatch@3.1.5:
+ dependencies:
+ brace-expansion: 1.1.12
+
+ minimatch@5.1.9:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimatch@9.0.9:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minimist@1.2.8: {}
+
+ minipass@3.3.6:
+ dependencies:
+ yallist: 4.0.0
+
+ minipass@5.0.0: {}
+
+ minipass@7.1.3: {}
+
+ minizlib@2.1.2:
+ dependencies:
+ minipass: 3.3.6
+ yallist: 4.0.0
+
+ mkdirp@1.0.4: {}
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ node-addon-api@1.7.2:
+ optional: true
+
+ node-releases@2.0.27: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-url@6.1.0: {}
+
+ object-keys@1.1.1:
+ optional: true
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ p-cancelable@2.1.1: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ path-is-absolute@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.3
+
+ pend@1.2.0: {}
+
+ picocolors@1.1.1: {}
+
+ plist@3.1.0:
+ dependencies:
+ '@xmldom/xmldom': 0.8.11
+ base64-js: 1.5.1
+ xmlbuilder: 15.1.1
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ process-nextick-args@2.0.1: {}
+
+ progress@2.0.3: {}
+
+ promise-retry@2.0.1:
+ dependencies:
+ err-code: 2.0.3
+ retry: 0.12.0
+
+ proxy-from-env@1.1.0: {}
+
+ pump@3.0.4:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
+ punycode@2.3.1: {}
+
+ quick-lru@5.1.1: {}
+
+ react-dom@18.3.1(react@18.3.1):
+ dependencies:
+ loose-envify: 1.4.0
+ react: 18.3.1
+ scheduler: 0.23.2
+
+ react-refresh@0.17.0: {}
+
+ react@18.3.1:
+ dependencies:
+ loose-envify: 1.4.0
+
+ read-config-file@6.3.2:
+ dependencies:
+ config-file-ts: 0.2.6
+ dotenv: 9.0.2
+ dotenv-expand: 5.1.0
+ js-yaml: 4.1.1
+ json5: 2.2.3
+ lazy-val: 1.0.5
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
+ readdir-glob@1.1.3:
+ dependencies:
+ minimatch: 5.1.9
+
+ require-directory@2.1.1: {}
+
+ resolve-alpn@1.2.1: {}
+
+ responselike@2.0.1:
+ dependencies:
+ lowercase-keys: 2.0.0
+
+ retry@0.12.0: {}
+
+ rimraf@5.0.10:
+ dependencies:
+ glob: 10.5.0
+
+ roarr@2.15.4:
+ dependencies:
+ boolean: 3.2.0
+ detect-node: 2.1.0
+ globalthis: 1.0.4
+ json-stringify-safe: 5.0.1
+ semver-compare: 1.0.0
+ sprintf-js: 1.1.3
+ optional: true
+
+ rollup@4.59.0:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.59.0
+ '@rollup/rollup-android-arm64': 4.59.0
+ '@rollup/rollup-darwin-arm64': 4.59.0
+ '@rollup/rollup-darwin-x64': 4.59.0
+ '@rollup/rollup-freebsd-arm64': 4.59.0
+ '@rollup/rollup-freebsd-x64': 4.59.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.59.0
+ '@rollup/rollup-linux-arm-musleabihf': 4.59.0
+ '@rollup/rollup-linux-arm64-gnu': 4.59.0
+ '@rollup/rollup-linux-arm64-musl': 4.59.0
+ '@rollup/rollup-linux-loong64-gnu': 4.59.0
+ '@rollup/rollup-linux-loong64-musl': 4.59.0
+ '@rollup/rollup-linux-ppc64-gnu': 4.59.0
+ '@rollup/rollup-linux-ppc64-musl': 4.59.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.59.0
+ '@rollup/rollup-linux-riscv64-musl': 4.59.0
+ '@rollup/rollup-linux-s390x-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-gnu': 4.59.0
+ '@rollup/rollup-linux-x64-musl': 4.59.0
+ '@rollup/rollup-openbsd-x64': 4.59.0
+ '@rollup/rollup-openharmony-arm64': 4.59.0
+ '@rollup/rollup-win32-arm64-msvc': 4.59.0
+ '@rollup/rollup-win32-ia32-msvc': 4.59.0
+ '@rollup/rollup-win32-x64-gnu': 4.59.0
+ '@rollup/rollup-win32-x64-msvc': 4.59.0
+ fsevents: 2.3.3
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ safer-buffer@2.1.2: {}
+
+ sanitize-filename@1.6.3:
+ dependencies:
+ truncate-utf8-bytes: 1.0.2
+
+ sax@1.5.0: {}
+
+ scheduler@0.23.2:
+ dependencies:
+ loose-envify: 1.4.0
+
+ semver-compare@1.0.0:
+ optional: true
+
+ semver@6.3.1: {}
+
+ semver@7.7.4: {}
+
+ serialize-error@7.0.1:
+ dependencies:
+ type-fest: 0.13.1
+ optional: true
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-update-notifier@2.0.0:
+ dependencies:
+ semver: 7.7.4
+
+ slice-ansi@3.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ astral-regex: 2.0.0
+ is-fullwidth-code-point: 3.0.0
+ optional: true
+
+ smart-buffer@4.2.0:
+ optional: true
+
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ spawn-command@0.0.2: {}
+
+ sprintf-js@1.1.3:
+ optional: true
+
+ stat-mode@1.0.0: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.2.0
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.2.0:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strnum@2.2.0: {}
+
+ sumchecker@3.0.1:
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.5
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ tar@6.2.1:
+ dependencies:
+ chownr: 2.0.0
+ fs-minipass: 2.1.0
+ minipass: 5.0.0
+ minizlib: 2.1.2
+ mkdirp: 1.0.4
+ yallist: 4.0.0
+
+ temp-file@3.4.0:
+ dependencies:
+ async-exit-hook: 2.0.1
+ fs-extra: 10.1.0
+
+ tmp-promise@3.0.3:
+ dependencies:
+ tmp: 0.2.5
+
+ tmp@0.2.5: {}
+
+ tree-kill@1.2.2: {}
+
+ truncate-utf8-bytes@1.0.2:
+ dependencies:
+ utf8-byte-length: 1.0.5
+
+ tslib@2.8.1: {}
+
+ type-fest@0.13.1:
+ optional: true
+
+ typescript@5.9.3: {}
+
+ undici-types@5.26.5: {}
+
+ universalify@0.1.2: {}
+
+ universalify@2.0.1: {}
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ utf8-byte-length@1.0.5: {}
+
+ util-deprecate@1.0.2: {}
+
+ verror@1.10.1:
+ dependencies:
+ assert-plus: 1.0.0
+ core-util-is: 1.0.2
+ extsprintf: 1.4.1
+ optional: true
+
+ vite@5.4.21(@types/node@18.19.130):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.59.0
+ optionalDependencies:
+ '@types/node': 18.19.130
+ fsevents: 2.3.3
+
+ wait-on@7.2.0:
+ dependencies:
+ axios: 1.13.6
+ joi: 17.13.3
+ lodash: 4.17.23
+ minimist: 1.2.8
+ rxjs: 7.8.2
+ transitivePeerDependencies:
+ - debug
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.2.0
+
+ wrappy@1.0.2: {}
+
+ xmlbuilder@15.1.1: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yallist@4.0.0: {}
+
+ yargs-parser@21.1.1: {}
+
+ yargs@17.7.2:
+ dependencies:
+ cliui: 8.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ require-directory: 2.1.1
+ string-width: 4.2.3
+ y18n: 5.0.8
+ yargs-parser: 21.1.1
+
+ yauzl@2.10.0:
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+
+ zip-stream@4.1.1:
+ dependencies:
+ archiver-utils: 3.0.4
+ compress-commons: 4.1.2
+ readable-stream: 3.6.2
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 0000000..c32e144
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,3 @@
+onlyBuiltDependencies:
+ - electron
+ - esbuild
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..0eb8cae
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1 @@
+requests>=2.31.0
diff --git a/src/App.css b/src/App.css
new file mode 100644
index 0000000..5a51410
--- /dev/null
+++ b/src/App.css
@@ -0,0 +1,384 @@
+.app {
+ max-width: 820px;
+ margin: 0 auto;
+}
+
+.app-loading {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 60vh;
+ color: var(--text-muted);
+}
+
+.app-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 24px;
+ padding-bottom: 16px;
+ border-bottom: 1px solid var(--border);
+}
+
+.app-header h1 {
+ margin: 0;
+ font-size: 1.35rem;
+ font-weight: 600;
+ letter-spacing: -0.02em;
+}
+
+.app-nav {
+ display: flex;
+ gap: 4px;
+}
+
+.app-nav button {
+ padding: 8px 16px;
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ background: var(--bg-card);
+ color: var(--text);
+ font-size: 0.9rem;
+}
+
+.app-nav button:hover {
+ background: #222228;
+ border-color: var(--accent);
+}
+
+.app-nav button.active {
+ background: var(--accent);
+ border-color: var(--accent);
+ color: #0f0f12;
+}
+
+.app-main {
+ min-height: 400px;
+}
+
+.tab-pane {
+ display: none;
+}
+
+.tab-pane.tab-pane-active {
+ display: block;
+}
+
+.card {
+ background: var(--bg-card);
+ border: 1px solid var(--border);
+ border-radius: var(--radius);
+ padding: 20px;
+ margin-bottom: 16px;
+}
+
+.card h2 {
+ margin: 0 0 16px;
+ font-size: 1rem;
+ font-weight: 600;
+ color: var(--text-muted);
+}
+
+.form-row {
+ margin-bottom: 14px;
+}
+
+.form-row:last-child {
+ margin-bottom: 0;
+}
+
+.form-row label {
+ display: block;
+ margin-bottom: 4px;
+ font-size: 0.8rem;
+ color: var(--text-muted);
+}
+
+.form-row input,
+.form-row select,
+.form-row textarea {
+ width: 100%;
+ padding: 10px 12px;
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ background: var(--bg);
+ color: var(--text);
+ font-size: 0.9rem;
+}
+
+.form-row input:focus,
+.form-row select:focus,
+.form-row textarea:focus {
+ outline: none;
+ border-color: var(--accent);
+}
+
+.form-row textarea {
+ min-height: 72px;
+ resize: vertical;
+}
+
+.form-row .hint {
+ font-size: 0.75rem;
+ color: var(--text-muted);
+ margin-top: 4px;
+}
+
+.btn {
+ padding: 10px 18px;
+ border: none;
+ border-radius: 8px;
+ font-size: 0.9rem;
+ font-weight: 500;
+}
+
+.btn-primary {
+ background: var(--accent);
+ color: #0f0f12;
+}
+
+.btn-primary:hover:not(:disabled) {
+ background: var(--accent-hover);
+}
+
+.btn-secondary {
+ background: var(--border);
+ color: var(--text);
+}
+
+.btn-secondary:hover {
+ background: #3a3a42;
+}
+
+.btn:disabled {
+ opacity: 0.6;
+ cursor: not-allowed;
+}
+
+.btn-sm {
+ padding: 6px 12px;
+ font-size: 0.8rem;
+}
+
+.log {
+ margin-top: 16px;
+ padding: 12px;
+ background: var(--bg);
+ border-radius: 8px;
+ font-family: ui-monospace, monospace;
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ max-height: 200px;
+ overflow-y: auto;
+ white-space: pre-wrap;
+ word-break: break-all;
+}
+
+.log-entry {
+ margin-bottom: 4px;
+}
+
+.log-entry.done {
+ color: var(--success);
+}
+
+.log-entry.error {
+ color: var(--error);
+}
+
+.input-with-btn {
+ display: flex;
+ gap: 8px;
+}
+
+.input-with-btn input {
+ flex: 1;
+}
+
+.extra-param-row {
+ display: flex;
+ gap: 8px;
+ margin-bottom: 8px;
+ align-items: center;
+}
+
+.extra-key {
+ width: 140px;
+ padding: 8px 10px;
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ background: var(--bg);
+ color: var(--text);
+ font-size: 0.85rem;
+}
+
+.extra-value {
+ flex: 1;
+ padding: 8px 10px;
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ background: var(--bg);
+ color: var(--text);
+ font-size: 0.85rem;
+}
+
+.form-hint {
+ font-size: 0.8rem;
+ color: var(--text-muted);
+ margin: 0 0 12px;
+}
+
+.form-actions {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ margin-top: 16px;
+}
+
+.form-message {
+ font-size: 0.85rem;
+ color: var(--success);
+}
+
+.form-warn {
+ font-size: 0.8rem;
+ color: var(--error);
+ margin: 10px 0 0;
+}
+
+.form-row-inline {
+ display: flex;
+ gap: 16px;
+}
+
+.form-row-inline > div {
+ flex: 1;
+}
+
+.ref-files {
+ margin-bottom: 10px;
+ max-height: 160px;
+ overflow-y: auto;
+}
+
+.ref-file-item {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ padding: 6px 0;
+ border-bottom: 1px solid var(--border);
+}
+
+.ref-file-name {
+ flex: 1;
+ font-size: 0.85rem;
+ color: var(--text-muted);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.result-success-card h2 {
+ color: var(--success);
+}
+
+.result-success-msg {
+ margin: 0 0 12px;
+ font-size: 0.9rem;
+ color: var(--text-muted);
+}
+
+.result-preview-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+}
+
+.result-preview-thumb {
+ width: 120px;
+ height: 120px;
+ padding: 0;
+ border: 1px solid var(--border);
+ border-radius: 8px;
+ background: var(--bg);
+ overflow: hidden;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+.result-preview-thumb:hover {
+ border-color: var(--accent);
+}
+
+.result-preview-thumb img {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+}
+
+.preview-overlay {
+ position: fixed;
+ inset: 0;
+ background: rgba(0, 0, 0, 0.85);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ z-index: 1000;
+ cursor: pointer;
+}
+
+.preview-close {
+ position: absolute;
+ top: 16px;
+ right: 16px;
+ width: 40px;
+ height: 40px;
+ border: none;
+ border-radius: 50%;
+ background: var(--bg-card);
+ color: var(--text);
+ font-size: 1.5rem;
+ line-height: 1;
+ cursor: pointer;
+ z-index: 1001;
+}
+
+.preview-close:hover {
+ background: var(--border);
+}
+
+.preview-img {
+ max-width: 90vw;
+ max-height: 90vh;
+ object-fit: contain;
+ cursor: default;
+}
+
+.ref-drop-zone {
+ min-height: 100px;
+ padding: 12px;
+ margin-bottom: 10px;
+ border: 2px dashed var(--border);
+ border-radius: 8px;
+ background: var(--bg);
+ transition: border-color 0.15s, background 0.15s;
+}
+
+.ref-drop-zone-active {
+ border-color: var(--accent);
+ background: rgba(167, 139, 250, 0.08);
+}
+
+.ref-drop-placeholder {
+ color: var(--text-muted);
+ font-size: 0.9rem;
+ text-align: center;
+ padding: 24px 12px;
+}
+
+.ref-drop-placeholder-inline {
+ padding: 12px;
+ font-size: 0.85rem;
+}
diff --git a/src/App.jsx b/src/App.jsx
new file mode 100644
index 0000000..73fa391
--- /dev/null
+++ b/src/App.jsx
@@ -0,0 +1,110 @@
+import { useState, useEffect, useCallback } from "react";
+import Settings from "./Settings";
+import Generate from "./Generate";
+import "./App.css";
+
+export default function App() {
+ const [tab, setTab] = useState("generate");
+ const [config, setConfig] = useState(null);
+ const [loading, setLoading] = useState(true);
+ const [runningInGenerate, setRunningInGenerate] = useState(false);
+
+ const loadConfig = useCallback(async () => {
+ if (typeof window.electronAPI?.getConfig !== "function") {
+ setConfig(getFallbackConfig());
+ setLoading(false);
+ return;
+ }
+ try {
+ const c = await window.electronAPI.getConfig();
+ setConfig(normalizeConfig(c));
+ } catch {
+ setConfig(getFallbackConfig());
+ }
+ setLoading(false);
+ }, []);
+
+ useEffect(() => {
+ loadConfig();
+ }, [loadConfig]);
+
+ const saveConfig = async (next) => {
+ if (typeof window.electronAPI?.saveConfig !== "function") return;
+ const c = await window.electronAPI.saveConfig(next);
+ setConfig(normalizeConfig(c));
+ };
+
+ if (loading) {
+ return (
+
+ 加载中…
+
+ );
+ }
+
+ return (
+
+
+ NanoBanana 生图
+
+
+
+
+
+
+
+
+
+
+
+ );
+}
+
+function getFallbackConfig() {
+ return {
+ api_key: "",
+ api_create_url: "https://api.wuyinkeji.com/api/async/image_nanoBanana2",
+ api_result_url: "https://api.wuyinkeji.com/api/async/detail",
+ poll_interval_seconds: 10,
+ max_wait_seconds: 300,
+ r2_account_id: "",
+ r2_access_key_id: "",
+ r2_secret_access_key: "",
+ r2_bucket: "",
+ r2_public_url: "",
+ default_save_dir: "",
+ extra_params: [],
+ };
+}
+
+function normalizeConfig(c) {
+ if (!c) return getFallbackConfig();
+ const extra = Array.isArray(c.extra_params)
+ ? c.extra_params
+ : [];
+ return {
+ ...getFallbackConfig(),
+ ...c,
+ extra_params: extra.map((e) =>
+ typeof e === "object" && e !== null
+ ? { key: e.key ?? "", value: e.value ?? "" }
+ : { key: "", value: "" }
+ ),
+ };
+}
diff --git a/src/ErrorBoundary.jsx b/src/ErrorBoundary.jsx
new file mode 100644
index 0000000..da4c192
--- /dev/null
+++ b/src/ErrorBoundary.jsx
@@ -0,0 +1,51 @@
+import React from "react";
+
+export class ErrorBoundary extends React.Component {
+ state = { error: null };
+
+ static getDerivedStateFromError(error) {
+ return { error };
+ }
+
+ componentDidCatch(error, info) {
+ console.error("ErrorBoundary:", error, info);
+ }
+
+ render() {
+ if (this.state.error) {
+ return (
+
+
界面加载出错
+
+ {this.state.error?.message || String(this.state.error)}
+
+
+
+ );
+ }
+ return this.props.children;
+ }
+}
diff --git a/src/Generate.jsx b/src/Generate.jsx
new file mode 100644
index 0000000..cd134be
--- /dev/null
+++ b/src/Generate.jsx
@@ -0,0 +1,332 @@
+import { useState, useEffect, useCallback } from "react";
+
+const SIZES = ["1K", "2K", "4K"];
+const RATIOS = ["auto", "1:1", "16:9", "4:3", "3:4", "9:16"];
+const IMAGE_EXTS = new Set([".jpg", ".jpeg", ".png", ".webp", ".bmp", ".gif"]);
+
+function getPathFromFile(file) {
+ if (file.path) return file.path;
+ return null;
+}
+
+function isImagePath(pathStr) {
+ if (!pathStr) return false;
+ const ext = pathStr.replace(/^.*\./, ".").toLowerCase();
+ return IMAGE_EXTS.has(ext);
+}
+
+export default function Generate({ config, onRunningChange }) {
+ const [prompt, setPrompt] = useState(config?.prompt || "");
+ const [size, setSize] = useState(config?.size || "1K");
+ const [aspectRatio, setAspectRatio] = useState(config?.aspectRatio || config?.["aspect-ratio"] || "auto");
+ const [refFiles, setRefFiles] = useState([]);
+ const [saveDir, setSaveDir] = useState(config?.default_save_dir || "");
+ const [running, setRunning] = useState(false);
+ const [log, setLog] = useState([]);
+ const [result, setResult] = useState(null);
+ const [dragOver, setDragOver] = useState(false);
+ const [previewUrls, setPreviewUrls] = useState([]);
+ const [previewIndex, setPreviewIndex] = useState(null);
+
+ useEffect(() => {
+ if (typeof onRunningChange === "function") onRunningChange(running);
+ }, [running, onRunningChange]);
+
+ useEffect(() => {
+ if (config?.prompt) setPrompt(config.prompt);
+ if (config?.size) setSize(config.size);
+ if (config?.aspectRatio) setAspectRatio(config.aspectRatio);
+ if (config?.["aspect-ratio"]) setAspectRatio(config["aspect-ratio"]);
+ if (config?.default_save_dir) setSaveDir(config.default_save_dir);
+ }, [config]);
+
+ useEffect(() => {
+ if (!result?.success || !result?.savedPaths?.length || typeof window.electronAPI?.getImageDataUrl !== "function") {
+ setPreviewUrls([]);
+ return;
+ }
+ let cancelled = false;
+ (async () => {
+ const urls = [];
+ for (const p of result.savedPaths) {
+ if (cancelled) return;
+ const dataUrl = await window.electronAPI.getImageDataUrl(p);
+ if (cancelled) return;
+ urls.push(dataUrl || "");
+ }
+ if (!cancelled) setPreviewUrls(urls);
+ })();
+ return () => { cancelled = true; };
+ }, [result?.taskId, result?.savedPaths?.length]);
+
+ const addPaths = useCallback((paths) => {
+ if (!paths || !paths.length) return;
+ const valid = paths.filter(isImagePath);
+ const unique = [...new Set(valid)];
+ setRefFiles((prev) => {
+ const set = new Set(prev);
+ unique.forEach((p) => set.add(p));
+ return [...set];
+ });
+ }, []);
+
+ const addRefFiles = useCallback(async () => {
+ if (typeof window.electronAPI?.selectReferenceFiles !== "function") return;
+ const paths = await window.electronAPI.selectReferenceFiles();
+ addPaths(paths);
+ }, [addPaths]);
+
+ const clearRefFiles = useCallback(() => {
+ setRefFiles([]);
+ }, []);
+
+ const pickSaveDir = useCallback(async () => {
+ if (typeof window.electronAPI?.selectDirectory !== "function") return;
+ const dir = await window.electronAPI.selectDirectory(saveDir || undefined);
+ if (dir) setSaveDir(dir);
+ }, [saveDir]);
+
+ const removeRefFile = useCallback((index) => {
+ setRefFiles((prev) => prev.filter((_, i) => i !== index));
+ }, []);
+
+ const handleDrop = useCallback(
+ (e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ if (running) return;
+ const items = e.dataTransfer?.files;
+ if (!items?.length) return;
+ const paths = [];
+ for (let i = 0; i < items.length; i++) {
+ const p = getPathFromFile(items[i]);
+ if (p) paths.push(p);
+ }
+ addPaths(paths);
+ setDragOver(false);
+ },
+ [running, addPaths]
+ );
+
+ const handleDragOver = useCallback((e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ if (running) return;
+ e.dataTransfer.dropEffect = "copy";
+ setDragOver(true);
+ }, [running]);
+
+ const handleDragLeave = useCallback((e) => {
+ e.preventDefault();
+ e.stopPropagation();
+ setDragOver(false);
+ }, []);
+
+ const start = useCallback(async () => {
+ if (running) return;
+ setRunning(true);
+ setLog([]);
+ setResult(null);
+
+ const unsub =
+ typeof window.electronAPI?.onGenerationProgress === "function"
+ ? window.electronAPI.onGenerationProgress(({ step, message }) => {
+ setLog((prev) => [...prev, `[${step}] ${message}`]);
+ })
+ : () => {};
+
+ try {
+ const res = await window.electronAPI?.startGeneration?.({
+ prompt: prompt.trim(),
+ size,
+ aspectRatio,
+ refFilePaths: refFiles,
+ saveDir: saveDir || undefined,
+ });
+ if (res?.success) {
+ setResult(res);
+ setLog((prev) => [...prev, `完成:已保存 ${res.count} 张到 ${res.saveDir}`]);
+ } else {
+ setLog((prev) => [...prev, `错误: ${res?.error || "未知"}`]);
+ }
+ } catch (e) {
+ setLog((prev) => [...prev, "错误: " + (e.message || String(e))]);
+ } finally {
+ unsub?.();
+ setRunning(false);
+ }
+ }, [running, prompt, size, aspectRatio, refFiles, saveDir]);
+
+ const hasR2 = config?.r2_account_id && config?.r2_bucket && config?.r2_public_url;
+ const needR2ForRef = refFiles.length > 0;
+
+ return (
+
+
+
生图参数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
参考图
+
拖拽或选择图片,将上传到 R2 作为参考;需在设置中配置 R2
+
+
+ {refFiles.map((path, i) => (
+
+
+ {typeof path === "string" ? path.replace(/^.*[/\\]/, "") : ""}
+
+
+
+ ))}
+
+ {refFiles.length === 0 && (
+
+ {dragOver ? "松开即可添加" : "拖拽图片到此处"}
+
+ )}
+ {refFiles.length > 0 && dragOver && (
+
+ 松开添加更多
+
+ )}
+
+
+
+ {refFiles.length > 0 && (
+
+ )}
+
+ {needR2ForRef && !hasR2 && (
+
已选参考图但未配置 R2,请先在设置中填写 R2 信息
+ )}
+
+
+
+
保存位置
+
+
+
+
+
+
+
+
+
+
+ {(log.length > 0 || result) && (
+
+
运行日志
+
+ {log.map((line, i) => (
+
+ {line}
+
+ ))}
+
+
+ )}
+
+ {result?.success && result?.savedPaths?.length > 0 && (
+
+
生成成功
+
+ 共保存 {result.count} 张图片到 {result.saveDir}
+
+
+ {previewUrls.map((dataUrl, i) => (
+
+ ))}
+
+
+ )}
+
+ {previewIndex !== null && previewUrls[previewIndex] && (
+
setPreviewIndex(null)}
+ role="dialog"
+ aria-modal="true"
+ >
+
+

e.stopPropagation()}
+ />
+
+ )}
+
+ );
+}
diff --git a/src/Settings.jsx b/src/Settings.jsx
new file mode 100644
index 0000000..7f14ef8
--- /dev/null
+++ b/src/Settings.jsx
@@ -0,0 +1,189 @@
+import { useState, useCallback } from "react";
+
+const R2_FIELDS = [
+ { key: "r2_account_id", label: "R2 Account ID" },
+ { key: "r2_access_key_id", label: "R2 Access Key ID" },
+ { key: "r2_secret_access_key", label: "R2 Secret Access Key", type: "password" },
+ { key: "r2_bucket", label: "R2 Bucket 名称" },
+ { key: "r2_public_url", label: "R2 公网访问地址" },
+];
+
+function getDefaultForm() {
+ return {
+ api_key: "",
+ api_create_url: "https://api.wuyinkeji.com/api/async/image_nanoBanana2",
+ api_result_url: "https://api.wuyinkeji.com/api/async/detail",
+ r2_account_id: "",
+ r2_access_key_id: "",
+ r2_secret_access_key: "",
+ r2_bucket: "",
+ r2_public_url: "",
+ default_save_dir: "",
+ extra_params: [],
+ };
+}
+
+export default function Settings({ config, onSave }) {
+ const safeConfig = config && typeof config === "object" ? config : {};
+ const [form, setForm] = useState(() => ({ ...getDefaultForm(), ...safeConfig }));
+ const [saving, setSaving] = useState(false);
+ const [message, setMessage] = useState("");
+
+ const update = useCallback((key, value) => {
+ setForm((prev) => ({ ...prev, [key]: value }));
+ }, []);
+
+ const updateExtra = useCallback((index, field, value) => {
+ setForm((prev) => {
+ const next = [...(prev.extra_params || [])];
+ if (!next[index]) next[index] = { key: "", value: "" };
+ next[index] = { ...next[index], [field]: value };
+ return { ...prev, extra_params: next };
+ });
+ }, []);
+
+ const addExtra = useCallback(() => {
+ setForm((prev) => ({
+ ...prev,
+ extra_params: [...(prev.extra_params || []), { key: "", value: "" }],
+ }));
+ }, []);
+
+ const removeExtra = useCallback((index) => {
+ setForm((prev) => ({
+ ...prev,
+ extra_params: (prev.extra_params || []).filter((_, i) => i !== index),
+ }));
+ }, []);
+
+ const pickDir = useCallback(async () => {
+ if (typeof window.electronAPI?.selectDirectory !== "function") return;
+ const dir = await window.electronAPI.selectDirectory(form.default_save_dir);
+ if (dir) update("default_save_dir", dir);
+ }, [form.default_save_dir, update]);
+
+ const handleSave = useCallback(async () => {
+ setSaving(true);
+ setMessage("");
+ try {
+ await onSave(form);
+ setMessage("已保存");
+ setTimeout(() => setMessage(""), 2000);
+ } catch (e) {
+ setMessage("保存失败: " + (e.message || String(e)));
+ }
+ setSaving(false);
+ }, [form, onSave]);
+
+ return (
+
+
+
API 与接口
+
+
+ update("api_key", e.target.value)}
+ placeholder="速创 API 密钥"
+ />
+
+
+
+
update("api_create_url", e.target.value)}
+ placeholder="https://api.wuyinkeji.com/api/async/image_nanoBanana2"
+ />
+
接口文档变更时可修改此处
+
+
+
+ update("api_result_url", e.target.value)}
+ placeholder="https://api.wuyinkeji.com/api/async/detail"
+ />
+
+
+
+
+
R2 图床(上传参考图用)
+ {R2_FIELDS.map(({ key, label, type }) => (
+
+
+ update(key, e.target.value)}
+ placeholder={label}
+ />
+
+ ))}
+
+
+
+
默认保存目录
+
+
+
+
+
+
+
+
+
+
+
自定义请求参数
+
接口文档变更时,可在此增加或修改请求体参数(键值对)
+ {(form.extra_params || []).map((item, index) => (
+
+ updateExtra(index, "key", e.target.value)}
+ placeholder="参数名"
+ />
+ updateExtra(index, "value", e.target.value)}
+ placeholder="参数值"
+ />
+
+
+ ))}
+
+
+
+
+
+ {message && {message}}
+
+
+ );
+}
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..e43d3a8
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,44 @@
+:root {
+ --bg: #0f0f12;
+ --bg-card: #18181c;
+ --border: #2a2a30;
+ --text: #e4e4e7;
+ --text-muted: #a1a1aa;
+ --accent: #a78bfa;
+ --accent-hover: #c4b5fd;
+ --success: #34d399;
+ --error: #f87171;
+ --radius: 10px;
+ --font: "Inter", "Segoe UI", system-ui, sans-serif;
+}
+
+* {
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ font-family: var(--font);
+ background: var(--bg);
+ color: var(--text);
+ -webkit-font-smoothing: antialiased;
+ -webkit-app-region: no-drag;
+}
+
+#root {
+ min-height: 100vh;
+ padding: 20px;
+}
+
+input, textarea, select, button {
+ font-family: inherit;
+}
+
+button {
+ cursor: pointer;
+}
+
+.app-title {
+ -webkit-app-region: drag;
+ user-select: none;
+}
diff --git a/src/main.jsx b/src/main.jsx
new file mode 100644
index 0000000..02df9a4
--- /dev/null
+++ b/src/main.jsx
@@ -0,0 +1,13 @@
+import React from "react";
+import ReactDOM from "react-dom/client";
+import App from "./App";
+import { ErrorBoundary } from "./ErrorBoundary";
+import "./index.css";
+
+ReactDOM.createRoot(document.getElementById("root")).render(
+
+
+
+
+
+);
diff --git a/vite.config.js b/vite.config.js
new file mode 100644
index 0000000..be78289
--- /dev/null
+++ b/vite.config.js
@@ -0,0 +1,9 @@
+import { defineConfig } from "vite";
+import react from "@vitejs/plugin-react";
+
+export default defineConfig({
+ base: "./",
+ build: { outDir: "dist" },
+ plugins: [react()],
+ server: { port: 5173 },
+});