From 1c03806830df4fc908201d7e0e11a41389e6c9f2 Mon Sep 17 00:00:00 2001 From: Reese Date: Fri, 29 May 2026 00:37:06 -0500 Subject: [PATCH] feat: add sandbox QA and desktop installers --- .github/workflows/ci.yml | 6 + .github/workflows/release.yml | 68 + .gitignore | 3 + CHANGELOG.md | 15 + README.md | 54 +- build/icon-1024.png | Bin 0 -> 13434 bytes build/icon-128.png | Bin 0 -> 9842 bytes build/icon-16.png | Bin 0 -> 643 bytes build/icon-256.png | Bin 0 -> 21132 bytes build/icon-32.png | Bin 0 -> 1836 bytes build/icon-512.png | Bin 0 -> 35897 bytes build/icon-64.png | Bin 0 -> 4294 bytes build/icon.png | Bin 0 -> 13434 bytes docs/desktop-distribution.md | 111 + docs/product-research.md | 166 ++ docs/sandbox-qa.md | 69 + e2e/proof-pack.spec.ts | 35 + electron/main.cjs | 67 + package-lock.json | 4573 +++++++++++++++++++++++++++++++-- package.json | 91 +- playwright.config.ts | 24 + src/App.test.tsx | 27 +- src/App.tsx | 46 +- src/lib/storage.test.ts | 10 +- src/lib/storage.ts | 34 +- src/styles.css | 10 + src/test/setup.ts | 6 + vite.config.ts | 1 + 28 files changed, 5216 insertions(+), 200 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 build/icon-1024.png create mode 100644 build/icon-128.png create mode 100644 build/icon-16.png create mode 100644 build/icon-256.png create mode 100644 build/icon-32.png create mode 100644 build/icon-512.png create mode 100644 build/icon-64.png create mode 100644 build/icon.png create mode 100644 docs/desktop-distribution.md create mode 100644 docs/product-research.md create mode 100644 docs/sandbox-qa.md create mode 100644 e2e/proof-pack.spec.ts create mode 100644 electron/main.cjs create mode 100644 playwright.config.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7f08af4..51aadef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,12 @@ jobs: - name: Test run: npm test + - name: Install browser for sandbox smoke + run: npx playwright install --with-deps chromium + + - name: Browser sandbox smoke + run: npm run e2e + - name: Typecheck run: npm run typecheck diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..9537031 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,68 @@ +name: release + +on: + push: + tags: + - "v*" + workflow_dispatch: + +permissions: + contents: write + +env: + FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true + +jobs: + desktop: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-latest + script: dist:linux + - os: windows-latest + script: dist:win + - os: macos-latest + script: dist:mac + runs-on: ${{ matrix.os }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 24 + cache: npm + + - name: Install + run: npm ci + + - name: Test + run: npm test + + - name: Typecheck + run: npm run typecheck + + - name: Build desktop artifacts + run: npm run ${{ matrix.script }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + CSC_IDENTITY_AUTO_DISCOVERY: false + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: proof-pack-${{ matrix.os }} + path: | + release/* + !release/*.blockmap + + - name: Attach to GitHub Release + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + draft: true + files: | + release/* + !release/*.blockmap diff --git a/.gitignore b/.gitignore index e065100..67ead89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ node_modules/ dist/ +release/ coverage/ +playwright-report/ +test-results/ .vite/ .DS_Store .env diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e98f1d..b199f24 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## 0.2.0 + +Research, sandbox hardening, and desktop distribution pass. + +- Added product improvement research and roadmap docs +- Added Electron desktop shell +- Added electron-builder installer configuration for Linux, Windows 11, and macOS +- Added release workflow for desktop artifacts +- Added Playwright browser sandbox tests +- Added defensive import normalization for malformed JSON +- Added clipboard failure handling +- Added aria-live status feedback +- Added visible quality severity labels +- Added generated application icon assets + ## 0.1.0 Initial professional build. diff --git a/README.md b/README.md index a4849ed..5f6aaad 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,13 @@ This is not a generic notes app. It is a proof desk. - Per-packet Markdown and JSON export - Whole-workspace JSON export - JSON import with merge behavior +- Defensive import normalization for malformed packet files - Versioned storage with corrupt-data quarantine +- Browser sandbox smoke tests with Playwright +- Desktop installer scaffold for macOS, Linux, and Windows 11 through Electron - Responsive dark operator UI - TypeScript, Vitest, Vite, React -- GitHub Actions CI for install, test, typecheck, and production build +- GitHub Actions CI for install, test, browser smoke, typecheck, and production build ## Use cases @@ -62,10 +65,46 @@ npm run preview ```bash npm test +npm run e2e npm run typecheck npm run build ``` +## Desktop app and installers + +Run the desktop shell in development: + +```bash +npm run electron:dev +``` + +Build an unpacked desktop app: + +```bash +npm run pack +``` + +Build Linux installers on Linux: + +```bash +npm run dist:linux +``` + +Build Windows and macOS installers on native CI runners: + +```bash +npm run dist:win +npm run dist:mac +``` + +Release artifacts are configured in `.github/workflows/release.yml`. macOS and Windows releases should be signed before broad distribution. + +Research and platform details live in: + +- `docs/product-research.md` +- `docs/desktop-distribution.md` +- `docs/sandbox-qa.md` + ## Data model A proof packet captures: @@ -100,12 +139,13 @@ proof-pack:v1:corrupt The next valuable slices are: -1. Project-level workspaces and client folders -2. PDF export -3. Evidence attachment manifest -4. ReeseBrain export target -5. Mission Control integration -6. Public read-only packet links, only after auth and privacy design +1. Professional export suite with print/PDF output +2. Project-level workspaces and client folders +3. Structured evidence manifest +4. Durable storage upgrade beyond localStorage +5. ReeseBrain export target +6. Mission Control integration +7. Public read-only packet links, only after auth and privacy design ## Privacy posture diff --git a/build/icon-1024.png b/build/icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..98ea79ae93d8f88a1444046098a6ad1cd33602bf GIT binary patch literal 13434 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 YKeISM4c3On^Z)<=07*qoM6N<$f`aDj$^ZZW literal 0 HcmV?d00001 diff --git a/build/icon-16.png b/build/icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf504f5f9b401b631f22f5b2fe212b413ea77f7 GIT binary patch literal 643 zcmV-}0(||6P)Af-l&DtQ3QD);VuHlM;raO1|ZT(OXgSX?5AAs~?3 zTzmR=5nQl3o3lFSqbLdi01$+{Wal^vrST(EAQQ# zxep)vdnaj76V9c9Pt0O*PQH2?_O6S&u~m+-x}a}I_UE~4)a5W`Pw>aNS#N(nU$q_RPr9OW-I6l36y**<~E=o4OxSth(V~#^_Va}9!K}5`4kE7Awu-CgE z^!|q=bB|g=5QLPy%brA9S_goL_J16KS!u?M9XUDFufUAU(DQ z1Tapj(sHM53hVYy?`hCf>y*>Vf?iwlt#xVc00cGRDbf9to%bK&d%&AHHp&EofJx?t d6D#Ne?|;JGHj%Lomk;_gtaXmBm=?vilweq;Rq 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 literal 0 HcmV?d00001 diff --git a/build/icon-32.png b/build/icon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..78bab41b2d661f4d9a11b22b8cfe408fb1bfd539 GIT binary patch literal 1836 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

AIwH?pN2n_XHam%8yc?wk4uM&?G-FOTeH(rZ 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 literal 0 HcmV?d00001 diff --git a/build/icon.png b/build/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..98ea79ae93d8f88a1444046098a6ad1cd33602bf GIT binary patch literal 13434 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 Linux artifacts +- windows-latest -> Windows artifacts +- macos-latest -> macOS artifacts + +Artifacts are uploaded and attached to a draft GitHub Release. + +## Storage warning + +The Electron build currently uses the same browser localStorage model as the web app, scoped to the app origin. + +Future desktop data durability should move to an appData vault: + +- JSON workspace file first +- IndexedDB/OPFS for browser/PWA path +- SQLite later if audit/version history becomes central diff --git a/docs/product-research.md b/docs/product-research.md new file mode 100644 index 0000000..ac7cec6 --- /dev/null +++ b/docs/product-research.md @@ -0,0 +1,166 @@ +# Product Improvement Research + +Proof Pack is strongest when positioned as a proof desk for operators, consultants, technical builders, security reviewers, and local-service marketing teams. + +## Product thesis + +Work is not valuable just because it happened. It becomes valuable when it is packaged as proof that someone can review, trust, approve, reuse, or sell. + +Proof Pack should make that packaging fast, local-first, and reliable. + +## Strongest users + +1. Solo consultants, fractional operators, and boutique agencies + - Need recurring client-proof deliverables, project summaries, approvals, and reusable proof libraries. +2. Technical/security/ops consultants and MSP-style operators + - Need evidence manifests, hardening proof, run notes, risk notes, and audit trails. +3. Local-service marketing operators + - Need before/after proof, social proof, GBP proof, website gallery notes, and client approval packets. +4. Product builders and founders + - Need ship notes, demo proof, customer updates, and investor-friendly progress summaries. +5. Personal operating-system users + - Useful, but weaker as the first paid wedge. + +## Ranked improvements + +### 1. Professional export suite + +The sellable artifact is the deliverable. Add print/PDF export, branded cover pages, executive summary, evidence appendix, and export profiles: + +- client brief +- audit appendix +- case study draft +- internal ship note +- approval request + +First slice: print stylesheet and browser PDF export flow. + +### 2. Client/project workspaces + +Packets should live under recurring client and project contexts. + +First slice: project entity with client, default owner, default tags, status rollup, and grouped packet list. + +### 3. Structured evidence manifest + +Evidence should become typed, reviewable, and reusable. + +Evidence item fields: + +- label +- type: URL, file path, screenshot, metric, command output, document, before/after, decision, approval +- source +- date captured +- owner +- verification status +- confidentiality level +- notes +- optional hash + +First slice: evidence table editor while preserving readable Markdown export. + +### 4. Durable local data layer + +localStorage is acceptable for v0.1 but fragile for professional use. + +Next options: + +- IndexedDB for browser/PWA +- Electron appData JSON vault +- SQLite later if full audit/versioning becomes central + +First slice: backup status, last-saved indicator, import preview, and one-click workspace backup. + +### 5. Guided workflow + +Reframe the app around stages: + +Capture -> Verify -> Package -> Review -> Send -> Reuse + +First slice: quality findings jump to fields and include examples. + +### 6. Version history and audit-trail-lite + +Track create, edit, import, export, status change, and review events. + +Be honest: audit-trail-lite, not compliance-grade immutability. + +### 7. Review and approval workflow + +Do local/offline review packages before public links. + +First slice: + +- approval request export +- reviewer notes +- approve/change-request status +- signature/date fields in exported packet + +### 8. Capture helpers + +Reduce friction from scattered proof. + +First slice: + +- add evidence from clipboard +- parse URLs, file paths, markdown lists, command output, and metrics + +Later: + +- CLI importer +- browser bookmarklet +- screenshot helper + +### 9. Template and brand kits + +Make the tool useful in 60 seconds. + +Add templates for: + +- monthly client proof report +- security hardening proof +- local SEO/social proof +- product ship proof +- incident/postmortem proof +- consulting recommendation packet + +### 10. Commercial trust surface + +Add first-run demo workspace, storage warnings, release artifacts, privacy-first positioning, and desktop/PWA packaging. + +## What not to build yet + +- public links +- accounts +- cloud sync +- real-time collaboration +- compliance-platform claims +- CRM, billing, task boards, or calendars +- large binary attachment storage before vault design +- telemetry +- deep SaaS integrations before import/export primitives are strong + +## Near-term roadmap + +### 0-30 days + +- PDF/print export +- project folders +- evidence manifest v1 +- sample packets +- backup/status UI +- desktop installers + +### 30-60 days + +- durable storage upgrade +- richer quality rubric +- activity log/version history +- review package export + +### 60-90 days + +- capture helpers +- brand/template kits +- optional PWA +- early paid beta positioning diff --git a/docs/sandbox-qa.md b/docs/sandbox-qa.md new file mode 100644 index 0000000..624db3b --- /dev/null +++ b/docs/sandbox-qa.md @@ -0,0 +1,69 @@ +# Sandbox QA Notes + +This pass used unit tests, Testing Library, Vite smoke loading, and Playwright browser sandbox tests. + +## Bugs found and fixed + +### Malformed import crash + +Problem: + +- Importing packet JSON with non-string fields could crash completion scoring and packet rendering. + +Fix: + +- Import now reuses the normalized store parser. +- Empty packet-shaped objects are rejected. +- Malformed fields fall back safely or are filtered. +- Bad imports show a status message instead of crashing. + +Coverage: + +- storage normalization test +- app malformed import test +- Playwright malformed import smoke test + +### Clipboard failure + +Problem: + +- Browsers without clipboard support could reject the Copy action. + +Fix: + +- Copy checks for clipboard support. +- Clipboard errors are caught. +- User gets Copy unavailable or Copy failed status. + +Coverage: + +- app clipboard failure test + +### Accessibility feedback + +Problem: + +- Toast status was visual only. +- Quality severity was color-only. + +Fix: + +- Toast now uses role=status and aria-live=polite. +- Quality findings show severity text. + +## Current sandbox command + +```bash +npm run e2e +``` + +The e2e suite starts Vite, opens Chromium, creates a packet, saves it, searches it, downloads Markdown, and imports malformed JSON safely. + +## Remaining QA gaps + +- dirty edit protection or autosave +- duplicate import conflict handling +- storage quota failure UI +- PDF/print export once implemented +- Electron app smoke test +- release artifact install smoke tests per OS diff --git a/e2e/proof-pack.spec.ts b/e2e/proof-pack.spec.ts new file mode 100644 index 0000000..4764817 --- /dev/null +++ b/e2e/proof-pack.spec.ts @@ -0,0 +1,35 @@ +import { expect, test } from "@playwright/test"; + +test("creates, saves, searches, and exports a proof packet", async ({ page }) => { + await page.goto("/"); + + await expect(page.getByRole("heading", { name: "Proof beats memory." })).toBeVisible(); + await page.getByLabel("Title").fill("Sandbox proof packet"); + await page.getByLabel("Client or project").fill("Acropolis Ops"); + await page.getByLabel("Evidence").fill("Local sandbox run\nBuild output"); + await page.getByRole("button", { name: "Save" }).click(); + + await expect(page.getByRole("status")).toContainText("Packet saved"); + await page.getByLabel("Search proof").fill("Acropolis"); + await expect(page.getByRole("button", { name: /Sandbox proof packet/ })).toBeVisible(); + + const download = page.waitForEvent("download"); + await page.getByRole("button", { name: "MD" }).click(); + expect((await download).suggestedFilename()).toBe("sandbox-proof-packet.md"); +}); + +test("handles malformed imports without crashing", async ({ page }) => { + await page.goto("/"); + await page.getByLabel("Search proof").fill(""); + + const chooser = page.waitForEvent("filechooser"); + await page.getByRole("button", { name: "Import JSON" }).click(); + await (await chooser).setFiles({ + name: "bad.json", + mimeType: "application/json", + buffer: Buffer.from(JSON.stringify({ packets: [{}, { title: { nested: true }, evidence: ["valid", 12] }] })) + }); + + await expect(page.getByRole("status")).toContainText("Imported 1 packet"); + await expect(page.getByText("Untitled proof packet")).toBeVisible(); +}); diff --git a/electron/main.cjs b/electron/main.cjs new file mode 100644 index 0000000..6172bb7 --- /dev/null +++ b/electron/main.cjs @@ -0,0 +1,67 @@ +const { app, BrowserWindow, net, protocol, shell } = require("electron"); +const path = require("node:path"); +const { pathToFileURL } = require("node:url"); + +protocol.registerSchemesAsPrivileged([ + { + scheme: "proofpack", + privileges: { + standard: true, + secure: true, + supportFetchAPI: true, + corsEnabled: false + } + } +]); + +const root = path.join(__dirname, ".."); +const dist = path.join(root, "dist"); +const dev = process.env.VITE_DEV_SERVER_URL || process.env.ELECTRON_RENDERER_URL; + +function asset(request) { + const url = new URL(request.url); + const rel = decodeURIComponent(url.pathname === "/" ? "/index.html" : url.pathname); + const file = path.normalize(path.join(dist, rel)); + if (!file.startsWith(dist)) return new Response("Forbidden", { status: 403 }); + return net.fetch(pathToFileURL(file).toString()); +} + +async function window() { + const win = new BrowserWindow({ + width: 1440, + height: 980, + minWidth: 980, + minHeight: 720, + backgroundColor: "#0d0d0b", + title: "Proof Pack", + show: false, + webPreferences: { + contextIsolation: true, + nodeIntegration: false, + sandbox: true, + devTools: true + } + }); + + win.once("ready-to-show", () => win.show()); + win.webContents.setWindowOpenHandler(({ url }) => { + if (url.startsWith("https://") || url.startsWith("mailto:")) void shell.openExternal(url); + return { action: "deny" }; + }); + + if (dev) await win.loadURL(dev); + else await win.loadURL("proofpack://app/index.html"); +} + +app.whenReady().then(async () => { + protocol.handle("proofpack", asset); + await window(); + + app.on("activate", () => { + if (BrowserWindow.getAllWindows().length === 0) void window(); + }); +}); + +app.on("window-all-closed", () => { + if (process.platform !== "darwin") app.quit(); +}); diff --git a/package-lock.json b/package-lock.json index cbf4179..c48ccb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,13 @@ { "name": "proof-pack", - "version": "0.1.0", + "version": "0.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "proof-pack", - "version": "0.1.0", + "version": "0.2.0", + "license": "MIT", "dependencies": { "@vitejs/plugin-react": "latest", "react": "latest", @@ -15,13 +16,18 @@ "vite": "latest" }, "devDependencies": { + "@playwright/test": "^1.60.0", "@testing-library/jest-dom": "latest", "@testing-library/react": "latest", "@testing-library/user-event": "latest", "@types/react": "latest", "@types/react-dom": "latest", + "concurrently": "^10.0.0", + "electron": "^42.3.0", + "electron-builder": "^26.8.1", "jsdom": "latest", - "vitest": "latest" + "vitest": "latest", + "wait-on": "^9.0.10" } }, "node_modules/@adobe/css-tools": { @@ -272,6 +278,364 @@ "node": ">=20.19.0" } }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@electron/asar": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/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/@electron/asar/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@electron/asar/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@electron/fuses": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "integrity": "sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.1", + "fs-extra": "^9.0.1", + "minimist": "^1.2.5" + }, + "bin": { + "electron-fuses": "dist/bin.js" + } + }, + "node_modules/@electron/fuses/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@electron/fuses/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@electron/fuses/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/fuses/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@electron/get": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz", + "integrity": "sha512-pjoBpru1KdEtcExBnuHAP1cAc/5faoedw0hzJkL3o4/IJp7HNF1+fbrdxT3gMYRX2oJfvnA/WXeCTVQpYYxyJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", + "progress": "^2.0.3", + "semver": "^7.6.3", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=22.12.0" + }, + "optionalDependencies": { + "undici": "^7.24.4" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/osx-sign": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "integrity": "sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "compare-version": "^0.1.2", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/rebuild": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.0.4.tgz", + "integrity": "sha512-Rzc39XPdk/+/wBG8MfwAHohXflep0ITUfulb6Rgz3R0NeSB1noE+E9/M/cb8ftCAiyDD9PPhLuuWgE1GaInbKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.1.1", + "node-abi": "^4.2.0", + "node-api-version": "^0.2.1", + "node-gyp": "^12.2.0", + "read-binary-file-arch": "^1.0.6" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/@electron/universal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "integrity": "sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/asar": "^3.3.1", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" + }, + "engines": { + "node": ">=16.4" + } + }, + "node_modules/@electron/universal/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/@electron/universal/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@electron/universal/node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/universal/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/@electron/windows-sign": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@electron/windows-sign/-/windows-sign-1.2.2.tgz", + "integrity": "sha512-dfZeox66AvdPtb2lD8OsIIQh12Tp0GNCRUDfBHIKGpbmopZto2/A8nSpYYLoedPIHpqkeblZ/k8OV0Gy7PYuyQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "peer": true, + "dependencies": { + "cross-dirname": "^0.1.0", + "debug": "^4.3.4", + "fs-extra": "^11.1.1", + "minimist": "^1.2.8", + "postject": "^1.0.0-alpha.6" + }, + "bin": { + "electron-windows-sign": "bin/electron-windows-sign.js" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@electron/windows-sign/node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", @@ -321,6 +685,73 @@ } } }, + "node_modules/@hapi/address": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-5.1.1.tgz", + "integrity": "sha512-A+po2d/dVoY7cYajycYI43ZbYMXukuopIsqCjh5QzsBCipDtdofHntljDlpccMjIfTy6UOkg+5KPriwYch2bXA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/formula": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-3.0.2.tgz", + "integrity": "sha512-hY5YPNXzw1He7s0iqkRQi+uMGh383CGdyyIGYtB+W5N3KHPXoqychklvHhKCC9M3Xtv0OCs/IHw+r4dcHtBYWw==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/hoek": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-11.0.7.tgz", + "integrity": "sha512-HV5undWkKzcB4RZUusqOpcgxOaq6VOAH7zhhIr2g3G8NF/MlFO75SjOr2NfuSx0Mh40+1FqCkagKLJRykUWoFQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.1.tgz", + "integrity": "sha512-EKQmr16tM8s16vTT3cA5L0kZZcTMU5DUOZTuvpnY738m+jyP3JIUj+Mm1xc1rsLkGBQ/gVnfKYPwOmPg1tUR4Q==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/tlds": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@hapi/tlds/-/tlds-1.1.6.tgz", + "integrity": "sha512-xdi7A/4NZokvV0ewovme3aUO5kQhW9pQ2YD1hRqZGhhSi5rBv4usHYidVocXSi9eihYsznZxLtAiEYYUL6VBGw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@hapi/topo": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-6.0.2.tgz", + "integrity": "sha512-KR3rD5inZbGMrHmgPxsJ9dbi6zEK+C3ZwUwTa+eMwWLz7oijWUTWD2pMSNNYJAU6Qq+65NkxXjqHr/7LM2Xkqg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^11.0.2" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", @@ -328,6 +759,61 @@ "dev": true, "license": "MIT" }, + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", @@ -355,10 +841,26 @@ "url": "https://github.com/sponsors/Boshen" } }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz", - "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==", + "node_modules/@playwright/test": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", + "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.2.tgz", + "integrity": "sha512-ZS4D1JPGn/MYQN/SYDWftIE/nVsM8j/AFOYEzAoOE2O3NktQOZru+/vYXGbR/qtdLdIfGCP0lcoJiYVzsEz+iQ==", "cpu": [ "arm64" ], @@ -621,6 +1123,19 @@ "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "license": "MIT" }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", @@ -628,6 +1143,19 @@ "dev": true, "license": "MIT" }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@testing-library/dom": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", @@ -736,6 +1264,19 @@ "license": "MIT", "peer": true }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, "node_modules/@types/chai": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", @@ -747,6 +1288,16 @@ "assertion-error": "^2.0.1" } }, + "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/deep-eql": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", @@ -761,6 +1312,62 @@ "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", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.12.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.4.tgz", + "integrity": "sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.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/react": { "version": "19.2.15", "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.15.tgz", @@ -781,6 +1388,35 @@ "@types/react": "^19.2.0" } }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/verror": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", + "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vitejs/plugin-react": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.2.tgz", @@ -919,13 +1555,76 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@xmldom/xmldom": { + "version": "0.8.13", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", + "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/7zip-bin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=8" } @@ -944,213 +1643,2256 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/app-builder-bin": { + "version": "5.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.12.tgz", + "integrity": "sha512-j87o0j6LqPL3QRr8yid6c+Tt5gC7xNfYo6uQIQkorAC6MpeayVMZrEDzKmJJ/Hlv7EnOQpaRm53k6ktDYZyB6w==", "dev": true, - "license": "Apache-2.0", + "license": "MIT" + }, + "node_modules/app-builder-lib": { + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.8.1.tgz", + "integrity": "sha512-p0Im/Dx5C4tmz8QEE1Yn4MkuPC8PrnlRneMhWJj7BBXQfNTJUshM/bp3lusdEsDbvvfJZpXWnYesgSLvwtM2Zw==", + "dev": true, + "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "@develar/schema-utils": "~2.6.5", + "@electron/asar": "3.4.1", + "@electron/fuses": "^1.8.0", + "@electron/get": "^3.0.0", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.3", + "@electron/rebuild": "^4.0.3", + "@electron/universal": "2.0.3", + "@malept/flatpak-bundler": "^0.4.0", + "@types/fs-extra": "9.0.13", + "async-exit-hook": "^2.0.1", + "builder-util": "26.8.1", + "builder-util-runtime": "9.5.1", + "chromium-pickle-js": "^0.2.0", + "ci-info": "4.3.1", + "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "26.8.1", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "isbinaryfile": "^5.0.0", + "jiti": "^2.4.2", + "js-yaml": "^4.1.0", + "json5": "^2.2.3", + "lazy-val": "^1.0.5", + "minimatch": "^10.0.3", + "plist": "3.1.0", + "proper-lockfile": "^4.1.2", + "resedit": "^1.7.0", + "semver": "~7.7.3", + "tar": "^7.5.7", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0", + "which": "^5.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "26.8.1", + "electron-builder-squirrel-windows": "26.8.1" } }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "node_modules/app-builder-lib/node_modules/@electron/get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "integrity": "sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==", "dev": true, "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" } }, - "node_modules/bidi-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", - "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "license": "MIT", "dependencies": { - "require-from-string": "^2.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" } }, - "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "node_modules/app-builder-lib/node_modules/@electron/get/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/app-builder-lib/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "node_modules/app-builder-lib/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/css-tree": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", - "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "node_modules/app-builder-lib/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", - "dependencies": { - "mdn-data": "2.27.1", - "source-map-js": "^1.2.1" + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=10" } }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "node_modules/app-builder-lib/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "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": "MIT" + "license": "Python-2.0" }, - "node_modules/data-urls": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", - "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "whatwg-mimetype": "^5.0.0", - "whatwg-url": "^16.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "dequal": "^2.0.3" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "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" + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", + "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/dom-accessibility-api": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", - "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "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", - "peer": 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/axios": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-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": "26.8.1", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-26.8.1.tgz", + "integrity": "sha512-pm1lTYbGyc90DHgCDO7eo8Rl4EqKLciayNbZqGziqnH9jrlKe8ZANGdityLZU+pJh16dfzjAx2xQq9McuIPEtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/debug": "^4.1.6", + "7zip-bin": "~5.2.0", + "app-builder-bin": "5.0.0-alpha.12", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.6", + "debug": "^4.3.4", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "js-yaml": "^4.1.0", + "sanitize-filename": "^1.6.3", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0", + "tiny-async-pool": "1.3.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.5.1.tgz", + "integrity": "sha512-qt41tMfgHTllhResqM5DcnHyDIWNgzHvuY2jDcYP9iaGpkWxTUzV6GQjDeLnlR1/DtdlcsWQbA7sByMpmJFTLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/builder-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/builder-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/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/cliui/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-10.0.0.tgz", + "integrity": "sha512-DRrk10z3sVPpguNe8od2cGNqZGqbT15rwAnxD4dG3b78mdNNb/gJyr8T834Oj518WcBmTktrt4FhdwZn09ZWSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "5.6.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.4", + "supports-color": "10.2.2", + "tree-kill": "1.2.2", + "yargs": "18.0.0" + }, + "bin": { + "conc": "dist/bin/index.js", + "concurrently": "dist/bin/index.js" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "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", + "optional": true + }, + "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/cross-dirname": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cross-dirname/-/cross-dirname-0.1.0.tgz", + "integrity": "sha512-+R08/oI0nl3vfPcqftZRpytksBXDzOUveBq/NBVx0sUp1axwzPQrKinNx5yd5sxPu8j1wIy8AfnVQ+5eFdha6Q==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-7.0.0.tgz", + "integrity": "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^5.0.0", + "whatwg-url": "^16.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "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/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/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/dir-compare": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " + } + }, + "node_modules/dir-compare/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/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": "26.8.1", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.8.1.tgz", + "integrity": "sha512-glMJgnTreo8CFINujtAhCgN96QAqApDMZ8Vl1r8f0QT8QprvC1UCltV4CcWj20YoIyLZx6IUskaJZ0NV8fokcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.8.1", + "builder-util": "26.8.1", + "fs-extra": "^10.1.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "42.3.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-42.3.0.tgz", + "integrity": "sha512-9ZiLdRXk+WDxW1OgIUz8J2rIQ5TYU9o629gCOjU48Q3dQiOmym7osWsH5Ubs/Jh4uuFLn6m6SBD2rmRXLAPz9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js", + "install-electron": "install.js" + }, + "engines": { + "node": ">= 22.12.0" + } + }, + "node_modules/electron-builder": { + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.8.1.tgz", + "integrity": "sha512-uWhx1r74NGpCagG0ULs/P9Nqv2nsoo+7eo4fLUOB8L8MdWltq9odW/uuLXMFCDGnPafknYLZgjNX0ZIFRzOQAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "app-builder-lib": "26.8.1", + "builder-util": "26.8.1", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "dmg-builder": "26.8.1", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder-squirrel-windows": { + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.8.1.tgz", + "integrity": "sha512-o288fIdgPLHA76eDrFADHPoo7VyGkDCYbLV1GzndaMSAVBoZrGvM9m2IehdcVMzdAZJ2eV9bgyissQXHv5tGzA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "26.8.1", + "builder-util": "26.8.1", + "electron-winstaller": "5.4.0" + } + }, + "node_modules/electron-builder/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/electron-builder/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/electron-builder/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-builder/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/electron-builder/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-publish": { + "version": "26.8.1", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.8.1.tgz", + "integrity": "sha512-q+jrSTIh/Cv4eGZa7oVR+grEJo/FoLMYBAnSL5GCtqwUpr1T+VgKB/dn1pnzxIxqD8S/jP1yilT9VrwCqINR4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "26.8.1", + "builder-util-runtime": "9.5.1", + "chalk": "^4.1.2", + "form-data": "^4.0.5", + "fs-extra": "^10.1.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/electron-publish/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/electron-publish/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/electron-winstaller": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "integrity": "sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@electron/asar": "^3.2.1", + "debug": "^4.1.1", + "fs-extra": "^7.0.1", + "lodash": "^4.17.21", + "temp": "^0.9.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "@electron/windows-sign": "^1.1.2" + } + }, + "node_modules/electron-winstaller/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/electron-winstaller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-winstaller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } }, "node_modules/entities": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz", "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==", "dev": true, - "license": "BSD-2-Clause", + "license": "BSD-2-Clause", + "engines": { + "node": ">=20.19.0" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz", + "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "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/filelist/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/filelist/node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/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/glob/node_modules/brace-expansion": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", + "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { - "node": ">=20.19.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-module-lexer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", - "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "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": "MIT", + "license": "ISC", "dependencies": { - "@types/estree": "^1.0.0" + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "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": "Apache-2.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=12.0.0" + "node": ">=10" } }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "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/html-encoding-sniffer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", + "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "dev": true, "license": "MIT", + "dependencies": { + "@exodus/bytes": "^1.6.0" + }, "engines": { - "node": ">=12.0.0" + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, - "peerDependencies": { - "picomatch": "^3 || ^4" + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "engines": { + "node": ">=10.19.0" } }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "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.16.0 || ^10.6.0 || >=11.0.0" + "node": "^8.11.2 || >=10" } }, - "node_modules/html-encoding-sniffer": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-6.0.0.tgz", - "integrity": "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==", + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "dependencies": { - "@exodus/bytes": "^1.6.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -1161,6 +3903,35 @@ "node": ">=8" } }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -1168,6 +3939,76 @@ "dev": true, "license": "MIT" }, + "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": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "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/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/joi": { + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/joi/-/joi-18.2.1.tgz", + "integrity": "sha512-2/OKlogiESf2Nh3TFCrRjrr9z1DRHeW0I+KReF67+4J0Ns+8hBtHRmoWAZ2OFU6I5+TWLEe6sVlSdXPjHm5UbQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/address": "^5.1.1", + "@hapi/formula": "^3.0.2", + "@hapi/hoek": "^11.0.7", + "@hapi/pinpoint": "^2.0.1", + "@hapi/tlds": "^1.1.1", + "@hapi/topo": "^6.0.2", + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">= 20" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1176,6 +4017,19 @@ "license": "MIT", "peer": true }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/jsdom": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz", @@ -1217,6 +4071,71 @@ } } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.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/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", + "dev": true, + "license": "MIT" + }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -1478,43 +4397,130 @@ "url": "https://opencollective.com/parcel" } }, + "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/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/lru-cache": { "version": "11.5.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", "dev": true, - "license": "BlueOak-1.0.0", + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", "engines": { - "node": "20 || >=22" + "node": ">= 0.4" } }, - "node_modules/lz-string": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", - "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "node_modules/mdn-data": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "dev": true, + "license": "CC0-1.0" + }, + "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", - "peer": true, "bin": { - "lz-string": "bin/bin.js" + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/mdn-data": { - "version": "2.27.1", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", - "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, - "license": "CC0-1.0" + "license": "MIT", + "engines": { + "node": ">=4" + } }, "node_modules/min-indent": { "version": "1.0.1", @@ -1526,6 +4532,76 @@ "node": ">=4" } }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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": "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/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/nanoid": { "version": "3.3.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", @@ -1544,6 +4620,148 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/node-abi": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-4.31.0.tgz", + "integrity": "sha512-Erq5w/t3syw3s4sDsUaX4QttIdBPsGKTT1DTRsCkTonGggczhlDKm/wDX3o+HPJpQ41EjXCbcmXf0tgr5YZJXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + }, + "engines": { + "node": ">=22.12.0" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-api-version": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, + "node_modules/node-gyp": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.3.0.tgz", + "integrity": "sha512-QNcUWM+HgJplcPzBvFBZ9VXacyGZ4+VTOb80PwWR+TlVzoHbRKULNEzpRsnaoxG3Wzr7Qh7BYxGDU3CbKib2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "undici": "^6.25.0", + "which": "^6.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } + }, + "node_modules/node-gyp/node_modules/undici": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.26.0.tgz", + "integrity": "sha512-4yqz8a3n5HmGTlsbADNtr/dJlhkh/55Rq798G6ibiULcXbDtaLpTl1pvdqcbFfeoj3iSi52lePFM7h9H21cw/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^4.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/obug": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", @@ -1555,6 +4773,42 @@ ], "license": "MIT" }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-8.0.1.tgz", @@ -1568,6 +4822,26 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", @@ -1575,6 +4849,28 @@ "dev": true, "license": "MIT" }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -1593,6 +4889,68 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", + "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.60.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.60.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", + "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/plist": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xmldom/xmldom": "^0.8.8", + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=10.4.0" + } + }, "node_modules/postcss": { "version": "8.5.15", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", @@ -1613,12 +4971,42 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.12", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postject": { + "version": "1.0.0-alpha.6", + "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", + "integrity": "sha512-b9Eb8h2eVqNE8edvKdwqkrY6O7kAwmI8kcnBv1NScolYJbo59XUF0noFq+lxbC1yN20bmC0WBEbDC5H/7ASb0A==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "commander": "^9.4.0" + }, + "bin": { + "postject": "dist/cli.js" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=14.0.0" + } + }, + "node_modules/postject/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || >=14" } }, "node_modules/pretty-format": { @@ -1637,6 +5025,73 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, + "node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -1647,6 +5102,19 @@ "node": ">=6" } }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/react": { "version": "19.2.6", "resolved": "https://registry.npmjs.org/react/-/react-19.2.6.tgz", @@ -1676,6 +5144,19 @@ "license": "MIT", "peer": true }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, "node_modules/redent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", @@ -1690,6 +5171,16 @@ "node": ">=8" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -1700,6 +5191,88 @@ "node": ">=0.10.0" } }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/rolldown": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.2.tgz", @@ -1733,6 +5306,43 @@ "@rolldown/binding-win32-x64-msvc": "1.0.2" } }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", @@ -1752,6 +5362,80 @@ "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, + "node_modules/semver": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.1.tgz", + "integrity": "sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz", + "integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -1759,6 +5443,81 @@ "dev": true, "license": "ISC" }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "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/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/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -1768,6 +5527,25 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -1775,6 +5553,16 @@ "dev": true, "license": "MIT" }, + "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/std-env": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", @@ -1782,6 +5570,34 @@ "dev": true, "license": "MIT" }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-indent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", @@ -1795,6 +5611,32 @@ "node": ">=8" } }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -1802,6 +5644,69 @@ "dev": true, "license": "MIT" }, + "node_modules/tar": { + "version": "7.5.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.15.tgz", + "integrity": "sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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/tiny-async-pool": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "integrity": "sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.5.0" + } + }, + "node_modules/tiny-async-pool/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -1865,6 +5770,26 @@ "dev": true, "license": "MIT" }, + "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/tough-cookie": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", @@ -1891,12 +5816,46 @@ "node": ">=20" } }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "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/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD", - "optional": true + "devOptional": true, + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/typescript": { "version": "6.0.3", @@ -1921,6 +5880,56 @@ "node": ">=20.18.1" } }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/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": "8.0.14", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.14.tgz", @@ -2101,6 +6110,26 @@ "node": ">=18" } }, + "node_modules/wait-on": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-9.0.10.tgz", + "integrity": "sha512-rCoJEhvMr0X6alHmwc9abbrA5ZrLZFKpFQVKPNFwl2h7DapXOGdmimIHDtLOWhT4PjhZhxFEtZoQgEXbkDWdZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "axios": "^1.16.0", + "joi": "^18.2.1", + "lodash": "^4.18.1", + "minimist": "^1.2.8", + "rxjs": "^7.8.2" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/webidl-conversions": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-8.0.1.tgz", @@ -2136,6 +6165,22 @@ "node": "^20.19.0 || ^22.12.0 || >=24.0.0" } }, + "node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -2153,6 +6198,98 @@ "node": ">=8" } }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/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/wrap-ansi/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/wrap-ansi/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/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/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, "node_modules/xml-name-validator": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", @@ -2163,12 +6300,148 @@ "node": ">=18" } }, + "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/xmlchars": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true, "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/yargs/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/yargs/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs/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/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 8e82587..e2145d1 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,108 @@ { "name": "proof-pack", - "version": "0.1.0", + "version": "0.2.0", "private": true, "description": "Local-first proof packet workspace for turning work into client-ready evidence.", + "author": { + "name": "Reese", + "email": "hermes@acropolisops.com" + }, + "license": "MIT", "type": "module", + "main": "electron/main.cjs", "scripts": { - "dev": "vite --host 127.0.0.1", + "dev": "vite --host 127.0.0.1 --strictPort", "build": "tsc -b && vite build", "preview": "vite preview --host 127.0.0.1", "test": "vitest run", "test:watch": "vitest", - "typecheck": "tsc -b" + "typecheck": "tsc -b", + "e2e": "playwright test", + "electron:dev": "concurrently -k \"npm run dev\" \"wait-on http://127.0.0.1:5173 && electron .\"", + "pack": "npm run build && electron-builder --dir --publish never", + "dist": "npm run build && electron-builder --publish never", + "dist:linux": "npm run build && electron-builder --linux AppImage deb --publish never", + "dist:win": "npm run build && electron-builder --win nsis portable --publish never", + "dist:mac": "npm run build && electron-builder --mac dmg zip --publish never" }, "dependencies": { "@vitejs/plugin-react": "latest", - "vite": "latest", - "typescript": "latest", "react": "latest", - "react-dom": "latest" + "react-dom": "latest", + "typescript": "latest", + "vite": "latest" }, "devDependencies": { + "@playwright/test": "^1.60.0", "@testing-library/jest-dom": "latest", "@testing-library/react": "latest", "@testing-library/user-event": "latest", "@types/react": "latest", "@types/react-dom": "latest", + "concurrently": "^10.0.0", + "electron": "^42.3.0", + "electron-builder": "^26.8.1", "jsdom": "latest", - "vitest": "latest" + "vitest": "latest", + "wait-on": "^9.0.10" + }, + "build": { + "appId": "com.proofpack.desktop", + "productName": "Proof Pack", + "directories": { + "output": "release", + "buildResources": "build" + }, + "artifactName": "Proof-Pack-${version}-${os}-${arch}.${ext}", + "files": [ + "dist/**/*", + "electron/**/*", + "package.json" + ], + "asar": true, + "mac": { + "target": [ + "dmg", + "zip" + ], + "category": "public.app-category.productivity" + }, + "win": { + "target": [ + { + "target": "nsis", + "arch": [ + "x64" + ] + }, + { + "target": "portable", + "arch": [ + "x64" + ] + } + ] + }, + "nsis": { + "oneClick": false, + "perMachine": false, + "allowToChangeInstallationDirectory": true, + "createDesktopShortcut": true, + "createStartMenuShortcut": true + }, + "linux": { + "target": [ + "AppImage", + "deb" + ], + "category": "Office", + "maintainer": "Reese " + }, + "publish": [ + { + "provider": "github", + "releaseType": "draft" + } + ] } } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 0000000..6dc20b4 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,24 @@ +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./e2e", + timeout: 30_000, + expect: { timeout: 5_000 }, + reporter: "list", + use: { + baseURL: "http://127.0.0.1:5173", + trace: "retain-on-failure" + }, + webServer: { + command: "npm run dev -- --port 5173", + url: "http://127.0.0.1:5173", + reuseExistingServer: !process.env.CI, + timeout: 60_000 + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] } + } + ] +}); diff --git a/src/App.test.tsx b/src/App.test.tsx index 44adbdd..0dc5e87 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -1,6 +1,6 @@ -import { render, screen } from "@testing-library/react"; +import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; -import { beforeEach, describe, expect, it } from "vitest"; +import { beforeEach, describe, expect, it, vi } from "vitest"; import { App } from "./App"; import { STORE_KEY } from "./lib/storage"; @@ -23,4 +23,27 @@ describe("Proof Pack app", () => { expect(raw).toBeTruthy(); expect(JSON.parse(raw || "{}").packets[0].title).toBe("Launch proof packet"); }); + + it("does not crash when importing malformed packet JSON", async () => { + render(); + const input = document.querySelector('input[type="file"]'); + const file = new File([JSON.stringify({ packets: [{}, { title: { nested: true }, evidence: ["valid", 12] }] })], "bad.json", { + type: "application/json" + }); + + fireEvent.change(input as HTMLInputElement, { target: { files: [file] } }); + + await waitFor(() => expect(screen.getByRole("status")).toHaveTextContent("Imported 1 packet")); + expect(screen.getByText("Untitled proof packet")).toBeInTheDocument(); + }); + + it("reports clipboard failure instead of throwing", async () => { + const user = userEvent.setup(); + vi.spyOn(navigator.clipboard, "writeText").mockRejectedValueOnce(new Error("denied")); + render(); + + await user.click(screen.getByRole("button", { name: "Copy" })); + + await waitFor(() => expect(screen.getByRole("status")).toHaveTextContent("Copy failed")); + }); }); diff --git a/src/App.tsx b/src/App.tsx index cab032d..c337fab 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -14,7 +14,7 @@ import { type TemplateKey, typeOptions } from "./lib/proof"; -import { exportStore, loadStore, saveStore } from "./lib/storage"; +import { exportStore, loadStore, normalizeStore, saveStore } from "./lib/storage"; const templateKeys = Object.keys(templates) as TemplateKey[]; @@ -130,14 +130,26 @@ export function App() { }; const copyMarkdown = async () => { - await navigator.clipboard.writeText(markdown); - setNotice("Markdown copied"); + if (!navigator.clipboard?.writeText) { + setNotice("Copy unavailable"); + return; + } + try { + await navigator.clipboard.writeText(markdown); + setNotice("Markdown copied"); + } catch { + setNotice("Copy failed"); + } }; const importFile = async (input: File) => { const raw = await input.text(); const parsed = JSON.parse(raw) as unknown; const imported = loadImported(parsed); + if (!imported.length) { + setNotice("No valid packets found"); + return; + } setStore((current) => ({ version: 1, packets: mergePackets(current.packets, imported) })); setNotice(`Imported ${imported.length} packet${imported.length === 1 ? "" : "s"}`); }; @@ -234,7 +246,7 @@ export function App() {

Quality audit

{audit.findings.length ? (
    - {audit.findings.map((item) =>
  • {item.message}
  • )} + {audit.findings.map((item) =>
  • {item.severity}{item.message}
  • )}
) :

This packet is ready to send.

} @@ -253,7 +265,7 @@ export function App() { -
{notice}
+
{notice}
); } @@ -267,26 +279,6 @@ function mergePackets(current: ProofPacket[], imported: ProofPacket[]) { function loadImported(value: unknown): ProofPacket[] { if (!value || typeof value !== "object") return []; const record = value as Record; - const list = Array.isArray(record.packets) ? record.packets : [value]; - return list.map((item) => { - const packet = item as Partial; - return touch({ - id: typeof packet.id === "string" ? packet.id : `proof_${crypto.randomUUID()}`, - title: packet.title || "Imported proof packet", - client: packet.client || "", - owner: packet.owner || "Reese + Vespera", - type: packet.type || "Client Ops", - status: packet.status || "draft", - date: packet.date || new Date().toISOString().slice(0, 10), - tags: Array.isArray(packet.tags) ? packet.tags : [], - problem: packet.problem || "", - work: packet.work || "", - evidence: Array.isArray(packet.evidence) ? packet.evidence : [], - impact: packet.impact || "", - risks: Array.isArray(packet.risks) ? packet.risks : [], - nextAsk: packet.nextAsk || "", - createdAt: packet.createdAt || new Date().toISOString(), - updatedAt: packet.updatedAt || new Date().toISOString() - }); - }); + const input = Array.isArray(record.packets) ? value : { version: 1, packets: [value] }; + return normalizeStore(input).packets.map(touch); } diff --git a/src/lib/storage.test.ts b/src/lib/storage.test.ts index 671901d..0505c51 100644 --- a/src/lib/storage.test.ts +++ b/src/lib/storage.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, beforeEach } from "vitest"; import { createPacket } from "./proof"; -import { loadStore, saveStore, exportStore } from "./storage"; +import { exportStore, loadStore, normalizeStore, saveStore } from "./storage"; describe("versioned local storage", () => { beforeEach(() => { @@ -33,4 +33,12 @@ describe("versioned local storage", () => { expect(json).toContain('"version": 1'); expect(json).toContain('"client": "Acropolis Ops"'); }); + + it("rejects empty and malformed imported packet objects", () => { + const normalized = normalizeStore({ packets: [{}, { title: { nested: true }, evidence: ["valid", 12] }] }); + + expect(normalized.packets).toHaveLength(1); + expect(normalized.packets[0]?.title).toBe("Untitled proof packet"); + expect(normalized.packets[0]?.evidence).toEqual(["valid"]); + }); }); diff --git a/src/lib/storage.ts b/src/lib/storage.ts index 6272475..25925b1 100644 --- a/src/lib/storage.ts +++ b/src/lib/storage.ts @@ -7,13 +7,22 @@ const CORRUPT_KEY = "proof-pack:v1:corrupt"; const fallback: ProofStore = { version: 1, packets: [] }; function safeStorage(): Storage | null { - if (typeof localStorage === "undefined") return null; - return localStorage; + try { + if (typeof localStorage === "undefined") return null; + return localStorage; + } catch { + return null; + } +} + +function hasPacketSignal(record: Record): boolean { + return ["title", "client", "problem", "work", "evidence", "impact", "nextAsk"].some((key) => key in record); } function packetFromUnknown(value: unknown): ProofPacket | null { if (!value || typeof value !== "object") return null; const record = value as Record; + if (!hasPacketSignal(record)) return null; return createPacket({ id: typeof record.id === "string" ? record.id : undefined, title: typeof record.title === "string" ? record.title : undefined, @@ -45,20 +54,33 @@ export function normalizeStore(value: unknown): ProofStore { export function loadStore(storage: Storage | null = safeStorage()): ProofStore { if (!storage) return fallback; - const raw = storage.getItem(STORE_KEY); + let raw: string | null; + try { + raw = storage.getItem(STORE_KEY); + } catch { + return fallback; + } if (!raw) return fallback; try { return normalizeStore(JSON.parse(raw)); } catch { - storage.setItem(CORRUPT_KEY, raw); - storage.removeItem(STORE_KEY); + try { + storage.setItem(CORRUPT_KEY, raw); + storage.removeItem(STORE_KEY); + } catch { + return fallback; + } return fallback; } } export function saveStore(store: ProofStore, storage: Storage | null = safeStorage()): void { if (!storage) return; - storage.setItem(STORE_KEY, exportStore(store)); + try { + storage.setItem(STORE_KEY, exportStore(store)); + } catch { + return; + } } export function exportStore(store: ProofStore): string { diff --git a/src/styles.css b/src/styles.css index fcc5b54..5959ec4 100644 --- a/src/styles.css +++ b/src/styles.css @@ -279,6 +279,8 @@ input:focus, select:focus, textarea:focus { } .findings li { + display: grid; + gap: 4px; padding: 10px 11px; border: 1px solid var(--line); border-radius: 12px; @@ -287,6 +289,14 @@ input:focus, select:focus, textarea:focus { font-size: 13px; } +.findings strong { + color: var(--text); + font-family: var(--mono); + font-size: 10px; + letter-spacing: .1em; + text-transform: uppercase; +} + .findings li[data-severity="high"] { border-color: rgba(226, 107, 87, .52); color: #ffd8d1; } .findings li[data-severity="medium"] { border-color: rgba(247, 200, 67, .38); color: #f4deb0; } .ok { color: var(--ok); margin-bottom: 0; } diff --git a/src/test/setup.ts b/src/test/setup.ts index f149f27..e262193 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -1 +1,7 @@ import "@testing-library/jest-dom/vitest"; +import { cleanup } from "@testing-library/react"; +import { afterEach } from "vitest"; + +afterEach(() => { + cleanup(); +}); diff --git a/vite.config.ts b/vite.config.ts index 043e6fe..dc39234 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -5,6 +5,7 @@ export default defineConfig({ plugins: [react()], test: { environment: "jsdom", + include: ["src/**/*.test.{ts,tsx}"], setupFiles: ["./src/test/setup.ts"], coverage: { provider: "v8",