From 26d157ebe5ec2fa7322d025f98b92f2f9de661c8 Mon Sep 17 00:00:00 2001 From: vozzhaevsn Date: Wed, 17 Jun 2026 12:27:06 +1000 Subject: [PATCH] Add macOS support: bring-up, native menu, packaging MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Run and package Kadr on Apple Silicon, with Mac-native UX and a local ad-hoc-signed .app/.dmg. Bring-up - node-pty rebuilds cleanly on Node 25 / Electron 31 (no version pin). Mac-native (electron/) - main.ts: fixUserPath() adopts the user's login-shell PATH on packaged macOS launches before anything spawns. Finder gives GUI apps a minimal PATH, which made the Claude PTY exit instantly ("session ended") and would also break node (MCP bridge), ffmpeg/ffprobe and python3. - main.ts: VAAPI hardware-codec switches are now Linux-only (macOS uses native VideoToolbox; the flags only risked the GPU sandbox off-platform). - menu.ts: real macOS application menu. File/Undo/Redo forward to the renderer over menu:command with CmdOrCtrl accelerators (fixes the missing Cmd shortcuts — the old keydown handler only checked ctrlKey); clipboard/selection keep native roles so text fields and the Claude terminal behave correctly. - preload.ts + shared/types.ts: onMenuCommand IPC bridge. - App.tsx: dispatch menu commands to the existing toolbar handlers (undo/redo defer to native text undo when an input is focused); drop the Save/Undo/Redo keydown branches the menu now owns. Packaging - electron-builder.yml: asar:false (the app spawns mcp-bridge.cjs and transcribe.py by absolute path), arm64 dmg+zip, ad-hoc signing. - build/make-icon.mjs: generates the placeholder icon + .icns. - package.json: icon and package:mac scripts; electron-builder devDep. Note: installs need an Electron mirror on GitHub-throttled networks (ELECTRON_MIRROR). See docs/superpowers/specs for full design + evidence. Co-Authored-By: Claude Opus 4.8 --- build/icon.icns | Bin 0 -> 148818 bytes build/icon.png | Bin 0 -> 30856 bytes build/make-icon.mjs | 119 + ...2026-06-17-kadr-mac-optimization-design.md | 91 + electron-builder.yml | 40 + electron/main.ts | 58 +- electron/menu.ts | 99 + electron/preload.ts | 5 + package-lock.json | 2848 +++++++++++++++-- package.json | 3 + shared/types.ts | 3 + src/App.tsx | 37 +- 12 files changed, 3082 insertions(+), 221 deletions(-) create mode 100644 build/icon.icns create mode 100644 build/icon.png create mode 100644 build/make-icon.mjs create mode 100644 docs/superpowers/specs/2026-06-17-kadr-mac-optimization-design.md create mode 100644 electron-builder.yml create mode 100644 electron/menu.ts diff --git a/build/icon.icns b/build/icon.icns new file mode 100644 index 0000000000000000000000000000000000000000..42bbc6efe95295c5db2805e8c1df36a4f9aed1ff GIT binary patch literal 148818 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 z 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 literal 0 HcmV?d00001 diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5e1159e079264d74742536d8017d2b2324f4118f GIT binary patch literal 30856 zcmeFZXFyX~*9Ll!SDhJA#!4?Lh=_qoByUwcgd@%rSE|FB%RaxL2GNl^`Lkf&;Ts_J}}#Zau6 zNJ!J^^TjmA%rd>FPgiB(nGeEyxp;FbfCa4g|Nrm*D-F~J$hq6NYsSQB`OtPjbTNCj z0L>U72dOaw2>Kc=p%sIKpxO)8F+z3V?<2nD#J^&MlIeb@SRh`yu-3WXAV_XbC+6m# z5cA(L7a-`)*C#?+yI7#wm*6cfRtO6A*NVBx1_rDOYsE-{0pGy@0t9hd25%@n9C`$P zy?jL_f<;xEeLdo+R!p4hO584J-$sm3BbZihQ71;o7W}1yzg#=ErfuYem; z7N%H0oZ4?dFIpFW$oYT!!$#XT{28#RbiG);&(O0wb9f9rQyfUc7wlKL>kb`kJZ3*o zFf1S!%a$f!4gCD!$B5c@@RC4Ba%(_|@Y>7~jlV&6cCc@jf*lBDxT}=1G9QCqw^RvK zxNj2-2TN?pd~V18oZxIs@FulR_9B=!w%(;RS(Zm=b^m*$`{S55RBf2U9=){=W;z27yIl z*nUV1MBf?;G`Xd4ptxNS*pt>S=qrkU!!3^u{>QUKgS|iJ3=WXh0zZORI3X~X5Z4bI z0b^|`A6Q{)2S6eJ`+8}f(Cgpe$l#nH)e>;Ke<}4R?eUzAz7nO75OM`$tslHtxKXi7`e1EEd z_1I>Hki*}rtI4Ct4c2(%x7x_#Ln(qUsA zzns0eX&$rqj4@e1Kk{;YQe-k_H-l(YUcUzj=QcAPPGk2XM!p}Eqg&6KYiy1&jI2BZ zrg{8_dSgfjrydTKTMhK?*JH!GDKFk~?_d2(%|aJpE=7dPgDbE6^`>vIIW>uuf2g%Bo| za>WWbrI-Eq2SO96le-O04L3dTl(h3PP%17I@1o3v)(B%7>o7yLRP>PJlu82czOs?! zdM9&5+vUkFPCWLgKkc@zpUW$nc!u6(C*W-B1GoTdyZNlOs9fg|Qn@FALLR(*TOj;# z=VwIRT6Xj5`aol9$t9BxPP~7*LL2A!kVeen5MxmJaAUy)qWYEm%E8s-2Q^noGDWlI z7>(eVpjtu_1?6jN-oIjFYax|$0(Zy!S-^27tTT+WqQoPH_61z2pv7mReB3qWKc>&hw**@2!MNZeeCfhmN7~&S-pXtpIU284tjj%0AA&- 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 literal 0 HcmV?d00001 diff --git a/build/make-icon.mjs b/build/make-icon.mjs new file mode 100644 index 0000000..74126f5 --- /dev/null +++ b/build/make-icon.mjs @@ -0,0 +1,119 @@ +// Generates a placeholder Kadr app icon (build/icon.png) — a white "K" on a +// rounded-rect gradient, drawn by hand so no image tooling is required. +// Run: node build/make-icon.mjs (then iconutil builds the .icns) +import { deflateSync } from 'zlib' +import { writeFileSync, rmSync, mkdirSync } from 'fs' +import { dirname, join } from 'path' +import { fileURLToPath } from 'url' +import { execFileSync } from 'child_process' + +const S = 1024 +const here = dirname(fileURLToPath(import.meta.url)) + +// --- tiny geometry helpers --- +const clamp01 = (x) => (x < 0 ? 0 : x > 1 ? 1 : x) +// signed distance from point to segment a->b +function segDist(px, py, ax, ay, bx, by) { + const dx = bx - ax, dy = by - ay + const t = clamp01(((px - ax) * dx + (py - ay) * dy) / (dx * dx + dy * dy || 1)) + const cx = ax + t * dx, cy = ay + t * dy + return Math.hypot(px - cx, py - cy) +} +function roundRectInside(px, py, x0, y0, x1, y1, r) { + // returns true if (px,py) is inside the rounded rect + const qx = Math.max(x0 + r - px, px - (x1 - r), 0) + const qy = Math.max(y0 + r - py, py - (y1 - r), 0) + if (px < x0 || px > x1 || py < y0 || py > y1) return false + return qx * qx + qy * qy <= r * r || (qx === 0 || qy === 0) +} + +function mix(a, b, t) { + return [ + Math.round(a[0] + (b[0] - a[0]) * t), + Math.round(a[1] + (b[1] - a[1]) * t), + Math.round(a[2] + (b[2] - a[2]) * t) + ] +} + +const TOP = [0x2d, 0x7d, 0xf6] // blue +const BOT = [0x10, 0x3b, 0x8c] // deeper blue +const INK = [0xff, 0xff, 0xff] + +// K strokes (in icon space, with margin) +const m = S * 0.30 // stem left +const top = S * 0.27, bot = S * 0.73 +const mid = S * 0.50 +const hw = S * 0.052 // half stroke width +const stems = [ + [m, top, m, bot], // vertical stem + [m, mid, S * 0.72, top], // upper diagonal + [m, mid, S * 0.72, bot] // lower diagonal +] + +// RGBA buffer +const px = Buffer.alloc(S * S * 4) +const margin = S * 0.085, r = S * 0.225 +for (let y = 0; y < S; y++) { + for (let x = 0; x < S; x++) { + const i = (y * S + x) * 4 + const inBg = roundRectInside(x, y, margin, margin, S - margin, S - margin, r) + if (!inBg) { px[i + 3] = 0; continue } + const bg = mix(TOP, BOT, y / S) + // K coverage with ~1.5px antialias + let dK = Infinity + for (const s of stems) dK = Math.min(dK, segDist(x, y, s[0], s[1], s[2], s[3])) + const kCov = clamp01((hw - dK) / 2 + 0.5) + const col = mix(bg, INK, kCov) + px[i] = col[0]; px[i + 1] = col[1]; px[i + 2] = col[2]; px[i + 3] = 255 + } +} + +// --- minimal PNG encoder (RGBA, filter 0) --- +function crc32(buf) { + let c = ~0 + for (let i = 0; i < buf.length; i++) { + c ^= buf[i] + for (let k = 0; k < 8; k++) c = (c >>> 1) ^ (0xEDB88320 & -(c & 1)) + } + return ~c >>> 0 +} +function chunk(type, data) { + const len = Buffer.alloc(4); len.writeUInt32BE(data.length) + const t = Buffer.from(type) + const crc = Buffer.alloc(4); crc.writeUInt32BE(crc32(Buffer.concat([t, data]))) + return Buffer.concat([len, t, data, crc]) +} +const ihdr = Buffer.alloc(13) +ihdr.writeUInt32BE(S, 0); ihdr.writeUInt32BE(S, 4) +ihdr[8] = 8; ihdr[9] = 6 // 8-bit, RGBA +const raw = Buffer.alloc(S * (S * 4 + 1)) +for (let y = 0; y < S; y++) { + raw[y * (S * 4 + 1)] = 0 + px.copy(raw, y * (S * 4 + 1) + 1, y * S * 4, (y + 1) * S * 4) +} +const png = Buffer.concat([ + Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]), + chunk('IHDR', ihdr), + chunk('IDAT', deflateSync(raw, { level: 9 })), + chunk('IEND', Buffer.alloc(0)) +]) +const out = join(here, 'icon.png') +writeFileSync(out, png) +console.log('wrote', out, png.length, 'bytes') + +// Build the .icns (macOS only — sips/iconutil). The base PNGs are downscaled +// from the 1024² master; @2x variants reuse the next size up. +if (process.platform === 'darwin') { + const set = join(here, 'icon.iconset') + rmSync(set, { recursive: true, force: true }) + mkdirSync(set) + const sips = (sz, name) => + execFileSync('sips', ['-z', String(sz), String(sz), out, '--out', join(set, name)], { stdio: 'ignore' }) + for (const s of [16, 32, 128, 256, 512]) { + sips(s, `icon_${s}x${s}.png`) + sips(s * 2, `icon_${s}x${s}@2x.png`) + } + execFileSync('iconutil', ['-c', 'icns', set, '-o', join(here, 'icon.icns')], { stdio: 'inherit' }) + rmSync(set, { recursive: true, force: true }) + console.log('wrote', join(here, 'icon.icns')) +} diff --git a/docs/superpowers/specs/2026-06-17-kadr-mac-optimization-design.md b/docs/superpowers/specs/2026-06-17-kadr-mac-optimization-design.md new file mode 100644 index 0000000..ac4c6af --- /dev/null +++ b/docs/superpowers/specs/2026-06-17-kadr-mac-optimization-design.md @@ -0,0 +1,91 @@ +# Kadr — macOS bring-up, native polish & packaging + +**Date:** 2026-06-17 +**Target:** Apple Silicon (arm64), macOS · Node v25 host · Electron 31 + +## Goal + +Run Kadr on this Mac, give it native macOS UX (application menu + Mac-correct +GPU/keyboard behaviour), and produce a local, **ad-hoc-signed** `.app`/`.dmg` +with a placeholder icon. No Developer ID / notarization (out of scope). + +## Decisions + +| Question | Decision | +|---|---| +| Scope | Full Mac polish: run + native menu + packaged bundle | +| Missing deps | Install via Homebrew (already satisfied: ffmpeg 8.1, python3, claude) | +| Node version | Try v25 first — rebuild succeeded, no pin needed | +| Code signing | Local unsigned → ad-hoc `codesign -s -` (runs on this Mac) | +| App icon | Generated placeholder ("K", `build/make-icon.mjs`) | +| Packaging tool | electron-builder (best fit for the electron-vite `out/` layout) | +| asar | **Disabled** — the app spawns `node electron/mcp-bridge.cjs` and `python3 scripts/transcribe.py` by absolute path; unpacked = zero path rewriting | + +## Environment gotchas (not project bugs) + +1. **Electron binary download timed out** from GitHub. Fix: build/install with + `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/` (and + `ELECTRON_BUILDER_BINARIES_MIRROR` for packaging). Recorded because anyone + on a GitHub-throttled network will hit this. +2. **`ELECTRON_RUN_AS_NODE=1` leaks** from the VSCode/Claude Code host, which + makes Kadr's Electron run as plain Node and crash at + `protocol.registerSchemesAsPrivileged`. Launch with + `env -u ELECTRON_RUN_AS_NODE`. Does not affect normal launches from Finder. +3. **Finder-launched apps get a minimal PATH** (`/usr/bin:/bin:/usr/sbin: + /sbin`) — no Homebrew / `~/.local/bin` / nvm. In the packaged app this made + the Claude PTY exit instantly ("session ended") because `claude` wasn't on + PATH, and would equally have broken `node` (MCP bridge), ffmpeg/ffprobe and + python3. Fixed in code (see Phase 2 → `fixUserPath`), not just an env note. + +## Changes + +### Phase 1 — Bring-up +- `npm install` with the Electron mirror. `postinstall` (`electron-rebuild -f + -w node-pty`) rebuilt the native module cleanly on Node v25 / Electron 31. +- Verified `npm run dev`: editor mounts, `window.kadrEditor` present, RU UI. + +### Phase 2 — Mac-native (`electron/`) +- `main.ts`: `fixUserPath()` — on packaged macOS launches, rebuild + `process.env.PATH` from the user's login shell (`$SHELL -ilc`, marker- + delimited) plus Homebrew/`~/.local/bin` fallbacks, before anything spawns. + Fixes the Finder "session ended" Claude bug and unblocks ffmpeg/node/python3. +- `main.ts`: VAAPI hardware-codec switches (`ignore-gpu-blocklist`, + `VaapiVideo*`) are **Linux-only** now — macOS uses native VideoToolbox; the + flags were Linux/Intel-specific and only risked the GPU sandbox off-platform. +- `menu.ts` (new): real macOS application menu. File (New/Open/Save/Save As/ + Export) and project Undo/Redo are custom items with `CmdOrCtrl` accelerators + forwarded to the renderer over `menu:command`; clipboard/selection keep + standard roles so text fields + the Claude terminal stay native. +- `main.ts`: `Menu.setApplicationMenu(buildMenu(...))`; removed + `setMenuBarVisibility(false)`. +- `preload.ts` + `shared/types.ts`: `onMenuCommand` IPC bridge. +- `src/App.tsx`: dispatch menu commands to the existing toolbar handlers + (undo/redo defer to native text undo when an input is focused); the in-app + keyboard handler no longer double-binds Save/Undo/Redo (the menu owns them, + fixing the Mac ⌘-key gap since the old handler only checked `ctrlKey`). + +### Phase 3 — Packaging +- `build/make-icon.mjs` (new): generates `build/icon.png` + `build/icon.icns` + (geometric "K", no external image tooling). `npm run icon`. +- `electron-builder.yml`: `asar: false`, `npmRebuild: false`, arm64 dmg+zip, + `mac.identity: null`, aux files included in `files`. +- `package.json`: `icon`, `package:mac` scripts; `electron-builder` devDep. +- Build → ad-hoc sign the bundle (`codesign --force --deep -s -`). + +## Verification (evidence) + +- **Dev:** CDP confirms editor mounts, `kadrEditor`/`onMenuCommand` present. +- **Typecheck:** `npm run typecheck` clean. +- **Packaged `.app`:** launches from `file://`, editor renders, **and the + embedded Claude Code terminal starts inside the bundle** — proving node-pty, + the PTY, and the `claude` spawn all work packaged. +- **DMG:** mounts with `Kadr.app` + `/Applications` symlink, detaches clean. +- **Not automatable here:** native menu *click* (AppleScript blocked by macOS + Accessibility perms, error −1719). Menu build + IPC bridge + clean boot are + verified; the click→action hop is testable manually from the built app. + +## Out of scope (YAGNI) + +Developer ID / notarization, Windows/Linux packaging, auto-update, +`titleBarStyle: hiddenInset` (the toolbar occupies the top edge where traffic +lights sit — kept the standard title bar), deep perf tuning. diff --git a/electron-builder.yml b/electron-builder.yml new file mode 100644 index 0000000..d5a2e1a --- /dev/null +++ b/electron-builder.yml @@ -0,0 +1,40 @@ +appId: com.blacktriangle.kadr +productName: Kadr +copyright: Copyright © Black Triangle (GPL-3.0) + +# asar is intentionally OFF: the app spawns auxiliary processes by absolute +# path — `node electron/mcp-bridge.cjs` (claude.ts) and `python3 +# scripts/transcribe.py` (transcribe.ts), both resolved from app.getAppPath(). +# Keeping the app unpacked lets those spawns and their require()s resolve +# from node_modules with zero path rewriting. +asar: false + +# node-pty is already rebuilt for Electron 31 (arm64) by the postinstall +# electron-rebuild step, so skip electron-builder's own rebuild (and its +# network round-trip for headers). +npmRebuild: false + +directories: + output: dist + buildResources: build + +files: + - out/**/* + - electron/mcp-bridge.cjs + - scripts/transcribe.py + - package.json + +mac: + category: public.app-category.video + icon: build/icon.icns + # Local, unsigned distribution: no Developer ID. electron-builder applies + # an ad-hoc signature so the arm64 bundle is runnable on this machine. + identity: null + target: + - target: dmg + arch: arm64 + - target: zip + arch: arm64 + +dmg: + title: Kadr ${version} diff --git a/electron/main.ts b/electron/main.ts index c1866f6..2c8ad7e 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -1,7 +1,9 @@ -import { app, BrowserWindow, ipcMain, dialog, protocol } from 'electron' +import { app, BrowserWindow, ipcMain, dialog, protocol, Menu } from 'electron' import { join, dirname, basename } from 'path' +import { buildMenu } from './menu' import { promises as fs, createReadStream, statSync } from 'fs' -import { tmpdir } from 'os' +import { tmpdir, homedir } from 'os' +import { execFileSync } from 'child_process' import { createHash } from 'crypto' import { probeMedia, makeProxy, ExportMuxer } from './ffmpeg' import { registerClaudeIpc } from './claude' @@ -15,14 +17,48 @@ protocol.registerSchemesAsPrivileged([ { scheme: 'kadr', privileges: { secure: true, stream: true, supportFetchAPI: true, bypassCSP: true } } ]) -// Let Chromium use VAAPI for hardware video encode/decode where the driver -// allows it (Intel iGPU on this machine); WebCodecs then picks it up via -// hardwareAcceleration: 'prefer-hardware'. -app.commandLine.appendSwitch('ignore-gpu-blocklist') -app.commandLine.appendSwitch( - 'enable-features', - 'VaapiVideoEncoder,VaapiVideoDecoder,VaapiVideoDecodeLinuxGL,AcceleratedVideoEncoder' -) +// A GUI app launched from Finder/LaunchServices inherits only a minimal PATH +// (/usr/bin:/bin:/usr/sbin:/sbin) — none of Homebrew, ~/.local/bin, nvm, etc. +// That silently breaks every external tool the editor shells out to: the +// `claude` CLI (its PTY just exits → "session ended"), `node` for the MCP +// bridge, and ffmpeg/ffprobe/python3. So adopt the user's real login-shell +// PATH before anything spawns. Only needed for packaged macOS launches; a +// dev run already inherits the terminal's environment. +function fixUserPath() { + if (process.platform !== 'darwin' || !app.isPackaged) return + const fallback = [ + '/opt/homebrew/bin', '/opt/homebrew/sbin', + '/usr/local/bin', '/usr/local/sbin', + join(homedir(), '.local/bin'), + '/usr/bin', '/bin', '/usr/sbin', '/sbin' + ] + let shellPath = '' + try { + const shell = process.env.SHELL || '/bin/zsh' + // login+interactive so ~/.zprofile / ~/.zshrc (nvm, pyenv, custom dirs) + // are sourced; markers isolate $PATH from any shell-startup banner noise. + const out = execFileSync(shell, ['-ilc', 'printf "_KP_<%s>_KP_" "$PATH"'], { + encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'] + }) + shellPath = out.match(/_KP_<(.*)>_KP_/)?.[1] ?? '' + } catch { /* shell unavailable — fall back to the known dirs */ } + const parts = [...shellPath.split(':'), ...fallback].filter(Boolean) + process.env.PATH = [...new Set(parts)].join(':') +} +fixUserPath() + +// Hardware video encode/decode. On Linux this means VAAPI (Intel/AMD iGPU); +// macOS and Windows already expose their native accelerators (VideoToolbox / +// Media Foundation) to Chromium + WebCodecs without these Linux-only flags, +// and forcing them off-platform only risks the GPU sandbox. WebCodecs then +// picks the hardware path up via hardwareAcceleration: 'prefer-hardware'. +if (process.platform === 'linux') { + app.commandLine.appendSwitch('ignore-gpu-blocklist') + app.commandLine.appendSwitch( + 'enable-features', + 'VaapiVideoEncoder,VaapiVideoDecoder,VaapiVideoDecodeLinuxGL,AcceleratedVideoEncoder' + ) +} // Last line of defense: a stray async error (e.g. a stream racing a request // abort) must be logged, not shown as a modal error dialog over the editor. @@ -46,7 +82,6 @@ function createWindow() { sandbox: false } }) - win.setMenuBarVisibility(false) if (process.env.ELECTRON_RENDERER_URL) { win.loadURL(process.env.ELECTRON_RENDERER_URL) } else { @@ -134,6 +169,7 @@ app.whenReady().then(() => { return new Response('not found', { status: 404 }) } }) + Menu.setApplicationMenu(buildMenu(() => win)) registerIpc() registerClaudeIpc(() => win) registerTranscribeIpc(() => win) diff --git a/electron/menu.ts b/electron/menu.ts new file mode 100644 index 0000000..89b4e62 --- /dev/null +++ b/electron/menu.ts @@ -0,0 +1,99 @@ +import { app, Menu, shell, BrowserWindow } from 'electron' +import type { MenuItemConstructorOptions } from 'electron' + +const isMac = process.platform === 'darwin' + +/** + * The application menu. File/Edit project commands are forwarded to the + * renderer over `menu:command` so they reuse the exact same handlers the + * toolbar buttons call — the menu is purely a native entry point with + * proper Cmd/Ctrl accelerators (macOS users finally get ⌘S/⌘Z/…). + * + * Clipboard/selection keep their standard roles so text inputs and the + * embedded Claude terminal behave natively; project-level undo/redo are + * custom items (the app's real history lives in the zustand store, not the + * DOM) and the renderer falls back to text undo when an input is focused. + */ +export function buildMenu(getWin: () => BrowserWindow | null): Menu { + const send = (cmd: string) => () => getWin()?.webContents.send('menu:command', cmd) + + const template: MenuItemConstructorOptions[] = [ + ...(isMac + ? [{ + label: app.name, + submenu: [ + { role: 'about' as const }, + { type: 'separator' as const }, + { role: 'services' as const }, + { type: 'separator' as const }, + { role: 'hide' as const }, + { role: 'hideOthers' as const }, + { role: 'unhide' as const }, + { type: 'separator' as const }, + { role: 'quit' as const } + ] + }] + : []), + { + label: 'File', + submenu: [ + { label: 'New Project', accelerator: 'CmdOrCtrl+N', click: send('new') }, + { label: 'Open Project…', accelerator: 'CmdOrCtrl+O', click: send('open') }, + { type: 'separator' }, + { label: 'Save', accelerator: 'CmdOrCtrl+S', click: send('save') }, + { label: 'Save As…', accelerator: 'CmdOrCtrl+Shift+S', click: send('saveAs') }, + { type: 'separator' }, + { label: 'Export…', accelerator: 'CmdOrCtrl+E', click: send('export') }, + { type: 'separator' }, + isMac ? { role: 'close' } : { role: 'quit' } + ] + }, + { + label: 'Edit', + submenu: [ + { label: 'Undo', accelerator: 'CmdOrCtrl+Z', click: send('undo') }, + { label: 'Redo', accelerator: 'CmdOrCtrl+Shift+Z', click: send('redo') }, + { type: 'separator' }, + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + { role: 'selectAll' } + ] + }, + { + label: 'View', + submenu: [ + { role: 'reload' }, + { role: 'forceReload' }, + { role: 'toggleDevTools' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + ...(isMac + ? [{ type: 'separator' as const }, { role: 'front' as const }] + : [{ role: 'close' as const }]) + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Kadr on GitHub', + click: () => shell.openExternal('https://github.com/HelpFreedom/kadr') + } + ] + } + ] + + return Menu.buildFromTemplate(template) +} diff --git a/electron/preload.ts b/electron/preload.ts index f3249b7..c7f06d4 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -77,6 +77,11 @@ const api: KadrApi = { const handler = (_e: unknown, code: number) => cb(code) ipcRenderer.on('claude:exit', handler) return () => ipcRenderer.removeListener('claude:exit', handler) + }, + onMenuCommand: (cb) => { + const handler = (_e: unknown, cmd: string) => cb(cmd) + ipcRenderer.on('menu:command', handler) + return () => ipcRenderer.removeListener('menu:command', handler) } } diff --git a/package-lock.json b/package-lock.json index 7c89b53..5f6878a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,7 @@ "": { "name": "kadr", "version": "0.1.0", + "hasInstallScript": true, "license": "GPL-3.0", "dependencies": { "@modelcontextprotocol/sdk": "^1.29.0", @@ -28,6 +29,7 @@ "@types/ws": "^8.18.1", "@vitejs/plugin-react": "^4.3.1", "electron": "^31.7.7", + "electron-builder": "^24.13.3", "electron-vite": "^2.3.0", "typescript": "^5.5.4", "vite": "^5.4.8", @@ -332,6 +334,122 @@ "node": ">=6.9.0" } }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@develar/schema-utils/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@develar/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/@develar/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@electron/get": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", @@ -392,6 +510,133 @@ "node": ">=10" } }, + "node_modules/@electron/notarize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", + "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/notarize/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", + "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/osx-sign/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@electron/rebuild": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.2.tgz", @@ -472,75 +717,180 @@ "node": ">= 10.0.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@electron/universal": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", + "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "aix" - ], + "dependencies": { + "@electron/asar": "^3.2.1", + "@malept/cross-spawn-promise": "^1.1.0", + "debug": "^4.3.1", + "dir-compare": "^3.0.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, "engines": { - "node": ">=12" + "node": ">=8.6" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], + "node_modules/@electron/universal/node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@esbuild/darwin-arm64": { + "node_modules/@electron/universal/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/universal/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", @@ -882,6 +1232,109 @@ "hono": "^4" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -955,6 +1408,61 @@ "node": ">= 12.13.0" } }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", @@ -1037,6 +1545,17 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", @@ -1488,6 +2007,16 @@ "@types/responselike": "^1.0.0" } }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/dom-webcodecs": { "version": "0.1.18", "resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.18.tgz", @@ -1501,6 +2030,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -1518,6 +2057,13 @@ "@types/node": "*" } }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "20.19.42", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.42.tgz", @@ -1528,6 +2074,18 @@ "undici-types": "~6.21.0" } }, + "node_modules/@types/plist": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, "node_modules/@types/prop-types": { "version": "15.7.15", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz", @@ -1566,6 +2124,14 @@ "@types/node": "*" } }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/@types/wicg-file-system-access": { "version": "2020.9.8", "resolved": "https://registry.npmjs.org/@types/wicg-file-system-access/-/wicg-file-system-access-2020.9.8.tgz", @@ -1614,6 +2180,16 @@ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, + "node_modules/@xmldom/xmldom": { + "version": "0.9.10", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.10.tgz", + "integrity": "sha512-A9gOqLdi6cV4ibazAjcQufGj0B1y/vDqYrcuP6d/6x8P27gRS8643Dj9o1dEKtB6O7fwxb2FgBmJS2mX7gpvdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6" + } + }, "node_modules/@xterm/addon-fit": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@xterm/addon-fit/-/addon-fit-0.11.0.tgz", @@ -1629,6 +2205,13 @@ "addons/*" ] }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true, + "license": "MIT" + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -1757,14 +2340,306 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", "dev": true, "license": "MIT" }, - "node_modules/base64-js": { + "node_modules/app-builder-lib": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", + "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/notarize": "2.2.1", + "@electron/osx-sign": "1.0.5", + "@electron/universal": "1.5.1", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.8", + "electron-publish": "24.13.1", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^5.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^5.1.1", + "read-config-file": "6.3.2", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.8", + "tar": "^6.1.12", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "24.13.3", + "electron-builder-squirrel-windows": "24.13.3" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/archiver-utils/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", @@ -1810,6 +2685,23 @@ "readable-stream": "^3.4.0" } }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.5.5" + } + }, "node_modules/body-parser": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", @@ -1938,6 +2830,103 @@ "node": "*" } }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", + "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.1", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", + "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builder-util/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/builder-util/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -2103,18 +3092,41 @@ "node": ">=10" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } + "license": "MIT" }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, @@ -2139,6 +3151,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cliui": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", @@ -2197,6 +3227,56 @@ "dev": true, "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2204,6 +3284,65 @@ "dev": true, "license": "MIT" }, + "node_modules/config-file-ts": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", + "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.3.10", + "typescript": "^5.3.3" + } + }, + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/content-disposition": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", @@ -2251,6 +3390,13 @@ "node": ">=6.6.0" } }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.6", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", @@ -2268,6 +3414,46 @@ "url": "https://opencollective.com/express" } }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2289,177 +3475,545 @@ "devOptional": true, "license": "MIT" }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dir-compare": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", + "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "^1.0.0", + "minimatch": "^3.0.4" + } + }, + "node_modules/dir-compare/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dmg-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", + "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-builder/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/dmg-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dmg-license/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/dmg-license/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "31.7.7", + "resolved": "https://registry.npmjs.org/electron/-/electron-31.7.7.tgz", + "integrity": "sha512-HZtZg8EHsDGnswFt0QeV8If8B+et63uD6RJ7I4/xhcXqmTIbI08GoubX/wm+HdY0DwcuPe1/xsgqpmYvjdjRoA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^20.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/electron-builder": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", + "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", + "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.3" + "app-builder-lib": "24.13.3", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "dmg-builder": "24.13.3", + "fs-extra": "^10.1.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.3.2", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" }, - "engines": { - "node": ">=6.0" + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "engines": { + "node": ">=14.0.0" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/electron-builder-squirrel-windows": { + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", + "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "app-builder-lib": "24.13.3", + "archiver": "^5.3.1", + "builder-util": "24.13.1", + "fs-extra": "^10.1.0" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=12" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "clone": "^1.0.2" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/defer-to-connect": { + "node_modules/electron-builder-squirrel-windows/node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=10" + "node": ">= 10.0.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "node_modules/electron-builder/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/electron-builder/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 10.0.0" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "node_modules/electron-publish": { + "version": "24.13.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", + "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "24.13.1", + "builder-util-runtime": "9.2.4", + "chalk": "^4.1.2", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "license": "MIT", - "optional": true - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron": { - "version": "31.7.7", - "resolved": "https://registry.npmjs.org/electron/-/electron-31.7.7.tgz", - "integrity": "sha512-HZtZg8EHsDGnswFt0QeV8If8B+et63uD6RJ7I4/xhcXqmTIbI08GoubX/wm+HdY0DwcuPe1/xsgqpmYvjdjRoA==", + "node_modules/electron-publish/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", - "extract-zip": "^2.0.1" - }, - "bin": { - "electron": "cli.js" + "universalify": "^2.0.0" }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-publish/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 12.20.55" + "node": ">= 10.0.0" } }, "node_modules/electron-to-chromium": { @@ -2583,6 +4137,22 @@ "node": ">= 0.4" } }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", @@ -2779,12 +4349,30 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", @@ -2801,35 +4389,115 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.4", + "mime-types": "^2.1.35" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", - "dependencies": { - "pend": "~1.2.0" + "engines": { + "node": ">= 0.6" } }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" + "mime-db": "1.52.0" }, "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "node": ">= 0.6" } }, "node_modules/forwarded": { @@ -2850,6 +4518,14 @@ "node": ">= 0.8" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -3135,6 +4811,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hasown": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", @@ -3156,6 +4848,39 @@ "node": ">=16.9.0" } }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hosted-git-info/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/http-cache-semantics": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", @@ -3236,13 +4961,38 @@ "ms": "^2.0.0" } }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-corefoundation/node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -3334,6 +5084,19 @@ "node": ">= 0.10" } }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -3380,12 +5143,67 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/isbinaryfile": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "integrity": "sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jose": { "version": "6.2.3", "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", @@ -3401,6 +5219,29 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, + "node_modules/js-yaml": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", + "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -3474,6 +5315,110 @@ "json-buffer": "3.0.1" } }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3615,6 +5560,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -3673,6 +5631,16 @@ "node": ">=10" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", @@ -3943,6 +5911,17 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -4075,6 +6054,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -4103,6 +6089,40 @@ "node": ">=8" } }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/path-to-regexp": { "version": "8.4.2", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", @@ -4136,6 +6156,21 @@ "node": ">=16.20.0" } }, + "node_modules/plist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.1.tgz", + "integrity": "sha512-ZIfcLJC+7E7FBFnDxm9MPmt7D+DidyQ26lewieO75AdhA2ayMtsJSES0iWzqJQbcVRSrTufQoy0DR94xHue0oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.9.10", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, "node_modules/postcss": { "version": "8.5.15", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", @@ -4175,6 +6210,14 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -4230,6 +6273,16 @@ "once": "^1.3.1" } }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.15.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", @@ -4346,6 +6399,24 @@ "read-binary-file-arch": "cli.js" } }, + "node_modules/read-config-file": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", + "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-file-ts": "^0.2.4", + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4361,6 +6432,17 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4594,6 +6676,26 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -4789,6 +6891,48 @@ "dev": true, "license": "ISC" }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.4.tgz", + "integrity": "sha512-rUCObTnP32Q08R2uuIrt7r9PlEonuTmtuXYcW6s5kjdlj3xbnwe+21yXptAUYcMAABLkYYTtnmzb3w3EDZfueA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -4830,6 +6974,16 @@ "node": ">= 10" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4840,6 +6994,17 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", @@ -4861,6 +7026,16 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, "node_modules/statuses": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", @@ -4895,6 +7070,22 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4908,6 +7099,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -4953,6 +7158,24 @@ "node": ">=10" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -4970,6 +7193,75 @@ "dev": true, "license": "ISC" }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/temp-file/node_modules/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/temp-file/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tmp": "^0.2.0" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -4979,6 +7271,16 @@ "node": ">=0.6" } }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, "node_modules/type-fest": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", @@ -5121,6 +7423,16 @@ "browserslist": ">= 4.21.0" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/use-sync-external-store": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", @@ -5130,6 +7442,13 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -5146,6 +7465,22 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/vite": { "version": "5.4.21", "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", @@ -5249,6 +7584,25 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -5277,6 +7631,16 @@ } } }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -5334,6 +7698,94 @@ "fd-slicer": "~1.1.0" } }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/zip-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zip-stream/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/zod": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", diff --git a/package.json b/package.json index 399d3fb..c7b381a 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,8 @@ "scripts": { "dev": "electron-vite dev", "build": "electron-vite build", + "icon": "node build/make-icon.mjs", + "package:mac": "electron-vite build && electron-builder --mac --arm64", "start": "electron-vite preview", "typecheck": "tsc --noEmit -p tsconfig.web.json && tsc --noEmit -p tsconfig.node.json", "postinstall": "electron-rebuild -f -w node-pty" @@ -32,6 +34,7 @@ "@types/ws": "^8.18.1", "@vitejs/plugin-react": "^4.3.1", "electron": "^31.7.7", + "electron-builder": "^24.13.3", "electron-vite": "^2.3.0", "typescript": "^5.5.4", "vite": "^5.4.8", diff --git a/shared/types.ts b/shared/types.ts index bb68a9e..fa8a144 100644 --- a/shared/types.ts +++ b/shared/types.ts @@ -419,4 +419,7 @@ export interface KadrApi { claudeClose(): Promise onClaudeData(cb: (data: string) => void): () => void onClaudeExit(cb: (code: number) => void): () => void + + /** Native menu commands (File/Edit) forwarded from the main process. */ + onMenuCommand(cb: (cmd: string) => void): () => void } diff --git a/src/App.tsx b/src/App.tsx index b68d539..d363a77 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -63,21 +63,11 @@ export default function App() { e.preventDefault() s.setPlaying(!s.playing) } else if (e.code === 'KeyS') { - if (e.ctrlKey) { - e.preventDefault() - if (e.shiftKey) saveProjectAs() - else saveProject() - } else s.splitAtPlayhead() + // Save (⌘/Ctrl+S) is owned by the application menu; bare S splits. + if (!e.ctrlKey && !e.metaKey) s.splitAtPlayhead() } else if (e.code === 'KeyD' || e.code === 'Delete' || e.code === 'Backspace') { if (s.selection.length) s.deleteSelection() else if (s.range) s.deleteRange() - } else if (e.code === 'KeyZ' && e.ctrlKey) { - e.preventDefault() - if (e.shiftKey) s.redo() - else s.undo() - } else if (e.code === 'KeyY' && e.ctrlKey) { - e.preventDefault() - s.redo() } else if (e.code === 'KeyC' && e.ctrlKey) { if (s.selection.length) s.copySelection() else if (s.range) s.copyRange() @@ -104,6 +94,29 @@ export default function App() { return () => window.removeEventListener('keydown', onKey) }, []) + // Native application menu (File/Edit) → reuse the toolbar handlers. + useEffect(() => { + return window.kadr.onMenuCommand((cmd) => { + const s = useEditor.getState() + switch (cmd) { + case 'new': s.setProject(newProject()); break + case 'open': openProject(); break + case 'save': saveProject(); break + case 'saveAs': saveProjectAs(); break + case 'export': s.setExportOpen(true); break + case 'undo': + case 'redo': { + // Defer to native text undo/redo while editing in a field. + const tag = (document.activeElement as HTMLElement)?.tagName + if (tag === 'INPUT' || tag === 'TEXTAREA') document.execCommand(cmd) + else if (cmd === 'undo') s.undo() + else s.redo() + break + } + } + }) + }, []) + const startSideResize = (e: React.PointerEvent) => { e.preventDefault() const startX = e.clientX