From 58054bb272db6dcd92687db27fdba09a83c3f381 Mon Sep 17 00:00:00 2001 From: Luca Sforza Date: Thu, 10 Sep 2026 12:36:34 +0200 Subject: [PATCH 1/5] docs: plan Linux Flatpak distribution --- docs/knowledge/README.md | 2 + docs/knowledge/architecture/overview.md | 21 ++- docs/knowledge/contracts/desktop-host.md | 81 ++++++++++ docs/knowledge/contracts/pairing.md | 14 +- ...ect-workspaces-and-stereotype-authoring.md | 16 +- .../web-and-flatpak-desktop-distribution.md | 74 +++++++++ docs/knowledge/testing/strategy.md | 16 +- docs/plans/active/linux-flatpak/plan.md | 148 ++++++++++++++++++ .../T01-electron-host-and-project-adapter.md | 82 ++++++++++ .../tasks/T02-flatpak-package.md | 72 +++++++++ .../T03-desktop-tests-and-documentation.md | 72 +++++++++ .../tasks/T04-installed-flatpak-qa.md | 70 +++++++++ 12 files changed, 648 insertions(+), 20 deletions(-) create mode 100644 docs/knowledge/contracts/desktop-host.md create mode 100644 docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md create mode 100644 docs/plans/active/linux-flatpak/plan.md create mode 100644 docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md create mode 100644 docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md create mode 100644 docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md create mode 100644 docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md diff --git a/docs/knowledge/README.md b/docs/knowledge/README.md index c09a9f57..34db1534 100644 --- a/docs/knowledge/README.md +++ b/docs/knowledge/README.md @@ -13,6 +13,7 @@ behavior as a second supported contract or append narrative history. ## Contracts +- [Electron desktop host](contracts/desktop-host.md) - [Frontend package type system](contracts/package-type-system.md) - [Pairing and ownership](contracts/pairing.md) - [Portable model packages](contracts/model-package.md) @@ -32,6 +33,7 @@ UML: Current decisions: +- [Shared web and Flatpak desktop distribution](decisions/web-and-flatpak-desktop-distribution.md) - [Package type-system cutover](decisions/stereotype-type-system-migration.md) - [Upstream Cordis package runtime](decisions/local-package-runtime.md) - [Model-scoped custom stereotype packages](decisions/model-scoped-stereotype-packages.md) diff --git a/docs/knowledge/architecture/overview.md b/docs/knowledge/architecture/overview.md index 52b5f889..2893ba6a 100644 --- a/docs/knowledge/architecture/overview.md +++ b/docs/knowledge/architecture/overview.md @@ -1,20 +1,23 @@ --- kind: knowledge status: current -updated: 2026-08-29 +updated: 2026-09-10 --- # System architecture -NNModelling is a browser-owned visual DSL. The current editor builds package -graphs and infers their tensor semantics locally. Public user documentation -lives under `docs2/`. +NNModelling is a renderer-owned visual DSL delivered through the web and an +Electron Linux desktop shell. Both hosts build package graphs and infer their +tensor semantics locally from the same frontend source. Public user +documentation lives under `docs2/`. ## Components | Area | Responsibility | State authority | | --- | --- | --- | -| `front-end/` | Svelte editor, graph mutations, package catalog, Lua type inference and browser RPC | Browser `DiagramCore` | +| `front-end/` | Shared Svelte editor, graph mutations, package catalog, Lua type inference and renderer RPC | Active renderer `DiagramCore` | +| `desktop/` | Electron main/preload host and typed desktop platform bridge | No diagram or type state | +| `flatpak/` | Linux sandbox, launcher and distribution metadata | No application state | | `stereotype-packages/` | Globally shared core definitions, Lua inference and PyTorch entrypoints | Core package manifests and resources | | `mcp-server/` | Thin proxy to the selected browser tab | No diagram or type state | | `converted/` | Package compiler/runtime, authenticated API, scheduler and worker controller | Valkey job state and backend stores | @@ -38,9 +41,11 @@ model manifest + local package dirs ─┘ = core + current custom package visible editor + MCP backend bundle export ``` -The browser is the only source of truth for a live diagram. The MCP server -routes request/response RPC and must not mirror the graph, catalog or inferred -types. See [Browser-backed MCP](browser-mcp.md). +The active frontend renderer is the only source of truth for a live diagram, +whether hosted by a browser or Electron. Electron main/preload processes and +the MCP server must not mirror the graph, catalog or inferred types. See +[Browser-backed MCP](browser-mcp.md) and the accepted +[desktop distribution decision](../decisions/web-and-flatpak-desktop-distribution.md). Every frontend node persists only exact package ID and version. Definition metadata drives topology, parameters, presentation and dtype controls; diff --git a/docs/knowledge/contracts/desktop-host.md b/docs/knowledge/contracts/desktop-host.md new file mode 100644 index 00000000..553c7a8f --- /dev/null +++ b/docs/knowledge/contracts/desktop-host.md @@ -0,0 +1,81 @@ +--- +kind: knowledge +status: current +updated: 2026-09-10 +--- + +# Electron desktop host + +The Electron host packages the shared NNModelling frontend for Linux. It is a +platform boundary, not a second application core. + +## Process ownership + +- The renderer owns `DiagramCore`, the active package catalog, Lua inference, + viewport state, training-controller state, and project save orchestration. +- The main process owns application lifecycle, the trusted `app://nnmodelling` + protocol, native directory dialogs, and host filesystem calls. +- The preload process exposes only the typed project capability described + below. It owns no persistent project or diagram state. +- MCP remains a thin optional proxy to the active renderer. Electron main and + preload processes are never an alternate MCP graph authority. + +## Security contract + +Every application window uses: + +- `contextIsolation: true`; +- `nodeIntegration: false`; +- renderer sandboxing enabled; +- a fixed preload script shipped with the application; +- the privileged application content loaded only from the registered + `app://nnmodelling` scheme; +- denied unexpected navigation, popup, permission, and external-protocol + requests. + +The preload bridge must not expose `ipcRenderer`, Node.js modules, shell +execution, arbitrary IPC channels, or path-based general-purpose filesystem +methods. Main-process handlers validate channel arguments independently of +renderer validation. + +## Project capability + +Native directory selection returns an opaque, random, session-scoped +capability. Renderer calls combine that capability with a normalized relative +path and one explicit operation from the desktop project API: + +- select a parent or existing project directory; +- list one directory; +- read one file; +- create one child directory or file; +- replace one file's bytes; +- remove a newly created entry during proven rollback. + +The main process resolves every relative path beneath the capability root, +rejects absolute paths and traversal, and does not follow an operation outside +that root. Capabilities are invalid after application exit and are never +serialized into project, MCP, or backend data. + +File replacement must not expose partially written `model.json` content. +Errors preserve cancellation, permission, collision, missing-entry, and write +failure as distinguishable renderer outcomes. The shared +`ProjectModelWriter` remains responsible for save ordering and visible state. + +## Network boundary + +The renderer origin is `app://nnmodelling`. A remote-training backend must +allow that exact origin in `NNM_ALLOWED_ORIGINS`; wildcard origin access is not +part of this contract. The Flatpak network permission permits configured HTTP +backend and optional localhost MCP connections, but grants no backend identity +or authorization by itself. + +## Flatpak boundary + +The Flatpak does not request blanket `home` or `host` filesystem access. +Native selection must yield a portal-visible path usable inside the sandbox. +The application does not spawn or bundle FastAPI, Valkey, container engines, +workers, or training jobs. + +See the accepted +[shared web and desktop decision](../decisions/web-and-flatpak-desktop-distribution.md) +and [pairing contract](pairing.md). diff --git a/docs/knowledge/contracts/pairing.md b/docs/knowledge/contracts/pairing.md index 3b2459ff..ddaa351f 100644 --- a/docs/knowledge/contracts/pairing.md +++ b/docs/knowledge/contracts/pairing.md @@ -1,19 +1,20 @@ --- kind: knowledge status: current -updated: 2026-08-12 +updated: 2026-09-10 --- # Pairing and job ownership -Remote-training identity is an administrator-approved browser connection, not a -user account. The contract is intended for a trusted LAN and is not sufficient +Remote-training identity is an administrator-approved frontend connection, not +a user account. The frontend may run in a web browser or the supported Electron +desktop host. The contract is intended for a trusted LAN and is not sufficient for direct Internet exposure. ## Trust model -- A new browser requests pairing and receives a high-entropy opaque token plus - a short verification code. +- A new frontend host requests pairing and receives a high-entropy opaque token + plus a short verification code. - An administrator approves or rejects the request through protected backend commands/API. - Valkey stores a token digest, not the plaintext token. @@ -41,6 +42,9 @@ the configured admin token and are hidden from the public API schema. The frontend persists its backend URL and token locally, verifies the session on reuse, and distinguishes local forgetting from server-side revocation. +Backend CORS configuration must allow each deployed web origin explicitly. The +Electron distribution uses the exact `app://nnmodelling` origin. Wildcard +origins are not authorized by the desktop contract. ## Security boundary diff --git a/docs/knowledge/decisions/project-workspaces-and-stereotype-authoring.md b/docs/knowledge/decisions/project-workspaces-and-stereotype-authoring.md index 6b1ece31..27eaec32 100644 --- a/docs/knowledge/decisions/project-workspaces-and-stereotype-authoring.md +++ b/docs/knowledge/decisions/project-workspaces-and-stereotype-authoring.md @@ -1,7 +1,7 @@ --- kind: decision status: accepted -updated: 2026-08-29 +updated: 2026-09-10 --- # Writable project workspaces and model-owned stereotype authoring @@ -29,9 +29,11 @@ the user can edit the Lua and PyTorch implementations outside NNModelling. - New-project creation first asks for a parent directory. After the model form is accepted, NNModelling creates one child directory named by the validated model ID. An existing child is rejected; it is never merged or overwritten. -- Opening a project selects its directory through the same writable filesystem - capability. NNModelling reads `model.json` and all declared model resources, - then retains the directory handle only for the current browser session. +- Opening a project selects its directory through the host's writable + filesystem capability. NNModelling reads `model.json` and all declared model + resources, then retains the directory capability only for the current + renderer session. The web host uses the File System Access API; the Electron + host uses its typed preload bridge and native portal-visible selection. - Filesystem handles and absolute paths never enter `model.json`, package manifests, backend payloads, or browser RPC state. - The model form owns `id`, `version`, `name`, and optional `description`. @@ -75,8 +77,10 @@ the user can edit the Lua and PyTorch implementations outside NNModelling. ## Consequences -- The browser File System Access API is a required capability for editable - projects. Unsupported or denied access produces a clear startup error; a +- A writable host filesystem capability is required for editable projects. + The web distribution requires the browser File System Access API; the Linux + desktop distribution provides an equivalent typed Electron adapter. + Unsupported, cancelled, or denied access produces a clear startup result; a read-only file-input fallback would not satisfy stereotype creation or automatic saving. - Project creation, opening, graph editing, package authoring, and backend diff --git a/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md b/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md new file mode 100644 index 00000000..4930f66c --- /dev/null +++ b/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md @@ -0,0 +1,74 @@ +--- +kind: decision +status: accepted +updated: 2026-09-10 +--- + +# Shared web and Flatpak desktop distribution + +## Context + +NNModelling is currently delivered as a Vite web application. Linux users also +need an installable desktop application, while the web application must remain +a first-class distribution with the same model and type semantics. + +The frontend already keeps graph behavior in `DiagramCore` and places project +filesystem access behind `ProjectWorkspaceAdapter`. A desktop distribution can +therefore reuse the renderer instead of creating a second editor. + +## Decision + +- NNModelling has one Svelte renderer and two supported hosts: a web browser + and an Electron desktop shell. The hosts may provide different platform + adapters but must not fork graph, package, type-inference, persistence, or + training semantics. +- `DiagramCore` in the active renderer remains the only authority for the live + graph. Electron main and preload processes do not mirror diagram or package + state. +- The Linux desktop application is distributed as Flatpak with the stable + application ID `io.github.LucaSforza.NNModelling`. +- The Electron renderer loads the normal production frontend build with a + relative Vite base. The independently deployed web build retains its + configured web base path. +- Browser projects use the File System Access API. Electron projects use a + narrow, typed preload bridge backed by native directory selection and + main-process filesystem operations. Both satisfy the same + `ProjectWorkspaceAdapter` behavior: explicit selection, ordered automatic + saves, collision rejection, recursive resources, cancellation, and visible + failures. +- The preload bridge exposes task-specific project operations only. It never + exposes Node.js, `ipcRenderer`, arbitrary shell execution, or an unrestricted + filesystem API to the renderer. Electron uses context isolation, sandboxing, + and disabled renderer Node integration. +- Absolute paths and desktop capability identifiers are session-only. They + never enter `model.json`, package manifests, MCP messages, backend payloads, + or exported bundles. +- The Flatpak uses the Freedesktop runtime and Electron BaseApp, launches + through Zypak, and requests only display, GPU, IPC, and network permissions. + It does not receive blanket home-directory or host-filesystem access. +- The desktop application connects to the existing remote training backend. + Python, Valkey, Podman/Docker, worker images, and training jobs are not + embedded in the Flatpak. +- Browser-backed MCP remains an optional integration. When present, browser + and Electron renderer connections route to their own live `DiagramCore` + through the same thin proxy contract. + +## Consequences + +- Web and desktop releases exercise one frontend test suite; host-adapter tests + cover only platform-specific selection, file I/O, and security boundaries. +- A production Flatpak build must be network-independent after its declared + sources are fetched. Node and Electron sources are pinned from the workspace + lock and generated Flatpak source manifest. +- Flatpak exports an application-ID-named desktop file, icon, and AppStream + metadata. A release gate builds, installs, launches, opens or creates a + project through the portal-visible filesystem, saves it, closes the app, and + reopens the project. +- Adding a bundled local backend would be a separate architectural decision + because it changes sandbox permissions, lifecycle, resource ownership, and + the least-privilege worker boundary. + +## Implementation + +The executable work is defined in +[`../../plans/active/linux-flatpak/plan.md`](../../plans/active/linux-flatpak/plan.md). diff --git a/docs/knowledge/testing/strategy.md b/docs/knowledge/testing/strategy.md index e6bddc69..e70a9d3d 100644 --- a/docs/knowledge/testing/strategy.md +++ b/docs/knowledge/testing/strategy.md @@ -1,7 +1,7 @@ --- kind: knowledge status: current -updated: 2026-08-28 +updated: 2026-09-10 --- # Testing strategy @@ -54,6 +54,20 @@ MCP Vitest suites cover tool schemas, thin-proxy behavior, multi-tab routing, errors and authenticated parity with browser-owned operations. An RPC contract change requires matching frontend handler and MCP proxy coverage. +## Linux desktop distribution + +Desktop host tests cover only the platform boundary: context isolation, +sandbox and navigation policy; preload operation allowlists and validation; +directory selection; recursive reads and writes; collisions; cancellation; and +error mapping. They reuse the frontend suites for diagram, package, type, +persistence and training semantics. + +A release proof must build and install the Flatpak, inspect its effective +permissions, and exercise create, edit, automatic save, close and reopen using +the installed application. A successful Electron development launch or an +uninstalled `flatpak-builder` build is insufficient. The web production build +and browser project workflow remain part of the same release gate. + ## Cross-boundary rule - Package/type change: focused host or package tests plus candidate/oracle diff --git a/docs/plans/active/linux-flatpak/plan.md b/docs/plans/active/linux-flatpak/plan.md new file mode 100644 index 00000000..c0806c77 --- /dev/null +++ b/docs/plans/active/linux-flatpak/plan.md @@ -0,0 +1,148 @@ +--- +id: linux-flatpak +kind: plan +status: in_progress +updated: 2026-09-10 +areas: + - frontend + - desktop + - distribution + - testing +--- + +# Linux Flatpak desktop distribution + +## Goal + +Ship NNModelling as an installable Linux Flatpak that can create, open, edit, +automatically save, and reopen project directories while preserving the +existing web application and sharing its renderer, `DiagramCore`, package +runtime, type inference, and remote-training behavior. + +## Current behavior + +The Svelte/Vite application owns live diagram state in the browser and opens +writable projects through the browser File System Access API. The root pnpm +workspace has no desktop host, Flatpak manifest, Linux desktop metadata, or +installed-application verification path. See the accepted +[desktop distribution decision](../../knowledge/decisions/web-and-flatpak-desktop-distribution.md). + +## Scope + +- Add a minimal Electron main/preload host for the existing frontend build. +- Select the browser or desktop project adapter at the host boundary without + duplicating project or graph semantics. +- Build an offline-capable Flatpak from pinned sources with an application + launcher, icon, desktop entry, and AppStream metadata. +- Retain web development, web production builds, browser project access, + browser-backed MCP, and remote backend connections. +- Verify the installed Flatpak through the visible create/save/reopen workflow. + +## Non-goals + +- Embedding FastAPI, Valkey, Podman/Docker, workers, datasets, or training jobs. +- Windows or macOS installers, application stores, signing, or auto-update. +- A second desktop graph implementation or desktop-only model format. +- Broad home-directory or host-filesystem Flatpak access. +- Publishing to Flathub; the repository will produce a submission-ready local + manifest and bundle, while publication remains a release operation. + +## Decisions and invariants + +- The accepted + [shared web and Flatpak desktop decision](../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) + is normative. +- `DiagramCore` remains the only live graph authority. +- Web and desktop builds use the same frontend source and tests. +- Platform APIs terminate behind typed adapters; renderer Node integration is + disabled and the preload API is capability-specific. +- Project-relative paths retain existing validation, transactional creation, + ordered saves, and visible-error semantics. +- No absolute path, Electron capability identifier, or secret enters portable + project or backend data. +- The [Electron desktop host contract](../../knowledge/contracts/desktop-host.md) + defines process ownership, bridge operations, origin and sandbox rules. + +## Contracts and control flow + +```text +web deployment ───────> shared Svelte renderer ───────> DiagramCore + │ │ │ +File System Access API project workspace port package/Lua runtime + │ +Electron renderer ── typed preload bridge ── Electron main ── portal-visible files + +shared renderer ── optional WebSocket ── thin MCP proxy +shared renderer ── authenticated HTTP ── remote training backend +``` + +## Task graph + +| Task | Role | Depends on | May run with | Write scope | Outcome | +| --- | --- | --- | --- | --- | --- | +| [`T01`](tasks/T01-electron-host-and-project-adapter.md) | `frontend` | — | — | `desktop/`, `front-end/src/project-workspace/`, `front-end/src/App.svelte`, workspace manifests | Shared renderer runs securely in Electron and preserves the web adapter | +| [`T02`](tasks/T02-flatpak-package.md) | `operations` | `T01` | `T03` | `flatpak/`, desktop package metadata | Flatpak manifest builds and exports a launchable Linux application | +| [`T03`](tasks/T03-desktop-tests-and-documentation.md) | `testing` | `T01` | `T02` | desktop/frontend tests, `docs2/`, current KB testing/operations | Host boundary and user workflow are documented and covered | +| [`T04`](tasks/T04-installed-flatpak-qa.md) | `integration` | `T02`, `T03` | — | plan status and retained evidence only | Built Flatpak is installed and the project lifecycle is exercised | + +Parallel tasks have non-overlapping implementation scopes. Shared manifest or +lockfile changes are integrated serially by the initiative owner. + +## Integration and review gates + +- Electron security review finds no renderer Node integration, raw IPC export, + navigation escape, shell execution, or arbitrary filesystem primitive. +- Frontend `check`, unit tests, package-only guard, and production web build pass. +- Desktop unit tests and packaged Electron smoke check pass. +- Flatpak metadata validation and `flatpak-builder` complete without network + access during build commands. +- The installed app launches without `--no-sandbox` and without blanket host + filesystem permissions. +- Web create/open/save remains functional after desktop adapter selection is + introduced. + +## Acceptance criteria + +- [ ] `pnpm --dir front-end build` still produces the deployable web app. +- [ ] Electron loads the same frontend and can create, edit, save, close, and + reopen a project directory. +- [ ] The Electron renderer is sandboxed, context-isolated, and has no Node + integration. +- [ ] Flatpak build inputs are pinned and its build commands run offline. +- [ ] The repository produces an installable `.flatpak` bundle with application + ID `io.github.LucaSforza.NNModelling`. +- [ ] The installed Flatpak completes the visible project lifecycle on Linux. +- [ ] Remote backend access and optional localhost MCP access remain possible + through the declared network permission. +- [ ] Current architecture, project-workspace, testing, and operations KB text + describes both supported hosts without weakening portable-data rules. + +## Final verification + +Run from the repository root: + +```bash +pnpm --dir front-end check +pnpm --dir front-end test +pnpm --dir front-end guard:package-only +pnpm --dir front-end build +pnpm --dir desktop test +pnpm --dir desktop build +desktop-file-validate flatpak/io.github.LucaSforza.NNModelling.desktop +appstreamcli validate --no-net --explain flatpak/io.github.LucaSforza.NNModelling.metainfo.xml +flatpak-builder --force-clean --user --install-deps-from=flathub --repo=flatpak/repo --install flatpak/build flatpak/io.github.LucaSforza.NNModelling.yml +flatpak run io.github.LucaSforza.NNModelling +flatpak build-bundle flatpak/repo NNModelling.flatpak io.github.LucaSforza.NNModelling --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo +``` + +## Knowledge and archive impact + +- Add the accepted desktop-distribution decision and index it. +- Update system architecture and browser-MCP wording from browser-only to the + active frontend renderer where applicable. +- Amend writable-project workspace consequences for browser and desktop hosts. +- Add the desktop host contract and amend pairing for its exact application + origin. +- Add Flatpak lifecycle and installed-app QA to operations and testing. +- When every gate passes, mark all tasks and this initiative done, retain only + useful build evidence, and archive the initiative intact. diff --git a/docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md b/docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md new file mode 100644 index 00000000..50459a20 --- /dev/null +++ b/docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md @@ -0,0 +1,82 @@ +--- +id: T01 +kind: task +status: ready +plan: ../plan.md +role: frontend +depends_on: [] +parallel_with: [] +write_scope: + - desktop/ + - front-end/src/project-workspace/ + - front-end/src/App.svelte + - pnpm-workspace.yaml + - pnpm-lock.yaml +--- + +# Electron host and desktop project adapter + +## Objective + +Run the shared Svelte renderer in a secure Electron window and satisfy the +existing writable-project behavior through a typed desktop filesystem bridge. + +## Context required + +- [Initiative plan](../plan.md) +- [Desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) +- `front-end/src/project-workspace/index.ts` +- `front-end/src/components/ProjectStart.svelte` +- `front-end/src/App.svelte` + +## Invariants + +- Web remains the default frontend host and continues using the File System + Access API. +- Main/preload processes never own diagram, package, or type state. +- The bridge exposes only validated project capabilities and serializable data. +- Project creation cannot merge with or overwrite an existing directory. +- Autosaves stay ordered and failures remain visible. + +## Allowed files + +Only the paths in `write_scope`; lockfile changes must correspond exactly to +the new workspace package and dependencies. + +## Out of scope + +- Flatpak metadata and permissions. +- Bundled backend services. +- Changes to graph or type semantics. + +## Work + +1. Add failing host-adapter and security-boundary tests. +2. Add the Electron package, main process, preload bridge, and typed renderer + declaration. +3. Inject a desktop project adapter only when the preload capability exists. +4. Build the frontend with a relative base and load it from the packaged app. +5. Exercise create, recursive read/write, autosave, collision, cancellation, + and reopen behavior. + +## Acceptance criteria + +- [ ] Web and Electron select the correct adapter without source forks. +- [ ] Electron security preferences and navigation restrictions are tested. +- [ ] Desktop project operations preserve the accepted workspace contract. +- [ ] No change outside `write_scope`. + +## Validation + +```bash +pnpm --dir desktop test +pnpm --dir desktop build +pnpm --dir front-end check +pnpm --dir front-end test +pnpm --dir front-end build +``` + +## Required handoff + +Return changed files, command results, security choices, project-workspace +compatibility evidence, and unresolved packaging risks. diff --git a/docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md b/docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md new file mode 100644 index 00000000..b8e27e2a --- /dev/null +++ b/docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md @@ -0,0 +1,72 @@ +--- +id: T02 +kind: task +status: ready +plan: ../plan.md +role: operations +depends_on: [T01] +parallel_with: [T03] +write_scope: + - flatpak/ + - desktop/package.json +--- + +# Flatpak package + +## Objective + +Produce a pinned, offline-buildable Flatpak manifest and complete Linux desktop +metadata for the Electron application. + +## Context required + +- [Initiative plan](../plan.md) +- [Desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) +- Electron BaseApp and Flatpak Node generator documentation. + +## Invariants + +- Application ID is `io.github.LucaSforza.NNModelling`. +- Build commands have no network access after declared sources are fetched. +- No blanket home or host filesystem permission is granted. +- Electron runs through Zypak without disabling its sandbox. + +## Allowed files + +Only `flatpak/` and packaging fields in `desktop/package.json`. + +## Out of scope + +- Flathub publication and signing. +- Other Linux package formats. +- Backend service packaging. + +## Work + +1. Add application-ID-named manifest, desktop entry, AppStream metadata, icon, + and Zypak launcher. +2. Generate pinned pnpm/Electron Flatpak sources. +3. Build the unpacked Electron application inside `flatpak-builder` and install + exports under `/app`. +4. Validate metadata, permissions, offline behavior, and bundle generation. + +## Acceptance criteria + +- [ ] Metadata validators pass. +- [ ] `flatpak-builder` builds and installs the manifest. +- [ ] A `.flatpak` bundle is produced from the local repository. +- [ ] No change outside `write_scope`. + +## Validation + +```bash +desktop-file-validate flatpak/io.github.LucaSforza.NNModelling.desktop +appstreamcli validate --no-net --explain flatpak/io.github.LucaSforza.NNModelling.metainfo.xml +flatpak-builder --force-clean --user --install-deps-from=flathub --repo=flatpak/repo --install flatpak/build flatpak/io.github.LucaSforza.NNModelling.yml +flatpak build-bundle flatpak/repo NNModelling.flatpak io.github.LucaSforza.NNModelling --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo +``` + +## Required handoff + +Return artifacts, manifest permissions, pinned-source regeneration procedure, +exact validation results, and any Flathub-readiness limitation. diff --git a/docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md b/docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md new file mode 100644 index 00000000..5a2f94fe --- /dev/null +++ b/docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md @@ -0,0 +1,72 @@ +--- +id: T03 +kind: task +status: ready +plan: ../plan.md +role: testing +depends_on: [T01] +parallel_with: [T02] +write_scope: + - desktop/ + - front-end/src/__tests__/ + - docs2/ + - docs/knowledge/testing/ + - docs/knowledge/operations/ +--- + +# Desktop tests and user documentation + +## Objective + +Cover the desktop host boundary and document Linux Flatpak installation, +project access, remote backend use, and source-build verification. + +## Context required + +- [Initiative plan](../plan.md) +- [Testing strategy](../../../knowledge/testing/strategy.md) +- [Local operations](../../../knowledge/operations/local-stack.md) + +## Invariants + +- Tests prove shared behavior rather than duplicating frontend semantic suites. +- Documentation does not claim that the backend is bundled. +- Browser instructions remain valid. + +## Allowed files + +Only the paths in `write_scope`. + +## Out of scope + +- Distribution publishing and auto-update. +- Semantic changes to packages or diagrams. + +## Work + +1. Test preload allowlists, input validation, host selection, and filesystem + error mapping. +2. Document local Flatpak installation, launch, project access, permissions, + backend connectivity, and bundle regeneration. +3. Add the installed-application workflow to the KB testing contract and the + build/run procedure to operations. + +## Acceptance criteria + +- [ ] Desktop tests fail on an unsafe or incompatible bridge. +- [ ] User and operator documentation matches the built artifact. +- [ ] Existing web documentation remains correct. +- [ ] No change outside `write_scope`. + +## Validation + +```bash +pnpm --dir desktop test +pnpm --dir front-end test +pnpm run docs +``` + +## Required handoff + +Return coverage added, documentation locations, exact validation results, and +any installed-workflow step reserved for T04. diff --git a/docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md b/docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md new file mode 100644 index 00000000..793eb903 --- /dev/null +++ b/docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md @@ -0,0 +1,70 @@ +--- +id: T04 +kind: task +status: ready +plan: ../plan.md +role: integration +depends_on: [T02, T03] +parallel_with: [] +write_scope: + - docs/plans/active/linux-flatpak/ + - docs/archive/completed-plans/linux-flatpak/ +--- + +# Installed Flatpak QA + +## Objective + +Prove the installed Flatpak satisfies the complete Linux project workflow and +close the initiative only from current evidence. + +## Context required + +- [Initiative plan](../plan.md) +- [Desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) +- [Testing strategy](../../../knowledge/testing/strategy.md) + +## Invariants + +- QA uses the installed Flatpak, not only Electron development mode. +- Test data is isolated and does not modify an unrelated user project. +- A passing launch alone is not project-lifecycle evidence. + +## Allowed files + +Only plan status/evidence and final archival paths. + +## Out of scope + +- Feature expansion after acceptance passes. +- Flathub publication. + +## Work + +1. Build and install the Flatpak from a clean build directory. +2. Launch it, create a temporary project, edit the graph, observe a successful + save, close, reopen the same directory, and verify the edit persisted. +3. Confirm the web production build and browser project workflow still pass. +4. Audit every acceptance criterion, mark tasks and plan done, retain concise + evidence, and archive the completed initiative. + +## Acceptance criteria + +- [ ] Installed create/edit/save/reopen succeeds. +- [ ] Flatpak has no undeclared broad filesystem permission. +- [ ] Web build and browser workflow remain valid. +- [ ] Initiative is archived only after all gates pass. + +## Validation + +```bash +flatpak run io.github.LucaSforza.NNModelling +flatpak info --show-permissions io.github.LucaSforza.NNModelling +pnpm --dir front-end build +git diff --check +``` + +## Required handoff + +Return criterion-by-criterion evidence, artifact location, observed permissions, +remaining release-only work, and archive status. From 8dd986b3eb0ce6fdc7e89db18cd048a1ced43156 Mon Sep 17 00:00:00 2001 From: Luca Sforza Date: Thu, 10 Sep 2026 13:37:27 +0200 Subject: [PATCH 2/5] feat: add Linux Flatpak desktop app --- .gitignore | 6 + README.md | 6 + converted/backend/README.md | 14 + converted/backend/docker-compose.yml | 2 +- converted/src/backend/app.py | 1 + converted/src/tests/test_backend_origins.py | 53 + desktop/package.json | 50 + desktop/src/__tests__/security.test.ts | 20 + desktop/src/main.ts | 232 ++ desktop/src/preload.ts | 23 + desktop/src/protocol.ts | 49 + desktop/src/security.ts | 18 + desktop/tsconfig.json | 16 + .../linux-flatpak/evidence/minimal-qa.md | 30 + .../completed-plans}/linux-flatpak/plan.md | 48 +- .../T01-electron-host-and-project-adapter.md | 12 +- .../tasks/T02-flatpak-package.md | 16 +- .../T03-desktop-tests-and-documentation.md | 14 +- .../tasks/T04-installed-flatpak-qa.md | 72 + .../web-and-flatpak-desktop-distribution.md | 8 +- docs/knowledge/operations/local-stack.md | 35 +- docs/knowledge/testing/strategy.md | 14 +- .../tasks/T04-installed-flatpak-qa.md | 70 - docs2/source/desktop.rst | 61 + docs2/source/index.rst | 3 +- flatpak/README.md | 28 + flatpak/generate-sources.sh | 20 + flatpak/generated-sources.json | 3564 +++++++++++++++++ .../io.github.LucaSforza.NNModelling.desktop | 10 + ...github.LucaSforza.NNModelling.metainfo.xml | 24 + flatpak/io.github.LucaSforza.NNModelling.svg | 9 + flatpak/run.sh | 11 + front-end/package.json | 7 +- front-end/src/App.svelte | 8 +- .../__tests__/desktopProjectWorkspace.test.ts | 66 + front-end/src/project-workspace/desktop.ts | 184 + front-end/src/project-workspace/index.ts | 2 +- front-end/vite.config.ts | 5 +- io.github.LucaSforza.NNModelling.yml | 96 + package.json | 7 + pnpm-lock.yaml | 1847 ++++++++- pnpm-workspace.yaml | 1 + 42 files changed, 6587 insertions(+), 175 deletions(-) create mode 100644 converted/src/tests/test_backend_origins.py create mode 100644 desktop/package.json create mode 100644 desktop/src/__tests__/security.test.ts create mode 100644 desktop/src/main.ts create mode 100644 desktop/src/preload.ts create mode 100644 desktop/src/protocol.ts create mode 100644 desktop/src/security.ts create mode 100644 desktop/tsconfig.json create mode 100644 docs/archive/completed-plans/linux-flatpak/evidence/minimal-qa.md rename docs/{plans/active => archive/completed-plans}/linux-flatpak/plan.md (74%) rename docs/{plans/active => archive/completed-plans}/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md (83%) rename docs/{plans/active => archive/completed-plans}/linux-flatpak/tasks/T02-flatpak-package.md (75%) rename docs/{plans/active => archive/completed-plans}/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md (78%) create mode 100644 docs/archive/completed-plans/linux-flatpak/tasks/T04-installed-flatpak-qa.md delete mode 100644 docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md create mode 100644 docs2/source/desktop.rst create mode 100644 flatpak/README.md create mode 100755 flatpak/generate-sources.sh create mode 100644 flatpak/generated-sources.json create mode 100644 flatpak/io.github.LucaSforza.NNModelling.desktop create mode 100644 flatpak/io.github.LucaSforza.NNModelling.metainfo.xml create mode 100644 flatpak/io.github.LucaSforza.NNModelling.svg create mode 100755 flatpak/run.sh create mode 100644 front-end/src/__tests__/desktopProjectWorkspace.test.ts create mode 100644 front-end/src/project-workspace/desktop.ts create mode 100644 io.github.LucaSforza.NNModelling.yml diff --git a/.gitignore b/.gitignore index 67165b53..bbe7e479 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,12 @@ __pycache__/ dist/ front-end/dist/ mcp-server/dist/ +desktop/release/ +desktop/renderer/ +.flatpak-builder/ +builddir/ +repo/ +NNModelling.flatpak docs2/build/ diff --git a/README.md b/README.md index aa5f933f..54d98f5d 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,12 @@ A visual editor and DSL for designing neural networks. Create diagrams in the br The GitHub Pages demo contains the visual editor and runs entirely in the browser. Remote training, conversion, and MCP/browser integration require a local or separately deployed backend. +Linux users can also run the same editor as an Electron Flatpak. The Flatpak +contains the desktop shell and shared frontend; FastAPI, Valkey, Podman/Docker +and worker images remain in the separately managed backend. See the +[Linux desktop documentation](docs2/source/desktop.rst) for source builds, +installation and the exact `app://nnmodelling` backend origin. + ``` Stereotypes/ (JSON) → Svelte Flow Editor → NNTree (JSON) → convert.py → Hydra YAML → main.py → Training → infer.py → Inference diff --git a/converted/backend/README.md b/converted/backend/README.md index a9102679..27b414a2 100644 --- a/converted/backend/README.md +++ b/converted/backend/README.md @@ -26,6 +26,20 @@ NNM_ALLOWED_ORIGINS=http://192.168.1.30:5174 \ just --justfile converted/backend/justfile backend ``` +The Linux Flatpak uses the same remote backend as the web editor. Its renderer +origin is exactly `app://nnmodelling`; include that origin when the backend +is used by the packaged application, while retaining the origins for any web +frontends that should remain connected: + +```bash +NNM_ALLOWED_ORIGINS=http://127.0.0.1:5174,http://localhost:5174,app://nnmodelling \ +just --justfile converted/backend/justfile backend +``` + +The Flatpak does not bundle FastAPI, Valkey, Podman/Docker, worker images or +training jobs. Pairing and bearer-token ownership are unchanged across the web +and desktop renderers. Do not replace the explicit origin list with `*`. + `backend` creates an untracked `backend-secrets/admin.token` with mode `0600` when needed. Approve the code displayed by the frontend: diff --git a/converted/backend/docker-compose.yml b/converted/backend/docker-compose.yml index e80c2301..842138d3 100644 --- a/converted/backend/docker-compose.yml +++ b/converted/backend/docker-compose.yml @@ -48,7 +48,7 @@ services: NNM_BACKEND_PACKAGE_ROOT: ${NNM_HOST_JOBS:?set NNM_HOST_JOBS to the absolute host jobs directory}/packages NNM_BACKEND_DATASET_ROOT: ${NNM_HOST_JOBS:?set NNM_HOST_JOBS to the absolute host jobs directory}/datasets NNM_ADMIN_TOKEN_FILE: /run/secrets/nnm-admin-token - NNM_ALLOWED_ORIGINS: ${NNM_ALLOWED_ORIGINS:-http://127.0.0.1:5174,http://localhost:5174,http://127.0.0.1:5173,http://localhost:5173} + NNM_ALLOWED_ORIGINS: ${NNM_ALLOWED_ORIGINS:-http://127.0.0.1:5174,http://localhost:5174,http://127.0.0.1:5173,http://localhost:5173,app://nnmodelling} NNM_SESSION_TTL: ${NNM_SESSION_TTL:-24h} NNM_CONTAINER_ENGINE: "${NNM_CONTAINER_ENGINE:-podman}" NNM_CONTAINER_IMAGE: ${NNM_CONTAINER_IMAGE:?set NNM_CONTAINER_IMAGE to a digest-pinned worker image} diff --git a/converted/src/backend/app.py b/converted/src/backend/app.py index 98d909c6..8175a09e 100644 --- a/converted/src/backend/app.py +++ b/converted/src/backend/app.py @@ -50,6 +50,7 @@ "http://127.0.0.1:5174", "http://localhost:5173", "http://localhost:5174", + "app://nnmodelling", ] diff --git a/converted/src/tests/test_backend_origins.py b/converted/src/tests/test_backend_origins.py new file mode 100644 index 00000000..294073d1 --- /dev/null +++ b/converted/src/tests/test_backend_origins.py @@ -0,0 +1,53 @@ +"""Frontend-origin configuration contracts for the backend API.""" + +from __future__ import annotations + +import asyncio +from pathlib import Path +from types import SimpleNamespace + +import httpx + +from backend.app import DEFAULT_ALLOWED_ORIGINS, _allowed_origins_from_environment, create_app + + +def test_default_allowed_origins_include_the_flatpak_renderer() -> None: + """The packaged renderer has a stable, exact CORS origin.""" + + assert "app://nnmodelling" in DEFAULT_ALLOWED_ORIGINS + + +def test_configured_allowed_origins_preserve_the_desktop_origin(monkeypatch) -> None: + """Explicit deployment configuration remains authoritative and normalized.""" + + monkeypatch.setenv( + "NNM_ALLOWED_ORIGINS", + "https://editor.example, app://nnmodelling/", + ) + + assert _allowed_origins_from_environment() == [ + "https://editor.example", + "app://nnmodelling", + ] + + +def test_default_cors_allows_the_flatpak_renderer_origin() -> None: + """A desktop preflight receives the exact origin without wildcard access.""" + + app = create_app(manager=SimpleNamespace(artifact_root=Path("datasets"))) + + async def exercise() -> httpx.Response: + transport = httpx.ASGITransport(app=app) + async with httpx.AsyncClient(transport=transport, base_url="http://backend") as client: + return await client.options( + "/health", + headers={ + "Origin": "app://nnmodelling", + "Access-Control-Request-Method": "GET", + }, + ) + + response = asyncio.run(exercise()) + assert response.status_code == 200 + assert response.headers["access-control-allow-origin"] == "app://nnmodelling" + assert response.headers.get("access-control-allow-credentials") is None diff --git a/desktop/package.json b/desktop/package.json new file mode 100644 index 00000000..551b4ff5 --- /dev/null +++ b/desktop/package.json @@ -0,0 +1,50 @@ +{ + "name": "@nnmodelling/desktop", + "private": true, + "version": "0.1.0", + "description": "NNModelling Electron desktop host", + "author": "Luca Sforza", + "license": "GPL-3.0-or-later", + "desktopName": "io.github.LucaSforza.NNModelling.desktop", + "main": "dist/main.js", + "type": "commonjs", + "scripts": { + "build:renderer": "VITE_DESKTOP=1 pnpm --dir ../front-end build && rm -rf renderer && cp -a ../front-end/dist renderer", + "build:host": "rm -rf dist && tsc -p tsconfig.json", + "build": "pnpm run build:renderer && pnpm run build:host && electron-builder --linux dir", + "start": "electron .", + "package:dir": "electron-builder --linux dir", + "test": "vitest run src" + }, + "devDependencies": { + "@types/node": "^22.0.0", + "electron": "38.8.6", + "electron-builder": "26.15.3", + "typescript": "^5.8.3", + "vitest": "^4.1.7" + }, + "build": { + "appId": "io.github.LucaSforza.NNModelling", + "productName": "NNModelling", + "files": [ + "dist/**/*", + "renderer/**/*", + "package.json" + ], + "directories": { + "output": "release" + }, + "electronDownload": { + "unsafelyDisableChecksums": false, + "checksums": { + "electron-v38.8.6-linux-x64.zip": "41a8f2bc7c0be836b4dc8de19550a65947cffa58433753032af36ee3b849e8be", + "electron-v38.8.6-linux-arm64.zip": "add5aaa35ed57e60f84b780f6461064b912de55effd27ec11e338462243867a5" + } + }, + "linux": { + "target": ["dir"], + "executableName": "nnmodelling", + "category": "Education" + } + } +} diff --git a/desktop/src/__tests__/security.test.ts b/desktop/src/__tests__/security.test.ts new file mode 100644 index 00000000..a1a83eb1 --- /dev/null +++ b/desktop/src/__tests__/security.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, test } from "vitest" +import { isAllowedNavigation, MAIN_WINDOW_WEB_PREFERENCES } from "../security" + +describe("desktop renderer boundary", () => { + test("keeps Node outside the sandboxed, context-isolated renderer", () => { + expect(MAIN_WINDOW_WEB_PREFERENCES).toMatchObject({ + contextIsolation: true, + nodeIntegration: false, + sandbox: true, + webSecurity: true, + }) + }) + + test("allows only application content and the configured development origin", () => { + expect(isAllowedNavigation("app://nnmodelling/index.html")).toBe(true) + expect(isAllowedNavigation("https://example.com/")).toBe(false) + expect(isAllowedNavigation("http://127.0.0.1:5173/editor", "http://127.0.0.1:5173")).toBe(true) + expect(isAllowedNavigation("http://127.0.0.1:5174/", "http://127.0.0.1:5173")).toBe(false) + }) +}) diff --git a/desktop/src/main.ts b/desktop/src/main.ts new file mode 100644 index 00000000..9fff4bac --- /dev/null +++ b/desktop/src/main.ts @@ -0,0 +1,232 @@ +import { app, BrowserWindow, dialog, ipcMain, net, protocol, session, type IpcMainInvokeEvent } from "electron" +import { randomUUID } from "node:crypto" +import { promises as fs } from "node:fs" +import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path" +import { pathToFileURL } from "node:url" +import { IPC_CHANNELS, type DesktopProjectCapability, type DesktopProjectEntry, type DesktopProjectFile, type ProjectPathRequest, type ProjectRemoveRequest, type ProjectWriteRequest } from "./protocol" +import { isAllowedNavigation, MAIN_WINDOW_WEB_PREFERENCES } from "./security" + +protocol.registerSchemesAsPrivileged([{ + scheme: "app", + privileges: { standard: true, secure: true, supportFetchAPI: true, stream: true, corsEnabled: true }, +}]) + +type Capability = { + readonly root: string + readonly senderId: number +} + +const capabilities = new Map() +const MAX_PROJECT_FILE_BYTES = 256 * 1024 * 1024 +let rendererRoot = resolve(process.env.NNM_RENDERER_DIST ?? join(__dirname, "../../front-end/dist")) +let mainWindow: BrowserWindow | undefined + +function registerProjectHandlers(): void { + ipcMain.handle(IPC_CHANNELS.pickDirectory, async (event): Promise => { + assertMainRenderer(event) + const result = await dialog.showOpenDialog(mainWindow!, { + properties: ["openDirectory", "createDirectory"], + title: "Choose an NNModelling project directory", + }) + if (result.canceled || result.filePaths[0] === undefined) return null + const root = await fs.realpath(result.filePaths[0]) + const capability = randomUUID() + capabilities.set(capability, { root, senderId: event.sender.id }) + return { capability, name: root.split(sep).at(-1) || "project" } + }) + + ipcMain.handle(IPC_CHANNELS.ensureDirectory, async (event, request: ProjectPathRequest): Promise => { + const target = await capabilityPath(event, request) + await fs.mkdir(target, { recursive: true }) + }) + + ipcMain.handle(IPC_CHANNELS.stat, async (event, request: ProjectPathRequest): Promise<"file" | "directory" | null> => { + const target = await capabilityPath(event, request) + try { + const stat = await fs.lstat(target) + if (stat.isSymbolicLink()) throw new Error("symbolic links are not allowed in projects") + if (stat.isDirectory()) return "directory" + if (stat.isFile()) return "file" + throw new Error("project entry is not a regular file or directory") + } catch (error) { + if (isNotFound(error)) return null + throw error + } + }) + + ipcMain.handle(IPC_CHANNELS.listDirectory, async (event, request: ProjectPathRequest): Promise => { + const target = await capabilityPath(event, request) + const entries = await fs.readdir(target, { withFileTypes: true }) + return entries.map((entry) => { + if (entry.isSymbolicLink()) throw new Error(`symbolic links are not allowed in projects: ${entry.name}`) + if (!entry.isDirectory() && !entry.isFile()) throw new Error(`unsupported project entry: ${entry.name}`) + return { name: entry.name, kind: entry.isDirectory() ? "directory" : "file" } + }) + }) + + ipcMain.handle(IPC_CHANNELS.readFile, async (event, request: ProjectPathRequest): Promise => { + const target = await capabilityPath(event, request) + const stat = await fs.lstat(target) + if (stat.isSymbolicLink() || !stat.isFile()) throw new Error("project entry is not a regular file") + if (stat.size > MAX_PROJECT_FILE_BYTES) throw new Error("project file is too large") + const data = await fs.readFile(target) + return { encoding: "base64", data: data.toString("base64") } + }) + + ipcMain.handle(IPC_CHANNELS.writeFile, async (event, request: ProjectWriteRequest): Promise => { + const target = await capabilityPath(event, request) + const bytes = decodeFile(request.value) + if (bytes.byteLength > MAX_PROJECT_FILE_BYTES) throw new Error("project file is too large") + await fs.mkdir(dirname(target), { recursive: true }) + const temporary = `${target}.nnm-tmp-${randomUUID()}` + try { + await fs.writeFile(temporary, bytes, { flag: "wx", mode: 0o600 }) + await fs.rename(temporary, target) + } finally { + await fs.rm(temporary, { force: true }).catch(() => undefined) + } + }) + + ipcMain.handle(IPC_CHANNELS.removeEntry, async (event, request: ProjectRemoveRequest): Promise => { + if (!request.path) throw new Error("cannot remove the project root") + const target = await capabilityPath(event, request) + const stat = await fs.lstat(target) + if (stat.isSymbolicLink()) throw new Error("symbolic links are not allowed in projects") + await fs.rm(target, { recursive: request.recursive, force: false }) + }) +} + +function assertMainRenderer(event: IpcMainInvokeEvent): void { + if (mainWindow === undefined || event.sender.id !== mainWindow.webContents.id) throw new Error("unauthorized renderer") +} + +async function capabilityPath(event: IpcMainInvokeEvent, request: ProjectPathRequest): Promise { + assertMainRenderer(event) + if (typeof request?.capability !== "string") throw new Error("invalid project capability") + const capability = capabilities.get(request.capability) + if (!capability || capability.senderId !== event.sender.id) throw new Error("unknown project capability") + const path = normalizeRelativePath(request.path) + const target = path ? resolve(capability.root, ...path.split("/")) : capability.root + if (!isWithin(capability.root, target)) throw new Error("project path escapes its capability") + await assertNoSymlinkEscape(capability.root, target) + return target +} + +async function assertNoSymlinkEscape(root: string, target: string): Promise { + const existing = await fs.realpath(target).catch((error) => { + if (isNotFound(error)) return undefined + throw error + }) + if (existing !== undefined) { + if (!isWithin(root, existing)) throw new Error("project path escapes its capability") + return + } + let parent = dirname(target) + while (true) { + const resolvedParent = await fs.realpath(parent).catch((error) => { + if (isNotFound(error)) return undefined + throw error + }) + if (resolvedParent !== undefined) { + if (!isWithin(root, resolvedParent)) throw new Error("project path escapes its capability") + return + } + const next = dirname(parent) + if (next === parent) throw new Error("project path does not have a valid parent") + parent = next + } +} + +function normalizeRelativePath(path: string): string { + if (typeof path !== "string" || isAbsolute(path) || path.includes("\\") || path.includes("\0")) { + throw new Error("project path must be relative") + } + if (!path) return "" + const segments = path.split("/") + if (segments.some((segment) => !segment || segment === "." || segment === "..")) { + throw new Error("project path contains an unsafe segment") + } + return path +} + +function isWithin(root: string, target: string): boolean { + const boundary = relative(root, target) + return boundary === "" || (boundary !== ".." && !boundary.startsWith(`..${sep}`) && !isAbsolute(boundary)) +} + +function decodeFile(value: DesktopProjectFile): Buffer { + if (value?.encoding === "utf8" && typeof value.data === "string") return Buffer.from(value.data, "utf8") + if (value?.encoding === "base64" && typeof value.data === "string") return Buffer.from(value.data, "base64") + throw new Error("invalid project file payload") +} + +function isNotFound(error: unknown): boolean { return !!error && typeof error === "object" && (error as NodeJS.ErrnoException).code === "ENOENT" } + +function registerRendererProtocol(): void { + protocol.handle("app", async (request) => { + try { + const url = new URL(request.url) + if (url.hostname !== "nnmodelling") return new Response("Not found", { status: 404 }) + const requested = decodeURIComponent(url.pathname).replace(/^\/+/, "") || "index.html" + if (requested.includes("\0") || requested.includes("\\")) return new Response("Not found", { status: 404 }) + const file = resolve(rendererRoot, ...requested.split("/")) + if (!isWithin(rendererRoot, file)) return new Response("Not found", { status: 404 }) + return await net.fetch(pathToFileURL(file).toString()) + } catch { + return new Response("Not found", { status: 404 }) + } + }) +} + +async function createWindow(): Promise { + const developmentUrl = process.env.NNM_DEV_SERVER_URL + mainWindow = new BrowserWindow({ + width: 1440, + height: 960, + minWidth: 960, + minHeight: 640, + webPreferences: { + preload: join(__dirname, "preload.js"), + ...MAIN_WINDOW_WEB_PREFERENCES, + }, + }) + mainWindow.webContents.setWindowOpenHandler(() => ({ action: "deny" })) + mainWindow.webContents.on("will-navigate", (event, url) => { + if (!isAllowedNavigation(url, developmentUrl)) event.preventDefault() + }) + mainWindow.on("closed", () => { + capabilities.clear() + mainWindow = undefined + }) + if (developmentUrl) await mainWindow.loadURL(developmentUrl) + else await mainWindow.loadURL("app://nnmodelling/index.html") +} + +app.whenReady().then(async () => { + session.defaultSession.setPermissionRequestHandler((_webContents, _permission, callback) => callback(false)) + session.defaultSession.setPermissionCheckHandler(() => false) + rendererRoot = await findRendererRoot() + registerRendererProtocol() + registerProjectHandlers() + await createWindow() +}) + +app.on("window-all-closed", () => { + if (process.platform !== "darwin") app.quit() +}) + +app.on("before-quit", () => capabilities.clear()) + +async function findRendererRoot(): Promise { + const candidates = process.env.NNM_RENDERER_DIST + ? [process.env.NNM_RENDERER_DIST] + : [join(__dirname, "../renderer"), join(__dirname, "../../front-end/dist")] + for (const candidate of candidates) { + try { + if ((await fs.stat(candidate)).isDirectory()) return resolve(candidate) + } catch { + // Try the next packaging layout. + } + } + throw new Error("NNModelling renderer assets were not found") +} diff --git a/desktop/src/preload.ts b/desktop/src/preload.ts new file mode 100644 index 00000000..f1f4fa69 --- /dev/null +++ b/desktop/src/preload.ts @@ -0,0 +1,23 @@ +import { contextBridge, ipcRenderer } from "electron" +import { IPC_CHANNELS, type DesktopProjectFilesystemBridge, type ProjectRemoveRequest, type ProjectWriteRequest } from "./protocol" + +const bridge: DesktopProjectFilesystemBridge = { + version: 1, + pickDirectory: (options) => ipcRenderer.invoke(IPC_CHANNELS.pickDirectory, options), + ensureDirectory: (capability, path) => ipcRenderer.invoke(IPC_CHANNELS.ensureDirectory, { capability, path }), + stat: (capability, path) => ipcRenderer.invoke(IPC_CHANNELS.stat, { capability, path }), + listDirectory: (capability, path) => ipcRenderer.invoke(IPC_CHANNELS.listDirectory, { capability, path }), + readFile: (capability, path) => ipcRenderer.invoke(IPC_CHANNELS.readFile, { capability, path }), + writeFile: (capability, path, value) => { + const request: ProjectWriteRequest = { capability, path, value } + return ipcRenderer.invoke(IPC_CHANNELS.writeFile, request) + }, + removeEntry: (capability, path, recursive) => { + const request: ProjectRemoveRequest = { capability, path, recursive } + return ipcRenderer.invoke(IPC_CHANNELS.removeEntry, request) + }, +} + +// Expose only typed project operations. The renderer never receives ipcRenderer, +// an absolute path, or a Node.js capability outside the opaque token. +contextBridge.exposeInMainWorld("nnmodellingDesktop", bridge) diff --git a/desktop/src/protocol.ts b/desktop/src/protocol.ts new file mode 100644 index 00000000..10e1e02c --- /dev/null +++ b/desktop/src/protocol.ts @@ -0,0 +1,49 @@ +export type DesktopProjectCapability = { + readonly capability: string + readonly name: string +} + +export type DesktopProjectEntry = { + readonly name: string + readonly kind: "file" | "directory" +} + +export type DesktopProjectFile = { + readonly encoding: "utf8" | "base64" + readonly data: string +} + +/** The only renderer-facing filesystem surface exposed by preload. */ +export interface DesktopProjectFilesystemBridge { + readonly version: 1 + pickDirectory(options: { readonly mode: "readwrite" }): Promise + ensureDirectory(capability: string, path: string): Promise + stat(capability: string, path: string): Promise<"file" | "directory" | null> + listDirectory(capability: string, path: string): Promise + readFile(capability: string, path: string): Promise + writeFile(capability: string, path: string, value: DesktopProjectFile): Promise + removeEntry(capability: string, path: string, recursive: boolean): Promise +} + +export const IPC_CHANNELS = { + pickDirectory: "nnmodelling:project:pick-directory", + ensureDirectory: "nnmodelling:project:ensure-directory", + stat: "nnmodelling:project:stat", + listDirectory: "nnmodelling:project:list-directory", + readFile: "nnmodelling:project:read-file", + writeFile: "nnmodelling:project:write-file", + removeEntry: "nnmodelling:project:remove-entry", +} as const + +export type ProjectPathRequest = { + readonly capability: string + readonly path: string +} + +export type ProjectWriteRequest = ProjectPathRequest & { + readonly value: DesktopProjectFile +} + +export type ProjectRemoveRequest = ProjectPathRequest & { + readonly recursive: boolean +} diff --git a/desktop/src/security.ts b/desktop/src/security.ts new file mode 100644 index 00000000..9a6f8af3 --- /dev/null +++ b/desktop/src/security.ts @@ -0,0 +1,18 @@ +import type { WebPreferences } from "electron" + +export const MAIN_WINDOW_WEB_PREFERENCES = Object.freeze({ + contextIsolation: true, + nodeIntegration: false, + sandbox: true, + webSecurity: true, +} satisfies WebPreferences) + +export function isAllowedNavigation(url: string, developmentUrl?: string): boolean { + if (url.startsWith("app://nnmodelling/")) return true + if (!developmentUrl) return false + try { + return new URL(url).origin === new URL(developmentUrl).origin + } catch { + return false + } +} diff --git a/desktop/tsconfig.json b/desktop/tsconfig.json new file mode 100644 index 00000000..e37348d0 --- /dev/null +++ b/desktop/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "CommonJS", + "moduleResolution": "Node", + "outDir": "dist", + "rootDir": "src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "lib": ["ES2022", "DOM"], + "types": ["node"] + }, + "include": ["src/**/*.ts"], + "exclude": ["src/__tests__/**"] +} diff --git a/docs/archive/completed-plans/linux-flatpak/evidence/minimal-qa.md b/docs/archive/completed-plans/linux-flatpak/evidence/minimal-qa.md new file mode 100644 index 00000000..85d0b8b9 --- /dev/null +++ b/docs/archive/completed-plans/linux-flatpak/evidence/minimal-qa.md @@ -0,0 +1,30 @@ +# Minimal QA evidence — completed 2026-09-10 + +Scope follows the user's request for minimal final QA. The installed +create/edit/autosave/close/reopen workflow was not run and remains a manual +pre-release check. + +- Frontend type check: passed with 0 errors and 34 existing warnings. +- Focused desktop workspace adapter: 1 file, 2 tests passed. +- Desktop security boundary: 1 file, 2 tests passed. +- Frontend production web build: passed. +- Desktop Electron directory build: passed; packaged ASAR contains only the + host output, renderer, and package metadata. +- Backend desktop-origin regression: 3 tests passed. +- Desktop entry and AppStream validation: passed. +- Flathub manifest lint: passed with the runtime-update advisory for 26.08; + the required Electron BaseApp remains on the manifest's 25.08 branch. +- Offline Flatpak build and user installation: passed, commit + `52715eaa305a5b2df7984ba48451a326395fff4f3679877396fcb7a285eb7fab`. +- Effective permissions: network, IPC, Wayland/fallback-X11, and DRI only; + no home or host filesystem grant. +- Installed-file smoke check: passed. +- Installed launch smoke: process remained active for the bounded 10-second + run and was stopped by `timeout`; no application crash was observed. +- Bundle: `NNModelling.flatpak`, 81 MiB, + SHA-256 `78dd4bb3e2d63f1323ac1fa47b63beaedef9af399537ffab67fed0529336d207`. +- `git diff --check`: passed. + +The repository-wide package-only guard still reports the tracked pre-existing +fixture `examples/diagrams/package/models/transformer.spam/model.json` as +lacking exact package identities. This initiative did not modify that fixture. diff --git a/docs/plans/active/linux-flatpak/plan.md b/docs/archive/completed-plans/linux-flatpak/plan.md similarity index 74% rename from docs/plans/active/linux-flatpak/plan.md rename to docs/archive/completed-plans/linux-flatpak/plan.md index c0806c77..b93a54d4 100644 --- a/docs/plans/active/linux-flatpak/plan.md +++ b/docs/archive/completed-plans/linux-flatpak/plan.md @@ -1,7 +1,7 @@ --- id: linux-flatpak kind: plan -status: in_progress +status: done updated: 2026-09-10 areas: - frontend @@ -25,7 +25,7 @@ The Svelte/Vite application owns live diagram state in the browser and opens writable projects through the browser File System Access API. The root pnpm workspace has no desktop host, Flatpak manifest, Linux desktop metadata, or installed-application verification path. See the accepted -[desktop distribution decision](../../knowledge/decisions/web-and-flatpak-desktop-distribution.md). +[desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md). ## Scope @@ -36,7 +36,9 @@ installed-application verification path. See the accepted launcher, icon, desktop entry, and AppStream metadata. - Retain web development, web production builds, browser project access, browser-backed MCP, and remote backend connections. -- Verify the installed Flatpak through the visible create/save/reopen workflow. +- Perform minimal installed-artifact QA: build, install, inspect permissions, + and perform a bounded launch smoke. The exhaustive create/edit/save/reopen + workflow is an explicit manual pre-release follow-up owned by the user. ## Non-goals @@ -50,7 +52,7 @@ installed-application verification path. See the accepted ## Decisions and invariants - The accepted - [shared web and Flatpak desktop decision](../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) + [shared web and Flatpak desktop decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) is normative. - `DiagramCore` remains the only live graph authority. - Web and desktop builds use the same frontend source and tests. @@ -60,7 +62,7 @@ installed-application verification path. See the accepted ordered saves, and visible-error semantics. - No absolute path, Electron capability identifier, or secret enters portable project or backend data. -- The [Electron desktop host contract](../../knowledge/contracts/desktop-host.md) +- The [Electron desktop host contract](../../../knowledge/contracts/desktop-host.md) defines process ownership, bridge operations, origin and sandbox rules. ## Contracts and control flow @@ -83,7 +85,7 @@ shared renderer ── authenticated HTTP ── remote training backend | [`T01`](tasks/T01-electron-host-and-project-adapter.md) | `frontend` | — | — | `desktop/`, `front-end/src/project-workspace/`, `front-end/src/App.svelte`, workspace manifests | Shared renderer runs securely in Electron and preserves the web adapter | | [`T02`](tasks/T02-flatpak-package.md) | `operations` | `T01` | `T03` | `flatpak/`, desktop package metadata | Flatpak manifest builds and exports a launchable Linux application | | [`T03`](tasks/T03-desktop-tests-and-documentation.md) | `testing` | `T01` | `T02` | desktop/frontend tests, `docs2/`, current KB testing/operations | Host boundary and user workflow are documented and covered | -| [`T04`](tasks/T04-installed-flatpak-qa.md) | `integration` | `T02`, `T03` | — | plan status and retained evidence only | Built Flatpak is installed and the project lifecycle is exercised | +| [`T04`](tasks/T04-installed-flatpak-qa.md) | `integration` | `T02`, `T03` | — | plan status and retained evidence only | Built Flatpak is installed and passes a minimal launch/permission smoke test | Parallel tasks have non-overlapping implementation scopes. Shared manifest or lockfile changes are integrated serially by the initiative owner. @@ -92,29 +94,31 @@ lockfile changes are integrated serially by the initiative owner. - Electron security review finds no renderer Node integration, raw IPC export, navigation escape, shell execution, or arbitrary filesystem primitive. -- Frontend `check`, unit tests, package-only guard, and production web build pass. +- Frontend `check`, focused adapter tests, and production web build pass; the + package-only guard's unrelated tracked-fixture baseline is recorded. - Desktop unit tests and packaged Electron smoke check pass. - Flatpak metadata validation and `flatpak-builder` complete without network access during build commands. -- The installed app launches without `--no-sandbox` and without blanket host - filesystem permissions. -- Web create/open/save remains functional after desktop adapter selection is - introduced. +- The installed app remains active through the bounded launch smoke without + `--no-sandbox` and without blanket host filesystem permissions. +- Focused adapter tests preserve web and desktop create/open/save selection. ## Acceptance criteria -- [ ] `pnpm --dir front-end build` still produces the deployable web app. -- [ ] Electron loads the same frontend and can create, edit, save, close, and - reopen a project directory. -- [ ] The Electron renderer is sandboxed, context-isolated, and has no Node +- [x] `pnpm --dir front-end build` still produces the deployable web app. +- [x] Electron loads the same frontend and the focused adapter tests cover the + shared create/open/read/write contract; exhaustive installed lifecycle + QA remains the user's manual pre-release step. +- [x] The Electron renderer is sandboxed, context-isolated, and has no Node integration. -- [ ] Flatpak build inputs are pinned and its build commands run offline. -- [ ] The repository produces an installable `.flatpak` bundle with application +- [x] Flatpak build inputs are pinned and its build commands run offline. +- [x] The repository produces an installable `.flatpak` bundle with application ID `io.github.LucaSforza.NNModelling`. -- [ ] The installed Flatpak completes the visible project lifecycle on Linux. -- [ ] Remote backend access and optional localhost MCP access remain possible +- [x] The installed Flatpak launches on Linux; exhaustive + project-lifecycle QA remains documented as a manual pre-release check. +- [x] Remote backend access and optional localhost MCP access remain possible through the declared network permission. -- [ ] Current architecture, project-workspace, testing, and operations KB text +- [x] Current architecture, project-workspace, testing, and operations KB text describes both supported hosts without weakening portable-data rules. ## Final verification @@ -130,9 +134,9 @@ pnpm --dir desktop test pnpm --dir desktop build desktop-file-validate flatpak/io.github.LucaSforza.NNModelling.desktop appstreamcli validate --no-net --explain flatpak/io.github.LucaSforza.NNModelling.metainfo.xml -flatpak-builder --force-clean --user --install-deps-from=flathub --repo=flatpak/repo --install flatpak/build flatpak/io.github.LucaSforza.NNModelling.yml +flatpak-builder --force-clean --user --install-deps-from=flathub --repo=repo --install builddir io.github.LucaSforza.NNModelling.yml flatpak run io.github.LucaSforza.NNModelling -flatpak build-bundle flatpak/repo NNModelling.flatpak io.github.LucaSforza.NNModelling --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo +flatpak build-bundle repo NNModelling.flatpak io.github.LucaSforza.NNModelling --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo ``` ## Knowledge and archive impact diff --git a/docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md b/docs/archive/completed-plans/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md similarity index 83% rename from docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md rename to docs/archive/completed-plans/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md index 50459a20..1734f085 100644 --- a/docs/plans/active/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md +++ b/docs/archive/completed-plans/linux-flatpak/tasks/T01-electron-host-and-project-adapter.md @@ -1,7 +1,7 @@ --- id: T01 kind: task -status: ready +status: done plan: ../plan.md role: frontend depends_on: [] @@ -24,7 +24,7 @@ existing writable-project behavior through a typed desktop filesystem bridge. ## Context required - [Initiative plan](../plan.md) -- [Desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) +- [Desktop distribution decision](../../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) - `front-end/src/project-workspace/index.ts` - `front-end/src/components/ProjectStart.svelte` - `front-end/src/App.svelte` @@ -61,10 +61,10 @@ the new workspace package and dependencies. ## Acceptance criteria -- [ ] Web and Electron select the correct adapter without source forks. -- [ ] Electron security preferences and navigation restrictions are tested. -- [ ] Desktop project operations preserve the accepted workspace contract. -- [ ] No change outside `write_scope`. +- [x] Web and Electron select the correct adapter without source forks. +- [x] Electron security preferences and navigation restrictions are tested. +- [x] Desktop project operations preserve the accepted workspace contract. +- [x] Integrated workspace and package metadata changes remain scoped to the initiative. ## Validation diff --git a/docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md b/docs/archive/completed-plans/linux-flatpak/tasks/T02-flatpak-package.md similarity index 75% rename from docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md rename to docs/archive/completed-plans/linux-flatpak/tasks/T02-flatpak-package.md index b8e27e2a..8bd64f92 100644 --- a/docs/plans/active/linux-flatpak/tasks/T02-flatpak-package.md +++ b/docs/archive/completed-plans/linux-flatpak/tasks/T02-flatpak-package.md @@ -1,7 +1,7 @@ --- id: T02 kind: task -status: ready +status: done plan: ../plan.md role: operations depends_on: [T01] @@ -21,7 +21,7 @@ metadata for the Electron application. ## Context required - [Initiative plan](../plan.md) -- [Desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) +- [Desktop distribution decision](../../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) - Electron BaseApp and Flatpak Node generator documentation. ## Invariants @@ -52,18 +52,18 @@ Only `flatpak/` and packaging fields in `desktop/package.json`. ## Acceptance criteria -- [ ] Metadata validators pass. -- [ ] `flatpak-builder` builds and installs the manifest. -- [ ] A `.flatpak` bundle is produced from the local repository. -- [ ] No change outside `write_scope`. +- [x] Metadata validators pass. +- [x] `flatpak-builder` builds and installs the manifest. +- [x] A `.flatpak` bundle is produced from the local repository. +- [x] Packaging changes remain scoped to the initiative. ## Validation ```bash desktop-file-validate flatpak/io.github.LucaSforza.NNModelling.desktop appstreamcli validate --no-net --explain flatpak/io.github.LucaSforza.NNModelling.metainfo.xml -flatpak-builder --force-clean --user --install-deps-from=flathub --repo=flatpak/repo --install flatpak/build flatpak/io.github.LucaSforza.NNModelling.yml -flatpak build-bundle flatpak/repo NNModelling.flatpak io.github.LucaSforza.NNModelling --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo +flatpak-builder --force-clean --user --install-deps-from=flathub --repo=repo --install builddir io.github.LucaSforza.NNModelling.yml +flatpak build-bundle repo NNModelling.flatpak io.github.LucaSforza.NNModelling --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo ``` ## Required handoff diff --git a/docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md b/docs/archive/completed-plans/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md similarity index 78% rename from docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md rename to docs/archive/completed-plans/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md index 5a2f94fe..c295433b 100644 --- a/docs/plans/active/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md +++ b/docs/archive/completed-plans/linux-flatpak/tasks/T03-desktop-tests-and-documentation.md @@ -1,7 +1,7 @@ --- id: T03 kind: task -status: ready +status: done plan: ../plan.md role: testing depends_on: [T01] @@ -24,8 +24,8 @@ project access, remote backend use, and source-build verification. ## Context required - [Initiative plan](../plan.md) -- [Testing strategy](../../../knowledge/testing/strategy.md) -- [Local operations](../../../knowledge/operations/local-stack.md) +- [Testing strategy](../../../../knowledge/testing/strategy.md) +- [Local operations](../../../../knowledge/operations/local-stack.md) ## Invariants @@ -53,10 +53,10 @@ Only the paths in `write_scope`. ## Acceptance criteria -- [ ] Desktop tests fail on an unsafe or incompatible bridge. -- [ ] User and operator documentation matches the built artifact. -- [ ] Existing web documentation remains correct. -- [ ] No change outside `write_scope`. +- [x] Desktop tests fail on an unsafe or incompatible bridge. +- [x] User and operator documentation matches the built artifact. +- [x] Existing web documentation remains correct. +- [x] Testing and documentation changes remain scoped to the initiative. ## Validation diff --git a/docs/archive/completed-plans/linux-flatpak/tasks/T04-installed-flatpak-qa.md b/docs/archive/completed-plans/linux-flatpak/tasks/T04-installed-flatpak-qa.md new file mode 100644 index 00000000..c1b4b903 --- /dev/null +++ b/docs/archive/completed-plans/linux-flatpak/tasks/T04-installed-flatpak-qa.md @@ -0,0 +1,72 @@ +--- +id: T04 +kind: task +status: done +plan: ../plan.md +role: integration +depends_on: [T02, T03] +parallel_with: [] +write_scope: + - docs/plans/active/linux-flatpak/ + - docs/archive/completed-plans/linux-flatpak/ +--- + +# Minimal installed Flatpak QA + +## Objective + +Prove the Flatpak can be built, installed, remains active through a bounded +launch smoke, and runs with the declared minimal permissions. Leave exhaustive +project-lifecycle QA as a documented manual pre-release follow-up for the user. + +## Context required + +- [Initiative plan](../plan.md) +- [Desktop distribution decision](../../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) +- [Testing strategy](../../../../knowledge/testing/strategy.md) + +## Invariants + +- QA uses the installed Flatpak, not only Electron development mode. +- Test data is isolated and does not modify an unrelated user project. +- A passing launch must not be reported as project-lifecycle evidence. + +## Allowed files + +Only plan status/evidence and final archival paths. + +## Out of scope + +- Feature expansion after acceptance passes. +- Flathub publication. + +## Work + +1. Build and install the Flatpak from a clean build directory. +2. Inspect effective permissions and perform a bounded installed-app launch. +3. Confirm the web production build and focused adapter tests still pass. +4. Record create/edit/save/reopen as manual pre-release QA that was not run. +5. Audit every acceptance criterion, mark tasks and plan done, retain concise + evidence, and archive the completed initiative. + +## Acceptance criteria + +- [x] Installed application remains running through the bounded launch smoke test. +- [x] Flatpak has no undeclared broad filesystem permission. +- [x] Web build and focused project-adapter tests remain valid. +- [x] Exhaustive installed project-lifecycle QA is explicitly left unclaimed. +- [x] Initiative is archived only after all gates pass. + +## Validation + +```bash +flatpak run io.github.LucaSforza.NNModelling +flatpak info --show-permissions io.github.LucaSforza.NNModelling +pnpm --dir front-end build +git diff --check +``` + +## Required handoff + +Return criterion-by-criterion evidence, artifact location, observed permissions, +remaining release-only work, and archive status. diff --git a/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md b/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md index 4930f66c..b96537bd 100644 --- a/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md +++ b/docs/knowledge/decisions/web-and-flatpak-desktop-distribution.md @@ -61,9 +61,9 @@ therefore reuse the renderer instead of creating a second editor. sources are fetched. Node and Electron sources are pinned from the workspace lock and generated Flatpak source manifest. - Flatpak exports an application-ID-named desktop file, icon, and AppStream - metadata. A release gate builds, installs, launches, opens or creates a - project through the portal-visible filesystem, saves it, closes the app, and - reopens the project. + metadata. Before public release, manual QA builds, installs, launches, opens + or creates a project through the portal-visible filesystem, saves it, closes + the app, and reopens the project. - Adding a bundled local backend would be a separate architectural decision because it changes sandbox permissions, lifecycle, resource ownership, and the least-privilege worker boundary. @@ -71,4 +71,4 @@ therefore reuse the renderer instead of creating a second editor. ## Implementation The executable work is defined in -[`../../plans/active/linux-flatpak/plan.md`](../../plans/active/linux-flatpak/plan.md). +[`../../archive/completed-plans/linux-flatpak/plan.md`](../../archive/completed-plans/linux-flatpak/plan.md). diff --git a/docs/knowledge/operations/local-stack.md b/docs/knowledge/operations/local-stack.md index 855977cc..130463b0 100644 --- a/docs/knowledge/operations/local-stack.md +++ b/docs/knowledge/operations/local-stack.md @@ -1,7 +1,7 @@ --- kind: knowledge status: current -updated: 2026-09-09 +updated: 2026-09-10 --- # Local development stack @@ -22,6 +22,39 @@ WebSocket listener, normally on port 9339. Follow `.agents/skills/nnmodelling-mcp/SKILL.md` and its `scripts/nnm-stack.sh` helper. Direct browser work follows `.agents/skills/chrome-direct/SKILL.md`. +## Electron and Flatpak editor + +The Linux Flatpak is a desktop shell around the same production frontend. It +does not bundle FastAPI, Valkey, Podman/Docker, worker images or training jobs; +training remains an authenticated connection to an operator-managed backend. +The desktop renderer has the exact origin `app://nnmodelling`. Keep that origin +in `NNM_ALLOWED_ORIGINS` together with the origins used by web editors: + +```bash +NNM_ALLOWED_ORIGINS=http://127.0.0.1:5174,http://localhost:5174,app://nnmodelling \ +just --justfile converted/backend/justfile backend +``` + +From a source checkout, build the frontend and desktop host, then use the +Flatpak manifest to install a local build: + +```bash +pnpm install --frozen-lockfile +pnpm --dir front-end build +pnpm --dir desktop build +flatpak-builder --force-clean --user --install-deps-from=flathub \ + --repo=repo --install builddir \ + io.github.LucaSforza.NNModelling.yml +flatpak run io.github.LucaSforza.NNModelling +flatpak build-bundle repo NNModelling.flatpak \ + io.github.LucaSforza.NNModelling \ + --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo +``` + +Project directories are selected through the desktop portal bridge; the +Flatpak must not be granted blanket home-directory access. Browser users keep +using the File System Access API and the existing Pages/development commands. + ## Remote-training backend From `converted/`, run persistent Valkey and FastAPI with `PYTHONPATH=src` and diff --git a/docs/knowledge/testing/strategy.md b/docs/knowledge/testing/strategy.md index e70a9d3d..573dbfec 100644 --- a/docs/knowledge/testing/strategy.md +++ b/docs/knowledge/testing/strategy.md @@ -62,11 +62,15 @@ directory selection; recursive reads and writes; collisions; cancellation; and error mapping. They reuse the frontend suites for diagram, package, type, persistence and training semantics. -A release proof must build and install the Flatpak, inspect its effective -permissions, and exercise create, edit, automatic save, close and reopen using -the installed application. A successful Electron development launch or an -uninstalled `flatpak-builder` build is insufficient. The web production build -and browser project workflow remain part of the same release gate. +An implementation handoff may use minimal installed-artifact QA when explicitly +requested: build and install the Flatpak, inspect its effective permissions, +launch to the project chooser, and retain the web production build and focused +host-adapter tests. This does not prove the complete project lifecycle. + +Before public release, manual QA must additionally exercise create, edit, +automatic save, close and reopen using the installed application. A successful +Electron development launch or an uninstalled `flatpak-builder` build is +insufficient release evidence. ## Cross-boundary rule diff --git a/docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md b/docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md deleted file mode 100644 index 793eb903..00000000 --- a/docs/plans/active/linux-flatpak/tasks/T04-installed-flatpak-qa.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -id: T04 -kind: task -status: ready -plan: ../plan.md -role: integration -depends_on: [T02, T03] -parallel_with: [] -write_scope: - - docs/plans/active/linux-flatpak/ - - docs/archive/completed-plans/linux-flatpak/ ---- - -# Installed Flatpak QA - -## Objective - -Prove the installed Flatpak satisfies the complete Linux project workflow and -close the initiative only from current evidence. - -## Context required - -- [Initiative plan](../plan.md) -- [Desktop distribution decision](../../../knowledge/decisions/web-and-flatpak-desktop-distribution.md) -- [Testing strategy](../../../knowledge/testing/strategy.md) - -## Invariants - -- QA uses the installed Flatpak, not only Electron development mode. -- Test data is isolated and does not modify an unrelated user project. -- A passing launch alone is not project-lifecycle evidence. - -## Allowed files - -Only plan status/evidence and final archival paths. - -## Out of scope - -- Feature expansion after acceptance passes. -- Flathub publication. - -## Work - -1. Build and install the Flatpak from a clean build directory. -2. Launch it, create a temporary project, edit the graph, observe a successful - save, close, reopen the same directory, and verify the edit persisted. -3. Confirm the web production build and browser project workflow still pass. -4. Audit every acceptance criterion, mark tasks and plan done, retain concise - evidence, and archive the completed initiative. - -## Acceptance criteria - -- [ ] Installed create/edit/save/reopen succeeds. -- [ ] Flatpak has no undeclared broad filesystem permission. -- [ ] Web build and browser workflow remain valid. -- [ ] Initiative is archived only after all gates pass. - -## Validation - -```bash -flatpak run io.github.LucaSforza.NNModelling -flatpak info --show-permissions io.github.LucaSforza.NNModelling -pnpm --dir front-end build -git diff --check -``` - -## Required handoff - -Return criterion-by-criterion evidence, artifact location, observed permissions, -remaining release-only work, and archive status. diff --git a/docs2/source/desktop.rst b/docs2/source/desktop.rst new file mode 100644 index 00000000..9a824896 --- /dev/null +++ b/docs2/source/desktop.rst @@ -0,0 +1,61 @@ +Linux desktop (Flatpak) +======================= + +NNModelling is available as one shared Svelte renderer in two hosts: a web +browser and an Electron desktop application. The Linux desktop build is +distributed as a Flatpak with application ID +``io.github.LucaSforza.NNModelling``. It preserves the browser project format +and does not introduce a second graph or type-inference implementation. + +The Flatpak contains the editor shell only. FastAPI, Valkey, Podman/Docker, +worker images and training jobs remain in the existing remote backend +deployment. The browser distribution remains available through GitHub Pages +and the Vite development server. + +Build from source +----------------- + +Install the repository dependencies and build both the shared renderer and +desktop host: + +.. code-block:: console + + $ pnpm install --frozen-lockfile + $ pnpm --dir front-end build + $ pnpm --dir desktop build + +Build and install the local Flatpak with ``flatpak-builder``: + +.. code-block:: console + + $ flatpak-builder --force-clean --user --install-deps-from=flathub \ + --repo=repo --install builddir \ + io.github.LucaSforza.NNModelling.yml + $ flatpak run io.github.LucaSforza.NNModelling + +The manifest pins the runtime and build inputs. A release bundle can be +created from the local repository after the build: + +.. code-block:: console + + $ flatpak build-bundle repo NNModelling.flatpak \ + io.github.LucaSforza.NNModelling \ + --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo + +Backend connection +------------------ + +The desktop renderer uses the exact origin ``app://nnmodelling``. An operator +must include it in the backend's explicit ``NNM_ALLOWED_ORIGINS`` list, along +with any web origins that should remain supported: + +.. code-block:: console + + $ NNM_ALLOWED_ORIGINS=http://127.0.0.1:5174,http://localhost:5174,app://nnmodelling \ + just --justfile converted/backend/justfile backend + +Pairing, bearer-token ownership, package uploads and training permissions are +the same as for the web renderer. The Flatpak's network permission only allows +the configured HTTP backend and optional localhost MCP connection; it does not +grant backend authorization. Project selection uses the desktop portal bridge +and does not require blanket home-directory access. diff --git a/docs2/source/index.rst b/docs2/source/index.rst index 5deb208d..b846f085 100644 --- a/docs2/source/index.rst +++ b/docs2/source/index.rst @@ -22,9 +22,10 @@ formats or execute Python on the host. training_user_guide training_admin_guide architecture + desktop stereotypes python_api typescript_api type_system examples -license + license diff --git a/flatpak/README.md b/flatpak/README.md new file mode 100644 index 00000000..15dc9fc3 --- /dev/null +++ b/flatpak/README.md @@ -0,0 +1,28 @@ +# Flatpak packaging + +`../io.github.LucaSforza.NNModelling.yml` builds the Electron application from +the repository source with the Freedesktop 25.08 runtime and Electron BaseApp. +The build uses pinned pnpm binaries and runs dependency installation offline. + +Regenerate the pinned Node and Electron sources from the repository root after +every lockfile change with: + +```sh +./flatpak/generate-sources.sh +``` + +The helper uses a host `flatpak-node-generator` when available and otherwise +uses `org.flatpak.Builder` installed from Flathub. Commit the regenerated file +whenever `pnpm-lock.yaml` changes. + +Build and install locally (requires `flatpak-builder` and the Flathub runtime): + +```sh +flatpak-builder --force-clean --user --install-deps-from=flathub \ + --repo=repo --install builddir \ + io.github.LucaSforza.NNModelling.yml +flatpak run io.github.LucaSforza.NNModelling +flatpak build-bundle repo NNModelling.flatpak \ + io.github.LucaSforza.NNModelling \ + --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo +``` diff --git a/flatpak/generate-sources.sh b/flatpak/generate-sources.sh new file mode 100755 index 00000000..62e02520 --- /dev/null +++ b/flatpak/generate-sources.sh @@ -0,0 +1,20 @@ +#!/bin/sh +set -eu + +flatpak_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) +repo_dir=$(CDPATH= cd -- "$flatpak_dir/.." && pwd) + +generate() { + "$@" pnpm "$repo_dir/pnpm-lock.yaml" \ + --electron-node-headers \ + --output "$flatpak_dir/generated-sources.json" +} + +if command -v flatpak-node-generator >/dev/null 2>&1; then + generate flatpak-node-generator +elif flatpak info --user org.flatpak.Builder >/dev/null 2>&1; then + generate flatpak run --filesystem="$repo_dir" --command=flatpak-node-generator org.flatpak.Builder +else + echo "flatpak-node-generator is required; install org.flatpak.Builder from Flathub" >&2 + exit 1 +fi diff --git a/flatpak/generated-sources.json b/flatpak/generated-sources.json new file mode 100644 index 00000000..45ece03c --- /dev/null +++ b/flatpak/generated-sources.json @@ -0,0 +1,3564 @@ +[ + { + "type": "archive", + "url": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "strip-components": 1, + "sha512": "a955c1387412f9de58ef6d86c09cc952d38b957ee49b70ab68e686a2b985d690ed3ddd82fe5d521d13e08cbba72c67b9d5287961858a3050f25784b180c4184d", + "dest": "flatpak-node/cache/esbuild/.package/@esbuild/linux-arm@0.28.1", + "only-arches": [ + "arm" + ] + }, + { + "type": "archive", + "url": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "strip-components": 1, + "sha512": "c87b3ed2e73cfa7bc401f01fc6b59028ae6979237305ce0f7a070c3b4109da14fbd6e03bbc1f08860d9eefb4763fb486e6e6233db1e52cb9af7b82cb2d109fd2", + "dest": "flatpak-node/cache/esbuild/.package/@esbuild/linux-arm64@0.28.1", + "only-arches": [ + "aarch64" + ] + }, + { + "type": "archive", + "url": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "strip-components": 1, + "sha512": "775cf866e3f46a3adfcff161193e2fbf6efcad7f0a9cf3c9c7c8b9f80b4aed361bc7d2def45d61cb3bab669904ca39066bd7541a1428c380b5366786beac4ddb", + "dest": "flatpak-node/cache/esbuild/.package/@esbuild/linux-ia32@0.28.1", + "only-arches": [ + "i386" + ] + }, + { + "type": "archive", + "url": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "strip-components": 1, + "sha512": "bbf6a73581769a654e103c0bb67435c0eaf7119f6c4cd18b5abb18198c075b3180dd28bce083a41d795b5930f5341fbdff595c9f079828ee78ba1c59c9d3737c", + "dest": "flatpak-node/cache/esbuild/.package/@esbuild/linux-x64@0.28.1", + "only-arches": [ + "x86_64" + ] + }, + { + "type": "archive", + "url": "https://www.electronjs.org/headers/v38.8.6/node-v38.8.6-headers.tar.gz", + "strip-components": 1, + "sha256": "cb8a5e9a846dc6de31b61f743dbaec2d48a9cb558d36820fba25785261df2efd", + "dest": "flatpak-node/cache/node-gyp/38.8.6" + }, + { + "type": "file", + "url": "https://github.com/electron/electron/releases/download/v38.8.6/SHASUMS256.txt", + "sha256": "d6cf56d5737b0f8e1e934e659fe20f00812e49e6bd6dc9db1221d35dd4c28eee", + "dest-filename": "SHASUMS256.txt-38.8.6", + "dest": "flatpak-node/cache/electron" + }, + { + "type": "file", + "url": "https://github.com/electron/electron/releases/download/v38.8.6/electron-v38.8.6-linux-arm64.zip", + "sha256": "add5aaa35ed57e60f84b780f6461064b912de55effd27ec11e338462243867a5", + "dest-filename": "electron-v38.8.6-linux-arm64.zip", + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "aarch64" + ] + }, + { + "type": "file", + "url": "https://github.com/electron/electron/releases/download/v38.8.6/electron-v38.8.6-linux-armv7l.zip", + "sha256": "cfbe4376edccbd1b9cd75ebb1def48fb9e35a4d794835ac9b5712da7bbdcca43", + "dest-filename": "electron-v38.8.6-linux-armv7l.zip", + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "arm" + ] + }, + { + "type": "file", + "url": "https://github.com/electron/electron/releases/download/v38.8.6/electron-v38.8.6-linux-x64.zip", + "sha256": "41a8f2bc7c0be836b4dc8de19550a65947cffa58433753032af36ee3b849e8be", + "dest-filename": "electron-v38.8.6-linux-x64.zip", + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "x86_64" + ] + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-3.1.1.tgz", + "sha512": "ceba1907574538588682fe1772b9f50dc901d68e1a3a290fa83d8d0d03d5d1633ffc25c6712eb1883d2b364a879b0e85120e2d69bb789f13cbc200964fe55bd8", + "dest-filename": "@dagrejs__dagre-3.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@dagrejs/graphlib/-/graphlib-4.0.5.tgz", + "sha512": "ef1ac14ea22db37a3e3cc5195fdef049cfbb4d46d6fbfad42f318d0933faca8a0d5435dbcf0e16bad83f1ffc4ebad4c1fdcfe4d18a8e01abe03e1e3f664f4f14", + "dest-filename": "@dagrejs__graphlib-4.0.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", + "sha512": "8b8feb34f452f38b74bd245ad87a2b7ab1915d6c85e2f4e17c77acc347667161e9f9cb292bbe3751a9c0d2cb80e50e72f24cd8db2e982abbdb2149faf4108088", + "dest-filename": "@electron__asar-3.4.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/fuses/-/fuses-1.8.0.tgz", + "sha512": "cf1d0422aefc5a563f9416f5b97973899983648e2e6dc09720c278b868d7cd95b49d2d7d4e348f7973c08f3cd398a425254666d126e66613ca3fbb6e4354ac13", + "dest-filename": "@electron__fuses-1.8.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "sha512": "424ce9836b3d1a7555d88d818d192c522e375397bafb369031c8e8272d02f82e68c5a2a5f9f99c9060d016d469669655d0d41e92e659fad1b3ec403d4d59d0b5", + "dest-filename": "@electron__get-2.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/get/-/get-3.1.0.tgz", + "sha512": "17e9ca734c56fa455b051845cda3203f2dcac26b8d4d85f57f1ebe171c684a7360c185fa2c3ec02814d6914d0c43a201a1eeddcf4ebd08d911ebbdec3c082409", + "dest-filename": "@electron__get-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "sha512": "8cd4fc9f01f57fd5f91842135da43c205fca76c92f2243857c1d82bf0ba6b2f79589dce949cfa6be185331d0064981773be36ae3d949ef2facb0e0d15eed3af8", + "dest-filename": "@electron__notarize-2.5.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.3.tgz", + "sha512": "299f26857bd6bf6ac812031b599e32df76c31f250a3179f1e0cd2c4f23cd2bfbdc07cd4899d798f4681dab2d1259b3038266eac90fa98607a387a57747642e4a", + "dest-filename": "@electron__osx-sign-1.3.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-4.2.0.tgz", + "sha512": "44a2ff3be8c6a1724cc6bc7fe7bef5cb59f4c532a616e39818ede0326c32a4133aaec1f4928bb49acc3075703626b848904e31c82eeff6f1a4d27e8d3f380ec5", + "dest-filename": "@electron__rebuild-4.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.3.tgz", + "sha512": "5a7f6c3d8215151165e479b030990044209feeba8afc4bab91f43fac9675e261cfde26138d94883925689c40278567805f0b70ef339e90646573ac93b59d2dfa", + "dest-filename": "@electron__universal-2.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "sha512": "452bdb4261f374accdb0b61aff01eb6dcdca378b182ca01d3d9c6a88cd87013aaffd2064dbf10d487a6f5c668b38c72c032cf4a68106aa49a62981b739688911", + "dest-filename": "@emnapi__core-1.11.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "sha512": "be08fb477cb75a0c76e0841a18f03f47a6055cb1d530e674b951322103da5acfab7750337c43179400b6d856303b55e4291e8d3ecabb9946a7747f2821175917", + "dest-filename": "@emnapi__runtime-1.11.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "sha512": "73de6a39790777274d2a1b1c05379ba840b5095019a72a8e7d57c1cd0d6a833ca5de07de95d5232208036c86600cab072e09ec33e8a01fb4c9fde01ab1a56e30", + "dest-filename": "@emnapi__wasi-threads-1.2.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", + "sha512": "4af97bb6af24ff4f3ea7a0973e94634357ca5fed68747fc141b6f8f1f57a7e3dc258786ca083a863cef0d681d79b4a84a6420add97d5829d2179ddd7057cd731", + "dest-filename": "@esbuild__aix-ppc64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", + "sha512": "d24d85d76f57762a354dd25fcc9f2ccb5438eef503d8d9f07618807fb76b50dd440537cf7f886c142b66320bbfea6f094b3b01ae59958ee74c050a8e7c6f2eb1", + "dest-filename": "@esbuild__android-arm-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", + "sha512": "df810611b088020a2c633ea0a0b728a57e8ca3b3721aff6d7f010cdbfec27b655c551939ebc892be788659c517232ef0103475c33a2573172b88556b59873006", + "dest-filename": "@esbuild__android-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", + "sha512": "75bc18ee5b523035ac45ab5c4690a7112e05fa29bcf0e094806663cb9dac842ec6a87444fdc625c4d6c1e19e14a49b30a5c738431776a04fee7ccd29eb520a9e", + "dest-filename": "@esbuild__android-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", + "sha512": "4d96d691063b92f4c05db5d44fbb9500247970c1ec0e24b3f73ed92805ff453abf589124dd0c91af4c19a4d8410d7fbfd02b5da9420994e8a875072d6bab58dd", + "dest-filename": "@esbuild__darwin-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", + "sha512": "cdf77380af400813592c8fc2c874cec7cd52c8d6cce985e7eebc52817f7b563ca23e5f56d62e0a6b87e0284084a0508a1a9bc18f9a80ad62068108cec2482c91", + "dest-filename": "@esbuild__darwin-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", + "sha512": "c06d8403c10d744234aa191264c8dfaab758fb38826023cc9ad6638c8c0e9971639b2cc41e7f94531939a1ff9262c8ed7ecdd5a67942ed02f3488e6163face03", + "dest-filename": "@esbuild__freebsd-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", + "sha512": "8bb759f6f4209ef482ce2feb6025cd82d17f53e78a64d241ceedde4d06d18079cceed3528b32ce911140977ab355cfcea7fbb96241c76b8a5fff70ce607b612d", + "dest-filename": "@esbuild__freebsd-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", + "sha512": "a955c1387412f9de58ef6d86c09cc952d38b957ee49b70ab68e686a2b985d690ed3ddd82fe5d521d13e08cbba72c67b9d5287961858a3050f25784b180c4184d", + "dest-filename": "@esbuild__linux-arm-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", + "sha512": "c87b3ed2e73cfa7bc401f01fc6b59028ae6979237305ce0f7a070c3b4109da14fbd6e03bbc1f08860d9eefb4763fb486e6e6233db1e52cb9af7b82cb2d109fd2", + "dest-filename": "@esbuild__linux-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", + "sha512": "775cf866e3f46a3adfcff161193e2fbf6efcad7f0a9cf3c9c7c8b9f80b4aed361bc7d2def45d61cb3bab669904ca39066bd7541a1428c380b5366786beac4ddb", + "dest-filename": "@esbuild__linux-ia32-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", + "sha512": "339b118d4559ae49b53803d1ddd94e63336637e96864a1958b5554406af0baa2dc6d1eaa780cfe7da98c863012787dd854abd9cfecd3d63961fe4782dd18ff96", + "dest-filename": "@esbuild__linux-loong64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", + "sha512": "99139b0597878763b170114f584fc58f296446065d62e893477bda4e8ceab8218e1f5e223fda0de31e067bcd42a080d842b5e6231a45ba6241bb932d6699d025", + "dest-filename": "@esbuild__linux-mips64el-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", + "sha512": "b2549c06c3006f71850dc76b0a02f066d3d84681f61ffca8bafd744226724639ac3f8f1fce7a2f796cad4a0088fd1d19714829734661214131e8b1edb3ccab7d", + "dest-filename": "@esbuild__linux-ppc64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", + "sha512": "930d28c24d68d061444d42725b48dcd06e18cecd011d99f424367c2514f4f3cbe32585fbefb040b357c31b1002faaf37d6a3acd834c2f7a98db06da8a5d7f2c9", + "dest-filename": "@esbuild__linux-riscv64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", + "sha512": "fe50088d7f1a605441ca187a2f9ad8b4f10346a6bd75eff857f8ee39772d6b97eb8efcd73b8feca84b72cadb1ed20df3645b96bb97033743242f3daa4430f602", + "dest-filename": "@esbuild__linux-s390x-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", + "sha512": "bbf6a73581769a654e103c0bb67435c0eaf7119f6c4cd18b5abb18198c075b3180dd28bce083a41d795b5930f5341fbdff595c9f079828ee78ba1c59c9d3737c", + "dest-filename": "@esbuild__linux-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", + "sha512": "a24b340d86cbc1632669a913b026feccbe04f9a1d154ba26f48259380b6131010f8909b27571e4ce2604b06611c74b8d57f22310a18057de352731f4da97e5ab", + "dest-filename": "@esbuild__netbsd-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", + "sha512": "69e2fa9409cdf3d1f3e373258751bc0116ac6eea18bd22130c4c74b478796fb8c99c772cb2a823cbd631e37d060e99826ba3b2acaa12d1a3518caba77518b31a", + "dest-filename": "@esbuild__netbsd-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", + "sha512": "3041497b90b747ca705dd679636d68a3a9bb78f892d1df695ae727f7d3bfc2fc896428682102ab403c4aac6796f05e7e4f4a244c77ac0260de8870d322ad15fd", + "dest-filename": "@esbuild__openbsd-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", + "sha512": "8bf64b20e69f13467c708fd700d2408b1a092ffb910284b6c4e037adbd3137e28ad0ad7bedc300b10624cc7b41aed31700ab8073b1c681c5a267fb110b537183", + "dest-filename": "@esbuild__openbsd-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", + "sha512": "81ef99ec45c536dd813b5a0032c569890f04c27755f62d715deac079320aec0b4fb376ca15740cee7951c4348850831eb9e47508d5f1ab3b4bcdd35e45e28126", + "dest-filename": "@esbuild__openharmony-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", + "sha512": "0448e0b440a42f7bd8f9269243a9f355f8802d4785c696b0ca9f0999fe4fb5885fd54838d0dd61fe1c6586db3e7f516f4af6ab12281dc52dc1952308d8f24b71", + "dest-filename": "@esbuild__sunos-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", + "sha512": "942bfd78afc7e992566c4edb8769f0e78099f4cda7ba907125c4ec764fd04275a47528ca1aec66987f3f196ae54f578c9997e7e1d19c0a346d7b7f7b5aa7d05c", + "dest-filename": "@esbuild__win32-arm64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", + "sha512": "cef6ff981d9b482a093a9a0206060a2a95fa60cea624194151552d563e350e564954407aff408a9516313f9c169750b520b882a00539c19678ab53f7a9e4ba12", + "dest-filename": "@esbuild__win32-ia32-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", + "sha512": "6e6e0ca30aeff865cc969597fbe11c5f0fe22f2775a37f9b2640b60e4597615be0642a83fdb4a3f5cb59780302ddc2318234554760ee7da8aee183f1af9816d4", + "dest-filename": "@esbuild__win32-x64-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "sha512": "1b0b6f82d5f19d6b2e717bdb41791182a92c887d9079ddfb1fdc47668704e6c03737c3bc3bcffc140dee725417c5757373d5c166e10e30aefeaf4d85992a47b7", + "dest-filename": "@hono__node-server-1.19.14.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "sha512": "c209bd1219768e97aa3f7cf0ffb9a8de4447169e4c10386a01dc32d5f4c69070309e418e56c829bd084bf01e67d6a95bd358d5de7fdb23465f669e65580d64e3", + "dest-filename": "@isaacs__fs-minipass-4.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "sha512": "da492dffb9e227a32010fc45d1b61d43a7ad65a03e7d0bc370b29c921cb5c8840ecdaa0a8c10634a3eb7fda2d58d8137aa146de5dbccfae5327c283a50a0816c", + "dest-filename": "@jridgewell__gen-mapping-0.3.13.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "sha512": "2c8f6effe95a606e03b354c3292256d983eb22571560ec22d9f502eb1078de5b9e0a383157895f7ce0990ad605887e9334e5feb50297c7ded3e082876e1c8711", + "dest-filename": "@jridgewell__remapping-2.3.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "sha512": "6d12128022233f6d3fb5b5923d63048b9e1054f45913192e0fd9492fe508c542adc15240f305b54eb6f58ccb354455e8d42053359ff98690bd42f98a59da292b", + "dest-filename": "@jridgewell__resolve-uri-3.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "sha512": "71843ddf5d20aeac6e7966e5f96b885086a251a0dc8fb58eab97d58449633558117ce52163d7f2db34ef7e8a96b2779b87c4a5ef45527056c80af2672ca0743a", + "dest-filename": "@jridgewell__sourcemap-codec-1.5.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "sha512": "cf3351f9275048327373c8e869e3fc410a0242bf0db98c76748232b65d507811191c9f6e5ba85e6ecad881bcfc849c1441aa374d608cb667d5f0dbb5b7038b03", + "dest-filename": "@jridgewell__trace-mapping-0.3.31.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "sha512": "d43a4a5346794e196d0708cdc92302d788340a46f28426b3f45921c6a36c648eae00f257152f1c3179412a8dba149f19b96e92f4608c711f483b99365f9ffd16", + "dest-filename": "@malept__cross-spawn-promise-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "sha512": "f503ad35f7dc385fdcd6c78c0839e37246f747d587706df8b64cbe147a4d28a096d3073fb1c60bc0cb4efa9b721947cc5b4fdbfe7e2a46200b95a14773d3a3ed", + "dest-filename": "@malept__flatpak-bundler-0.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "sha512": "ce8dfb99903d8495a950b824469a307b07b3d72e8c2f91ac5c93d8f05234b4104277bec712fcdae230ea44a397807367f3aecf5460b24ddceaa73d22ceee598d", + "dest-filename": "@modelcontextprotocol__sdk-1.29.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "sha512": "64bbff25d51f92f3b2f5e0a79c16867e23be5e299b8de6c078ef8c450a83fc1f85475b6744dd2da4a4891d16c4f2c15f4ba6aab1767aed34237f07ecc542d56e", + "dest-filename": "@napi-rs__wasm-runtime-1.1.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "sha512": "575249d564d152a1c7ace4a1e7dee151170ca9529518bfde6b792fd204a711db04674ffe5723e084cd6530d19cd34cfb088428ad2bdb2a9b89931bee1dbbdd6e", + "dest-filename": "@noble__hashes-1.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.4.0.tgz", + "sha512": "5f95da5566480424fb1c76469b923b6505c3c0b1be6c65ee4ab310016fbb66f97cee1d6499cd5907555244972951fa14ac6429e05928c66e6467e32cf9a5be78", + "dest-filename": "@noble__hashes-2.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "sha512": "593f866f6e22f219afa3ce4022fda8118a2e11791194a0254fd59a09add37cb80d08df8686b24e199b8894ca2e021dfc41ee103b1dba794395b2aef4a97af2c0", + "dest-filename": "@oxc-project__types-0.137.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.9.4.tgz", + "sha512": "1a3cde3dc4fd230f0dcde38f7fbde2352f7133e4c185dfc58a501f3fe4501a44cc4094d55adcad3772472400828dffc004d6aee52ee64b783e0dcbb199181812", + "dest-filename": "@peculiar__asn1-schema-2.9.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "sha512": "72851fba831e201ec1f3f34c7a4c5a0f32e16989a9d0764d3c48d8466f60a11a2ef146480b7cf6d6cd2c2fd016a02c38106f3be90c8ede462b73ad56345f41ff", + "dest-filename": "@peculiar__json-schema-1.1.12.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "sha512": "fa82f71cf151219d52b762b9d255825e28a82204a8c73cfb475277b85ea778edb2975b209a9818e975c91f805da680e4316ce741379817aa1634364b09d43879", + "dest-filename": "@peculiar__utils-2.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", + "sha512": "3833a8bf4b0630931fde33e89ce9201aa3e49d3b2ef83750ee40fefa0cfc688f9a14c38c1c56d6000dad6aa5d755374ff8e4ce411ff39c6bd2a6691e23459361", + "dest-filename": "@peculiar__webcrypto-1.7.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "sha512": "0d3e99dcf86f8a878732fc68fb11dcdcab6a820ac8ec20935c2982da1ff9cd4969e63562b6fed7132fbdab9ffbbfc228961962a1ac29328f0a834104072ec9d2", + "dest-filename": "@rolldown__binding-android-arm64-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "sha512": "d0dc20c2c8ccecbaecb959d730ade4a13a5a80134e865a1cfc13632aa663bf8579cc8e6bd77ab1ebdb95851c7ea39674cb2e07ceafa5a72ed3020506fe872faf", + "dest-filename": "@rolldown__binding-darwin-arm64-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "sha512": "62d881a78762b2ee95e7ad25a13e8f8cc76245a5a656f0cdad4ba701a95b885c76820789c31740b2064c72818fd7bbb202c4f0023e55d678a4b319479d54354b", + "dest-filename": "@rolldown__binding-darwin-x64-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "sha512": "c83dc49047579362f2a4fc677ff9126478ab6abb08f2070fcdceb64ae92147d5494f2bd5f85f50fc6c5636e0a88dceec5f2b950b80f144685d0cae17f154ac6f", + "dest-filename": "@rolldown__binding-freebsd-x64-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "sha512": "73ef2f89e41bb03ec73401ca200df8c34189f4579d145b89183fbb13abf3ed0deea8022e80be69e397e196c8f851a02c1e972696aba0056321034fe3ee8d2c22", + "dest-filename": "@rolldown__binding-linux-arm-gnueabihf-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "sha512": "e748c3d2e5302efbabed9cfd2c7cf5ee46807533e39f9c0df77844823be6605459c2247b649628bd37798a9c962430275cabd9fb081cfbf2246ba770485e4e70", + "dest-filename": "@rolldown__binding-linux-arm64-gnu-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "sha512": "04ef7ea0f2fc2bda6864905f60fb1736d6233c4e6e337a9e7a14f7685716e0b2133a5fa24aa869d1a6f38d1da758150d8c865e2978c0116059eb85a33681ddeb", + "dest-filename": "@rolldown__binding-linux-arm64-musl-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "sha512": "7f75692c1d6f434128e9e72bffa71e90b9ef60c145e18045a151a47e4bcf2ead5b0246c0c076103d92a80261ba389c93731c680be02f7b31b1fd2d686cd0b433", + "dest-filename": "@rolldown__binding-linux-ppc64-gnu-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "sha512": "026bab676e8fab1fd123d37583310e0a496429797ddbbca37d7594512d0eecfba1f0044cfce6fca9fac3dea9d692c49c770e9c4ab5b93d21c4f43c8bbbbf8fb4", + "dest-filename": "@rolldown__binding-linux-s390x-gnu-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "sha512": "249a6ab3c6d11884c339d6e434a9e5a23cc169b6ce1ebaa34af0ebd0856c64e6c4d6505c3e3c48b54118f5e5880dbc5a277706ad73d619f1a42311628e0fd446", + "dest-filename": "@rolldown__binding-linux-x64-gnu-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "sha512": "ad225c7633f1cc0fdbcbfebfad8b3ebfe6d753b523be76d45b3f0c25bea487afa49ea075742aed1e0d2ebbb0bfe216aa26fa9d9181d0e481a7fad087f462d6fe", + "dest-filename": "@rolldown__binding-linux-x64-musl-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "sha512": "850dff3d89032480a07afbf235c56b8a155eaaaee4d4fa77559f6563e75ab8061424a3be6aea80a6f00d86f475027f41866a982af5b632ed45f6ee035d230bc5", + "dest-filename": "@rolldown__binding-openharmony-arm64-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "sha512": "12572ffc1b4c2fd957ad5e89b8a21373f82b37691857d823b10a56f097f0e22a0ad133a48c18f27b49e7caa40dcbd49335a236d255cd690051ac3e604a047462", + "dest-filename": "@rolldown__binding-wasm32-wasi-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "sha512": "d83ac47e196e1fdca189a140a66b23b23c2b4986cd718d68153cd848fd5ae77e630db57df330856a703ff7a4c151dd220c57311a6c3d411131c06097cf753efe", + "dest-filename": "@rolldown__binding-win32-arm64-msvc-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "sha512": "38be0e324ed43d739e54619ddeaa39cc9c8f2258dfe0016093940090f3d2f8ea0bb8e3a8ce1b9a4060b5f0cc554e7c3fd3aabdde04a1009ce5c2748263d62da8", + "dest-filename": "@rolldown__binding-win32-x64-msvc-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "sha512": "da3f5b1ade4987c863faf3ed8333ed97bda3d324711c0cae9a8a3a4cd7c08ec2c1d3852da52bcf6cf703701331cfb9fef42601d1cd46c501716118368e29aa1b", + "dest-filename": "@rolldown__pluginutils-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "sha512": "b74f6f48ddcc75fb32087a057134421ff894b46ece2740ac8f307c72302629cfef6bf90881e0c8fd3c6c8a0767704ff86deef7e26d1cbc863035a5788b65ea03", + "dest-filename": "@sindresorhus__is-4.6.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "sha512": "976685cb98c02e19e21b91e0aab0fa8d72e2feb516acabea37fa89c7aca826c80a85b95577e8aaa94e110976af9bf8cf8adc83a394c2bca327a632a73ab8b2d3", + "dest-filename": "@standard-schema__spec-1.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-4.2.0.tgz", + "sha512": "86a34ba38c8473ef922e0024654beec0cc4802c8a2f6a8d0b53bb37dc6157f7c51c5afb41c571f69614aecb754de5fb5e6cf5261535b3c1d2a423f421c5a92bb", + "dest-filename": "@svelte-put__shortcut-4.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.10.tgz", + "sha512": "e167ca93af1e4e287e322243e1f49bc4dec4f2454199330f58750f623be5d8dd2b32ce7760b4d3f3f623294e43b67cf92ea0e397b2c4c3853b9574765b727958", + "dest-filename": "@sveltejs__acorn-typescript-1.0.10.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@sveltejs/load-config/-/load-config-0.2.0.tgz", + "sha512": "d4b819fea52a4a8abe428ac3f37964da191aefd3f1d305cd5b6ab95759d99711a1420c358ebb086d5cf962209eb9c54ba385ef14b8d7ba451a423222aa8c2472", + "dest-filename": "@sveltejs__load-config-0.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-7.1.2.tgz", + "sha512": "0eb50103651745f0e6517fd94e2128a5ddd7e34c9abec245d455f647281cb8849c1cbee8e585f57ccbe86270e18de2500b8c1e08e9258aba4d5a571bd8d89278", + "dest-filename": "@sveltejs__vite-plugin-svelte-7.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "sha512": "e0101f7f29183a03bee67cc1598c04dd6f74b0180b26850f45659c2fcc25ca233c201f22a49cf750c27d29741dd512905e92a9f13bad9fcd0766d5acbb6bbbeb", + "dest-filename": "@szmarczak__http-timer-4.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.8.tgz", + "sha512": "524367c35fe81447de711f32a721c842e5987643ef1e2c1c43bf2c87eca622262817eb9ce47d5405eb5b8f2a93faf806277a9037a9e1b9c26f897e877ac5ad29", + "dest-filename": "@tsconfig__svelte-5.0.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "sha512": "1777e8d4c62b44960bdf3111d0e50e9a4bad8ebd55a76de6eceb12829ee7ab848fe8ea97e82ff9e971483c09796eddf3681463996ed21b3deeffa2f016961c3a", + "dest-filename": "@tybys__wasm-util-0.10.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "sha512": "210dc46d3cc6c488a06f5237a8f65cd6b5899c7d019922afe506136a5130c1e16fc810cb4807b6e333f495efe1ca2ede7067d9565215020e0166a6fc581c0aab", + "dest-filename": "@types__cacheable-request-6.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "sha512": "330e79f28780f5f15bbfae7fcb8987b570ecf5b3e714c6402ff8f174f154a4e1c72175fdd667201076d2e4b6a1afea7064547c03b19095e456788e9c1850b650", + "dest-filename": "@types__chai-5.2.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "sha512": "88ef74b1cb61f5601b9a0bfba20a2ae7b3bd6292a61416e6a04a021c3076c4c058d3efca56ba806820f2084d7a754b2978ebc8c4515123ed2c12da83ab2d9be0", + "dest-filename": "@types__d3-color-3.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "sha512": "1c4de354a97353d01a31accdb9fa28449e59a5698b22873dd00dfb594d893267aadbcc35150a8266cc07677c51f92bb161fb731eae9653a2891efab12b34f1c5", + "dest-filename": "@types__d3-drag-3.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "sha512": "9a02cf11396ba55575611248825af8133e3b83b6318e5d658fb60ab223026f6ed5247f56f0d54ce816fd77c924a46fee0104b90266c0e3cab6200a2528aa3530", + "dest-filename": "@types__d3-interpolate-3.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "sha512": "6e1017bb6dc3256b2b238e7169f629910e0db5c28cc169c00bfbcaaddda5fa7c4c16ebce4f75cc613223da8a6ff2fabc00ee5887b41a73f9d278fff7ce34cad3", + "dest-filename": "@types__d3-selection-3.0.11.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "sha512": "b994b9b217f1ccedeb1a5bb4702ddb8e63052ac5eff9299965c829d0a0f6dadb38b865e9e445581b3bbfd1877065e2a675d85c01c718b511092a43df5e466e0a", + "dest-filename": "@types__d3-transition-3.0.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "sha512": "8aa302e3f6251424a53bcfb6222d461869620806385dd786ef8f30e6f4146debe56c3bb4cd28c7ffe8e88e8ad05412bfb1ed23e8350534f0464aa0f76166270f", + "dest-filename": "@types__d3-zoom-3.0.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "sha512": "2925609909b33303e59ad9633a899aca847cf56e05ca70808b713c3cfb3bbe60d53def38853faf18f2a425f4e19265ecd31d2301a6bd53cb96f1b6dfc92d9f5b", + "dest-filename": "@types__debug-4.1.13.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "sha512": "73d87d75554c8a030f7386f04ef0b9771aada8967040f78fb168cf96948e9e88dba2bea91aa764e78d657c0ec0a8542be6907505176ad23b98f5d6fcd41c3217", + "dest-filename": "@types__deep-eql-4.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz", + "sha512": "4c1ffa841918409c6c6474aac9eb8ed49b74001fdb5ba1bbac7b7d83b94c2fb48e17a95b81c1efc3f2ebfbaf62a8dd2ac605cb856292700a27ef724d9e9b6e0f", + "dest-filename": "@types__emscripten-1.39.10.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "sha512": "1a174f832d5e978fc898fd395f4e54c38730dbf33ddc10949a712f599352b650b310a304e05924f98a680393a21cd426a12ec269f6fc5dadcfc9af26d50af37a", + "dest-filename": "@types__estree-1.0.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "sha512": "9c49f007efb5bb99550ccd94238735fb947e15868a7da0334b83a87287229a3566de7430dd3bb31f950db2872b71305b8677ab6e5c878f8038f6a5db22265da4", + "dest-filename": "@types__fs-extra-9.0.13.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "sha512": "2f72e08a62c75ed1a45a290a9ec3e0d3f545c7d38665a0be78dd6ee2bf8e0755d1a87de6781200542db3af559d307f911e69d192a962400387349fc4d23fded1", + "dest-filename": "@types__http-cache-semantics-4.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "sha512": "050e5a64d482a63ec3e8ada4b2b4424e62912c4a673ef58388b3dfa06ca167efbc62d88af5dff70c128f260af2df9f57fcfd4f7ebbb2630be7bf0163b8488422", + "dest-filename": "@types__keyv-3.1.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "sha512": "1ac0822190c4fe9de2f7abed12ac7eedd054197adcef37922b7c303c721a453852fbd3a15885d1ab3b3877a93549553c83dd43acd456c56506869e4a5d06f654", + "dest-filename": "@types__ms-2.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/node/-/node-22.20.0.tgz", + "sha512": "4169455b6c1fde74e30b5dff0ea46706947864edfa5491ff25506403fbdc9e66d304d40896739bab2a99135b5447bf8d8b6dcb75af11d41c4c7db5d1a42531e6", + "dest-filename": "@types__node-22.20.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/node/-/node-26.1.0.tgz", + "sha512": "3b40351b7c4f1b2e30ec081074041852543e04a9363a8bf0f1e469a1fca9e4a7416542e76def96a9a39536b9bbd39487a610a21b85c7b000ab4a63eed5ff8a83", + "dest-filename": "@types__node-26.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "sha512": "1fff8bf94913577dee7f8f4f1f9a420140553cd8f69c30574cdfaa4b574ec32ca0db897709c89c89c080edc6be1ccbc9059705825e6bf1ef9147a7a5b1be0bcb", + "dest-filename": "@types__responselike-1.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "sha512": "49c68f767d5d41cce06e5d101537933a65471542eddfde17260390368c95859eabdaf2e730b25f04f779dd2079d93ff71b7e95235fe0d8c65a5f47300ee5ec7f", + "dest-filename": "@types__trusted-types-2.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "sha512": "4e1545e83095840f24506cbe69acc543891743b1354f2ec0df2a4539ed0870957c3bf339d751bdf405b6e22acaad6e7a5ade38c86f7e8a3f056aaa011a4b815e", + "dest-filename": "@types__ws-8.18.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "sha512": "be5feb62c50a701af74a7427d7aebe5d1e5941c80cc770d084559d7e58bf716a4b9cb5266f166fcab259a2d2c552bca26fe2ed02b60c49327945b439ed9aab94", + "dest-filename": "@vitest__expect-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "sha512": "115917cc18eb3c633e70af3f00d5a006b91409f25f6f7f3f11f4d23bc87ba56bca9323e4a56c6f47b0640f633222d305eb60bdef3004a2a769522c7047f7be47", + "dest-filename": "@vitest__mocker-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "sha512": "b348ae7e7b37888162b5d826f9847b835c21080686b57cf8e7d552f7f3eac8a0c4105818221b07390997808803b980adec37909a2653d107b6380da9e193eee4", + "dest-filename": "@vitest__pretty-format-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "sha512": "2972cc0ed73ba1eef4fb79897c6acf5163deb2cc07fb7b13c40300325f031bb23c214413e175bbd7c758e480f7bcf51c9a5bb6ec270a7d8e0fde1dc8dbd48b26", + "dest-filename": "@vitest__runner-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "sha512": "25ced1286341a3c676f166089b43627a3e317523c1c917fa994e7c5691d091de99874e6b96703eb708db2b91f2788187c6bcec737989812e37b8cd0264acda20", + "dest-filename": "@vitest__snapshot-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "sha512": "7c7a6c4ba9888be3e2116faf71154e3245f5a1268f2a77b754e7254852023dc18e99f2a05cf5398806a1fb070d723db13eb08299fabdf480c67fe1288e186f84", + "dest-filename": "@vitest__spy-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "sha512": "039d68f3298ee4fa6a95636704ff591cf5c3229b8cb532e51928cdee56b8512f8b273a143328708c0e505e59b7f497b18301ca5b85e3b3c67677774b09739eb8", + "dest-filename": "@vitest__utils-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.15.tgz", + "sha512": "ff9355fef0c02d51435e02e67eccbd4d108194ac0ed8b341173a73bdbf62223fa347e79273a0cb618bd539d8af4ff8e6eccb54e9379b62e466cc4388ef0e3450", + "dest-filename": "@xmldom__xmldom-0.8.15.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-1.6.1.tgz", + "sha512": "a3ce11a6358c02ce6d5e360f8fa3d48cc71c060785e13140f0396506a3126e78490f76712e1b6da7836674764020cd53e5b2b9340cc26adf8cdfbb93ffdfab4f", + "dest-filename": "@xyflow__svelte-1.6.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.78.tgz", + "sha512": "958d33daa3f7ddf5214ef6bd55ac6b93496a66d6b6a646f1075b6b1c0c75a269c9a91b4fbc3940418576af97e14ba01da64ba56266cd5b4b2fcbe038fede01fe", + "dest-filename": "@xyflow__system-0.0.78.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "sha512": "6b5c1f97268bd2d1ed25298b48e5726d8872db6bd18a1e1e76e861ae472382b5869d17eb66da2f2761518f1b93b64923e3b3bf6da7f447ce905393ae629cfc7c", + "dest-filename": "abbrev-4.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "sha512": "e5cbe0e82b4ac1f81d995a98d562225ca7374356e446a18b8bed96ffa6a8fba63b82efd10b046e021184ce1e41e0a96ccd2b932e0658baa16aa396c89a334a9e", + "dest-filename": "accepts-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "sha512": "c5141b0dbf419f00da7d8367e95c25f37f436158ea5d86f55d51ad58067591c0dcea2c002f8860dc1d5d665462b8434578ed87e778051b78a7eb6d4074445502", + "dest-filename": "acorn-8.17.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "sha512": "32703e613f1fc1f24f801c779bad0c36a6a49b7d173a4c88a07d72ea1b9342f0b43f0646ee48bc35a70b05cacf6cda28f2f119cbb269ba4efe8cc3be094a2f4d", + "dest-filename": "agent-base-7.1.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "sha512": "f2252a979d04511fae51c7514371c3a9ae84572a3776870bf20e5627714d7169aeeb621b90652e7bfa44c8b056f1518a2ae7133e0a9e92ce1f214d43038ca8c1", + "dest-filename": "ajv-formats-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "sha512": "4e16e58be3a53a3fa230f60505505f2773a60809da4b2367e0cd6fcfd4fa1a46b926df5b6bf1c8479ea3a32eb9b58ea4c7f142179557341f35f58eff194ac118", + "dest-filename": "ajv-8.20.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "sha512": "aae2505e54d25062f62c7f52517a3c570b18e2ca1a9e1828e8b3529bce04d4b05c13cb373b4c29762473c91f73fd9649325316bf7eea38e6fda5d26531410a15", + "dest-filename": "ansi-regex-5.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "sha512": "cdb07dac22404f5adb8e25436f686a2851cd60bc60b64f0d511c59dc86700f717a36dc5b5d94029e74a2d4b931f880e885d3e5169db6db05402c885e64941212", + "dest-filename": "ansi-styles-4.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-26.15.3.tgz", + "sha512": "d959f25a4aac3f9bf95db0612f7b43e52cb1f2234f058b2853b918e12d9fcfbc20f118ff9f3b5628253318a685453bf45f07f7fc7d39f024752afb5dff7951a3", + "dest-filename": "app-builder-lib-26.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "sha512": "f3ef56a9e6db173a57f4e47e59ae8edbd6ac22881e44ccdc1ad00835da4c1c7c80835d1fd3969215505b704a867ff3d7c35123019faadbf6c4060dc3beeacadd", + "dest-filename": "argparse-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", + "sha512": "67f65e3a0565edb712619feefeb8747cea6f129abffcb66675b917c9ceecc95ce33c085f39af5e6ec7534a31010d4e2fb399c2f7c29f76e8f5b85a34ab2113de", + "dest-filename": "aria-query-5.3.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "sha512": "4b6b3768ecad88a74545dba5c36a8f139d4cce3cd53a2b29a5c56fee354547e2b0d24c70bc5ac371803487b35da9b9a3d0790c2176166a88fb7e58bc920c757a", + "dest-filename": "asn1js-3.0.10.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "sha512": "2338bc45071f7ea09e3558058a02a58b5b2c92521ba479c261ce809275c662807a82b26ac9e6f2ee3bf5d895108264c09c80e76dc935bb192c4f87733773d604", + "dest-filename": "assertion-error-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "sha512": "356d9c5fc9b543b28f03b6b933650b41e676c11e6a2393c06f0e4bd1438cc5d8a8564f4f319d21d539b264490f62b0af6230e51480aeb0ebb576510a00079707", + "dest-filename": "async-exit-hook-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "sha512": "86d0940e5c72c822cc81a337c578340b42d6db1a9fb90ea9d39a42108b17bb243e6b592860a4ee04ccd13709b26df2e0bc90cc774af52d39f8f84d138ba0b600", + "dest-filename": "async-3.2.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "sha512": "39e8bd387e2d461d18a94dc6c615fbf5d33f9b0560bdb64969235a464f9bb21923d12e5c7c772061a92b7818eb1f06ad5ca6f3f88a087582f1aca8a6d8c8d6d1", + "dest-filename": "asynckit-0.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "sha512": "faafedec492fd440d8da5e8675ae8b2e25f5e2b53d4d5db459ade87de426c0f1596ce328f435eb2db3a315a69c9645ca5a27486a8a7000e6d00eac16b46523aa", + "dest-filename": "at-least-node-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "sha512": "9477badb3bdb4c1e5e100054562fc0c1587464a63dacc3038669be79ecaeb9441b437f89f9f38d550399ca3f8376bbc3e01637dee6278b2449e142486922807f", + "dest-filename": "aws4-1.13.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "sha512": "a888f41bdc196cc18d2e32e68353d3eafda613d007db3967003243ff6b42e84d348609a150e7c407a82b7873c07cb452b9f1ea44e2144e4c3a13e337947d0f4d", + "dest-filename": "axobject-query-4.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "sha512": "de849e50ed13315ebb84dd4099b5ec2b8c9aa94eed8e21e56f144364ea47d0a5bdf82797e1b440697d009f1b74b71d8cae94695b041a3f02252121098585393f", + "dest-filename": "balanced-match-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "sha512": "04bae011c453c17da8ea01b118e08dc8cbc64a9df96287ee633c3d87520c4d198aaadb40659554ebb6dd6fd3ebdaf50703cfa3de2dad25f8cee82ebee26c864c", + "dest-filename": "balanced-match-4.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "sha512": "00aa5a6251e7f2de1255b3870b2f9be7e28a82f478bebb03f2f6efadb890269b3b7ca0d3923903af2ea38b4ad42630b49336cd78f2f0cf1abc8b2a68e35a9e58", + "dest-filename": "base64-js-1.5.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "sha512": "5e9363e860d0cdd7d6fabd969e7ef189201ded33378f39311970464ed58ab925efd71515f9acf1026f2375664dd3a413424fb63765c1f6344392f6e6426711b6", + "dest-filename": "bluebird-3.7.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "sha512": "d9c1a626ea5a36083e414c152c0b9c0ee5aea0c67a117f621c346cc19e65b0d6049b03da4649cc3c22d9cf4ef24f356affcde9e28ff0cdb0d96c1ad3bc619323", + "dest-filename": "body-parser-2.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz", + "sha512": "11d7a9fd7f5f1aa54d9b328156c0d820eb43fb3d6db9ecd5ef42c18dd0acb7d4eabbbea5b27bd1899ea84e27359fefc12305fa4031803bde0f3783764800efb7", + "dest-filename": "brace-expansion-1.1.18.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "sha512": "8467d5ccfc6d85b7f7fb6ca383f441b3ad1c074161a814bfcef755ff8c27e3f0663746cd30c1cf73857f05b1627aa7f54ca0061801e76387928da8c29747f65e", + "dest-filename": "brace-expansion-2.1.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "sha512": "49c43822ebc8105d533253fb66dfaf8c9ffff7394f6f64837315b13376e4f2ceade8619d27b28ed5d09c4e274e3c929e3d6df42c4ff6713ef00b23e1a3dfd6c6", + "dest-filename": "brace-expansion-5.0.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "sha512": "54ef47b7ffa9dd237b48a5aa72b804ce319b4522584f1f90d694d00b4c2b5aa1f1d2fa49ada43a1ad1f1f2dbdc835ae52b56f2854e6071cc603a08fb0744c391", + "dest-filename": "buffer-crc32-0.2.13.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "sha512": "13e5d0091c126da6a20a1b6fea4e83c2073e6f1f81b3abee2891c7979928c7f05a29b8625f3a903b02b870edb6c84946a763829a3c15853dc79b18323c69c97d", + "dest-filename": "buffer-from-1.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", + "sha512": "83f911e76d208801589125d3cdc985de4a90abbc22f05e8de92cde0e066ba9304df951dd9a058ec93743d720fb0004c321dff25cbbee3f7e02c56e3afc1c0277", + "dest-filename": "builder-util-runtime-9.7.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/builder-util/-/builder-util-26.15.3.tgz", + "sha512": "ab6867ecc6e8da714d9157a43e21c5c7a35fa37854466112ded7c19fe9393eac65d919263f7406a995211ffabd3dc87fe06d3935184f8c39558f53bcab84f1bf", + "dest-filename": "builder-util-26.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "sha512": "fcd7fb4f2cd3c7a4b7c9124e6ce015efde7aafc72bdbe3a3f000b976df3048fdc1400a1e5f9f0da07c8253c3fccc690d5d2b634d28ba7f33ba174a4175c61b12", + "dest-filename": "bytes-3.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "sha512": "53567fa1bef557f6d77d5001bcdaff2ae99fe55c9e4110449ba4f16f43d0e92ed5e46a41337c3809bab3ff13c389c479b4dd2ebc389f9e0f02fb9a8409e1b0c9", + "dest-filename": "bytestreamjs-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "sha512": "dbf90db1c3e1a5cc6b3a280c6736e2585eddcfc8a585bfe72075371326625d65e97aafdabbca89f1585d7ed324b72de7ec68fa1c819a9501bca2204d07700980", + "dest-filename": "cacheable-lookup-5.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "sha512": "bfea7aa2782cae9d324c66c95e38313e8c36f832fddc30123f891708329bf3f6f046db7d384177c218209240e418dce0716cb65da1786bc9d98250bbb8496c72", + "dest-filename": "cacheable-request-7.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "sha512": "4a9d5a6e52748af0e44b38dc68977112e9cde7f5ef92c149dac30115fabac74af285057fd9bfcac057b6d5c329987b4f3928a3f0af7dff049fa04b9339b9ae31", + "dest-filename": "call-bind-apply-helpers-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "sha512": "fb2b3df7b53dea9a382b1fc0069042aa103d12ec49690583420ef6f791f8841a61bf72198346e804abb0629b78617a7a319e4099942753fb72313951a5a49e8e", + "dest-filename": "call-bound-1.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "sha512": "3543d196e39f3a24ca04abd63ed483e0f845bd60aa3a2d01192b4d5ace7b5fd8eced7193a6b4a6168cf9174b56851e163e335e47d8d7a9d0bbfd4a522539e546", + "dest-filename": "chai-6.2.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "sha512": "a0a9db845c91217a54b9ecfc881326c846b89db8f820e432ba173fc32f6463bfd654f73020ef5503aebc3eef1190eefed06efa48b44e7b2c3d0a9434eb58b898", + "dest-filename": "chalk-4.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "sha512": "420ceef247c1be8f9c038f7ada39cfd4a912e83a29e4d4ba83b4792c5609af86fc51bf783cf417524b02c3d3ef5e87973d145d751342e42d4941447648c1ad9c", + "dest-filename": "chokidar-4.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "sha512": "f88c7363d05939077f5ee60f466aef1158c5fe7aa3e64813e2412aed5a1fac3a0cd4cc6846311692b082dc4b4b8b9f5355ac314c09fea2b27015072ba84375fa", + "dest-filename": "chownr-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "sha512": "d51e45868fa306ad030f276dfbfbc75a3e4a24d24229d01128e0b06547a7f3823906b796a0ba912c0347d54f3b789cb5b620123ed3271aa249ab466c2e844f3b", + "dest-filename": "chromium-pickle-js-0.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "sha512": "59dcb6220bbc39c069236a5978f679a168cf0b7f2d983571e562945cac252d8900d28ce8f39b0bb0bbe405b067fec65a482305386649d787ef5bdb79fddee474", + "dest-filename": "ci-info-4.3.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "sha512": "efb3d2c1eadc09953615ce2c5fde1e17c93c3f1b5ee890302f8fc80992c58c92ea7a0b3b902b80b2aaa3ffbd0d405e93bc3a6016392e6d0076156d9965d76f42", + "dest-filename": "ci-info-4.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "sha512": "05278d9f2bacef90b8fff350f6042dd7f72c4d7ca8ffc49bf9a7cb024cc0a6d16e32ca1df4716890636e759a62fe8415ef786754afac47ee4f55131df83afb61", + "dest-filename": "cliui-8.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "sha512": "44ea0bf788c91f675454c2f663fe4f10335a48781e39d48389c5324bb8b3705eb71bab1373f1538cbb9be1bf0897d4bc4b46de39f62dd13680e6abc52bec34c0", + "dest-filename": "clone-response-1.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "sha512": "7989b441606d52b0566561b4777f3a386030d7a67df793e2395a3607b6e35926c779d1a5e5ed1959aabae6438681448d7ac1080e407d2126d383f24af5d84264", + "dest-filename": "clsx-2.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "sha512": "4511023ec8fb8aeff16f9a0a61cb051d2a6914d9ec8ffe763954d129be333f9a275f0545df3566993a0d70e7c60be0910e97cafd4e7ce1f320dfc64709a12529", + "dest-filename": "color-convert-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "sha512": "74ecbedc0b96ddadb035b64722e319a537208c6b8b53fb812ffb9b71917d3976c3a3c7dfe0ef32569e417f479f4bcb84a18a39ab8171edd63d3a04065e002c40", + "dest-filename": "color-name-1.1.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "sha512": "1503783117ee25e1dfedc05b04c2455e12920eafb690002b06599106f72f144e410751d9297b5214048385d973f73398c3187c943767be630e7bffb971da0476", + "dest-filename": "combined-stream-1.0.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "sha512": "3f40b2b0d0d0eebb55c3840842d9be311c55ebabca152be5b10bc6617656477a855348e530a1d9659830f1efbc0d26a1e140ca32a9e49d10d0cfec6e41743f66", + "dest-filename": "commander-5.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "sha512": "a490e1e7fe30ac49d75ff556459bebb8018793329daf8eb3d753a54cf37e56b0139565a148a7b03422757eeb423b90bb7890779cf305640d4b798b5c15ba19d8", + "dest-filename": "compare-version-0.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "sha512": "fd2aefe1db30c903417e8846a73f68e986f71b3dd2ad40ea047e6b4ee84647b6a1b656d82a7571c366c214c4658da03b1171da5d9f30b07768745bdb9212a6aa", + "dest-filename": "concat-map-0.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "sha512": "e634421fd67ff8344feeb92f63cdc1fb2188197f7a3987499b39e0aa7c364814b1a8214f774c36926dece626b0a465fc92b9f0486985d055b9361af41df6a2de", + "dest-filename": "content-disposition-1.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "sha512": "9d38ea7dc045122a4a7570afe180d05827e670b64a9bcd65745d29028a53bf2ac51956dc47a3ff54001de46ecdfb4b53afc42a894d2d15a743e852b836d27038", + "dest-filename": "content-type-1.0.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "sha512": "8ff3bf77b19c642c8d97bfe1c1901beb4eabcea932bda0dcb4b99c91bc4bcc7bc50734c91ee1847687404dc3f7c884680eb2c790801326ebf36c5969fe48b671", + "dest-filename": "content-type-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "sha512": "2afa78e7d1eb576144275080b22d4abbe318de46ac1f5f53172913cf6c5698c7aae9b936354dd75ef7c9f90eb59b4c64b56c2dfb51d261fdc966c4e6b3769126", + "dest-filename": "convert-source-map-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "sha512": "0fbeae53bdee9525eb0f5517178284d93331555c21b270a07c0c9383d93c3fa2866639572ab38b7b874940a2370718b9c237ac6681572561253560633d931b86", + "dest-filename": "cookie-signature-1.2.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "sha512": "ca48b95e72ae7fbe74979d2e193965b7a90a20b6389d0d5e34841ab685c40726797568272aa6e7aa64eb044e41e0dee5acc24a436cad58c8933b6a34bfa130ff", + "dest-filename": "cookie-0.7.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cordis/-/cordis-4.0.0-rc.8.tgz", + "sha512": "bd76982ba5d92652054e7383a7845df7bdd09ddfe09b77301735ac31369ebba710421780ecdf9a0341aa1d1365d1c148af1317594f1db2dd595c795442f7f247", + "dest-filename": "cordis-4.0.0-rc.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "sha512": "65006f8b50dca49e060ea6a78ee719d878f7c043b9a590d2f3d0566e472bbddc64b09a2bc140c365a997f65745929f5ac369660432e090e6c40380d6349f4561", + "dest-filename": "core-util-is-1.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "sha512": "b49b590411c0eaf8c801a17a12721aaba95a0413fd6aafd8de8b9526311fa076d105c1c100761c321ff0f0b0eb9363ef20c32af209a8a5ae43e15f1199baf11b", + "dest-filename": "cors-2.8.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cosmokit/-/cosmokit-1.8.1.tgz", + "sha512": "3c306fe25f74c592ab52c674beda327206693bf8f8885b2a257ac0c6cc810ec9d0448ed93095c88e00c9b0a3637792fc8e75679e5ac309d86415b4e77200958d", + "dest-filename": "cosmokit-1.8.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "sha512": "b95d903963f69d6ceccb668ca7c69189b862f5d9731791e0879487681f4e893184c834e2249cb1d2ecb9d505ddc966ed00736e6b85c9cd429c6b73b3294777bc", + "dest-filename": "cross-spawn-7.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "sha512": "ce0fdc85b5f2781b4c4352db0ff592a16d83a42dc8d26a663dd5beca74538ffc760c0598ac863ba9e6481e2768cf0576e26e226afaf5e653702302f14663b184", + "dest-filename": "d3-color-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "sha512": "af35323d4fd2eebc147e53322dcd444c37818f4351b8728a01cbee928cf086c86bea0e9ce5df338787368108d8d9b6747577862d67353c5d7be0fdad56f2a17e", + "dest-filename": "d3-dispatch-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "sha512": "a566d424b7444d503c95034979c331a177c7eb1fa63b6510a3cad2999f90ab171bc80de17dea6b160213fff1d6da79470a159e2083304b616afa010046485392", + "dest-filename": "d3-drag-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "sha512": "c11fd72b70f75dc2c8670a5bbd0c10e5f2bef1891db358a9ec0d93c5ed32c6771749dab52fdb24706edb95c79d90e5fe65c83118098b5f516b4466c00f0ce2d3", + "dest-filename": "d3-ease-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "sha512": "ddb62cd6b383df7ba8f1aa897ca3f72563c089b830f199b6f8bf6f04a107276460faf89347ba39326bf999972278df854586803965f94890135fa9353d6cfbda", + "dest-filename": "d3-interpolate-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "sha512": "7e64d159b34c9ac996abac4957c0f5f54fe0c3f6f0ac77cd5f1ac837e1df6609f3a931e9f633a628c86c4d48d73899d939d658f50dbccb8c9e6cacea0ca97195", + "dest-filename": "d3-selection-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "sha512": "9dd7c9fc9c7131dde7c37d6ec8aa18da76a2bc5fabdbd57e2dcd2cbd9c5ed49bef2119a2f2152caccbdd3b0812d68eae0479a2cfdd60790d3294f3f46a3d5550", + "dest-filename": "d3-timer-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "sha512": "0292af7e3b1247ab60d3ac6b2f8df80b45b274bafb25ec0107757eff7f51307b1a5d3386d339adfce0177a78393392c19b4a239b126ba68990559d5a3ef04be3", + "dest-filename": "d3-transition-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "sha512": "6fc02657791f41aa9602e69c6cfb8d6cbeaf6a19ce25f94e85ec4bccc30d2e06badbefe7874273bc9d1a3bfe5ae4c560505192ec7bb53fd3f4de8ddf2640c2cb", + "dest-filename": "d3-zoom-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "sha512": "446c305a7c10be455f6af295b76d8518bc3ec5849dcc04709b4aeee83853540dee994e6165cdbc57790ee2cb6062bcab4e52e9baf808f468a28e5b408cd6dca8", + "dest-filename": "debug-4.4.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "sha512": "696df9c9933a05bff8a099599dc307d8b0a866d2574d1c444b5eef137868462a305369161da24a1644810e70d1f9c9bd27ef5085799113221fbf4a638bd7a309", + "dest-filename": "decompress-response-6.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "sha512": "dec52a6cc11cefb5eaa5d34eec547246883e796de987e19809b8feacafae63244cbb0b15cb4acc895b4f9fe40994a16f58fff53d8a5aa6a627d0c7b6927167f8", + "dest-filename": "deepmerge-4.3.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "sha512": "e2dbedb5ea571b555a606ad189b93913025dd6de2e76e9d239531d2d200bea621dd62c78dfca0fc0f64c00b638d450a28ee90ed4bd2dc0d706b1dcd2edd1e00e", + "dest-filename": "defer-to-connect-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "sha512": "672483ecd7fdd5a2c1d11c4be0a1ab28705797b11db350c098475ca156b05e72c3ed20e1a4d82db88236680920edaed04b8d63c4f499d7ba7855d1a730793731", + "dest-filename": "delayed-stream-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "sha512": "83b9c7e8fe9dc838a8268800006a6b1a90ad5489898693e4feba02cdd6f77c887ad7fb3f9cfb1f47aa27c8cc2408047f3a50b7c810b49444af52840402cb08af", + "dest-filename": "depd-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "sha512": "06d8f604e38ef37a375b21f9f5ef0c817b3111055c6ab9143a9118aee6c1d2eaf09cdd74c90dfae2bb22072535d67665a966199b4e62fe87fb8a8e26ce2841b5", + "dest-filename": "detect-libc-2.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/devalue/-/devalue-5.8.1.tgz", + "sha512": "e025c3611046a8dfb9ef054992e5c1626a405544a0dcbe890106bf0c5aa6db7f06ef7135c2ec9cfc9846409ccdeef51ffc23298586aedb35db7d6cc347969313", + "dest-filename": "devalue-5.8.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "sha512": "db130298ea0cadd4083c776c4dac0409d34fc2554507dcc6733de4ba19813ba537a14f94423b2e7b48bc6b22caa6005c9be85c5cf31548650df5dfa9bc9ebe55", + "dest-filename": "dir-compare-4.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-26.15.3.tgz", + "sha512": "3b7cc95055181c92a0ccfaa2a07c5fc730739520b5797092afbf6031204a04fe408238e99abc9d32c30ba2d120f5f009177eaf7549dc6fee27751371a0f76549", + "dest-filename": "dmg-builder-26.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "sha512": "cc81f09993d1b21b02769303c95b2a1a68323f4c93f060205d49e4740a098acc6f7f7de4ef23ba3aea0a99c4c6b973d64ac9bc3a1f3c9d989c44b03d634ad478", + "dest-filename": "dotenv-expand-11.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "sha512": "b81ab87a05874dc4eddf76bbdafa521b4cf71e73ee225e8da98713aca120d9ace81329768695b4cea971cacab6a4af47943207c87c9a91e61a627480c1df1ba3", + "dest-filename": "dotenv-16.6.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "sha512": "28837f9c3241411717c3430b561644f62407986ebca80548060f42aa65188e64088608a3f54e4c16faea9142f915bb72cb366e39e3add3375e45ee1463b72df8", + "dest-filename": "dunder-proto-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "sha512": "6ac2c555f596b49f746723941ccaa4eff4b6c3682e40ac542368ad8f777dd800c78715126c23068b57f5701709ef13354e8fa913f2a16f0a35cae35b3043ca78", + "dest-filename": "duplexer2-0.1.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "sha512": "58cc26f4b851528f9651a44dfaf46e113a86f3d22066985548d91d16079beac4bf1383ab0c837bb78f0201ec121d773a0bc95e7c3f0a29faf9bd8eb56eb425a3", + "dest-filename": "ee-first-1.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "sha512": "51e26615f3ab0104bc38958f678aad807c961316b4f3cfccb4ae54132a091851faedc0c45e4652be23a2291099e178a3d33c48dc9102818b37a0ac7e022cd004", + "dest-filename": "ejs-3.1.10.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-26.15.3.tgz", + "sha512": "25cd7d5cf57dcbdfb66c07593e45ee54d18d204141abda681c2eb597c2afe8574aec3446dfe21cd2b7ab0b40d739a787373f325b47e0fc99c5f0641138e17930", + "dest-filename": "electron-builder-squirrel-windows-26.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/electron-builder/-/electron-builder-26.15.3.tgz", + "sha512": "6b528ce617aa4b7810099ce2cd7108f118c9cb7415a2050b3dd792927b7beae2c3a41216fc70c6b0c83f5e03f4ae23fa3c8f423ac46f1484ca2860ea03c7c9c4", + "dest-filename": "electron-builder-26.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/electron-publish/-/electron-publish-26.15.3.tgz", + "sha512": "83fd9b9fc6136af63872e4b917e8ce4bbce665b5d7055f0a67cc8729f26314fa0ab7306aae909d34fc41777b6a741c0fec155dd251b37fb064dacd0a7ac599e1", + "dest-filename": "electron-publish-26.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/electron-winstaller/-/electron-winstaller-5.4.0.tgz", + "sha512": "6cedf2d7462292e53052e0d441133829fc0d90a867a553bb20f75bb2b7a3c0df7f000049cf34d0e06787c32ccd4ab54efad107dff369db9e5adec559a590e3be", + "dest-filename": "electron-winstaller-5.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/electron/-/electron-38.8.6.tgz", + "sha512": "9720617158bd4180192fa14eeabe6dc005808d69d8a26a378950efadbe5225996af76f0119e98738a1b4b4f22ae3534e2da0aef5fdd77441233248d03e3a6b46", + "dest-filename": "electron-38.8.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "sha512": "3128d8cdc58d380d1ec001e9cf4331a5816fc20eb28f2d4d1b7c6d7a8ab3eb8e150a8fd13e09ebd7f186b7e89cde2253cd0f04bb74dd335e126b09d5526184e8", + "dest-filename": "emoji-regex-8.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "sha512": "4349fd1d18b89ba26e188575785966bc907b644571bbddc8accca232c182d25acc24c5b3460c7a586aaec9f4206556f7d6f8468179df98f34d5e6c673a4441ae", + "dest-filename": "encodeurl-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "sha512": "a2810673a1cfdbac57abf37e18218e4f424a08b0c6aead9b41466b43b832ac989900d27ff180d3c53a5005718c9fe59b2105cd569c96ca69bb2985480909f23a", + "dest-filename": "end-of-stream-1.4.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "sha512": "fa1d6590b2a164c4d88e8835544a49346ecd64959cb9cd830e4feab2a49345108e5e22e3790d5dd7fb9dad41a1a8cc5480097028d67471fdaea9a9f918bb92d8", + "dest-filename": "env-paths-2.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "sha512": "d9b9a546934a0714ff09198f3a5c88490a4d8fea92798bdcca6fee4f4271d9b30e94a2ed4b2d5998bb95c5210a2b2a2bfcde7286fa7f6621b5a04dc311831214", + "dest-filename": "err-code-2.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "sha512": "7b79d17e07d4678acd18bdb7da05205f4e90372c9ecf4e0a76316b17e2d34683979ab3a014a0e0e0109db235bc1274faf5ea9d606991a49c223d560dac2696de", + "dest-filename": "es-define-property-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "sha512": "65fe47d8ac6ddb18d3bdb26f3f66562c4202c40ea3fa1026333225ca9cb8c5c060d6f2959f1f3d5b2d066d2fa47f9730095145cdd0858765d20853542d2e9cb3", + "dest-filename": "es-errors-1.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.2.0.tgz", + "sha512": "de51b17535c22df7b53187d3cf5cb692c00050ce0d00e3faacf123c4625528eed3679fadbc709a4161a90b8637217bd6dde71ed02cf57083f81560713a71824d", + "dest-filename": "es-module-lexer-2.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "sha512": "1d6701a0de8d8a57aab52c9d2b616a1db4bf2e80ddda9aab9d01cbc89cc18f890ea7f932d8c58c37af78c4e7e42bcfd29d4b16d831fb11fc9597274a0ac9b567", + "dest-filename": "es-object-atoms-1.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "sha512": "8fabd6cdfac655fc97c607be3b4c79b21e9cbf10288346bfe1175dd8adfacc2315e5e27effeb4e0278113bc70e0cc3566d545d5659866502f6612df247c6c850", + "dest-filename": "es-set-tostringtag-2.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", + "sha512": "1eb26bbd9bf96b2c41ccf7f0a613a837393338822589fce4d0a26b18ad9cf11e3e2caa4cb6960b41e51d8e7c235affcb665907da569993ee30efca62f7d0f857", + "dest-filename": "esbuild-0.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "sha512": "5948f6aa5c5a42d3b883a3eae5cdbd193716183c9df22b4bf334e58a98040b3dc97ac02288e2a8b5df0953aa2d0773c00a01bac64254c9585ba0c4be6e37bf8c", + "dest-filename": "escalade-3.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "sha512": "3624aea59e0e7ae1b0afaf251887b29bf92c219309a1d506392099fc54a74f172b7a46efaab81d53194938ca628da299563009ad6ac6b3fe89cbc38cbb28fda3", + "dest-filename": "escape-html-1.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", + "sha512": "129c6bbfe36bfc268be1970518f24860b585a26f98795d43a8c2c726811df52611c4d6da16bb81c1f117fe49075097f9e63dbe4d46e60dc9ae8a56cfd539971c", + "dest-filename": "esm-env-1.2.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/esrap/-/esrap-2.2.13.tgz", + "sha512": "9bc8c7e61660244d914542bf8e39063dc2440c057e7589d9605928b1068f4dc13e630e31ca75c73a8e8551dc1a581b5d4776f530c6bbc040d3487791d955ac18", + "dest-filename": "esrap-2.2.13.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "sha512": "ed150a7d781230c933b7a66e5e6a9aa4ebab2c63cf7e08fa97db9167b9511a896f934cb6ca871cdf92dd731282e4f419767d8332a8a8010d8da1672b4ca9a6ea", + "dest-filename": "estree-walker-3.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "sha512": "6882f9171ee66b055adf4d1a976067104e2236fa35a844f12eb3c8fe8d392fbcfa828edf0b0d49e844266cae05989d804bb920545fca1195ae7c17dd0a531c3e", + "dest-filename": "etag-1.8.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.1.0.tgz", + "sha512": "9097b3163f5814030b78e4728bb6822f12db0f9fea58c427a0c56554fc8722597b96044909cdc95659fd56097d9f0422d1890c9e17464cc367ec2911440a6d32", + "dest-filename": "eventsource-parser-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "sha512": "0914f5593cae4280fbef5196e7a5c464543f66849f5a27756a52860d832692ddb297c517ad5478a6ca6a58d11ca8abd523383a3c096d5a3c5c4923eb6e803888", + "dest-filename": "eventsource-3.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "sha512": "29f61b9a9466d156cb8c4bd56bdc86c028bd188df8c6f8bb03f1d761640eeb90920f6bb731ccd4252bb05ca148c651ac801422cd5f6ae49f4d1e3e151b49fea4", + "dest-filename": "expect-type-1.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "sha512": "66011e6578f7d2af88d0437e09b492a48c8f689e475500f5f19d66faed455db01e4fde26af5cf0e74ab8aba8e2882e38ecd97f61370861201fb621aa7adc1708", + "dest-filename": "exponential-backoff-3.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", + "sha512": "e4a6f7e22a4d5faf780c7e3cbcdf62ada935431df49dbd0f2d81d77c9830e18123882dd91266498703a9f957e2098c05cef153741f50900ad84b99176b6731d8", + "dest-filename": "express-rate-limit-8.5.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "sha512": "8484b889d5966a2ebd35ecc8751b76c455687da1788fee8834ea4995538b0cef335c6a54544573218935d94522d89ce313358bdc8380c5c4ee6e0cfd3e8d325f", + "dest-filename": "express-5.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "sha512": "183854f67b70b8ac865dd6415204c87bebd79d68f47e9a5412d3032f4fa275de52b5af131a91ecb27fdebac03d9ab3ebf6a343ca6e92c406198cdbc29fff5106", + "dest-filename": "extract-zip-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fast-check/-/fast-check-4.8.0.tgz", + "sha512": "18e275e7c09432737a7126a1b2fe3e131011bc80eecf38a7163929d04f56b6205ae7371578ba3356459a13823315c73e638f16a7510395466c5d1c80ced41c4a", + "dest-filename": "fast-check-4.8.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "sha512": "7f7a90f68432f63d808417bf1fd542f75c0b98a042094fe00ce9ca340606e61b303bb04b2a3d3d1dce4760dcfd70623efb19690c22200da8ad56cd3701347ce1", + "dest-filename": "fast-deep-equal-3.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.3.tgz", + "sha512": "8bbd0bc0659476e5eace270a5d6b21a28abeb162f52b7594539aca64d1bfd22ddad4e4a85f71ea847e566d6c139aa59fa2be2ead46a418f89141c95e4594f03a", + "dest-filename": "fast-uri-3.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "sha512": "704d6ab01fd5c32428cd9faad5d1b147c2c160d65ea1f84475434648c6d00f71b0da50335fd65bdee214e846dcfc59b28e8f405967e79f4014087aad7afb3ff2", + "dest-filename": "fd-slicer-1.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "sha512": "b486d8b596ee70eb340511aa3c992c84951874bf920c7edd54cf208f2f84469dd60148cb105244fb4da46a7c87b708d63a7c2b298062c0098cd29e242c90275e", + "dest-filename": "fdir-6.5.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "sha512": "e608b2d8f90b618d5c3f7f69d7b11c87edb19694d12fd1cbb2939f1209b42fa0b005705382c2b9a2ed09b7362e7a9c64690fedbe1085209e6e5e8d0eaccd83c4", + "dest-filename": "filelist-1.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "sha512": "4bc2a866045937e6b9acdc2a4f195965e3e34ffe1c9e6d11395ef42de7511d9d29f2ef5f4480f484951942990a2f3ae8f0b7e60bcb31db76d8ead54dc6ff2940", + "dest-filename": "finalhandler-2.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "sha512": "bca6ad021e129557e06eff98b66862463844309b18a6c1b5636acc42d47e49549bcadb120f5606cc321cac026674579cf3cbbff95a069b19e5fbcd202f5b5109", + "dest-filename": "form-data-4.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "sha512": "6ee446d1fa41b511d24c238049eea10f6e7cb44b9b16844b6f864d03a3713151cdc3680e7301e8f70c9a6e5ccccce039cfdc40f4bd4a36393f36de8c4fd698a3", + "dest-filename": "forwarded-0.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "sha512": "471fd6c9c67ad0739aa8b2808ba70744a288ef3c566c9df53219ed9adc0ca1a4de17b5c51fd861069f2f21368c89d7e58d143a7985822a46932beca45491cfd8", + "dest-filename": "fresh-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "sha512": "a115c0a6ae78113463e1e3221731a71d61b2fb3a39adab9d8eec4dd1bf07eecfd1536a16d16becc7d3b400244dfe446af44f15bbf45eb24181e68de38be1731d", + "dest-filename": "fs-extra-10.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.1.tgz", + "sha512": "797bc61b067908bd7b652c0759dddb6e093b514a45e88147b4fe7b35861a90fbc73acf060e00dee4a248dfa8c82730e427a7898eecd103c78141be9290ab9ed2", + "dest-filename": "fs-extra-11.3.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "sha512": "110b05ccc509902286af578faa56000e42149875b5b37657af962acbac1b1ab7d40a986997699a33f932388440d87a4fdc06854136570f895d8de93e9dc71d74", + "dest-filename": "fs-extra-11.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "sha512": "6090da0896449c199c6f0d777ef74033d03034e2703b3ac4e29a8ca81ab99c5884a9752a1f094ae01fb7a54c3a24dbdf48fb57d39c451ed632ff59e2d357860b", + "dest-filename": "fs-extra-7.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "sha512": "ca1950800ea69ce25428eb11505b2025d402be42a1733f2d9591b91c141f45e619cb8e8ec0b718f9989ad26b5d1ec3a8f72fe13fe0b130dd1353d431a0eb46e2", + "dest-filename": "fs-extra-8.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "sha512": "85c8376667a94b7d3fec1485a91be8a370ce310bbb223ab13b99c20edfb333d5d68dbdf75a0ef388d4fe42fa9bb9cdfe816a733b4d89b9b5729361b866fa3539", + "dest-filename": "fs-extra-9.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "sha512": "38ed291f694ae9ad2166701d6aee48b731cf23aa5496f23b8cc567c54411b70e28c05db093c94e49a6ed1830933f81a0ae0d8c6c69d63bd5fc2b5b78f9f18c0f", + "dest-filename": "fs.realpath-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "sha512": "e71a037d7f9f2fb7da0139da82658fa5b16dc21fd1efb5a630caaa1c64bae42defbc1d181eb805f81d58999df8e35b4c8f99fade4d36d765cda09c339617df43", + "dest-filename": "fsevents-2.3.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "sha512": "ed71cdc47eea5fdc46e66230c6486e993a31fcc21135c3a00ebc56b0cb76a40af6dd61e9e8cad194dec50521690a9afea153b417be38894811f369c931f1b648", + "dest-filename": "function-bind-1.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "sha512": "0f214fdc133fdd81d340e0942ffc343991d1d25a4a786af1a2d70759ca8d11d9e5b6a1705d57e110143de1e228df801f429a34ac6922e1cc8889fb58d3a87616", + "dest-filename": "get-caller-file-2.0.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "sha512": "f5f4a349aa2cfdf448548a7ec5226513a95fc21112ecb36d29a08121a987b23af69dad418800493e8d263a38f3f062435116ab9823c6a9a89583999f8dbf7c09", + "dest-filename": "get-intrinsic-1.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "sha512": "b1349f063a17069f3d26f20a21e7eac3b53608279bb1cef892263a6b0886a202ada1219b823604fc6ffe97db05dcc5853cd73d21ca0e0b83837ca1dfc459a9d2", + "dest-filename": "get-proto-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "sha512": "9c117e175ac06550aefe9eeb8f3800f986f895f617ae997b6ba56626b53cc05f48d422af3ff4303cd6479ce9706d3918e9dbed148cc5312c905db2e84d03d1a4", + "dest-filename": "get-stream-5.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "sha512": "9c5474ccba54d9809a471c28089bcbe94bc21f6245c85548bf04cbb087f6d40b8794cb240358614dd93e2e5609b4e958b7dbfa76fb330f604646a04bfa240af5", + "dest-filename": "glob-7.2.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "sha512": "65429187afe4505a0089302d4d83d9277870f70371c7e04804e8a39e51bd3e7ac9b027128ecd70cb20fabc9a5a62d827cc3aca6114aa7f738ee917daf77c6c46", + "dest-filename": "gopd-1.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "sha512": "ead7d9f756ceafb6ce5e72bb3d10c21812dad47e14d3cd181cd6804362ac30694b13345b938e27b1917613521e45cdefb491cf55b2826207456da18eda58ddf2", + "dest-filename": "got-11.8.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "sha512": "45b279fe398570d342703579a3d7939c12c9fc7b33595d0fef76dcf857f89d2feb263f98692e881b288e2f45680585fe9755ab97793ade1fcaac7fa7849d17bd", + "dest-filename": "graceful-fs-4.2.11.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "sha512": "1329094ff4352a34d672da698080207d23b4b4a56e6548e180caf5ee4a93ba6325e807efdc421295e53ba99533a170c54c01d30c2e0d3a81bf67153712f94c3d", + "dest-filename": "has-flag-4.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "sha512": "d5c0cd77027625aa2199bdec8383a629a301c2e0b8f2c6278b91d4c360efb02f0b8c64cb2bd87e79bd57e91cae3877b8853d142c25baf22a26863528294aa53d", + "dest-filename": "has-symbols-1.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "sha512": "36a00307c5633c52ccd95d15bc751ec30c2cc3465605a21d828fa2787b4ade16ac2f3e2a78246361ca9f07a010ac182044aa69285f0be76fd5a9d56c3b8ec397", + "dest-filename": "has-tostringtag-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "sha512": "4f651b7db044177db089ea5722c3254d6f7e743602eb0321fedfef600e2db8e30aa96cff9f7bebd4d152c508b23fece4da65eca0c03f8bfeea57a2cabadd6dd4", + "dest-filename": "hasown-2.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/hono/-/hono-4.12.27.tgz", + "sha512": "d72adbffec3a1d6409ad408b909d881798cd20fbef1646e557944d39897a6d5f8e03aa7d18b70ca47145193a2c4af1ef7005226ee52e911aa1958238cf7d82ed", + "dest-filename": "hono-4.12.27.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "sha512": "9320ae10e5a326a66e0db447ccbf15f77373421c0807bd681564b2cd5a3e28f648fa99d03cfc6e71d92b399be42d19eb7f9511b1033e209d3d0f0dbd71100b20", + "dest-filename": "hosted-git-info-4.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.13.tgz", + "sha512": "72e38fa08ed6029ca10449534dbf68aac6b046f674ac785a1f082144b953b9f7e80f50766837a6942aee2de66b50821dbc6ee0b3dc5e10b10f9ba3e1b804aaae", + "dest-filename": "html-to-image-1.11.13.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "sha512": "753c5cbcf5ea3ef5c1429ab9754afa9843095f8a08105bfa6f0a26dc50f02910ecb888e324600daa106ea009fd73545024874029abf7dc40fae44db2b3ef3b41", + "dest-filename": "http-cache-semantics-4.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "sha512": "e056d17405fe6d2766a3801416e4b458d88fcfc36016dfabf138603569a5ae3423b7543b651f7ecd395c7b6f39f71e0a497af022c69e4ea0e82909ad3fca4b99", + "dest-filename": "http-errors-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "sha512": "4f58240226180d6631dd5e419b2bbb1dc7dcbcbee652b4d688ceb239f6b73c8a6156227f8053dbbe2750faf7aa48e1dc8bf3f105c0da6de50d0b3a4e3832598a", + "dest-filename": "http-proxy-agent-7.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "sha512": "57edb7b0332bd765a7cfb893703789af73ba008c659ef4ff6e66800003ff5dd6b7e42f74a7de7df69d05d5e1d1fcdd4a20b592a1654088e3058c105769748cc6", + "dest-filename": "http2-wrapper-1.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "sha512": "bcaf4fe7f8947dd97de4023e255c94b88715b5de287efb6b3abdc736d336cb10bd6e731b11da77c74d4e8503678dbf082588b7f159531379815f071fbf2c2e4b", + "dest-filename": "https-proxy-agent-7.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "sha512": "8a6f438c40d0e79b3d7cbe04633380bf4c8caa6301499a7a1b456f1724cc3ca5b1892047523f4d5bfaaa2e65d4c17aeb33b02fa9295309fbea45bd1c33cc98ab", + "dest-filename": "iconv-lite-0.7.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "sha512": "93dd88fdbd3cab8c2f16c71708bbea7ec1c2ae3ac5ef2897b10b8856f544ecdf365b7f9aaa9cee51d05b7e159ccbf159477ff82207e532028b3acbcf0eb18224", + "dest-filename": "inflight-1.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "sha512": "93fbc6697e3f6256b75b3c8c0af4d039761e207bea38ab67a8176ecd31e9ce9419cc0b2428c859d8af849c189233dcc64a820578ca572b16b8758799210a9ec1", + "dest-filename": "inherits-2.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "sha512": "ffe4ba8f813d007bd6f5258c48463d5dfcbae8ee4f5af544274f0ed32e491b210a429a236f42b418aa73fefe4727f1b4be2dc3dac8c62bbf35d7da1765e134a8", + "dest-filename": "ip-address-10.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "sha512": "d0a23feb4ef1a31493a07ec68cdd457d26cba14d3e6ed4e2723b1049642587f859ca437c2a998c7fbb98c0f5b747e6a467a47fc35f199574870585e26143cede", + "dest-filename": "ipaddr.js-1.9.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "sha512": "cf29a6e7ebbeb02b125b20fda8d69e8d5dc316f84229c94a762cd868952e1c0f3744b8dbee74ae1a775d0871afd2193e298ec130096c59e2b851e83a115e9742", + "dest-filename": "is-fullwidth-code-point-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "sha512": "86fa6823a928ae124c9de8f6f3975283a9eed7e7babb1b3bcc6dc16009b96f2a83b2024d5b0c7333acfa8998808104784c9df42660533b0a99530dd69721f701", + "dest-filename": "is-promise-4.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "sha512": "8b1909a2a42f00ff3c13ac0bc9d2c61aa089b2b1549eaa07e879da73307c5e60c7d6869653ec71769b6f8a44e068486d679dcacba617881b942365972cc0b08f", + "dest-filename": "is-reference-3.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "sha512": "54b82121634ce842d0ce8ef3c26720d0d99357258a623bc878cf37ca3a74c110d39949eb33aefc7d06dc281a3a9f6089105d2cce81bfff2b60f932a56bcf402d", + "dest-filename": "isarray-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "sha512": "887aea7b9b21bc151c15b999abdcce40706878e85926ee91406ac3a4181e9d49bf026f85dc9336320423fab2b767ad357f3acbe602d95ad00f1f638169255ccb", + "dest-filename": "isbinaryfile-4.0.10.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.7.tgz", + "sha512": "827583d78261dc5cd2dc23e117403134e27c0b1a9e6e53d3003cc8dfcaf4c2df19c9097979da72ef99b2b74f041b6a0abe9ca2a92aacc7e5a4cfdbed91b4ea61", + "dest-filename": "isbinaryfile-5.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "sha512": "447c4c2e9f659ca1c61d19e0f5016144231b600715a67ebdb2648672addfdfac638155564e18f8aaa2db4cb96aed2b23f01f9f210d44b8210623694ab3241e23", + "dest-filename": "isexe-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "sha512": "e81ded2ed16ab504b87a46abbcb54c67e5fe565bd07a46dee2d69491ffeb8553b777f874336adf0119bfa572dc3c4b238ccb0582b1604ab85023171256b073f3", + "dest-filename": "isexe-3.1.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "sha512": "14552d64ca6867c46a1d2dd77971261d62c0e2d847f99c42bf694e88f227d5773b0b1aea856ccd483cc3fbf7214bfcdb61ece68b058b7500b4f497502a6b613b", + "dest-filename": "isexe-4.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "sha512": "c291d8ce1c625502fe215d3904b1365e7df8cd6d52db6de1be3b6a934fa0b0faf077ff0934b5c981964cfe23c5b18735c72a6117ee8ce84bdd13913d3011a40c", + "dest-filename": "jake-10.9.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "sha512": "002ffb2687c9bd91abae779635a12725e38b531f89946b7bb4d6b4c198913d3e0c635c267ca8eddbee8eda9daecf6fac92597c39966624c36a7a47bb90a6cd81", + "dest-filename": "jiti-2.7.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "sha512": "61854322740a1497d1ff16b7a2351397c7362a84f088bd51e5683d602c9dc07d31d01f60adbce58391c2ee63230ad5098db43f627184648848e6d0a07d36f81f", + "dest-filename": "jose-6.2.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz", + "sha512": "48534ebd227e0e07fff409fdd38631f828129483c2908a5aa38aa8e7596979edb94c845e8dd1f7ae1478119306a0dc77fd33f73bec335ae893165e2ca9b96dcc", + "dest-filename": "js-yaml-4.3.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "sha512": "e1b57905f4769aa7d04c99be579b4f3dd7fe669ba1888bd3b8007983c91cad7399a534ff430c15456072c17d68cebea512e3dd6c7c70689966f46ea6236b1f49", + "dest-filename": "json-buffer-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "sha512": "34cf3f3fd9f75e35e12199f594b86415a0024ce5114178d6855e0103f4673aff31be0aadaa9017f483b89914314b1d51968e2dab37aa6f4b0e96bb9a3b2dddba", + "dest-filename": "json-schema-traverse-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "sha512": "7d08685dd72f737576f31ec2ec132ce0fe7e90d96051445eda39944f54fffe8051303aeacb540f7a52629b0646a3b1e0f553d5dc4415e419eae216c5cb6bdeb4", + "dest-filename": "json-schema-typed-8.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "sha512": "5e63967bb7b21d81f5e1c2dd54fa3283e18e1f7ad85fef8aa73af2949c125bdf2ddcd93e53c5ce97c15628e830b7375bf255c67facd8c035337873167f16acca", + "dest-filename": "json5-2.2.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "sha512": "9ba175477cfc8e395fda29901d2d907b3e6c8ca590cdbbae86e27f14a605459bcf1373ee1dc48c559cdfb0b84654e91f776d286cbe5258405ec394a196ab8dc6", + "dest-filename": "jsonfile-4.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "sha512": "cf039374bdeb150fe545d0679ed295397ea4e5c289c047351dd8a54fbd41584bbb278d605c8076311a7ebf176e3d2c1924f581c44cefe321f5c182c91941d7e1", + "dest-filename": "jsonfile-6.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "sha512": "a3154790747f1097f608d5e75b144b5ba9a0ec9c82094706d03b441a62f672d528d4f3538a7d4f52297eafffb8af93295600bf7e7d648ecc7b9a34ae8caa88a7", + "dest-filename": "keyv-4.5.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", + "sha512": "d3f06718209fc943240697838168a16a720017d2666611c1814844ab3bdff9a7613462e83fa4da888e6817ca326f7238e4ff8f727aea8a149fd353349741b9f9", + "dest-filename": "lazy-val-1.0.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "sha512": "60aeff0a54ede2400ad2fa3ac375fe3e79b40f671fdaf3c76e139776836d8b519ad1a9753f84c1661c23013be33702c40429cabe325cda34201d71f4344c2502", + "dest-filename": "lightningcss-android-arm64-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "sha512": "473786f49bb96da83606fd7f97095526f044deae93b57b247592cb0b27e0e69b7e1cbcfd06a94808eecb64ced51cd4d39ffe4f4611c50528e4e65738726b1c3d", + "dest-filename": "lightningcss-darwin-arm64-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "sha512": "53e42c069da6fecdb0aa95184ffeb09e56a07596ed65d9dd4a6badfcd26a94270c2d35a9e66b82ac80fe2b9509ea3a83d8116c85e8c26179e23c36cd87bdd5f3", + "dest-filename": "lightningcss-darwin-x64-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "sha512": "2424e281e74492c664ded1d34ed86731d55f19feb5164cbc262d84e188d44c4417d78c62cbf953cd79eed6fc2265eddb61ed2af92a6c487fc24de0d72ba5878a", + "dest-filename": "lightningcss-freebsd-x64-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "sha512": "c7aae79e945ad862f4cd03a4b7aaedb376033f376e2e95afc0017a10c8571556570f8b4fac190416acc6a30cc2b085ac3e3a922beb723443835015de7951d293", + "dest-filename": "lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "sha512": "d279ccca8c8e2d12577db30e8a569245c2c7dc9c39cfd1c33467d3fe0c023e06838e7c748bcc3bbc1cc52c54757fa08c2ca17c8156de6e69143777dafe4409a5", + "dest-filename": "lightningcss-linux-arm64-gnu-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "sha512": "529424a1e9ebe14244ce054862923cd250c5bd198f560ea8a9ba0d1dfa07e024087cd03e1cead9ecca3b2993f4d9d0ba2e38213d025e06cbd7849a1dff09c806", + "dest-filename": "lightningcss-linux-arm64-musl-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "sha512": "57b42be7622166674a3d5afe56dc3ca3e58bb1025809377c96821fa4368c45619465f04e60425ec89224a862033193f03f1db8a5431fc12c7123ca61aff31b38", + "dest-filename": "lightningcss-linux-x64-gnu-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "sha512": "6d870ba7e55bd1ac2c89783ff34b8245ecc2607360d7f9779add20cc79d657d5cfd56e6c29ae7f4c274659a47fcc13363de17f1dbb10bff8f651134e895bb15a", + "dest-filename": "lightningcss-linux-x64-musl-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "sha512": "f126c2f01478d294ba6da08cf2c6ed6034b011541de099454ce95a0f78161877d385370006734305d6ba79365ea9ba1f6a5209845c74a8ace01c999c3d39c677", + "dest-filename": "lightningcss-win32-arm64-msvc-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "sha512": "026abd07f4a86587438b5905ae88e7a2a3cbc58850e16a395e22fc11526b56c07c011a02d4f596e951ad4f458a09e9a3cbc682fa5a2e2678d2ed4d7cc776f4e9", + "dest-filename": "lightningcss-win32-x64-msvc-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "sha512": "357601ce29cdadb95fada3c6cab6cfa03d7d0b587d95f23fd66ce0598bd75137b8d781b3fd7d450f65c165264ceeb453acc03c24bdceb4068689fac82a1439c9", + "dest-filename": "lightningcss-1.32.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "sha512": "496d77c2cec18da789ea9ed0e823b69dc85b6047375f727a5ab9934c3b68ef230fa954994d4c98e538db89df806fc80b9c04edca062d8832091904519f664e88", + "dest-filename": "locate-character-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "sha512": "74c22789c4cf544f1dd5ee68b5fc269a3971919a14a6254bc32793754b22fc26a3fe07f3cdb941702139b111d5fc0b23b829b15abb5ed93346498b82782abed1", + "dest-filename": "lodash-4.18.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "sha512": "b6a357ad2efca0c384ef734cc4ae0430b42c428c167fc8caa281fd83bc4f6af453ef4e91e9b91027a0d8d937bb42e91a66cba5c5adf4c10edb934a66e1788798", + "dest-filename": "lowercase-keys-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "sha512": "268e9d274e029928eece7c09492de951e5a677f1f47df4e59175e0c198be7aad540a6a90c0287e78bb183980b063df758b615a878875044302c78a938466ec88", + "dest-filename": "lru-cache-6.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "sha512": "bddd85e1853211728670b1e8abe4c4c828f1b9e49e1e7171cb28cda7cd328345d5e2f5219c37abfe5bef96a33f6ab0796d740de4adbfde88a7c82472c7c4f609", + "dest-filename": "magic-string-0.30.21.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "sha512": "fc85ed6f0124e474cfc84c32297ea11a4617c4cf676e3eb807e8a55499c2fd1e81d291f91b85776f4a556cbec3063e2d921040a696d05257fa17a5e5f4b1eed6", + "dest-filename": "math-intrinsics-1.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "sha512": "6a2b27ac33f818d7b4e9470a1675796df30d3c1530e23b0b19a5b059f9c7defd361a706e5d7d8c0959f945bad6a348f7a5ccd48a561b96aedf43b370dade572b", + "dest-filename": "media-typer-1.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "sha512": "4a7937d785796b214b869ddf914444b9be96b6305f3dd08f6352e7f3ff26ba7b8bba2621b000600555aca33006f8c58c6d512f71d7296e2f51ef0c36da5f50de", + "dest-filename": "merge-descriptors-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "sha512": "b0f538b95edd625bed589c70c311c3d0fba285536213b4f201b439496c43081f66518bce82ba103b061040e28f27c0886c4fb51135653a82b5502da7537818be", + "dest-filename": "mime-db-1.52.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "sha512": "694e4426e20dd960de982700a76bc505fa7f9b810085626750d492c348b1b3bfe45db77a3e0eb8126c0990d745841f1a5add6c1f60935eb2f1a3f880195de83d", + "dest-filename": "mime-db-1.54.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "sha512": "64363e6cf9b9cd34c5f98a42ac053d9cad148080983d3d10b53d4d65616fe2cfbe4cd91c815693d20ebee11dae238323423cf2b07075cf1b962f9d21cda7978b", + "dest-filename": "mime-types-2.1.35.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "sha512": "2db833764d21e23ba843d7c22975b86f2d1426a8fe9ce3ab23d309d6c4a3e2723c688d9ea35aa6bd01227b8543d6096c4b6e749f5e4bb16b18b42ba0892b52e4", + "dest-filename": "mime-types-3.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "sha512": "5123e431e113df5ace3226abb013481d928b1a0bca73f2eb8e87c09c194eb6d7f96a346faa2440f10b1e9db728a1cb4ae9de93b3a6aa657040f976e42ad86242", + "dest-filename": "mime-2.6.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "sha512": "8f911cb67907eda99f57fab91e09a86a5d60d901c5251ada3ad9b1d09a48aa4c6106123f9494a5d67329438e6155aaf03444cea161229a7759e102b4447c6ec5", + "dest-filename": "mimic-response-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "sha512": "cf4c9623ee050ebaf0792f199ade048f91dd266932d79f8bd9ee96827dfe88ae5f5b36fa4f77e1345ab6f8c79345bd3ae1ce96af837fc2fd03cd04e33731cd19", + "dest-filename": "mimic-response-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "sha512": "be92d012cf952c2af59d4d015d2d3b99a628170943007d209e042ebadb71230bad0c510c1ead9b957fbcbe98310dd2b72753f08c22627a9efb3a2b536782e5d4", + "dest-filename": "minimatch-10.2.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "sha512": "5608d652c9e74fa9fe35493a799abbef37857695b62d60f33facc51ab09b1d789836e9790f3aa4d871d0e6e147d83356e576e9f3e8d5cda78db7de2cb04125e3", + "dest-filename": "minimatch-3.1.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "sha512": "ee8d70100d91c8c3fb22eec635b6bdbdcd11596180089382641257d862568a9d22915fb070eb2056e63db84f023e2c908641854a586e4a464f6af37bbb573617", + "dest-filename": "minimatch-5.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "sha512": "381c0137d00be1daa61139694b6cdab31faf4de59c956ce46e57d993b2930398f78de38e373fed4429d9a26532bcd83cdf02f966ff52b3a1cc2570202fc47662", + "dest-filename": "minimatch-9.0.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "sha512": "db2c8047ca8190ddd8ba17896a7529582e54ddb6f9a2c0f2c0d07c4730d5943c031dba1c009bdeaaa8f5bbcf92543ee39164f8cafb070a95aaa96a80c5bd3308", + "dest-filename": "minimist-1.2.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "sha512": "b44047a839c8a0cff5ad7304d738246bd83a43695ca029311cbb9cece0c9e41c5b3f977873667970682d5c092ee7ddb4d02c7b762b874ce61f4810fc9fa9a6f0", + "dest-filename": "minipass-7.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "sha512": "299c58a350549160f64d514baf4310a0cf2f5148a0583dcb943f376bfef906a0bee2a1341dbd55a39bf516071f68d5ef7d7cebfb912143a8a783f09a0628d397", + "dest-filename": "minizlib-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "sha512": "14ffa9f1107c396a45dd86410ab3f982d0039ad5c0a41e4030b9febddc80f8fcb10a3ac2b34d268f2528cecb0edf77300de4f7c0d19d2f127933ffd8aad1c027", + "dest-filename": "mkdirp-0.5.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "sha512": "b73cec91bddb1bc2ef606145fe60d3a6ade3a48e90f707372c49816a086ef83742b2c77515a90dec17348553661321aad5bab74607e409bddc9902e934f3aba0", + "dest-filename": "mri-1.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "sha512": "e85973b9b4cb646dc9d9afcd542025784863ceae68c601f268253dc985ef70bb2fa1568726afece715c8ebf5d73fab73ed1f7100eb479d23bfb57b45dd645394", + "dest-filename": "ms-2.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "sha512": "cbb5b282fffb9843afc53b8440307c4ad5dd3110567f5911fed961033051505901da37dc2ce0313bf48798e3b6ce0cf5a5580adbdfe4caea67d39f7f6c21dd8c", + "dest-filename": "nanoid-3.3.15.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "sha512": "f0e7ecfc051087c31a11cae5ab9c4e5f4090f72a53179765efc9a394c35f38ad3c7f3a604c741140f07170f944b48c34c91a70b3e668ff7afee5645bcbbbb71a", + "dest-filename": "negotiator-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/node-abi/-/node-abi-4.35.0.tgz", + "sha512": "ca6938688cf174fa29c36822bfc16cd4473abf26c69239b2c54c15aa1908e0c0b2dad55f5dd90e1865a27965632f44c7807fbb6bc95175ebf2ba9a188f726cfd", + "dest-filename": "node-abi-4.35.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", + "sha512": "db13ff20618c9a6490a48d7e3bf93bda317fca4bd9f3d25eb8a5f74cb24060f0d52d46a5aec86b2c791e55c08266a1bf7846badf972bf08058ce09c3bccd8ef1", + "dest-filename": "node-api-version-0.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.4.0.tgz", + "sha512": "38c70f36fa9308552735a06599d82afa57cda98ee04e24a63510e3637b805d1cae75e299119c6edc22ed8cc42bc78cd9c425f66ff9a936a4edc2e08981784793", + "dest-filename": "node-gyp-12.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "sha512": "3b9973f75c5239ea173fa0ee9721df965a6af84834d0c5a2b5921bb4f7e8484bea207765e607dc63a858cc35a78f4a83e6dcf9d8f234f2ef6a52f49579405e1f", + "dest-filename": "node-int64-0.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "sha512": "661ab76bec852ab63048196e2f81fd5cfde6df2e6ebd0901ff4f42c03aee0a246647f5096279fd5b8478f2bcb4b860bbd1a7933ca2f29c1b6c70ff5e7c515c3f", + "dest-filename": "nopt-9.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "sha512": "0e52fe5f03b2dcdc4043cc6e0b4a243e02b8ea2b953402b4d5837b46e79806aa85786b018d5f5798203301d82dfbaebb6c297990f87d12a28a0f09da3c6d48ec", + "dest-filename": "normalize-url-6.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "sha512": "ac98134279149c7d6c170f324fa552537cc3dec5a6bbab19848b1e63c557f8646edcfe85ec5bbe24d0e85df9251256cb2529dcdc55101d57b8714e618fe05c52", + "dest-filename": "object-assign-4.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "sha512": "5baee22e5e09d845c41936df78709f7eb8c37e2b6f2c0360d14957df01545124f1f762974457a0307515812a84fb0be101b8b85aa8c683d733cac4d5d84a5b7b", + "dest-filename": "object-inspect-1.13.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "sha512": "f6688580cd8e15b6bb841fa9460bed57ce2961305aa131e886f98882246de9d448cdbc0438868d68ff9d2251acd9f345a01d127884acd09cf958555189de97ca", + "dest-filename": "obug-2.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "sha512": "a15973920dc4340842936cddbfb209c1dfd0503e33d91c51c2991c198f29b0255c09864dab8c189d55802c733e6ebb6e26378f5a2605fc2966b83afc0a1e7e92", + "dest-filename": "on-finished-2.4.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "sha512": "94d689808fb643951140191c7042874d038f697754c67659125413658d0c15402e684a9ed44f8dcaf81dcff688c8d8ba67d3333b976fd47f27e7cfc610ba77fb", + "dest-filename": "once-1.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "sha512": "0593abde74501ce9ed5234eb1fcf8b879e2c98a1e81f2babf167b557c0d2315ae5e40da66a538ec2e2519ca4438d29e4a1e061e1ab7a0701276f923b265df5c2", + "dest-filename": "p-cancelable-2.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "sha512": "4d839a9ccdf01b0346b193767154d83c0af0e39e319d78f9aa6585d5b12801ce3e714fe897b19587ba1d7af8e9d4534776e1dcdca64c70576ec54e5773ab8945", + "dest-filename": "p-limit-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "sha512": "0a2c9e3b1153fc96723799b4cfd3df5f0e1208127a4b2833d43a65d30aa39610c418604fd469ec51510bd29eb78681b57dc8f77c7ca75e2f4d60ee2758e2fea9", + "dest-filename": "parseurl-1.3.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "sha512": "0156f0dd42767bd6eaeb8bd2692f409b47e37b53daf296c6a934ec9977da2223299ebe4394385f24eb8b8fd49ff7964f5430147ab0df124f3c30f98f7bb50242", + "dest-filename": "path-is-absolute-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "sha512": "a2399e374a9dfb2d23b3312da18e3caf43deab97703049089423aee90e5fe3595f92cc17b8ab58ae18284e92e7c887079b6e1486ac7ee53aa6d889d2c0b844e9", + "dest-filename": "path-key-3.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "sha512": "a9172e21d3faf4d3e6e2a6c008af9a0e8808e42043322d6329ed2bcb9ad2409cfc2552ec0bb8d5f17a622631912cba25dcdf91e6284661cacf2d39e8ea901d04", + "dest-filename": "path-to-regexp-8.4.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "sha512": "5948c6700a8fd6041a72841ef8e049b0503b2dde03c97b9422367971cef970b1ef27b76d36c4ee8298712000f0b294be02b68051e3c22ab495b4f2c58ff17cf3", + "dest-filename": "pathe-2.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "sha512": "791581e4b073ecfa43bb83d49704f43e19d07d34099430dd3dadf9bab5783acae6d2dd00a901469fe508914de4959bf027c28f3b755b045b17aae03aa7a92a67", + "dest-filename": "pe-library-0.4.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "sha512": "1776acbf8d94b97721773b7ec57a9f5b538695505efa6c5ada6a88d29839c801d93ef16663763a76b49ffc643503ce9681610df4ace1fd6ae029aea219c1d72e", + "dest-filename": "pend-1.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "sha512": "c5c787dac9e1b5be4cf658aa0ec984c39ea57b7efa993664117fe311bfd1c4d1727a036e97b78db250973fd1438ff2dcbb45fc284c8c71e3f69eda5a1eb0c454", + "dest-filename": "picocolors-1.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "sha512": "40ff3c0402af31a9bfdcdc47eaf8f6a36d51e8c8f165401dea7970012fe99c6bcdf4854ba1c2c7c46608cc5860e9f510fb9b61e8fe1dbf8796f635f70d2223ec", + "dest-filename": "picomatch-4.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "sha512": "c10d1bfd6e05af4d6ab691e5a92aaca5c8f712106f8a6b1d8742a51e11fc1d166732c11ad1e6b67d350b397392f5c710af7a26f86706464e1efa2b2b65657ca9", + "dest-filename": "pkce-challenge-5.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "sha512": "7a611c2eea26b768f4defc43e78822541e12c538e7b2a914ebddb164e6571c3568632ca9126f9bde3a624dc73e09ffa6ca8a1cfbf2f2d33d358ea78d1d58091b", + "dest-filename": "pkijs-3.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", + "sha512": "bb2b2e9b2aef9145f4ad7fdd115aadf200b7b13073778ce859f2de4b6f676f9de299d69756f2c83585d323618dab368cbaf69c371e2e250f3e6f7cd7474a6481", + "dest-filename": "plist-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/postcss/-/postcss-8.5.16.tgz", + "sha512": "beec22965be28a57ca66c8345468f947f630c1c1f1e122ec20e23fecaea64245b1fa5e5c5074e38f983401ab1305cc97b1b7d382bc2c50d99551be71570c8fc2", + "dest-filename": "postcss-8.5.16.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "sha512": "886f866257517f6050d140d401de8943f470cda432ea65e6b24fc8ce56326a5e00e12345c39e0c787e3fb4b905e08e56a161bd490c2ea96cd2f7d8da1501c1b9", + "dest-filename": "proc-log-6.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "sha512": "de8b943a9421b60adb39ad7b27bfaec4e4e92136166863fbfc0868477f80fbfd5ef6c92bcde9468bf757cc4632bdbc6e6c417a5a7db2a6c7132a22891459f56a", + "dest-filename": "process-nextick-args-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "sha512": "ecf887b4b965e4b767288330d74d08fbcc495d1e605b6430598913ea226f6b46d78ad64a6bf5ccad26dd9a0debd979da89dcfd42e99dd153da32b66517d57db0", + "dest-filename": "progress-2.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "sha512": "cbe58a165051f011979ec3652071463d99b20dfdc314ca0b85a7e5027c99815eab1bac6ef89c1eb13a3643d47a5f0626b66c001429009377b7e6311da1e87fde", + "dest-filename": "promise-retry-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "sha512": "4e334f6e537807001631753cb3d004cf82664319c3d4d34bedb34e63f00a533c9a99cdfbf4558049485cfcad692f69e855bf9799928b2faf1c8f32ec88e00c68", + "dest-filename": "proper-lockfile-4.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "sha512": "96542c30b4940d43d3e388ddad4fcedfbaa59e27e2b433fe670ae699972848ac8b2afb59c69c95d27dbf6c3fcde2d040019fe024475953b28cadaa0ad7e5d802", + "dest-filename": "proxy-addr-2.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "sha512": "552eec8dce8a47b7b5ba4445850498e4b336b8158050f88e3dafc0de690a9a23304a64455084edd31ba3fbf95eb209c2bfe74f204625933adcc9782ab881cc70", + "dest-filename": "pump-3.0.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pure-rand/-/pure-rand-8.4.1.tgz", + "sha512": "739f11dbe48f15c4883d7a14f37e1037f28f0c339277cb17712aea7fa7bcdcc7ba46ba75118931ba49235cc56b2af29a003b3548ec8d91675fbcb7facd8f2a2d", + "dest-filename": "pure-rand-8.4.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "sha512": "3cb8105d0e87d8558269e45a93cbef935196e3ada5331079b37266ebbdcdf36cc8e2faad5543ee65d7df7596cf0c546853c900848b5616d3c25a23e9a78fc40e", + "dest-filename": "pvtsutils-1.3.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/pvutils/-/pvutils-1.2.0.tgz", + "sha512": "05bb9b7821324ee42354c6a4bc943f4b16dcf77176a7099bb3138d4ff651af053b51adfc77cba7613c17a5354b00a278043b87f481b3b428d071dfcdff7f43be", + "dest-filename": "pvutils-1.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "sha512": "3bd825df30a5e61e5b970d4a194cd02a1039a145d297caf0508339a344b79c25cc9624afcb90f3c7bfc325c23e4b08080aff889de499c21061d684b210703bd4", + "dest-filename": "qs-6.15.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "sha512": "5aec802d18d63c31adb7fc3326269d3b901763ef2167cd215697ba3328af82b691116ef9d57dd26e146f1b778b28e60dfbc544bea2dc7f7c1d9ede386784b848", + "dest-filename": "quick-lru-5.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "sha512": "85e9369854293ee2381350412ab4ada3e054ddedf1e31b9aaec6e2c2bdfe95fee9e388eebc5315d171564003f7c54caa5c0e11ad72c8a1a49419b4add39e9933", + "dest-filename": "range-parser-1.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "sha512": "2b9cd08c3965c5691fed9e7125d574fc1d164cdab1eafc46ef4cc9138374901b382e8be6118589cd01b10bd6d2f5100abb76e0338d25adde73a0b275d8c43904", + "dest-filename": "raw-body-3.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "sha512": "04d83d10ddc30f71ac0d75fb01af0ee29f76b2bca3926cd86209a04c073a080e2e18b103cc57f13b1ba0bb6d5a90ec697171e2120b18902ea73ec42f2cb2e612", + "dest-filename": "read-binary-file-arch-1.0.6.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "sha512": "f29d00524e173838087b04a2d25f04a63b3e1159d688aecda03204194d07844efe67263c0f520c63ba1dbb9951ac55c683bd4bd79286f10acf9ae9b8e514ed74", + "dest-filename": "readable-stream-2.3.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "sha512": "18387090b7f2c162f6b3abc48f286b8be79799f1fa8f52fb244dbb5a1a8b798ce887f0370c16981848f61ff1c56429ff90c7e29bbdc55f11094f0d3a5adc50c2", + "dest-filename": "readdirp-4.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "sha512": "7c6c4423bfb0b06f71aef763b2b9662f6d8e3134e21d1c0032ba2211e320abc833a0b0bf3d0afb46c4434932d483f6d9019b45f9354890773aff84482abba2f9", + "dest-filename": "require-directory-2.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "sha512": "5dfd2759ee91b1ece214cbbe029f5b8a251b9a996ae92f7fa7eef0ed85cffc904786b5030d48706bebc0372b9bbaa7d9593bde53ffc36151ac0c6ed128bfef13", + "dest-filename": "require-from-string-2.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "sha512": "bc78dc6363250084c9842d1e443fd5bfc565826bbd49ddcb5fdcd9bed1b353964899d4cddfe77a7bfe269d3c95f2f11bc9fd6c80d22b5b185696bcace763a410", + "dest-filename": "resedit-1.7.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "sha512": "d1ad45e25ef7fd915939a9099d0dc5be4276fa0493416cffaf6284e4e7436344f13e6e61e0692a91659f338ed3ec7b1b9ceb5c255105e1ea42572eaeed0dcafa", + "dest-filename": "resolve-alpn-1.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "sha512": "e20974df09f7863d473f7cb381d23b777942905f79176d4fcf804f1af2878a7c90cc02d1e426a9c02f32222d11879f0310c43f4a0b82d37c058f693433f98787", + "dest-filename": "responselike-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "sha512": "f4b9224f08d487aad3e79e43b44f6b4d7f81281c8f7eb333100b67944b5d130af73647dfc228a1a9ed9b5800e0f8e4118edf6097a20276607f6450c2180b52a3", + "dest-filename": "retry-0.12.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "sha512": "9b0a9e5b95ec036a807a31b8ea061d10d6b15e3c7da2744d09f9fb2f476eb8fe210ae4c88bf40eecf0cad3b2897e9d5dfa2cd63ebcc4243712a816b439942b88", + "dest-filename": "rimraf-2.6.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "sha512": "d45d5e12d501b45bdc1a6d4743d4e25085073d01bb99200e0eb848ce3c6850416ea3c39c6eb18b8952e47af3608fce131389671ef9ee9b01638493b912ed77e6", + "dest-filename": "rolldown-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "sha512": "9cb4eb50a9b653288beeb9616a9bbf665e3917036091919a0a965b2076a30d883094908eccb4a4f9c20f027b04a95f79e468c82c99ca6dd402d6754fcfe80061", + "dest-filename": "router-2.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "sha512": "c5a9770995f55e5a3f938029c0216b1d50028bd7c1a89ed5fa6c2106cb9fff520e29b072d3df057b1f966bfe5032e6f0d3da5267fbbc118f0f5a07af26c5e9d4", + "dest-filename": "sade-1.8.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "sha512": "19dd94641243917958ec66c9c5fb04f3f9ef2a45045351b7f1cd6c88de903fa6bd3d3f4c98707c1a7a6c71298c252a05f0b388aedf2e77fc0fb688f2b381bafa", + "dest-filename": "safe-buffer-5.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "sha512": "619a372bcd920fb462ca2d04d4440fa232f3ee4a5ea6749023d2323db1c78355d75debdbe5d248eeda72376003c467106c71bbbdcc911e4d1c6f0a9c42b894b6", + "dest-filename": "safer-buffer-2.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "sha512": "f59c88d3c3ecbdd425dabfdb0481ae6e955d477451f6c63a44389614fade036d42fc41654219a0a36d1466536364c31936e6eeb0b840428ce403439de49db512", + "dest-filename": "sanitize-filename-1.6.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "sha512": "e36b415702d69da42f5b9cdce076d9ad3b9671c1020997c18bdd850eec2dab16ac1fe25b3c1dff14e29bd66db6d8ae364785b1bb1cf332c4ecc1fce0b52bbae1", + "dest-filename": "sax-1.6.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "sha512": "701ce79d0f4a8c9a94ebb079d91302eb908c6ab2b6eb4d161676e471a8b05aadf1cbfe61685265b21827a63a2f31527e1df7f8f5df06127d1bf3b0b9a43435d2", + "dest-filename": "semver-5.7.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "sha512": "051ed5bc30951cefaadb10445ac9314ba0c9135a919dbec3c7352ba206fbd425a849f89c07162c88019df8a9749a6abf329ac6f7202b464cab4314cee978cccc", + "dest-filename": "semver-6.3.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "sha512": "bc5282d8812d427561a53efc875629f30cf0adff0233e33328c1c62597c1b738593727111675ec1e4e84e53c4892432c80d4bb99d5f700607bc7640cd9d8b894", + "dest-filename": "semver-7.7.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "sha512": "63bfca0ec6fc2e3a28669c1aa86cae94ee8342592c8029dc7211c693eb19218e1206f52870c044147e54af57c8e1d57e26f974c3a723bee71a222e34a6e462a0", + "dest-filename": "semver-7.8.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "sha512": "d609d97fb0c572821c6a34e34f08f0b838f3bb3e0f3dc6364ad28f96c180435f981f6d08455ac169749699d8e8c1327abbc45cd353e860e1875df3f599871935", + "dest-filename": "send-1.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "sha512": "c515c19f4a4fa904d54220bcc3242b2acd8c3a55f6e334343ce19a8f492e96dbe8382b2d050339caf3a1015494c0e32342d4efb0f5a83421df3c6c1a6902614f", + "dest-filename": "serve-static-2.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "sha512": "1392c35fb5aba7ce4a8a5e5b859bf8ea3f2339e6e82aae4932660cde05467461fcc45a4f59750cb0dae53830ab928c4c11e362fd7648c2e46f6385cdc18309a7", + "dest-filename": "setprototypeof-1.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "sha512": "907c6bdb366962d766acdd6a0e3aeb5ff675ad1d641bc0f1fa09292b51b87979af5ecc26704d614d6056614ce5ada630d7fc99a7a62e0d8efb62dbdb3747660c", + "dest-filename": "shebang-command-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "sha512": "efef9d161b5cc77df9dee05aabc0c347836ec417ad0730bb6503a19934089c711de9b4ab5dd884cb30af1b4ed9e3851874b4a1594c97b7933fca1cfc7a471bd4", + "dest-filename": "shebang-regex-3.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "sha512": "9a39ffd1b8bfa145118dce5797b21a5a2fce24926e9aea0915025f0c3c8ee3afa1056b1f69533ae53047ab67a864187397d11c8713a28e991b442f12541414d3", + "dest-filename": "side-channel-list-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "sha512": "5428c235f80cb1bcb7b53768d369db8ed33f7b0adaea33c79a94e17a7913621f291bdb9c67fd4ff12a38bb814605e93f063a4e56c0c23282c0fe2b8128815744", + "dest-filename": "side-channel-map-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "sha512": "58f4bf1ef1d04d89c78ac2e8f4c72a0473899361641cefed969be5772ae77a6e1a790a7885a8b7832b61b3083aa74d684a84e5e7cadca621408c5d9baf6024d8", + "dest-filename": "side-channel-weakmap-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "sha512": "eb1e9d2bacc97694f3178b1078d631c2dbc1cdfe848381ad95eb12f781cebd3b9d51ec8ad965c06887e60e0b32b2562b441785225b22e78018b05194ba19afad", + "dest-filename": "side-channel-1.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "sha512": "c9bc7458ed7ff1b4812c459766f11dee0316dd29f7245956dd3bd7d674446c32d135035a78d37c58ad26781c0f74068e23b4ed4514499ff12cd7386bac21eeee", + "dest-filename": "siginfo-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "sha512": "c270f6644fa5f923c2feea12d2f5de13d2f5fb4c2e68ca8a95fcfd00c528dfc26cc8b48159215c1d1d51ae2eb62d9735daf2ebd606f78e5ee2c10860c2901b19", + "dest-filename": "signal-exit-3.0.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "sha512": "6b607d6342a535797dbbfbec5bab1322ef6f184a5f2aedb0455ea5d47dd711ab3fd20508cc6cc1a0ffc8a2e4dc5106e6f495992c7dc23b1ca7d374d89456b1eb", + "dest-filename": "simple-update-notifier-2.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "sha512": "51758c2a12cec1529bef6f0852d40f5f17d853ebac7726ed52b2bff2e184f0240cbeb84ea70bf30c1c23d108522fb31073bbc8b084811bc550f3e203431a5f40", + "dest-filename": "source-map-js-1.2.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "sha512": "b811d4dcbddccec232617297f3c7ddac6a2fc5d482a13183459e92617b524712d95331e0e4fffae87b7aba85251eef4466877e8a75e12a8dea420c17513ff2d7", + "dest-filename": "source-map-support-0.5.21.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "sha512": "52381aa6e99695b3219018334fb624739617513e3a17488abbc4865ead1b7303f9773fe1d0f963e9e9c9aa3cf565bab697959aa989eb55bc16396332177178ee", + "dest-filename": "source-map-0.6.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "sha512": "d573091397d0a358c61fa63fede6e7c0f3811242049d3e10177d9de51d7e557757bde334201309b7ccdf6b15f53f7421570ad87bee7bebe8e400db524b69816f", + "dest-filename": "stackback-0.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "sha512": "8c7f4486d2888ee5d9d9c5b19974bc64ff345f20b789ab10c4c0d5f23ce1349a5f0dbed56d02d55b85afb31cfd419bf357e1b862849f05454a0cecb12f38bfb2", + "dest-filename": "stat-mode-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "sha512": "0ef132e795770c1eee927468fb888e193e5f3f5b2547cc10a2155d9278a064f32932cb5a289416870898040089137525da94e70138a18416274616501c606247", + "dest-filename": "statuses-2.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "sha512": "46aef26dc5f646e0b9e6bf6868f5445bbff1bb7b63f2ee067816070560b272116dccc22bf3a03b7b73cf1013d3dfbb074ad297dfe4e25ff16bfc00a624b5652d", + "dest-filename": "std-env-4.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "sha512": "c0ac90450a63274b08a7ad84ad265d1ac8cc256b1aa79a1136284786ee86ec954effd8c807a5327af2feb57b8eaab9e0f23fdcc4a4d6c96530bd24eb8a2673fe", + "dest-filename": "string-width-4.2.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "sha512": "9ff4a19ef0e2e851db6d57ef8aba3e5a88e2173bfeb3c30f30705ccd578f7d4a4324bc282d3d21b759786300426e2f29240bde104767907c8fc933ff9b345fc2", + "dest-filename": "string_decoder-1.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "sha512": "637f153d21dcaa416b0a916743dbee4979aabaebf9a1738aa46793e9a1abaf7a3719cf409556ba2417d448e0a76f1186645fbfd28a08ecaacfb944b3b54754e4", + "dest-filename": "strip-ansi-6.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "sha512": "32f8d7ce4cff04e7f2543906d2814eb41c475f6bb780a6cc1c817f7576e566c803dc158e14b987a2f229658ec1ca425d02372a442062d5660135d102f7223bbe", + "dest-filename": "sumchecker-3.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "sha512": "aa9080bd197db2db8e1ef78ab27ec79dc251befe74d6a21a70acd094effe2f0c5cf7ed2adb02f2bf80dfbedf34fc33e7da9a8e06c25d0e2a205c647df8ebf047", + "dest-filename": "supports-color-7.2.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.7.1.tgz", + "sha512": "14650e980ab15dd37f1fd666f2c96ba8eed22ed162b17441eeb7ceb07349dcc2d30f6a68ffe4ad83c5f212b929ba63c76ee52261372aac4233c695562932eab6", + "dest-filename": "svelte-check-4.7.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/svelte/-/svelte-5.56.4.tgz", + "sha512": "fddd101de86646e256f20573dfde4c4e43dc3e8cf1cdd8c130113ca04606cfc3b76fd293333cd0f591c940bb8528e1ce3d06d4ea4c7f5f88a277f1010731fb8b", + "dest-filename": "svelte-5.56.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "sha512": "3053bf433bed00e9896e484e6824ef6c670537d2fd6fe26e9c8b03c1a2a58d239d70b31e6b7349d64f54b33feb8dd7d25d3ab875fcdf792ed6e29e1838000778", + "dest-filename": "tar-7.5.22.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "sha512": "0b9b63942fc70ad5543a2dca595a24778bc755588e9868ed2f0221e0cbb33e8fe73184d5fe9d6eaeddd19cccf62165c374a106247de4e7e28fc6da91b14606b6", + "dest-filename": "temp-file-3.4.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "sha512": "c98aebb169eb5cc71db27bbfed83180287ccd64b692f9072eef6617f5e42ad78a3596ac461992ce405c1b9d6a57d25892e59de9ff4142540796a807492a65418", + "dest-filename": "temp-0.9.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tiny-async-pool/-/tiny-async-pool-1.3.0.tgz", + "sha512": "d35100c39103adc56b760c822e0a123efab39c2d2c5710d255e88ecf4f455298e1ef51bbf550aa9de3abfb1beded3d6befa085e9965f3e31e8acddbe77ede6a8", + "dest-filename": "tiny-async-pool-1.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "sha512": "d3e0d4bea58c55a94b9a16ba96be240fc88030ad47cd5d3f68a9c2b566fdbfdeb8d539cffcc15becf7366f1a314234d7004aebc9756050e7efd98a8d965a867a", + "dest-filename": "tinybench-2.9.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "sha512": "4877ffaf8f1beef3ab8ef7bd3f1268dcc379bf9caeca31ef75472b41f7d3dd65cc51f9c69870d56c2e24dec1c96894e0642c29529948680a3900db4cca9dd81e", + "dest-filename": "tinyexec-1.2.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "sha512": "c1747f758a5ca8a99f5a911d66388a24ec023459dd0f40cc9eb5bf7188d51adb449017d581c2c51e836b963e3b9a339589cf72c8dbbae5a96c805e0d4324dada", + "dest-filename": "tinyglobby-0.2.17.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "sha512": "05ff882e6060adeb54add271cd73344a05cb6775df89a52e3a3fc82901ee4d78a9fb4e579febb21187558349180e2a5305c2eb095c94cc03f3ed0980adbd269b", + "dest-filename": "tinyrainbow-3.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "sha512": "47033b3283e88cfc6c381627c9dda1cb46f1b48955ae284db3da63e5252f63c673d6c41c406dad1b5852afc3c3c5f80407c44d28386a6c896ba086ab48d0cdb1", + "dest-filename": "tmp-promise-3.0.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", + "sha512": "7b4be8b48a69e14a36009612cd51d5eb109c6b0ba27b3dc3cea0c06eb4dcdd8c4192994de9ef9d335dd97887199c383f4294ae536cdf677af3c18f2e9049da5f", + "dest-filename": "tmp-0.2.7.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "sha512": "a39b123ca12483f0c840d987e37574fee7ab2eba7355e764521f2d18dbda797a5fa6ec2329e9e54a8c7fd8efc14e5654b447be246eece58844cfad3c3e500744", + "dest-filename": "toidentifier-1.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "sha512": "f793eed505d0bebb86121bfad9708c3b7326f741ac70e08296fac853008cd0f60e5cade4685de5dec207c71ef54e125f71b3363b902ee923b701609211f5b899", + "dest-filename": "truncate-utf8-bytes-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "sha512": "a0916ef781d06fe29576e49440bef09e99aa9df98bb0e03f9c087a6fa107d30084a0ad3f98f79753a737c0a0d5f373243ae1cf447b525ca294f7d2016b34bfdb", + "dest-filename": "tslib-2.8.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz", + "sha512": "5fc117f97578411e710acae0c5a103f79e334c37d8f0aaa50edb242842f47078724bf3fc6f82053af183429b02f50d579cbabdd79c047f0c18ff3cec902b6686", + "dest-filename": "tsx-4.22.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "sha512": "7da607c346a705b73f916177cc54c49f14853801945fd1856ce06d86f0dd2ec22512858e14eb52d3380289063022c90bf6219764bde40170fc3a86781a63004c", + "dest-filename": "type-is-2.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "sha512": "8e5d6f6733c38a72ebf5e52ddc9feded5e8580d130f508ef04f772b33f4a7d00c3e357d0ac2d98e2f290762694a454f86d795bd511e12e9a7cc2d9ba3394e04b", + "dest-filename": "typescript-5.9.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "sha512": "8b00d9aa0d10006ae0f516afe47e27d0ceb87379a4479f5c27ac10a7eec2e2723482c984c5a79d6982cd3b8e1e4f802d041c236d38863cc96dd8c7744fd1fd25", + "dest-filename": "undici-types-6.21.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "sha512": "8f7ef949c57ad1da26f9890f1487d32dc3a23f190dfdbb87cf91a86e32e18b116e00d68db370bd9781a6ad6a9e8e05d627b05b25c158a53114912d467bc6e965", + "dest-filename": "undici-types-8.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/undici/-/undici-6.28.1.tgz", + "sha512": "cd6a5d4d50f9e07e3c088c9b2f4ad6437ba4a5bf5ddb7c0cede1f946d7dd99e3fbd1c587363b5fa3b3f8bd95fee42a0370ee772783eee6e5e9ee535f8dce8344", + "dest-filename": "undici-6.28.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "sha512": "ac125e2390970259b2d6957eeb5ed607d27add4e9771acc71c5d9fd9d6c98b1e17ce9505d114b765b8f414620e080bdae4ffddfc604e61a002435c3ed1acd492", + "dest-filename": "universalify-0.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "sha512": "829b4735082120d9dcfef4c6224d12385185357c3b255ae5454b42a2725196f6b0e83b97d303b925e928f6c5ab301861f8fb18019ee85c088e9dffd42a88328b", + "dest-filename": "universalify-2.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "sha512": "a63cb66d8852b2e7f05a52b03dcfa5ddc37bfb0b8994aeaecf461d2443a54036e5ea3a3f6253e2e266fc6a0524542f0117b57c36ecdec8f36a464b00de1ced29", + "dest-filename": "unpipe-1.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/unzipper/-/unzipper-0.12.5.tgz", + "sha512": "b5760e8bd479ed48ffd99db948eb394514b3abcf3a301423da063c74f2fec65fe4bfab3a4af072a0a7c0b6f7d5784ba19ed583823776a3da7695be1354f033d0", + "dest-filename": "unzipper-0.12.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "sha512": "5e7d30dccb6243ace8cf6bc5c9456bb9a08be773bf0f052f90478ebe3faeba5326d019141985a6058572125a996922e163a643d2e95f537681adad9a553e317c", + "dest-filename": "utf8-byte-length-1.0.5.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "sha512": "10f0f9ab5b97c85c49a42acb9c27359c79eade039ae83641a1c008888d93692080ed5089d5424331a802cc891736c5187c3d5d68afff2d3110f318886eb1ed73", + "dest-filename": "util-deprecate-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "sha512": "04d19b58b7ddd1e50f69b8645d4566d23f2ebaf444c93879a2f45afddca8c3f06a01b649c82fb97d4f88cd03b39802b362a6110084a8461750af778867f3d7aa", + "dest-filename": "vary-1.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/vite/-/vite-8.1.2.tgz", + "sha512": "e9860f6d15d3c71e9b45798e9fb5dd9d0032e4340d1e10e0b638431c8d77a1ee2963dde491c746256c691b03a6fbefd68744294210eba48a1532b9abb08e4019", + "dest-filename": "vite-8.1.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.3.tgz", + "sha512": "b9be28907ed9e4a2e36fa843ca3aab197a96b56be861d5372069bf368ae98079dc2a82d309f4486ef961066eebd18b2d21a411625a78c846c5a8370a4b35d24a", + "dest-filename": "vitefu-1.1.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "sha512": "9c4dff2c4c9cd33f3bb8760b65e6ea09439a26bda176db8fa7b050e01a2c5459df96dc6002f306d3c372ad21a53e93945af476edce5f95299815336befc2fd19", + "dest-filename": "vitest-4.1.9.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/wasmoon/-/wasmoon-1.16.0.tgz", + "sha512": "16544b6f5e56c003b3d40f4e4036dfea838a29289e7e2e552b4651176c201fdc64de8e529d4d75b4d3da3a742e021d5472beba730c2f55769e55168575106de6", + "dest-filename": "wasmoon-1.16.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.9.2.tgz", + "sha512": "82c5de726f365103654c1511246baa396cb55b0d3c4b791951caf768e252d363e4d312ed91f7940150b4bb4c6181da271667bcd1e752254209caebcbffbdb9d1", + "dest-filename": "webcrypto-core-1.9.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "sha512": "04b2374e5d535b73ef97bd25df2ab763ae22f9ac29c17aac181616924a8cb676d782b303fb28fbae15b492e103c7325a6171a3116e6881aa4a34c10a34c8e26c", + "dest-filename": "which-2.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "sha512": "244746cc7c3092b6d6a063a5207a90e60b69aca18e7a7a431e9c44f73551d5b59b3ad611c8f3c731ef4568feb1eb50a635a4d385291bd03009b5ee630fe0e6cd", + "dest-filename": "which-5.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "sha512": "a062dee3a308ac246a5fbcad3d47fae84018bdd78c219627dd66a872aa8a640c6b06992a1df2ffaaf4f227f6d3939f80a870a35e6aefdc2116832dfaf3385152", + "dest-filename": "which-6.0.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "sha512": "854ae669605d543731bd8aa7ca1d3dcee9cacd13968db65388dcbc741123912ede8440d089b5c9ed7be59ad6f0b9372552223237e0b25d00f8566928f1f366f3", + "dest-filename": "why-is-node-running-2.3.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "sha512": "6151888f691a98b493c70e8db198e80717d2c2c9f4c9c75eb26738a7e436d5ce733ee675a65f8d7f155dc4fb5d1ef98d54e43a5d2606e0052dcadfc58bb0f5e9", + "dest-filename": "wrap-ansi-7.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "sha512": "9784a9fc346c7a8afdc0be84bd5dbe4ee427eb774c90f8d9feca7d5e48214c46d5f4a94f4b5c54b19deeeff2103b8c31b5c141e1b82940f45c477402bdeccf71", + "dest-filename": "wrappy-1.0.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/ws/-/ws-8.21.0.tgz", + "sha512": "56ca76f1bec345c8a6150bebaaed967a4df3d626310c25aa1d807c42c9e4fd2e117da090ccf18fc8136e563255ddc77a5222ad52da7ab0d33bee05afcdc087fa", + "dest-filename": "ws-8.21.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "sha512": "c8ca8606ab57c9e3757b74c662f80d803559de3f385b873090e5d0b30821a25e803e065669f7fd9676ef37b3076093a25ecbc63d7b634d8244882f49db0bfd12", + "dest-filename": "xmlbuilder-15.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "sha512": "d297c5cde81e0d62472480264cb44fd83c078dd179b3b8e8f6dbb3b5d43102120d09dbd2fb79c620da8f774d00a61a8947fd0b8403544baffeed209bf7c60e7c", + "dest-filename": "y18n-5.0.8.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "sha512": "df074689d672ab93c1d3ce172c44b94e9392440df08d7025216321ba6da445cbffe354a7d9e990d1dc9c416e2e6572de8f02af83a12cbdb76554bf8560472dec", + "dest-filename": "yallist-4.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "sha512": "620bd44dfc2ac9ced45d532b07e4889ac5584a64d2f17fed4abb5d35930898cfa7efe413ae2457c978a6d2606b4d735eab3545d0a5868073de8b2562145acd0f", + "dest-filename": "yallist-5.0.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "sha512": "b55a6c256ec376379c0221696c80757b7ab1210b04e8da0f739fde4ddadb6c80b88742d5b16867a1ade0fa6d87725048ba31f3b31678549540f8652e736fcb07", + "dest-filename": "yargs-parser-21.1.1.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/yargs/-/yargs-17.7.3.tgz", + "sha512": "199b63c66fc9ff84d2c6e2f714d6230a62e4b414e7230feb56629223229e6006699890768a0f556ae082e71b1af3618d29528302aa4e9f7295ccdb74ce6ad4d2", + "dest-filename": "yargs-17.7.3.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "sha512": "a786bd23a5fa9eee888681a606a01c6c9cb59a50b88f6eef10f657f45e0be3fbd94f72f2ab5564147c3f57f3d4701f41ba8f831b7887913d31dd0c9ae7ccdcde", + "dest-filename": "yauzl-2.10.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "sha512": "ad592cbec9cd09d27fa2119ceb180fc3237c7a1782c6c88b33c9b1b84fedfe6395a897b03ee3b59a22e94c74224604ca08b7b12f831e00555a82db3b1e6359d9", + "dest-filename": "yocto-queue-0.1.0.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "sha512": "079f0d18112873c63d31658240697f82af710427b822228cd1adb1ec665d40a396e44c6bf12d56db827a3a03359e32bcc42446bc02482ff3315c77fa4a499029", + "dest-filename": "zimmerframe-1.1.4.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "sha512": "3bf3e07e7a53d712920de4184827d12391b2de13dff7598a543b982d41d924c883169b6f3f8d4c4a75a87e6f1d9c29b4db9e9935f64833b0d2cee48c0059e31c", + "dest-filename": "zod-to-json-schema-3.25.2.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "file", + "url": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "sha512": "83352dfeab7cd675ec14628815c0b76277c4031e4d92e9c27e70e5bee0524854b4d9b717bb82e679ad001485306cb5b158fc7777da7c4b94286ae8ca70d43171", + "dest-filename": "zod-3.25.76.tgz", + "dest": "flatpak-node/pnpm-tarballs" + }, + { + "type": "inline", + "contents": "11", + "dest-filename": "installVersion", + "dest": "flatpak-node/cache/node-gyp/38.8.6" + }, + { + "type": "inline", + "contents": "from __future__ import annotations\n\nimport base64\nimport contextlib\nimport hashlib\nimport json\nimport os\nimport re\nimport sqlite3\nimport struct\nimport sys\nimport tarfile\nimport time\nfrom collections.abc import Mapping\n\n_SANITIZE_RE = re.compile(r'[\\\\/:*?\"<>|]')\n_MAX_LENGTH_WITHOUT_HASH = 120\n\n\ndef _msgpack_pack(obj: object) -> bytes:\n \"\"\"Minimal msgpack packer matching msgpackr with useRecords: true.\n\n msgpackr reserves the byte range 0x40-0x7F for record IDs when useRecords\n is enabled (pnpm's config). Standard msgpack uses 0x00-0x7F for positive\n fixints, but this packer caps them at 0x3F and emits a uint 8 prefix (0xcc)\n for 64-255 to avoid aliasing with record ID bytes.\n \"\"\"\n\n def _pack_int(val: int) -> bytes:\n # Positive fixint capped at 0x3F \u2014 0x40-0x7F are msgpackr record IDs\n if 0 <= val <= 0x3F:\n return val.to_bytes(1, 'big')\n if -32 <= val < 0:\n return val.to_bytes(1, 'big', signed=True)\n if val >= 0:\n if val <= 0xFF:\n return b'\\xcc' + val.to_bytes(1, 'big')\n if val <= 0xFFFF:\n return b'\\xcd' + val.to_bytes(2, 'big')\n if val <= 0xFFFFFFFF:\n return b'\\xce' + val.to_bytes(4, 'big')\n return b'\\xcf' + val.to_bytes(8, 'big')\n if val >= -0x80:\n return b'\\xd0' + val.to_bytes(1, 'big', signed=True)\n if val >= -0x8000:\n return b'\\xd1' + val.to_bytes(2, 'big', signed=True)\n if val >= -0x80000000:\n return b'\\xd2' + val.to_bytes(4, 'big', signed=True)\n return b'\\xd3' + val.to_bytes(8, 'big', signed=True)\n\n def _pack_str(val: str) -> bytes:\n data = val.encode('utf-8')\n length = len(data)\n if length <= 0x1F:\n return (0xA0 | length).to_bytes(1, 'big') + data\n if length <= 0xFF:\n return b'\\xd9' + length.to_bytes(1, 'big') + data\n if length <= 0xFFFF:\n return b'\\xda' + length.to_bytes(2, 'big') + data\n return b'\\xdb' + length.to_bytes(4, 'big') + data\n\n if obj is None:\n return b'\\xc0'\n if isinstance(obj, bool):\n return b'\\xc3' if obj else b'\\xc2'\n if isinstance(obj, int):\n return _pack_int(obj)\n if isinstance(obj, float):\n return b'\\xcb' + struct.pack('>d', obj)\n if isinstance(obj, str):\n return _pack_str(obj)\n if isinstance(obj, dict):\n length = len(obj)\n if length <= 0x0F:\n result = (0x80 | length).to_bytes(1, 'big')\n elif length <= 0xFFFF:\n result = b'\\xde' + length.to_bytes(2, 'big')\n else:\n result = b'\\xdf' + length.to_bytes(4, 'big')\n for key, val in obj.items():\n result += _msgpack_pack(key) + _msgpack_pack(val)\n return result\n if isinstance(obj, (list, tuple)):\n length = len(obj)\n if length <= 0x0F:\n result = (0x90 | length).to_bytes(1, 'big')\n elif length <= 0xFFFF:\n result = b'\\xdc' + length.to_bytes(2, 'big')\n else:\n result = b'\\xdd' + length.to_bytes(4, 'big')\n for item in obj:\n result += _msgpack_pack(item)\n return result\n raise TypeError(f'Unsupported type for msgpack: {type(obj)}')\n\n\nRECORD_HEADER = b'\\xd4\\x72'\n\n\ndef _pack_v11_store_entry(\n files: dict[str, dict[str, object]],\n manifest: dict[str, str] | None = None,\n) -> bytes:\n \"\"\"Encode a store v11 entry using msgpackr-compatible record extensions.\n\n msgpackr with ``useRecords: true, moreTypes: true`` decodes:\n\n - standard msgpack maps (0x80/0xde/0xdf) as JavaScript ``Map`` objects\n (iterable, supports ``for..of``)\n - record extensions (0x72) as plain objects (dot-notation access)\n\n The ``files`` field must be a Map so pnpm can iterate it with ``for..of``.\n Everything else must use record extensions so dot-notation works\n (e.g. ``pkgIndex.algo``, ``info.digest``, ``manifest.name``).\n \"\"\"\n\n def _record(obj: Mapping[str, object], struct_id: int) -> bytes:\n keys = list(obj.keys())\n result = RECORD_HEADER + struct_id.to_bytes(1, 'big')\n result += _msgpack_pack(keys)\n for k in keys:\n result += _msgpack_pack(obj[k])\n return result\n\n def _fixmap(length: int) -> bytes:\n if length <= 0x0F:\n return (0x80 | length).to_bytes(1, 'big')\n if length <= 0xFFFF:\n return b'\\xde' + length.to_bytes(2, 'big')\n return b'\\xdf' + length.to_bytes(4, 'big')\n\n # Pack file entries as records, build files map as standard msgpack map\n files_map_bytes = _fixmap(len(files))\n for fname, finfo in files.items():\n files_map_bytes += _msgpack_pack(fname) + _record(finfo, 0x41)\n\n # Outer store_entry as record (struct_id 0x40)\n store_entry_keys = ['algo', 'requiresBuild', 'files']\n if manifest is not None:\n store_entry_keys.append('manifest')\n\n # Record with fixed entries\n result = RECORD_HEADER + b'\\x40' + _msgpack_pack(store_entry_keys)\n # This is hardcoded to use sha512 per pnpm's behavior, see @pnpm/store.cafs/index and\n # file digest logic below\n result += _msgpack_pack('sha512') # algo\n result += _msgpack_pack(False) # requiresBuild\n result += files_map_bytes # files (standard map \u2192 iterable Map in JS)\n\n if manifest is not None:\n result += _record(manifest, 0x42)\n return result\n\n\ndef populate_store(manifest_path: str, tarball_dir: str, store_dir: str) -> None:\n with open(manifest_path, encoding='utf-8') as f:\n manifest = json.load(f)\n\n store_version = manifest['store_version']\n packages = manifest['packages']\n\n index_db: sqlite3.Connection | None = None\n\n store = os.path.join(store_dir, store_version)\n os.makedirs(os.path.join(store, 'files'), exist_ok=True)\n if store_version == 'v11':\n index_db = sqlite3.connect(os.path.join(store, 'index.db'))\n index_db.execute('PRAGMA busy_timeout=5000')\n index_db.execute('PRAGMA journal_mode=WAL')\n index_db.execute('PRAGMA synchronous=NORMAL')\n index_db.execute('PRAGMA temp_store=MEMORY')\n index_db.execute(\n 'CREATE TABLE IF NOT EXISTS package_index ('\n ' key TEXT PRIMARY KEY,'\n ' data BLOB NOT NULL'\n ') WITHOUT ROWID'\n )\n else:\n os.makedirs(os.path.join(store, 'index'), exist_ok=True)\n\n now = int(time.time() * 1000)\n\n for tarball_name, info in packages.items():\n tarball_path = os.path.join(tarball_dir, tarball_name)\n if not os.path.isfile(tarball_path):\n raise FileNotFoundError(tarball_path)\n\n _process_tarball(\n tarball_path=tarball_path,\n pkg_name=info['name'],\n pkg_version=info['version'],\n integrity=info['integrity'],\n integrity_digest=info['integrity_digest'],\n integrity_algo=info['integrity_algo'],\n store=store,\n now=now,\n tarball_url=info.get('tarball_url'),\n store_version=store_version,\n index_db=index_db,\n )\n\n if index_db is not None:\n index_db.commit()\n index_db.close()\n\n\ndef _process_tarball(\n *,\n tarball_path: str,\n pkg_name: str,\n pkg_version: str,\n integrity: str,\n integrity_digest: str,\n integrity_algo: str,\n store: str,\n now: int,\n tarball_url: str | None = None,\n store_version: str = 'v3',\n index_db: sqlite3.Connection | None = None,\n) -> None:\n index_files: dict[str, dict[str, object]] = {}\n file_digests: dict[str, str] = {}\n real_pkg_name = pkg_name\n real_pkg_version = pkg_version\n\n with tarfile.open(tarball_path, 'r:gz') as tf:\n for member in tf.getmembers():\n if not member.isfile():\n continue\n fobj = tf.extractfile(member)\n if fobj is None:\n continue\n data = fobj.read()\n\n if member.name.endswith('package.json') and member.name.count('/') <= 1:\n with contextlib.suppress(ValueError, TypeError, UnicodeDecodeError):\n pkg_data = json.loads(data.decode('utf-8'))\n if isinstance(pkg_data, dict):\n if 'name' in pkg_data and isinstance(pkg_data['name'], str):\n real_pkg_name = pkg_data['name']\n if 'version' in pkg_data and isinstance(\n pkg_data['version'], str\n ):\n real_pkg_version = pkg_data['version']\n\n digest = hashlib.sha512(data).digest()\n file_hex = digest.hex()\n is_exec = bool(member.mode & 0o111)\n\n cas_dir = os.path.join(store, 'files', file_hex[:2])\n cas_name = file_hex[2:] + ('-exec' if is_exec else '')\n cas_path = os.path.join(cas_dir, cas_name)\n if not os.path.exists(cas_path):\n os.makedirs(cas_dir, exist_ok=True)\n with open(cas_path, 'wb') as out:\n out.write(data)\n if is_exec:\n os.chmod(cas_path, 0o755)\n\n rel_name = member.name\n if '/' in rel_name:\n rel_name = rel_name.split('/', 1)[1]\n\n b64 = base64.b64encode(digest).decode()\n index_files[rel_name] = {\n 'checkedAt': now,\n 'integrity': f'sha512-{b64}',\n 'mode': member.mode,\n 'size': len(data),\n }\n file_digests[rel_name] = file_hex\n\n if store_version == 'v11':\n assert index_db is not None\n # pnpm v11 store index keys use the raw package name (e.g. @scope/pkg),\n # not the filesystem-sanitized form (@scope+pkg), since keys are stored\n # in SQLite, not as filenames.\n raw_pkg_id = f'{pkg_name}@{pkg_version}'\n key = f'{integrity_algo}-{integrity}\\t{raw_pkg_id}'\n\n v11_files: dict[str, dict[str, object]] = {}\n for rel_name, finfo in index_files.items():\n checked_at = finfo['checkedAt']\n assert isinstance(checked_at, int)\n v11_files[rel_name] = {\n 'checkedAt': float(checked_at), # float64 avoids msgpackr BigInt\n 'digest': file_digests[rel_name],\n 'mode': finfo['mode'],\n 'size': finfo['size'],\n }\n\n manifest = None\n if real_pkg_name or real_pkg_version:\n manifest = {\n 'name': real_pkg_name,\n 'version': real_pkg_version,\n }\n\n entry_bytes = _pack_v11_store_entry(v11_files, manifest)\n\n # It's currently not possible to fully determine which store key pnpm will use,\n # so we insert multiple keys to ensure pnpm can find the entry it wants.\n\n index_db.execute(\n 'INSERT OR REPLACE INTO package_index (key, data) VALUES (?, ?)',\n (key, entry_bytes),\n )\n\n if tarball_url:\n url_key = f'{tarball_url}\\t{raw_pkg_id}'\n index_db.execute(\n 'INSERT OR REPLACE INTO package_index (key, data) VALUES (?, ?)',\n (url_key, entry_bytes),\n )\n\n # pnpm looks up git-hosted tarballs (codeload.github.com,\n # bitbucket.org, gitlab.com) and tarballs without integrity by\n # {tarball_url}\\tbuilt(not-built) \u2014 see pickStoreIndexKey in @pnpm/store.index.\n pkgid_key = f'{tarball_url}\\t'\n index_db.execute(\n 'INSERT OR REPLACE INTO package_index (key, data) VALUES (?, ?)',\n (pkgid_key + 'built', entry_bytes),\n )\n index_db.execute(\n 'INSERT OR REPLACE INTO package_index (key, data) VALUES (?, ?)',\n (pkgid_key + 'not-built', entry_bytes),\n )\n else:\n pkg_id = _SANITIZE_RE.sub('+', f'{pkg_name}@{pkg_version}')\n\n index_data = {\n 'name': real_pkg_name,\n 'version': real_pkg_version,\n 'requiresBuild': False,\n 'files': index_files,\n }\n\n idx_prefix = integrity_digest[:2]\n idx_rest = integrity_digest[2:64]\n idx_dir = os.path.join(store, 'index', idx_prefix)\n os.makedirs(idx_dir, exist_ok=True)\n idx_path = os.path.join(idx_dir, f'{idx_rest}-{pkg_id}.json')\n with open(idx_path, 'w', encoding='utf-8') as out:\n json.dump(index_data, out)\n\n # For tarball-URL packages, also create an index entry keyed by the URL hash\n # this is how pnpm looks up tarball deps without integrity\n if tarball_url:\n if store_version == 'v3':\n url_hash = hashlib.sha256(tarball_url.encode()).hexdigest()\n url_idx_prefix = url_hash[:2]\n url_idx_rest = url_hash[2:64]\n url_idx_dir = os.path.join(store, 'index', url_idx_prefix)\n os.makedirs(url_idx_dir, exist_ok=True)\n url_idx_path = os.path.join(\n url_idx_dir, f'{url_idx_rest}-{pkg_id}.json'\n )\n with open(url_idx_path, 'w', encoding='utf-8') as out:\n json.dump(index_data, out)\n else:\n url_dir_name = re.sub(r'[:/]', '+', tarball_url)\n if (\n len(url_dir_name) > _MAX_LENGTH_WITHOUT_HASH\n or url_dir_name != url_dir_name.lower()\n ):\n url_dir_name = f'{url_dir_name[: _MAX_LENGTH_WITHOUT_HASH - 33]}_{hashlib.sha256(url_dir_name.encode()).hexdigest()[:32]}'\n url_idx_dir = os.path.join(store, url_dir_name)\n os.makedirs(url_idx_dir, exist_ok=True)\n url_idx_path = os.path.join(url_idx_dir, 'integrity.json')\n with open(url_idx_path, 'w', encoding='utf-8') as out:\n json.dump(index_data, out)\n\n\nif __name__ == '__main__':\n if len(sys.argv) != 4:\n print(\n f'Usage: {sys.argv[0]} ',\n file=sys.stderr,\n )\n sys.exit(1)\n populate_store(sys.argv[1], sys.argv[2], sys.argv[3])\n", + "dest-filename": "populate_pnpm_store.py", + "dest": "flatpak-node" + }, + { + "type": "inline", + "contents": "{\"packages\":{\"@dagrejs__dagre-3.1.1.tgz\":{\"integrity\":\"zroZB1dFOFiGgv4Xcrn1DckB1o4aOikPqD2NDQPV0WM//CXGcS6xiD0rNkqHmw6FEg4tabt4nxPLwgCWT+Vb2A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ceba1907574538588682fe1772b9f50dc901d68e1a3a290fa83d8d0d03d5d1633ffc25c6712eb1883d2b364a879b0e85120e2d69bb789f13cbc200964fe55bd8\",\"name\":\"@dagrejs/dagre\",\"version\":\"3.1.1\"},\"@dagrejs__graphlib-4.0.5.tgz\":{\"integrity\":\"7xrBTqIts3o+PMUZX97wSc+7TUbW+/rULzGNCTP6yooNVDXbzw4Wutg/H/xOutTB/c/k0YqOAavgPh4/Zk9PFA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ef1ac14ea22db37a3e3cc5195fdef049cfbb4d46d6fbfad42f318d0933faca8a0d5435dbcf0e16bad83f1ffc4ebad4c1fdcfe4d18a8e01abe03e1e3f664f4f14\",\"name\":\"@dagrejs/graphlib\",\"version\":\"4.0.5\"},\"@electron__asar-3.4.1.tgz\":{\"integrity\":\"i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8b8feb34f452f38b74bd245ad87a2b7ab1915d6c85e2f4e17c77acc347667161e9f9cb292bbe3751a9c0d2cb80e50e72f24cd8db2e982abbdb2149faf4108088\",\"name\":\"@electron/asar\",\"version\":\"3.4.1\"},\"@electron__fuses-1.8.0.tgz\":{\"integrity\":\"zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cf1d0422aefc5a563f9416f5b97973899983648e2e6dc09720c278b868d7cd95b49d2d7d4e348f7973c08f3cd398a425254666d126e66613ca3fbb6e4354ac13\",\"name\":\"@electron/fuses\",\"version\":\"1.8.0\"},\"@electron__get-2.0.3.tgz\":{\"integrity\":\"Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"424ce9836b3d1a7555d88d818d192c522e375397bafb369031c8e8272d02f82e68c5a2a5f9f99c9060d016d469669655d0d41e92e659fad1b3ec403d4d59d0b5\",\"name\":\"@electron/get\",\"version\":\"2.0.3\"},\"@electron__get-3.1.0.tgz\":{\"integrity\":\"F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"17e9ca734c56fa455b051845cda3203f2dcac26b8d4d85f57f1ebe171c684a7360c185fa2c3ec02814d6914d0c43a201a1eeddcf4ebd08d911ebbdec3c082409\",\"name\":\"@electron/get\",\"version\":\"3.1.0\"},\"@electron__notarize-2.5.0.tgz\":{\"integrity\":\"jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8cd4fc9f01f57fd5f91842135da43c205fca76c92f2243857c1d82bf0ba6b2f79589dce949cfa6be185331d0064981773be36ae3d949ef2facb0e0d15eed3af8\",\"name\":\"@electron/notarize\",\"version\":\"2.5.0\"},\"@electron__osx-sign-1.3.3.tgz\":{\"integrity\":\"KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"299f26857bd6bf6ac812031b599e32df76c31f250a3179f1e0cd2c4f23cd2bfbdc07cd4899d798f4681dab2d1259b3038266eac90fa98607a387a57747642e4a\",\"name\":\"@electron/osx-sign\",\"version\":\"1.3.3\"},\"@electron__rebuild-4.2.0.tgz\":{\"integrity\":\"RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"44a2ff3be8c6a1724cc6bc7fe7bef5cb59f4c532a616e39818ede0326c32a4133aaec1f4928bb49acc3075703626b848904e31c82eeff6f1a4d27e8d3f380ec5\",\"name\":\"@electron/rebuild\",\"version\":\"4.2.0\"},\"@electron__universal-2.0.3.tgz\":{\"integrity\":\"Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5a7f6c3d8215151165e479b030990044209feeba8afc4bab91f43fac9675e261cfde26138d94883925689c40278567805f0b70ef339e90646573ac93b59d2dfa\",\"name\":\"@electron/universal\",\"version\":\"2.0.3\"},\"@emnapi__core-1.11.1.tgz\":{\"integrity\":\"RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"452bdb4261f374accdb0b61aff01eb6dcdca378b182ca01d3d9c6a88cd87013aaffd2064dbf10d487a6f5c668b38c72c032cf4a68106aa49a62981b739688911\",\"name\":\"@emnapi/core\",\"version\":\"1.11.1\"},\"@emnapi__runtime-1.11.1.tgz\":{\"integrity\":\"vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"be08fb477cb75a0c76e0841a18f03f47a6055cb1d530e674b951322103da5acfab7750337c43179400b6d856303b55e4291e8d3ecabb9946a7747f2821175917\",\"name\":\"@emnapi/runtime\",\"version\":\"1.11.1\"},\"@emnapi__wasi-threads-1.2.2.tgz\":{\"integrity\":\"c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"73de6a39790777274d2a1b1c05379ba840b5095019a72a8e7d57c1cd0d6a833ca5de07de95d5232208036c86600cab072e09ec33e8a01fb4c9fde01ab1a56e30\",\"name\":\"@emnapi/wasi-threads\",\"version\":\"1.2.2\"},\"@esbuild__aix-ppc64-0.28.1.tgz\":{\"integrity\":\"Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4af97bb6af24ff4f3ea7a0973e94634357ca5fed68747fc141b6f8f1f57a7e3dc258786ca083a863cef0d681d79b4a84a6420add97d5829d2179ddd7057cd731\",\"name\":\"@esbuild/aix-ppc64\",\"version\":\"0.28.1\"},\"@esbuild__android-arm-0.28.1.tgz\":{\"integrity\":\"0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d24d85d76f57762a354dd25fcc9f2ccb5438eef503d8d9f07618807fb76b50dd440537cf7f886c142b66320bbfea6f094b3b01ae59958ee74c050a8e7c6f2eb1\",\"name\":\"@esbuild/android-arm\",\"version\":\"0.28.1\"},\"@esbuild__android-arm64-0.28.1.tgz\":{\"integrity\":\"34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"df810611b088020a2c633ea0a0b728a57e8ca3b3721aff6d7f010cdbfec27b655c551939ebc892be788659c517232ef0103475c33a2573172b88556b59873006\",\"name\":\"@esbuild/android-arm64\",\"version\":\"0.28.1\"},\"@esbuild__android-x64-0.28.1.tgz\":{\"integrity\":\"dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"75bc18ee5b523035ac45ab5c4690a7112e05fa29bcf0e094806663cb9dac842ec6a87444fdc625c4d6c1e19e14a49b30a5c738431776a04fee7ccd29eb520a9e\",\"name\":\"@esbuild/android-x64\",\"version\":\"0.28.1\"},\"@esbuild__darwin-arm64-0.28.1.tgz\":{\"integrity\":\"TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4d96d691063b92f4c05db5d44fbb9500247970c1ec0e24b3f73ed92805ff453abf589124dd0c91af4c19a4d8410d7fbfd02b5da9420994e8a875072d6bab58dd\",\"name\":\"@esbuild/darwin-arm64\",\"version\":\"0.28.1\"},\"@esbuild__darwin-x64-0.28.1.tgz\":{\"integrity\":\"zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cdf77380af400813592c8fc2c874cec7cd52c8d6cce985e7eebc52817f7b563ca23e5f56d62e0a6b87e0284084a0508a1a9bc18f9a80ad62068108cec2482c91\",\"name\":\"@esbuild/darwin-x64\",\"version\":\"0.28.1\"},\"@esbuild__freebsd-arm64-0.28.1.tgz\":{\"integrity\":\"wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c06d8403c10d744234aa191264c8dfaab758fb38826023cc9ad6638c8c0e9971639b2cc41e7f94531939a1ff9262c8ed7ecdd5a67942ed02f3488e6163face03\",\"name\":\"@esbuild/freebsd-arm64\",\"version\":\"0.28.1\"},\"@esbuild__freebsd-x64-0.28.1.tgz\":{\"integrity\":\"i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8bb759f6f4209ef482ce2feb6025cd82d17f53e78a64d241ceedde4d06d18079cceed3528b32ce911140977ab355cfcea7fbb96241c76b8a5fff70ce607b612d\",\"name\":\"@esbuild/freebsd-x64\",\"version\":\"0.28.1\"},\"@esbuild__linux-arm-0.28.1.tgz\":{\"integrity\":\"qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a955c1387412f9de58ef6d86c09cc952d38b957ee49b70ab68e686a2b985d690ed3ddd82fe5d521d13e08cbba72c67b9d5287961858a3050f25784b180c4184d\",\"name\":\"@esbuild/linux-arm\",\"version\":\"0.28.1\"},\"@esbuild__linux-arm64-0.28.1.tgz\":{\"integrity\":\"yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c87b3ed2e73cfa7bc401f01fc6b59028ae6979237305ce0f7a070c3b4109da14fbd6e03bbc1f08860d9eefb4763fb486e6e6233db1e52cb9af7b82cb2d109fd2\",\"name\":\"@esbuild/linux-arm64\",\"version\":\"0.28.1\"},\"@esbuild__linux-ia32-0.28.1.tgz\":{\"integrity\":\"d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"775cf866e3f46a3adfcff161193e2fbf6efcad7f0a9cf3c9c7c8b9f80b4aed361bc7d2def45d61cb3bab669904ca39066bd7541a1428c380b5366786beac4ddb\",\"name\":\"@esbuild/linux-ia32\",\"version\":\"0.28.1\"},\"@esbuild__linux-loong64-0.28.1.tgz\":{\"integrity\":\"M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"339b118d4559ae49b53803d1ddd94e63336637e96864a1958b5554406af0baa2dc6d1eaa780cfe7da98c863012787dd854abd9cfecd3d63961fe4782dd18ff96\",\"name\":\"@esbuild/linux-loong64\",\"version\":\"0.28.1\"},\"@esbuild__linux-mips64el-0.28.1.tgz\":{\"integrity\":\"mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"99139b0597878763b170114f584fc58f296446065d62e893477bda4e8ceab8218e1f5e223fda0de31e067bcd42a080d842b5e6231a45ba6241bb932d6699d025\",\"name\":\"@esbuild/linux-mips64el\",\"version\":\"0.28.1\"},\"@esbuild__linux-ppc64-0.28.1.tgz\":{\"integrity\":\"slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b2549c06c3006f71850dc76b0a02f066d3d84681f61ffca8bafd744226724639ac3f8f1fce7a2f796cad4a0088fd1d19714829734661214131e8b1edb3ccab7d\",\"name\":\"@esbuild/linux-ppc64\",\"version\":\"0.28.1\"},\"@esbuild__linux-riscv64-0.28.1.tgz\":{\"integrity\":\"kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"930d28c24d68d061444d42725b48dcd06e18cecd011d99f424367c2514f4f3cbe32585fbefb040b357c31b1002faaf37d6a3acd834c2f7a98db06da8a5d7f2c9\",\"name\":\"@esbuild/linux-riscv64\",\"version\":\"0.28.1\"},\"@esbuild__linux-s390x-0.28.1.tgz\":{\"integrity\":\"/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fe50088d7f1a605441ca187a2f9ad8b4f10346a6bd75eff857f8ee39772d6b97eb8efcd73b8feca84b72cadb1ed20df3645b96bb97033743242f3daa4430f602\",\"name\":\"@esbuild/linux-s390x\",\"version\":\"0.28.1\"},\"@esbuild__linux-x64-0.28.1.tgz\":{\"integrity\":\"u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bbf6a73581769a654e103c0bb67435c0eaf7119f6c4cd18b5abb18198c075b3180dd28bce083a41d795b5930f5341fbdff595c9f079828ee78ba1c59c9d3737c\",\"name\":\"@esbuild/linux-x64\",\"version\":\"0.28.1\"},\"@esbuild__netbsd-arm64-0.28.1.tgz\":{\"integrity\":\"oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a24b340d86cbc1632669a913b026feccbe04f9a1d154ba26f48259380b6131010f8909b27571e4ce2604b06611c74b8d57f22310a18057de352731f4da97e5ab\",\"name\":\"@esbuild/netbsd-arm64\",\"version\":\"0.28.1\"},\"@esbuild__netbsd-x64-0.28.1.tgz\":{\"integrity\":\"aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"69e2fa9409cdf3d1f3e373258751bc0116ac6eea18bd22130c4c74b478796fb8c99c772cb2a823cbd631e37d060e99826ba3b2acaa12d1a3518caba77518b31a\",\"name\":\"@esbuild/netbsd-x64\",\"version\":\"0.28.1\"},\"@esbuild__openbsd-arm64-0.28.1.tgz\":{\"integrity\":\"MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3041497b90b747ca705dd679636d68a3a9bb78f892d1df695ae727f7d3bfc2fc896428682102ab403c4aac6796f05e7e4f4a244c77ac0260de8870d322ad15fd\",\"name\":\"@esbuild/openbsd-arm64\",\"version\":\"0.28.1\"},\"@esbuild__openbsd-x64-0.28.1.tgz\":{\"integrity\":\"i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8bf64b20e69f13467c708fd700d2408b1a092ffb910284b6c4e037adbd3137e28ad0ad7bedc300b10624cc7b41aed31700ab8073b1c681c5a267fb110b537183\",\"name\":\"@esbuild/openbsd-x64\",\"version\":\"0.28.1\"},\"@esbuild__openharmony-arm64-0.28.1.tgz\":{\"integrity\":\"ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"81ef99ec45c536dd813b5a0032c569890f04c27755f62d715deac079320aec0b4fb376ca15740cee7951c4348850831eb9e47508d5f1ab3b4bcdd35e45e28126\",\"name\":\"@esbuild/openharmony-arm64\",\"version\":\"0.28.1\"},\"@esbuild__sunos-x64-0.28.1.tgz\":{\"integrity\":\"BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0448e0b440a42f7bd8f9269243a9f355f8802d4785c696b0ca9f0999fe4fb5885fd54838d0dd61fe1c6586db3e7f516f4af6ab12281dc52dc1952308d8f24b71\",\"name\":\"@esbuild/sunos-x64\",\"version\":\"0.28.1\"},\"@esbuild__win32-arm64-0.28.1.tgz\":{\"integrity\":\"lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"942bfd78afc7e992566c4edb8769f0e78099f4cda7ba907125c4ec764fd04275a47528ca1aec66987f3f196ae54f578c9997e7e1d19c0a346d7b7f7b5aa7d05c\",\"name\":\"@esbuild/win32-arm64\",\"version\":\"0.28.1\"},\"@esbuild__win32-ia32-0.28.1.tgz\":{\"integrity\":\"zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cef6ff981d9b482a093a9a0206060a2a95fa60cea624194151552d563e350e564954407aff408a9516313f9c169750b520b882a00539c19678ab53f7a9e4ba12\",\"name\":\"@esbuild/win32-ia32\",\"version\":\"0.28.1\"},\"@esbuild__win32-x64-0.28.1.tgz\":{\"integrity\":\"bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6e6e0ca30aeff865cc969597fbe11c5f0fe22f2775a37f9b2640b60e4597615be0642a83fdb4a3f5cb59780302ddc2318234554760ee7da8aee183f1af9816d4\",\"name\":\"@esbuild/win32-x64\",\"version\":\"0.28.1\"},\"@hono__node-server-1.19.14.tgz\":{\"integrity\":\"GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1b0b6f82d5f19d6b2e717bdb41791182a92c887d9079ddfb1fdc47668704e6c03737c3bc3bcffc140dee725417c5757373d5c166e10e30aefeaf4d85992a47b7\",\"name\":\"@hono/node-server\",\"version\":\"1.19.14\"},\"@isaacs__fs-minipass-4.0.1.tgz\":{\"integrity\":\"wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c209bd1219768e97aa3f7cf0ffb9a8de4447169e4c10386a01dc32d5f4c69070309e418e56c829bd084bf01e67d6a95bd358d5de7fdb23465f669e65580d64e3\",\"name\":\"@isaacs/fs-minipass\",\"version\":\"4.0.1\"},\"@jridgewell__gen-mapping-0.3.13.tgz\":{\"integrity\":\"2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"da492dffb9e227a32010fc45d1b61d43a7ad65a03e7d0bc370b29c921cb5c8840ecdaa0a8c10634a3eb7fda2d58d8137aa146de5dbccfae5327c283a50a0816c\",\"name\":\"@jridgewell/gen-mapping\",\"version\":\"0.3.13\"},\"@jridgewell__remapping-2.3.5.tgz\":{\"integrity\":\"LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2c8f6effe95a606e03b354c3292256d983eb22571560ec22d9f502eb1078de5b9e0a383157895f7ce0990ad605887e9334e5feb50297c7ded3e082876e1c8711\",\"name\":\"@jridgewell/remapping\",\"version\":\"2.3.5\"},\"@jridgewell__resolve-uri-3.1.2.tgz\":{\"integrity\":\"bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6d12128022233f6d3fb5b5923d63048b9e1054f45913192e0fd9492fe508c542adc15240f305b54eb6f58ccb354455e8d42053359ff98690bd42f98a59da292b\",\"name\":\"@jridgewell/resolve-uri\",\"version\":\"3.1.2\"},\"@jridgewell__sourcemap-codec-1.5.5.tgz\":{\"integrity\":\"cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"71843ddf5d20aeac6e7966e5f96b885086a251a0dc8fb58eab97d58449633558117ce52163d7f2db34ef7e8a96b2779b87c4a5ef45527056c80af2672ca0743a\",\"name\":\"@jridgewell/sourcemap-codec\",\"version\":\"1.5.5\"},\"@jridgewell__trace-mapping-0.3.31.tgz\":{\"integrity\":\"zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cf3351f9275048327373c8e869e3fc410a0242bf0db98c76748232b65d507811191c9f6e5ba85e6ecad881bcfc849c1441aa374d608cb667d5f0dbb5b7038b03\",\"name\":\"@jridgewell/trace-mapping\",\"version\":\"0.3.31\"},\"@malept__cross-spawn-promise-2.0.0.tgz\":{\"integrity\":\"1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d43a4a5346794e196d0708cdc92302d788340a46f28426b3f45921c6a36c648eae00f257152f1c3179412a8dba149f19b96e92f4608c711f483b99365f9ffd16\",\"name\":\"@malept/cross-spawn-promise\",\"version\":\"2.0.0\"},\"@malept__flatpak-bundler-0.4.0.tgz\":{\"integrity\":\"9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f503ad35f7dc385fdcd6c78c0839e37246f747d587706df8b64cbe147a4d28a096d3073fb1c60bc0cb4efa9b721947cc5b4fdbfe7e2a46200b95a14773d3a3ed\",\"name\":\"@malept/flatpak-bundler\",\"version\":\"0.4.0\"},\"@modelcontextprotocol__sdk-1.29.0.tgz\":{\"integrity\":\"zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ce8dfb99903d8495a950b824469a307b07b3d72e8c2f91ac5c93d8f05234b4104277bec712fcdae230ea44a397807367f3aecf5460b24ddceaa73d22ceee598d\",\"name\":\"@modelcontextprotocol/sdk\",\"version\":\"1.29.0\"},\"@napi-rs__wasm-runtime-1.1.6.tgz\":{\"integrity\":\"ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"64bbff25d51f92f3b2f5e0a79c16867e23be5e299b8de6c078ef8c450a83fc1f85475b6744dd2da4a4891d16c4f2c15f4ba6aab1767aed34237f07ecc542d56e\",\"name\":\"@napi-rs/wasm-runtime\",\"version\":\"1.1.6\"},\"@noble__hashes-1.4.0.tgz\":{\"integrity\":\"V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"575249d564d152a1c7ace4a1e7dee151170ca9529518bfde6b792fd204a711db04674ffe5723e084cd6530d19cd34cfb088428ad2bdb2a9b89931bee1dbbdd6e\",\"name\":\"@noble/hashes\",\"version\":\"1.4.0\"},\"@noble__hashes-2.4.0.tgz\":{\"integrity\":\"X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5f95da5566480424fb1c76469b923b6505c3c0b1be6c65ee4ab310016fbb66f97cee1d6499cd5907555244972951fa14ac6429e05928c66e6467e32cf9a5be78\",\"name\":\"@noble/hashes\",\"version\":\"2.4.0\"},\"@oxc-project__types-0.137.0.tgz\":{\"integrity\":\"WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"593f866f6e22f219afa3ce4022fda8118a2e11791194a0254fd59a09add37cb80d08df8686b24e199b8894ca2e021dfc41ee103b1dba794395b2aef4a97af2c0\",\"name\":\"@oxc-project/types\",\"version\":\"0.137.0\"},\"@peculiar__asn1-schema-2.9.4.tgz\":{\"integrity\":\"GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1a3cde3dc4fd230f0dcde38f7fbde2352f7133e4c185dfc58a501f3fe4501a44cc4094d55adcad3772472400828dffc004d6aee52ee64b783e0dcbb199181812\",\"name\":\"@peculiar/asn1-schema\",\"version\":\"2.9.4\"},\"@peculiar__json-schema-1.1.12.tgz\":{\"integrity\":\"coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"72851fba831e201ec1f3f34c7a4c5a0f32e16989a9d0764d3c48d8466f60a11a2ef146480b7cf6d6cd2c2fd016a02c38106f3be90c8ede462b73ad56345f41ff\",\"name\":\"@peculiar/json-schema\",\"version\":\"1.1.12\"},\"@peculiar__utils-2.0.3.tgz\":{\"integrity\":\"+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fa82f71cf151219d52b762b9d255825e28a82204a8c73cfb475277b85ea778edb2975b209a9818e975c91f805da680e4316ce741379817aa1634364b09d43879\",\"name\":\"@peculiar/utils\",\"version\":\"2.0.3\"},\"@peculiar__webcrypto-1.7.1.tgz\":{\"integrity\":\"ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3833a8bf4b0630931fde33e89ce9201aa3e49d3b2ef83750ee40fefa0cfc688f9a14c38c1c56d6000dad6aa5d755374ff8e4ce411ff39c6bd2a6691e23459361\",\"name\":\"@peculiar/webcrypto\",\"version\":\"1.7.1\"},\"@rolldown__binding-android-arm64-1.1.3.tgz\":{\"integrity\":\"DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0d3e99dcf86f8a878732fc68fb11dcdcab6a820ac8ec20935c2982da1ff9cd4969e63562b6fed7132fbdab9ffbbfc228961962a1ac29328f0a834104072ec9d2\",\"name\":\"@rolldown/binding-android-arm64\",\"version\":\"1.1.3\"},\"@rolldown__binding-darwin-arm64-1.1.3.tgz\":{\"integrity\":\"0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d0dc20c2c8ccecbaecb959d730ade4a13a5a80134e865a1cfc13632aa663bf8579cc8e6bd77ab1ebdb95851c7ea39674cb2e07ceafa5a72ed3020506fe872faf\",\"name\":\"@rolldown/binding-darwin-arm64\",\"version\":\"1.1.3\"},\"@rolldown__binding-darwin-x64-1.1.3.tgz\":{\"integrity\":\"YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"62d881a78762b2ee95e7ad25a13e8f8cc76245a5a656f0cdad4ba701a95b885c76820789c31740b2064c72818fd7bbb202c4f0023e55d678a4b319479d54354b\",\"name\":\"@rolldown/binding-darwin-x64\",\"version\":\"1.1.3\"},\"@rolldown__binding-freebsd-x64-1.1.3.tgz\":{\"integrity\":\"yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c83dc49047579362f2a4fc677ff9126478ab6abb08f2070fcdceb64ae92147d5494f2bd5f85f50fc6c5636e0a88dceec5f2b950b80f144685d0cae17f154ac6f\",\"name\":\"@rolldown/binding-freebsd-x64\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-arm-gnueabihf-1.1.3.tgz\":{\"integrity\":\"c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"73ef2f89e41bb03ec73401ca200df8c34189f4579d145b89183fbb13abf3ed0deea8022e80be69e397e196c8f851a02c1e972696aba0056321034fe3ee8d2c22\",\"name\":\"@rolldown/binding-linux-arm-gnueabihf\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-arm64-gnu-1.1.3.tgz\":{\"integrity\":\"50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e748c3d2e5302efbabed9cfd2c7cf5ee46807533e39f9c0df77844823be6605459c2247b649628bd37798a9c962430275cabd9fb081cfbf2246ba770485e4e70\",\"name\":\"@rolldown/binding-linux-arm64-gnu\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-arm64-musl-1.1.3.tgz\":{\"integrity\":\"BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"04ef7ea0f2fc2bda6864905f60fb1736d6233c4e6e337a9e7a14f7685716e0b2133a5fa24aa869d1a6f38d1da758150d8c865e2978c0116059eb85a33681ddeb\",\"name\":\"@rolldown/binding-linux-arm64-musl\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-ppc64-gnu-1.1.3.tgz\":{\"integrity\":\"f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7f75692c1d6f434128e9e72bffa71e90b9ef60c145e18045a151a47e4bcf2ead5b0246c0c076103d92a80261ba389c93731c680be02f7b31b1fd2d686cd0b433\",\"name\":\"@rolldown/binding-linux-ppc64-gnu\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-s390x-gnu-1.1.3.tgz\":{\"integrity\":\"AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"026bab676e8fab1fd123d37583310e0a496429797ddbbca37d7594512d0eecfba1f0044cfce6fca9fac3dea9d692c49c770e9c4ab5b93d21c4f43c8bbbbf8fb4\",\"name\":\"@rolldown/binding-linux-s390x-gnu\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-x64-gnu-1.1.3.tgz\":{\"integrity\":\"JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"249a6ab3c6d11884c339d6e434a9e5a23cc169b6ce1ebaa34af0ebd0856c64e6c4d6505c3e3c48b54118f5e5880dbc5a277706ad73d619f1a42311628e0fd446\",\"name\":\"@rolldown/binding-linux-x64-gnu\",\"version\":\"1.1.3\"},\"@rolldown__binding-linux-x64-musl-1.1.3.tgz\":{\"integrity\":\"rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ad225c7633f1cc0fdbcbfebfad8b3ebfe6d753b523be76d45b3f0c25bea487afa49ea075742aed1e0d2ebbb0bfe216aa26fa9d9181d0e481a7fad087f462d6fe\",\"name\":\"@rolldown/binding-linux-x64-musl\",\"version\":\"1.1.3\"},\"@rolldown__binding-openharmony-arm64-1.1.3.tgz\":{\"integrity\":\"hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"850dff3d89032480a07afbf235c56b8a155eaaaee4d4fa77559f6563e75ab8061424a3be6aea80a6f00d86f475027f41866a982af5b632ed45f6ee035d230bc5\",\"name\":\"@rolldown/binding-openharmony-arm64\",\"version\":\"1.1.3\"},\"@rolldown__binding-wasm32-wasi-1.1.3.tgz\":{\"integrity\":\"Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"12572ffc1b4c2fd957ad5e89b8a21373f82b37691857d823b10a56f097f0e22a0ad133a48c18f27b49e7caa40dcbd49335a236d255cd690051ac3e604a047462\",\"name\":\"@rolldown/binding-wasm32-wasi\",\"version\":\"1.1.3\"},\"@rolldown__binding-win32-arm64-msvc-1.1.3.tgz\":{\"integrity\":\"2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d83ac47e196e1fdca189a140a66b23b23c2b4986cd718d68153cd848fd5ae77e630db57df330856a703ff7a4c151dd220c57311a6c3d411131c06097cf753efe\",\"name\":\"@rolldown/binding-win32-arm64-msvc\",\"version\":\"1.1.3\"},\"@rolldown__binding-win32-x64-msvc-1.1.3.tgz\":{\"integrity\":\"OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"38be0e324ed43d739e54619ddeaa39cc9c8f2258dfe0016093940090f3d2f8ea0bb8e3a8ce1b9a4060b5f0cc554e7c3fd3aabdde04a1009ce5c2748263d62da8\",\"name\":\"@rolldown/binding-win32-x64-msvc\",\"version\":\"1.1.3\"},\"@rolldown__pluginutils-1.0.1.tgz\":{\"integrity\":\"2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"da3f5b1ade4987c863faf3ed8333ed97bda3d324711c0cae9a8a3a4cd7c08ec2c1d3852da52bcf6cf703701331cfb9fef42601d1cd46c501716118368e29aa1b\",\"name\":\"@rolldown/pluginutils\",\"version\":\"1.0.1\"},\"@sindresorhus__is-4.6.0.tgz\":{\"integrity\":\"t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b74f6f48ddcc75fb32087a057134421ff894b46ece2740ac8f307c72302629cfef6bf90881e0c8fd3c6c8a0767704ff86deef7e26d1cbc863035a5788b65ea03\",\"name\":\"@sindresorhus/is\",\"version\":\"4.6.0\"},\"@standard-schema__spec-1.1.0.tgz\":{\"integrity\":\"l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"976685cb98c02e19e21b91e0aab0fa8d72e2feb516acabea37fa89c7aca826c80a85b95577e8aaa94e110976af9bf8cf8adc83a394c2bca327a632a73ab8b2d3\",\"name\":\"@standard-schema/spec\",\"version\":\"1.1.0\"},\"@svelte-put__shortcut-4.2.0.tgz\":{\"integrity\":\"hqNLo4yEc++SLgAkZUvuwMxIAsii9qjQtTuzfcYVf3xRxa+0HFcfaWFK7LdU3l+15s9SYVNbPB0qQj9CHFqSuw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"86a34ba38c8473ef922e0024654beec0cc4802c8a2f6a8d0b53bb37dc6157f7c51c5afb41c571f69614aecb754de5fb5e6cf5261535b3c1d2a423f421c5a92bb\",\"name\":\"@svelte-put/shortcut\",\"version\":\"4.2.0\"},\"@sveltejs__acorn-typescript-1.0.10.tgz\":{\"integrity\":\"4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e167ca93af1e4e287e322243e1f49bc4dec4f2454199330f58750f623be5d8dd2b32ce7760b4d3f3f623294e43b67cf92ea0e397b2c4c3853b9574765b727958\",\"name\":\"@sveltejs/acorn-typescript\",\"version\":\"1.0.10\"},\"@sveltejs__load-config-0.2.0.tgz\":{\"integrity\":\"1LgZ/qUqSoq+QorD83lk2hka79Px0wXNW2q5V1nZlxGhQgw1jrsIbVz5YiCeucVLo4XvFLjXukUaQjIiqowkcg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d4b819fea52a4a8abe428ac3f37964da191aefd3f1d305cd5b6ab95759d99711a1420c358ebb086d5cf962209eb9c54ba385ef14b8d7ba451a423222aa8c2472\",\"name\":\"@sveltejs/load-config\",\"version\":\"0.2.0\"},\"@sveltejs__vite-plugin-svelte-7.1.2.tgz\":{\"integrity\":\"DrUBA2UXRfDmUX/ZTiEopd3X40yavsJF1FX2RygcuIScHL7o5YX1fMvoYnDhjeJQC4weCOklirpNWlcb2NiSeA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0eb50103651745f0e6517fd94e2128a5ddd7e34c9abec245d455f647281cb8849c1cbee8e585f57ccbe86270e18de2500b8c1e08e9258aba4d5a571bd8d89278\",\"name\":\"@sveltejs/vite-plugin-svelte\",\"version\":\"7.1.2\"},\"@szmarczak__http-timer-4.0.6.tgz\":{\"integrity\":\"4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e0101f7f29183a03bee67cc1598c04dd6f74b0180b26850f45659c2fcc25ca233c201f22a49cf750c27d29741dd512905e92a9f13bad9fcd0766d5acbb6bbbeb\",\"name\":\"@szmarczak/http-timer\",\"version\":\"4.0.6\"},\"@tsconfig__svelte-5.0.8.tgz\":{\"integrity\":\"UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"524367c35fe81447de711f32a721c842e5987643ef1e2c1c43bf2c87eca622262817eb9ce47d5405eb5b8f2a93faf806277a9037a9e1b9c26f897e877ac5ad29\",\"name\":\"@tsconfig/svelte\",\"version\":\"5.0.8\"},\"@tybys__wasm-util-0.10.3.tgz\":{\"integrity\":\"F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1777e8d4c62b44960bdf3111d0e50e9a4bad8ebd55a76de6eceb12829ee7ab848fe8ea97e82ff9e971483c09796eddf3681463996ed21b3deeffa2f016961c3a\",\"name\":\"@tybys/wasm-util\",\"version\":\"0.10.3\"},\"@types__cacheable-request-6.0.3.tgz\":{\"integrity\":\"IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"210dc46d3cc6c488a06f5237a8f65cd6b5899c7d019922afe506136a5130c1e16fc810cb4807b6e333f495efe1ca2ede7067d9565215020e0166a6fc581c0aab\",\"name\":\"@types/cacheable-request\",\"version\":\"6.0.3\"},\"@types__chai-5.2.3.tgz\":{\"integrity\":\"Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"330e79f28780f5f15bbfae7fcb8987b570ecf5b3e714c6402ff8f174f154a4e1c72175fdd667201076d2e4b6a1afea7064547c03b19095e456788e9c1850b650\",\"name\":\"@types/chai\",\"version\":\"5.2.3\"},\"@types__d3-color-3.1.3.tgz\":{\"integrity\":\"iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"88ef74b1cb61f5601b9a0bfba20a2ae7b3bd6292a61416e6a04a021c3076c4c058d3efca56ba806820f2084d7a754b2978ebc8c4515123ed2c12da83ab2d9be0\",\"name\":\"@types/d3-color\",\"version\":\"3.1.3\"},\"@types__d3-drag-3.0.7.tgz\":{\"integrity\":\"HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1c4de354a97353d01a31accdb9fa28449e59a5698b22873dd00dfb594d893267aadbcc35150a8266cc07677c51f92bb161fb731eae9653a2891efab12b34f1c5\",\"name\":\"@types/d3-drag\",\"version\":\"3.0.7\"},\"@types__d3-interpolate-3.0.4.tgz\":{\"integrity\":\"mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9a02cf11396ba55575611248825af8133e3b83b6318e5d658fb60ab223026f6ed5247f56f0d54ce816fd77c924a46fee0104b90266c0e3cab6200a2528aa3530\",\"name\":\"@types/d3-interpolate\",\"version\":\"3.0.4\"},\"@types__d3-selection-3.0.11.tgz\":{\"integrity\":\"bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6e1017bb6dc3256b2b238e7169f629910e0db5c28cc169c00bfbcaaddda5fa7c4c16ebce4f75cc613223da8a6ff2fabc00ee5887b41a73f9d278fff7ce34cad3\",\"name\":\"@types/d3-selection\",\"version\":\"3.0.11\"},\"@types__d3-transition-3.0.9.tgz\":{\"integrity\":\"uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b994b9b217f1ccedeb1a5bb4702ddb8e63052ac5eff9299965c829d0a0f6dadb38b865e9e445581b3bbfd1877065e2a675d85c01c718b511092a43df5e466e0a\",\"name\":\"@types/d3-transition\",\"version\":\"3.0.9\"},\"@types__d3-zoom-3.0.8.tgz\":{\"integrity\":\"iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8aa302e3f6251424a53bcfb6222d461869620806385dd786ef8f30e6f4146debe56c3bb4cd28c7ffe8e88e8ad05412bfb1ed23e8350534f0464aa0f76166270f\",\"name\":\"@types/d3-zoom\",\"version\":\"3.0.8\"},\"@types__debug-4.1.13.tgz\":{\"integrity\":\"KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2925609909b33303e59ad9633a899aca847cf56e05ca70808b713c3cfb3bbe60d53def38853faf18f2a425f4e19265ecd31d2301a6bd53cb96f1b6dfc92d9f5b\",\"name\":\"@types/debug\",\"version\":\"4.1.13\"},\"@types__deep-eql-4.0.2.tgz\":{\"integrity\":\"c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"73d87d75554c8a030f7386f04ef0b9771aada8967040f78fb168cf96948e9e88dba2bea91aa764e78d657c0ec0a8542be6907505176ad23b98f5d6fcd41c3217\",\"name\":\"@types/deep-eql\",\"version\":\"4.0.2\"},\"@types__emscripten-1.39.10.tgz\":{\"integrity\":\"TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4c1ffa841918409c6c6474aac9eb8ed49b74001fdb5ba1bbac7b7d83b94c2fb48e17a95b81c1efc3f2ebfbaf62a8dd2ac605cb856292700a27ef724d9e9b6e0f\",\"name\":\"@types/emscripten\",\"version\":\"1.39.10\"},\"@types__estree-1.0.9.tgz\":{\"integrity\":\"GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1a174f832d5e978fc898fd395f4e54c38730dbf33ddc10949a712f599352b650b310a304e05924f98a680393a21cd426a12ec269f6fc5dadcfc9af26d50af37a\",\"name\":\"@types/estree\",\"version\":\"1.0.9\"},\"@types__fs-extra-9.0.13.tgz\":{\"integrity\":\"nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9c49f007efb5bb99550ccd94238735fb947e15868a7da0334b83a87287229a3566de7430dd3bb31f950db2872b71305b8677ab6e5c878f8038f6a5db22265da4\",\"name\":\"@types/fs-extra\",\"version\":\"9.0.13\"},\"@types__http-cache-semantics-4.2.0.tgz\":{\"integrity\":\"L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2f72e08a62c75ed1a45a290a9ec3e0d3f545c7d38665a0be78dd6ee2bf8e0755d1a87de6781200542db3af559d307f911e69d192a962400387349fc4d23fded1\",\"name\":\"@types/http-cache-semantics\",\"version\":\"4.2.0\"},\"@types__keyv-3.1.4.tgz\":{\"integrity\":\"BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"050e5a64d482a63ec3e8ada4b2b4424e62912c4a673ef58388b3dfa06ca167efbc62d88af5dff70c128f260af2df9f57fcfd4f7ebbb2630be7bf0163b8488422\",\"name\":\"@types/keyv\",\"version\":\"3.1.4\"},\"@types__ms-2.1.0.tgz\":{\"integrity\":\"GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1ac0822190c4fe9de2f7abed12ac7eedd054197adcef37922b7c303c721a453852fbd3a15885d1ab3b3877a93549553c83dd43acd456c56506869e4a5d06f654\",\"name\":\"@types/ms\",\"version\":\"2.1.0\"},\"@types__node-22.20.0.tgz\":{\"integrity\":\"QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4169455b6c1fde74e30b5dff0ea46706947864edfa5491ff25506403fbdc9e66d304d40896739bab2a99135b5447bf8d8b6dcb75af11d41c4c7db5d1a42531e6\",\"name\":\"@types/node\",\"version\":\"22.20.0\"},\"@types__node-26.1.0.tgz\":{\"integrity\":\"O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3b40351b7c4f1b2e30ec081074041852543e04a9363a8bf0f1e469a1fca9e4a7416542e76def96a9a39536b9bbd39487a610a21b85c7b000ab4a63eed5ff8a83\",\"name\":\"@types/node\",\"version\":\"26.1.0\"},\"@types__responselike-1.0.3.tgz\":{\"integrity\":\"H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1fff8bf94913577dee7f8f4f1f9a420140553cd8f69c30574cdfaa4b574ec32ca0db897709c89c89c080edc6be1ccbc9059705825e6bf1ef9147a7a5b1be0bcb\",\"name\":\"@types/responselike\",\"version\":\"1.0.3\"},\"@types__trusted-types-2.0.7.tgz\":{\"integrity\":\"ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"49c68f767d5d41cce06e5d101537933a65471542eddfde17260390368c95859eabdaf2e730b25f04f779dd2079d93ff71b7e95235fe0d8c65a5f47300ee5ec7f\",\"name\":\"@types/trusted-types\",\"version\":\"2.0.7\"},\"@types__ws-8.18.1.tgz\":{\"integrity\":\"ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4e1545e83095840f24506cbe69acc543891743b1354f2ec0df2a4539ed0870957c3bf339d751bdf405b6e22acaad6e7a5ade38c86f7e8a3f056aaa011a4b815e\",\"name\":\"@types/ws\",\"version\":\"8.18.1\"},\"@vitest__expect-4.1.9.tgz\":{\"integrity\":\"vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"be5feb62c50a701af74a7427d7aebe5d1e5941c80cc770d084559d7e58bf716a4b9cb5266f166fcab259a2d2c552bca26fe2ed02b60c49327945b439ed9aab94\",\"name\":\"@vitest/expect\",\"version\":\"4.1.9\"},\"@vitest__mocker-4.1.9.tgz\":{\"integrity\":\"EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"115917cc18eb3c633e70af3f00d5a006b91409f25f6f7f3f11f4d23bc87ba56bca9323e4a56c6f47b0640f633222d305eb60bdef3004a2a769522c7047f7be47\",\"name\":\"@vitest/mocker\",\"version\":\"4.1.9\"},\"@vitest__pretty-format-4.1.9.tgz\":{\"integrity\":\"s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b348ae7e7b37888162b5d826f9847b835c21080686b57cf8e7d552f7f3eac8a0c4105818221b07390997808803b980adec37909a2653d107b6380da9e193eee4\",\"name\":\"@vitest/pretty-format\",\"version\":\"4.1.9\"},\"@vitest__runner-4.1.9.tgz\":{\"integrity\":\"KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2972cc0ed73ba1eef4fb79897c6acf5163deb2cc07fb7b13c40300325f031bb23c214413e175bbd7c758e480f7bcf51c9a5bb6ec270a7d8e0fde1dc8dbd48b26\",\"name\":\"@vitest/runner\",\"version\":\"4.1.9\"},\"@vitest__snapshot-4.1.9.tgz\":{\"integrity\":\"Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"25ced1286341a3c676f166089b43627a3e317523c1c917fa994e7c5691d091de99874e6b96703eb708db2b91f2788187c6bcec737989812e37b8cd0264acda20\",\"name\":\"@vitest/snapshot\",\"version\":\"4.1.9\"},\"@vitest__spy-4.1.9.tgz\":{\"integrity\":\"fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7c7a6c4ba9888be3e2116faf71154e3245f5a1268f2a77b754e7254852023dc18e99f2a05cf5398806a1fb070d723db13eb08299fabdf480c67fe1288e186f84\",\"name\":\"@vitest/spy\",\"version\":\"4.1.9\"},\"@vitest__utils-4.1.9.tgz\":{\"integrity\":\"A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"039d68f3298ee4fa6a95636704ff591cf5c3229b8cb532e51928cdee56b8512f8b273a143328708c0e505e59b7f497b18301ca5b85e3b3c67677774b09739eb8\",\"name\":\"@vitest/utils\",\"version\":\"4.1.9\"},\"@xmldom__xmldom-0.8.15.tgz\":{\"integrity\":\"/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ff9355fef0c02d51435e02e67eccbd4d108194ac0ed8b341173a73bdbf62223fa347e79273a0cb618bd539d8af4ff8e6eccb54e9379b62e466cc4388ef0e3450\",\"name\":\"@xmldom/xmldom\",\"version\":\"0.8.15\"},\"@xyflow__svelte-1.6.1.tgz\":{\"integrity\":\"o84RpjWMAs5tXjYPj6PUjMccBgeF4TFA8DllBqMSbnhJD3ZxLhttp4NmdHZAIM1T5bK5NAzCat+M37uT/9+rTw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a3ce11a6358c02ce6d5e360f8fa3d48cc71c060785e13140f0396506a3126e78490f76712e1b6da7836674764020cd53e5b2b9340cc26adf8cdfbb93ffdfab4f\",\"name\":\"@xyflow/svelte\",\"version\":\"1.6.1\"},\"@xyflow__system-0.0.78.tgz\":{\"integrity\":\"lY0z2qP33fUhTva9Vaxrk0lqZta2pkbxB1trHAx1omnJqRtPvDlAQYV2r5fhS6AdpkulYmbNW0svy+A4/t4B/g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"958d33daa3f7ddf5214ef6bd55ac6b93496a66d6b6a646f1075b6b1c0c75a269c9a91b4fbc3940418576af97e14ba01da64ba56266cd5b4b2fcbe038fede01fe\",\"name\":\"@xyflow/system\",\"version\":\"0.0.78\"},\"abbrev-4.0.0.tgz\":{\"integrity\":\"a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6b5c1f97268bd2d1ed25298b48e5726d8872db6bd18a1e1e76e861ae472382b5869d17eb66da2f2761518f1b93b64923e3b3bf6da7f447ce905393ae629cfc7c\",\"name\":\"abbrev\",\"version\":\"4.0.0\"},\"accepts-2.0.0.tgz\":{\"integrity\":\"5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e5cbe0e82b4ac1f81d995a98d562225ca7374356e446a18b8bed96ffa6a8fba63b82efd10b046e021184ce1e41e0a96ccd2b932e0658baa16aa396c89a334a9e\",\"name\":\"accepts\",\"version\":\"2.0.0\"},\"acorn-8.17.0.tgz\":{\"integrity\":\"xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c5141b0dbf419f00da7d8367e95c25f37f436158ea5d86f55d51ad58067591c0dcea2c002f8860dc1d5d665462b8434578ed87e778051b78a7eb6d4074445502\",\"name\":\"acorn\",\"version\":\"8.17.0\"},\"agent-base-7.1.4.tgz\":{\"integrity\":\"MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"32703e613f1fc1f24f801c779bad0c36a6a49b7d173a4c88a07d72ea1b9342f0b43f0646ee48bc35a70b05cacf6cda28f2f119cbb269ba4efe8cc3be094a2f4d\",\"name\":\"agent-base\",\"version\":\"7.1.4\"},\"ajv-8.20.0.tgz\":{\"integrity\":\"Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4e16e58be3a53a3fa230f60505505f2773a60809da4b2367e0cd6fcfd4fa1a46b926df5b6bf1c8479ea3a32eb9b58ea4c7f142179557341f35f58eff194ac118\",\"name\":\"ajv\",\"version\":\"8.20.0\"},\"ajv-formats-3.0.1.tgz\":{\"integrity\":\"8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f2252a979d04511fae51c7514371c3a9ae84572a3776870bf20e5627714d7169aeeb621b90652e7bfa44c8b056f1518a2ae7133e0a9e92ce1f214d43038ca8c1\",\"name\":\"ajv-formats\",\"version\":\"3.0.1\"},\"ansi-regex-5.0.1.tgz\":{\"integrity\":\"quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"aae2505e54d25062f62c7f52517a3c570b18e2ca1a9e1828e8b3529bce04d4b05c13cb373b4c29762473c91f73fd9649325316bf7eea38e6fda5d26531410a15\",\"name\":\"ansi-regex\",\"version\":\"5.0.1\"},\"ansi-styles-4.3.0.tgz\":{\"integrity\":\"zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cdb07dac22404f5adb8e25436f686a2851cd60bc60b64f0d511c59dc86700f717a36dc5b5d94029e74a2d4b931f880e885d3e5169db6db05402c885e64941212\",\"name\":\"ansi-styles\",\"version\":\"4.3.0\"},\"app-builder-lib-26.15.3.tgz\":{\"integrity\":\"2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d959f25a4aac3f9bf95db0612f7b43e52cb1f2234f058b2853b918e12d9fcfbc20f118ff9f3b5628253318a685453bf45f07f7fc7d39f024752afb5dff7951a3\",\"name\":\"app-builder-lib\",\"version\":\"26.15.3\"},\"argparse-2.0.1.tgz\":{\"integrity\":\"8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f3ef56a9e6db173a57f4e47e59ae8edbd6ac22881e44ccdc1ad00835da4c1c7c80835d1fd3969215505b704a867ff3d7c35123019faadbf6c4060dc3beeacadd\",\"name\":\"argparse\",\"version\":\"2.0.1\"},\"aria-query-5.3.1.tgz\":{\"integrity\":\"Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"67f65e3a0565edb712619feefeb8747cea6f129abffcb66675b917c9ceecc95ce33c085f39af5e6ec7534a31010d4e2fb399c2f7c29f76e8f5b85a34ab2113de\",\"name\":\"aria-query\",\"version\":\"5.3.1\"},\"asn1js-3.0.10.tgz\":{\"integrity\":\"S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4b6b3768ecad88a74545dba5c36a8f139d4cce3cd53a2b29a5c56fee354547e2b0d24c70bc5ac371803487b35da9b9a3d0790c2176166a88fb7e58bc920c757a\",\"name\":\"asn1js\",\"version\":\"3.0.10\"},\"assertion-error-2.0.1.tgz\":{\"integrity\":\"Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2338bc45071f7ea09e3558058a02a58b5b2c92521ba479c261ce809275c662807a82b26ac9e6f2ee3bf5d895108264c09c80e76dc935bb192c4f87733773d604\",\"name\":\"assertion-error\",\"version\":\"2.0.1\"},\"async-3.2.6.tgz\":{\"integrity\":\"htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"86d0940e5c72c822cc81a337c578340b42d6db1a9fb90ea9d39a42108b17bb243e6b592860a4ee04ccd13709b26df2e0bc90cc774af52d39f8f84d138ba0b600\",\"name\":\"async\",\"version\":\"3.2.6\"},\"async-exit-hook-2.0.1.tgz\":{\"integrity\":\"NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"356d9c5fc9b543b28f03b6b933650b41e676c11e6a2393c06f0e4bd1438cc5d8a8564f4f319d21d539b264490f62b0af6230e51480aeb0ebb576510a00079707\",\"name\":\"async-exit-hook\",\"version\":\"2.0.1\"},\"asynckit-0.4.0.tgz\":{\"integrity\":\"Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"39e8bd387e2d461d18a94dc6c615fbf5d33f9b0560bdb64969235a464f9bb21923d12e5c7c772061a92b7818eb1f06ad5ca6f3f88a087582f1aca8a6d8c8d6d1\",\"name\":\"asynckit\",\"version\":\"0.4.0\"},\"at-least-node-1.0.0.tgz\":{\"integrity\":\"+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"faafedec492fd440d8da5e8675ae8b2e25f5e2b53d4d5db459ade87de426c0f1596ce328f435eb2db3a315a69c9645ca5a27486a8a7000e6d00eac16b46523aa\",\"name\":\"at-least-node\",\"version\":\"1.0.0\"},\"aws4-1.13.2.tgz\":{\"integrity\":\"lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9477badb3bdb4c1e5e100054562fc0c1587464a63dacc3038669be79ecaeb9441b437f89f9f38d550399ca3f8376bbc3e01637dee6278b2449e142486922807f\",\"name\":\"aws4\",\"version\":\"1.13.2\"},\"axobject-query-4.1.0.tgz\":{\"integrity\":\"qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a888f41bdc196cc18d2e32e68353d3eafda613d007db3967003243ff6b42e84d348609a150e7c407a82b7873c07cb452b9f1ea44e2144e4c3a13e337947d0f4d\",\"name\":\"axobject-query\",\"version\":\"4.1.0\"},\"balanced-match-1.0.2.tgz\":{\"integrity\":\"3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"de849e50ed13315ebb84dd4099b5ec2b8c9aa94eed8e21e56f144364ea47d0a5bdf82797e1b440697d009f1b74b71d8cae94695b041a3f02252121098585393f\",\"name\":\"balanced-match\",\"version\":\"1.0.2\"},\"balanced-match-4.0.4.tgz\":{\"integrity\":\"BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"04bae011c453c17da8ea01b118e08dc8cbc64a9df96287ee633c3d87520c4d198aaadb40659554ebb6dd6fd3ebdaf50703cfa3de2dad25f8cee82ebee26c864c\",\"name\":\"balanced-match\",\"version\":\"4.0.4\"},\"base64-js-1.5.1.tgz\":{\"integrity\":\"AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"00aa5a6251e7f2de1255b3870b2f9be7e28a82f478bebb03f2f6efadb890269b3b7ca0d3923903af2ea38b4ad42630b49336cd78f2f0cf1abc8b2a68e35a9e58\",\"name\":\"base64-js\",\"version\":\"1.5.1\"},\"bluebird-3.7.2.tgz\":{\"integrity\":\"XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5e9363e860d0cdd7d6fabd969e7ef189201ded33378f39311970464ed58ab925efd71515f9acf1026f2375664dd3a413424fb63765c1f6344392f6e6426711b6\",\"name\":\"bluebird\",\"version\":\"3.7.2\"},\"body-parser-2.3.0.tgz\":{\"integrity\":\"2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d9c1a626ea5a36083e414c152c0b9c0ee5aea0c67a117f621c346cc19e65b0d6049b03da4649cc3c22d9cf4ef24f356affcde9e28ff0cdb0d96c1ad3bc619323\",\"name\":\"body-parser\",\"version\":\"2.3.0\"},\"brace-expansion-1.1.18.tgz\":{\"integrity\":\"Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"11d7a9fd7f5f1aa54d9b328156c0d820eb43fb3d6db9ecd5ef42c18dd0acb7d4eabbbea5b27bd1899ea84e27359fefc12305fa4031803bde0f3783764800efb7\",\"name\":\"brace-expansion\",\"version\":\"1.1.18\"},\"brace-expansion-2.1.4.tgz\":{\"integrity\":\"hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8467d5ccfc6d85b7f7fb6ca383f441b3ad1c074161a814bfcef755ff8c27e3f0663746cd30c1cf73857f05b1627aa7f54ca0061801e76387928da8c29747f65e\",\"name\":\"brace-expansion\",\"version\":\"2.1.4\"},\"brace-expansion-5.0.9.tgz\":{\"integrity\":\"ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"49c43822ebc8105d533253fb66dfaf8c9ffff7394f6f64837315b13376e4f2ceade8619d27b28ed5d09c4e274e3c929e3d6df42c4ff6713ef00b23e1a3dfd6c6\",\"name\":\"brace-expansion\",\"version\":\"5.0.9\"},\"buffer-crc32-0.2.13.tgz\":{\"integrity\":\"VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"54ef47b7ffa9dd237b48a5aa72b804ce319b4522584f1f90d694d00b4c2b5aa1f1d2fa49ada43a1ad1f1f2dbdc835ae52b56f2854e6071cc603a08fb0744c391\",\"name\":\"buffer-crc32\",\"version\":\"0.2.13\"},\"buffer-from-1.1.2.tgz\":{\"integrity\":\"E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"13e5d0091c126da6a20a1b6fea4e83c2073e6f1f81b3abee2891c7979928c7f05a29b8625f3a903b02b870edb6c84946a763829a3c15853dc79b18323c69c97d\",\"name\":\"buffer-from\",\"version\":\"1.1.2\"},\"builder-util-26.15.3.tgz\":{\"integrity\":\"q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ab6867ecc6e8da714d9157a43e21c5c7a35fa37854466112ded7c19fe9393eac65d919263f7406a995211ffabd3dc87fe06d3935184f8c39558f53bcab84f1bf\",\"name\":\"builder-util\",\"version\":\"26.15.3\"},\"builder-util-runtime-9.7.0.tgz\":{\"integrity\":\"g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"83f911e76d208801589125d3cdc985de4a90abbc22f05e8de92cde0e066ba9304df951dd9a058ec93743d720fb0004c321dff25cbbee3f7e02c56e3afc1c0277\",\"name\":\"builder-util-runtime\",\"version\":\"9.7.0\"},\"bytes-3.1.2.tgz\":{\"integrity\":\"/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fcd7fb4f2cd3c7a4b7c9124e6ce015efde7aafc72bdbe3a3f000b976df3048fdc1400a1e5f9f0da07c8253c3fccc690d5d2b634d28ba7f33ba174a4175c61b12\",\"name\":\"bytes\",\"version\":\"3.1.2\"},\"bytestreamjs-2.0.1.tgz\":{\"integrity\":\"U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"53567fa1bef557f6d77d5001bcdaff2ae99fe55c9e4110449ba4f16f43d0e92ed5e46a41337c3809bab3ff13c389c479b4dd2ebc389f9e0f02fb9a8409e1b0c9\",\"name\":\"bytestreamjs\",\"version\":\"2.0.1\"},\"cacheable-lookup-5.0.4.tgz\":{\"integrity\":\"2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"dbf90db1c3e1a5cc6b3a280c6736e2585eddcfc8a585bfe72075371326625d65e97aafdabbca89f1585d7ed324b72de7ec68fa1c819a9501bca2204d07700980\",\"name\":\"cacheable-lookup\",\"version\":\"5.0.4\"},\"cacheable-request-7.0.4.tgz\":{\"integrity\":\"v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bfea7aa2782cae9d324c66c95e38313e8c36f832fddc30123f891708329bf3f6f046db7d384177c218209240e418dce0716cb65da1786bc9d98250bbb8496c72\",\"name\":\"cacheable-request\",\"version\":\"7.0.4\"},\"call-bind-apply-helpers-1.0.2.tgz\":{\"integrity\":\"Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4a9d5a6e52748af0e44b38dc68977112e9cde7f5ef92c149dac30115fabac74af285057fd9bfcac057b6d5c329987b4f3928a3f0af7dff049fa04b9339b9ae31\",\"name\":\"call-bind-apply-helpers\",\"version\":\"1.0.2\"},\"call-bound-1.0.4.tgz\":{\"integrity\":\"+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fb2b3df7b53dea9a382b1fc0069042aa103d12ec49690583420ef6f791f8841a61bf72198346e804abb0629b78617a7a319e4099942753fb72313951a5a49e8e\",\"name\":\"call-bound\",\"version\":\"1.0.4\"},\"chai-6.2.2.tgz\":{\"integrity\":\"NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3543d196e39f3a24ca04abd63ed483e0f845bd60aa3a2d01192b4d5ace7b5fd8eced7193a6b4a6168cf9174b56851e163e335e47d8d7a9d0bbfd4a522539e546\",\"name\":\"chai\",\"version\":\"6.2.2\"},\"chalk-4.1.2.tgz\":{\"integrity\":\"oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a0a9db845c91217a54b9ecfc881326c846b89db8f820e432ba173fc32f6463bfd654f73020ef5503aebc3eef1190eefed06efa48b44e7b2c3d0a9434eb58b898\",\"name\":\"chalk\",\"version\":\"4.1.2\"},\"chokidar-4.0.3.tgz\":{\"integrity\":\"Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"420ceef247c1be8f9c038f7ada39cfd4a912e83a29e4d4ba83b4792c5609af86fc51bf783cf417524b02c3d3ef5e87973d145d751342e42d4941447648c1ad9c\",\"name\":\"chokidar\",\"version\":\"4.0.3\"},\"chownr-3.0.0.tgz\":{\"integrity\":\"+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f88c7363d05939077f5ee60f466aef1158c5fe7aa3e64813e2412aed5a1fac3a0cd4cc6846311692b082dc4b4b8b9f5355ac314c09fea2b27015072ba84375fa\",\"name\":\"chownr\",\"version\":\"3.0.0\"},\"chromium-pickle-js-0.2.0.tgz\":{\"integrity\":\"1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d51e45868fa306ad030f276dfbfbc75a3e4a24d24229d01128e0b06547a7f3823906b796a0ba912c0347d54f3b789cb5b620123ed3271aa249ab466c2e844f3b\",\"name\":\"chromium-pickle-js\",\"version\":\"0.2.0\"},\"ci-info-4.3.1.tgz\":{\"integrity\":\"Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"59dcb6220bbc39c069236a5978f679a168cf0b7f2d983571e562945cac252d8900d28ce8f39b0bb0bbe405b067fec65a482305386649d787ef5bdb79fddee474\",\"name\":\"ci-info\",\"version\":\"4.3.1\"},\"ci-info-4.4.0.tgz\":{\"integrity\":\"77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"efb3d2c1eadc09953615ce2c5fde1e17c93c3f1b5ee890302f8fc80992c58c92ea7a0b3b902b80b2aaa3ffbd0d405e93bc3a6016392e6d0076156d9965d76f42\",\"name\":\"ci-info\",\"version\":\"4.4.0\"},\"cliui-8.0.1.tgz\":{\"integrity\":\"BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"05278d9f2bacef90b8fff350f6042dd7f72c4d7ca8ffc49bf9a7cb024cc0a6d16e32ca1df4716890636e759a62fe8415ef786754afac47ee4f55131df83afb61\",\"name\":\"cliui\",\"version\":\"8.0.1\"},\"clone-response-1.0.3.tgz\":{\"integrity\":\"ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"44ea0bf788c91f675454c2f663fe4f10335a48781e39d48389c5324bb8b3705eb71bab1373f1538cbb9be1bf0897d4bc4b46de39f62dd13680e6abc52bec34c0\",\"name\":\"clone-response\",\"version\":\"1.0.3\"},\"clsx-2.1.1.tgz\":{\"integrity\":\"eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7989b441606d52b0566561b4777f3a386030d7a67df793e2395a3607b6e35926c779d1a5e5ed1959aabae6438681448d7ac1080e407d2126d383f24af5d84264\",\"name\":\"clsx\",\"version\":\"2.1.1\"},\"color-convert-2.0.1.tgz\":{\"integrity\":\"RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4511023ec8fb8aeff16f9a0a61cb051d2a6914d9ec8ffe763954d129be333f9a275f0545df3566993a0d70e7c60be0910e97cafd4e7ce1f320dfc64709a12529\",\"name\":\"color-convert\",\"version\":\"2.0.1\"},\"color-name-1.1.4.tgz\":{\"integrity\":\"dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"74ecbedc0b96ddadb035b64722e319a537208c6b8b53fb812ffb9b71917d3976c3a3c7dfe0ef32569e417f479f4bcb84a18a39ab8171edd63d3a04065e002c40\",\"name\":\"color-name\",\"version\":\"1.1.4\"},\"combined-stream-1.0.8.tgz\":{\"integrity\":\"FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1503783117ee25e1dfedc05b04c2455e12920eafb690002b06599106f72f144e410751d9297b5214048385d973f73398c3187c943767be630e7bffb971da0476\",\"name\":\"combined-stream\",\"version\":\"1.0.8\"},\"commander-5.1.0.tgz\":{\"integrity\":\"P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3f40b2b0d0d0eebb55c3840842d9be311c55ebabca152be5b10bc6617656477a855348e530a1d9659830f1efbc0d26a1e140ca32a9e49d10d0cfec6e41743f66\",\"name\":\"commander\",\"version\":\"5.1.0\"},\"compare-version-0.1.2.tgz\":{\"integrity\":\"pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a490e1e7fe30ac49d75ff556459bebb8018793329daf8eb3d753a54cf37e56b0139565a148a7b03422757eeb423b90bb7890779cf305640d4b798b5c15ba19d8\",\"name\":\"compare-version\",\"version\":\"0.1.2\"},\"concat-map-0.0.1.tgz\":{\"integrity\":\"/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fd2aefe1db30c903417e8846a73f68e986f71b3dd2ad40ea047e6b4ee84647b6a1b656d82a7571c366c214c4658da03b1171da5d9f30b07768745bdb9212a6aa\",\"name\":\"concat-map\",\"version\":\"0.0.1\"},\"content-disposition-1.1.0.tgz\":{\"integrity\":\"5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e634421fd67ff8344feeb92f63cdc1fb2188197f7a3987499b39e0aa7c364814b1a8214f774c36926dece626b0a465fc92b9f0486985d055b9361af41df6a2de\",\"name\":\"content-disposition\",\"version\":\"1.1.0\"},\"content-type-1.0.5.tgz\":{\"integrity\":\"nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9d38ea7dc045122a4a7570afe180d05827e670b64a9bcd65745d29028a53bf2ac51956dc47a3ff54001de46ecdfb4b53afc42a894d2d15a743e852b836d27038\",\"name\":\"content-type\",\"version\":\"1.0.5\"},\"content-type-2.0.0.tgz\":{\"integrity\":\"j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8ff3bf77b19c642c8d97bfe1c1901beb4eabcea932bda0dcb4b99c91bc4bcc7bc50734c91ee1847687404dc3f7c884680eb2c790801326ebf36c5969fe48b671\",\"name\":\"content-type\",\"version\":\"2.0.0\"},\"convert-source-map-2.0.0.tgz\":{\"integrity\":\"Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2afa78e7d1eb576144275080b22d4abbe318de46ac1f5f53172913cf6c5698c7aae9b936354dd75ef7c9f90eb59b4c64b56c2dfb51d261fdc966c4e6b3769126\",\"name\":\"convert-source-map\",\"version\":\"2.0.0\"},\"cookie-0.7.2.tgz\":{\"integrity\":\"yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ca48b95e72ae7fbe74979d2e193965b7a90a20b6389d0d5e34841ab685c40726797568272aa6e7aa64eb044e41e0dee5acc24a436cad58c8933b6a34bfa130ff\",\"name\":\"cookie\",\"version\":\"0.7.2\"},\"cookie-signature-1.2.2.tgz\":{\"integrity\":\"D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0fbeae53bdee9525eb0f5517178284d93331555c21b270a07c0c9383d93c3fa2866639572ab38b7b874940a2370718b9c237ac6681572561253560633d931b86\",\"name\":\"cookie-signature\",\"version\":\"1.2.2\"},\"cordis-4.0.0-rc.8.tgz\":{\"integrity\":\"vXaYK6XZJlIFTnODp4Rd973Qnd/gm3cwFzWsMTaeu6cQQheA7N+aA0GqHRNl0cFIrxMXWU8dst1ZXHlUQvfyRw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bd76982ba5d92652054e7383a7845df7bdd09ddfe09b77301735ac31369ebba710421780ecdf9a0341aa1d1365d1c148af1317594f1db2dd595c795442f7f247\",\"name\":\"cordis\",\"version\":\"4.0.0-rc.8\"},\"core-util-is-1.0.3.tgz\":{\"integrity\":\"ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"65006f8b50dca49e060ea6a78ee719d878f7c043b9a590d2f3d0566e472bbddc64b09a2bc140c365a997f65745929f5ac369660432e090e6c40380d6349f4561\",\"name\":\"core-util-is\",\"version\":\"1.0.3\"},\"cors-2.8.6.tgz\":{\"integrity\":\"tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b49b590411c0eaf8c801a17a12721aaba95a0413fd6aafd8de8b9526311fa076d105c1c100761c321ff0f0b0eb9363ef20c32af209a8a5ae43e15f1199baf11b\",\"name\":\"cors\",\"version\":\"2.8.6\"},\"cosmokit-1.8.1.tgz\":{\"integrity\":\"PDBv4l90xZKrUsZ0vtoycgZpO/j4iFsqJXrAxsyBDsnQRI7ZMJXIjgDJsKNjd5L8jnVnnlrDCdhkFbTncgCVjQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3c306fe25f74c592ab52c674beda327206693bf8f8885b2a257ac0c6cc810ec9d0448ed93095c88e00c9b0a3637792fc8e75679e5ac309d86415b4e77200958d\",\"name\":\"cosmokit\",\"version\":\"1.8.1\"},\"cross-spawn-7.0.6.tgz\":{\"integrity\":\"uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b95d903963f69d6ceccb668ca7c69189b862f5d9731791e0879487681f4e893184c834e2249cb1d2ecb9d505ddc966ed00736e6b85c9cd429c6b73b3294777bc\",\"name\":\"cross-spawn\",\"version\":\"7.0.6\"},\"d3-color-3.1.0.tgz\":{\"integrity\":\"zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ce0fdc85b5f2781b4c4352db0ff592a16d83a42dc8d26a663dd5beca74538ffc760c0598ac863ba9e6481e2768cf0576e26e226afaf5e653702302f14663b184\",\"name\":\"d3-color\",\"version\":\"3.1.0\"},\"d3-dispatch-3.0.1.tgz\":{\"integrity\":\"rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"af35323d4fd2eebc147e53322dcd444c37818f4351b8728a01cbee928cf086c86bea0e9ce5df338787368108d8d9b6747577862d67353c5d7be0fdad56f2a17e\",\"name\":\"d3-dispatch\",\"version\":\"3.0.1\"},\"d3-drag-3.0.0.tgz\":{\"integrity\":\"pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a566d424b7444d503c95034979c331a177c7eb1fa63b6510a3cad2999f90ab171bc80de17dea6b160213fff1d6da79470a159e2083304b616afa010046485392\",\"name\":\"d3-drag\",\"version\":\"3.0.0\"},\"d3-ease-3.0.1.tgz\":{\"integrity\":\"wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c11fd72b70f75dc2c8670a5bbd0c10e5f2bef1891db358a9ec0d93c5ed32c6771749dab52fdb24706edb95c79d90e5fe65c83118098b5f516b4466c00f0ce2d3\",\"name\":\"d3-ease\",\"version\":\"3.0.1\"},\"d3-interpolate-3.0.1.tgz\":{\"integrity\":\"3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ddb62cd6b383df7ba8f1aa897ca3f72563c089b830f199b6f8bf6f04a107276460faf89347ba39326bf999972278df854586803965f94890135fa9353d6cfbda\",\"name\":\"d3-interpolate\",\"version\":\"3.0.1\"},\"d3-selection-3.0.0.tgz\":{\"integrity\":\"fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7e64d159b34c9ac996abac4957c0f5f54fe0c3f6f0ac77cd5f1ac837e1df6609f3a931e9f633a628c86c4d48d73899d939d658f50dbccb8c9e6cacea0ca97195\",\"name\":\"d3-selection\",\"version\":\"3.0.0\"},\"d3-timer-3.0.1.tgz\":{\"integrity\":\"ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9dd7c9fc9c7131dde7c37d6ec8aa18da76a2bc5fabdbd57e2dcd2cbd9c5ed49bef2119a2f2152caccbdd3b0812d68eae0479a2cfdd60790d3294f3f46a3d5550\",\"name\":\"d3-timer\",\"version\":\"3.0.1\"},\"d3-transition-3.0.1.tgz\":{\"integrity\":\"ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0292af7e3b1247ab60d3ac6b2f8df80b45b274bafb25ec0107757eff7f51307b1a5d3386d339adfce0177a78393392c19b4a239b126ba68990559d5a3ef04be3\",\"name\":\"d3-transition\",\"version\":\"3.0.1\"},\"d3-zoom-3.0.0.tgz\":{\"integrity\":\"b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6fc02657791f41aa9602e69c6cfb8d6cbeaf6a19ce25f94e85ec4bccc30d2e06badbefe7874273bc9d1a3bfe5ae4c560505192ec7bb53fd3f4de8ddf2640c2cb\",\"name\":\"d3-zoom\",\"version\":\"3.0.0\"},\"debug-4.4.3.tgz\":{\"integrity\":\"RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"446c305a7c10be455f6af295b76d8518bc3ec5849dcc04709b4aeee83853540dee994e6165cdbc57790ee2cb6062bcab4e52e9baf808f468a28e5b408cd6dca8\",\"name\":\"debug\",\"version\":\"4.4.3\"},\"decompress-response-6.0.0.tgz\":{\"integrity\":\"aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"696df9c9933a05bff8a099599dc307d8b0a866d2574d1c444b5eef137868462a305369161da24a1644810e70d1f9c9bd27ef5085799113221fbf4a638bd7a309\",\"name\":\"decompress-response\",\"version\":\"6.0.0\"},\"deepmerge-4.3.1.tgz\":{\"integrity\":\"3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"dec52a6cc11cefb5eaa5d34eec547246883e796de987e19809b8feacafae63244cbb0b15cb4acc895b4f9fe40994a16f58fff53d8a5aa6a627d0c7b6927167f8\",\"name\":\"deepmerge\",\"version\":\"4.3.1\"},\"defer-to-connect-2.0.1.tgz\":{\"integrity\":\"4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e2dbedb5ea571b555a606ad189b93913025dd6de2e76e9d239531d2d200bea621dd62c78dfca0fc0f64c00b638d450a28ee90ed4bd2dc0d706b1dcd2edd1e00e\",\"name\":\"defer-to-connect\",\"version\":\"2.0.1\"},\"delayed-stream-1.0.0.tgz\":{\"integrity\":\"ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"672483ecd7fdd5a2c1d11c4be0a1ab28705797b11db350c098475ca156b05e72c3ed20e1a4d82db88236680920edaed04b8d63c4f499d7ba7855d1a730793731\",\"name\":\"delayed-stream\",\"version\":\"1.0.0\"},\"depd-2.0.0.tgz\":{\"integrity\":\"g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"83b9c7e8fe9dc838a8268800006a6b1a90ad5489898693e4feba02cdd6f77c887ad7fb3f9cfb1f47aa27c8cc2408047f3a50b7c810b49444af52840402cb08af\",\"name\":\"depd\",\"version\":\"2.0.0\"},\"detect-libc-2.1.2.tgz\":{\"integrity\":\"Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"06d8f604e38ef37a375b21f9f5ef0c817b3111055c6ab9143a9118aee6c1d2eaf09cdd74c90dfae2bb22072535d67665a966199b4e62fe87fb8a8e26ce2841b5\",\"name\":\"detect-libc\",\"version\":\"2.1.2\"},\"devalue-5.8.1.tgz\":{\"integrity\":\"4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e025c3611046a8dfb9ef054992e5c1626a405544a0dcbe890106bf0c5aa6db7f06ef7135c2ec9cfc9846409ccdeef51ffc23298586aedb35db7d6cc347969313\",\"name\":\"devalue\",\"version\":\"5.8.1\"},\"dir-compare-4.2.0.tgz\":{\"integrity\":\"2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"db130298ea0cadd4083c776c4dac0409d34fc2554507dcc6733de4ba19813ba537a14f94423b2e7b48bc6b22caa6005c9be85c5cf31548650df5dfa9bc9ebe55\",\"name\":\"dir-compare\",\"version\":\"4.2.0\"},\"dmg-builder-26.15.3.tgz\":{\"integrity\":\"O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3b7cc95055181c92a0ccfaa2a07c5fc730739520b5797092afbf6031204a04fe408238e99abc9d32c30ba2d120f5f009177eaf7549dc6fee27751371a0f76549\",\"name\":\"dmg-builder\",\"version\":\"26.15.3\"},\"dotenv-16.6.1.tgz\":{\"integrity\":\"uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b81ab87a05874dc4eddf76bbdafa521b4cf71e73ee225e8da98713aca120d9ace81329768695b4cea971cacab6a4af47943207c87c9a91e61a627480c1df1ba3\",\"name\":\"dotenv\",\"version\":\"16.6.1\"},\"dotenv-expand-11.0.7.tgz\":{\"integrity\":\"zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cc81f09993d1b21b02769303c95b2a1a68323f4c93f060205d49e4740a098acc6f7f7de4ef23ba3aea0a99c4c6b973d64ac9bc3a1f3c9d989c44b03d634ad478\",\"name\":\"dotenv-expand\",\"version\":\"11.0.7\"},\"dunder-proto-1.0.1.tgz\":{\"integrity\":\"KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"28837f9c3241411717c3430b561644f62407986ebca80548060f42aa65188e64088608a3f54e4c16faea9142f915bb72cb366e39e3add3375e45ee1463b72df8\",\"name\":\"dunder-proto\",\"version\":\"1.0.1\"},\"duplexer2-0.1.4.tgz\":{\"integrity\":\"asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6ac2c555f596b49f746723941ccaa4eff4b6c3682e40ac542368ad8f777dd800c78715126c23068b57f5701709ef13354e8fa913f2a16f0a35cae35b3043ca78\",\"name\":\"duplexer2\",\"version\":\"0.1.4\"},\"ee-first-1.1.1.tgz\":{\"integrity\":\"WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"58cc26f4b851528f9651a44dfaf46e113a86f3d22066985548d91d16079beac4bf1383ab0c837bb78f0201ec121d773a0bc95e7c3f0a29faf9bd8eb56eb425a3\",\"name\":\"ee-first\",\"version\":\"1.1.1\"},\"ejs-3.1.10.tgz\":{\"integrity\":\"UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"51e26615f3ab0104bc38958f678aad807c961316b4f3cfccb4ae54132a091851faedc0c45e4652be23a2291099e178a3d33c48dc9102818b37a0ac7e022cd004\",\"name\":\"ejs\",\"version\":\"3.1.10\"},\"electron-38.8.6.tgz\":{\"integrity\":\"lyBhcVi9QYAZL6FO6r5twAWAjWnYomo3iVDvrb5SJZlq928BGemHOKG0tPIq41NOLaCu9f3XdEEjMkjQPjprRg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9720617158bd4180192fa14eeabe6dc005808d69d8a26a378950efadbe5225996af76f0119e98738a1b4b4f22ae3534e2da0aef5fdd77441233248d03e3a6b46\",\"name\":\"electron\",\"version\":\"38.8.6\"},\"electron-builder-26.15.3.tgz\":{\"integrity\":\"a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6b528ce617aa4b7810099ce2cd7108f118c9cb7415a2050b3dd792927b7beae2c3a41216fc70c6b0c83f5e03f4ae23fa3c8f423ac46f1484ca2860ea03c7c9c4\",\"name\":\"electron-builder\",\"version\":\"26.15.3\"},\"electron-builder-squirrel-windows-26.15.3.tgz\":{\"integrity\":\"Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"25cd7d5cf57dcbdfb66c07593e45ee54d18d204141abda681c2eb597c2afe8574aec3446dfe21cd2b7ab0b40d739a787373f325b47e0fc99c5f0641138e17930\",\"name\":\"electron-builder-squirrel-windows\",\"version\":\"26.15.3\"},\"electron-publish-26.15.3.tgz\":{\"integrity\":\"g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"83fd9b9fc6136af63872e4b917e8ce4bbce665b5d7055f0a67cc8729f26314fa0ab7306aae909d34fc41777b6a741c0fec155dd251b37fb064dacd0a7ac599e1\",\"name\":\"electron-publish\",\"version\":\"26.15.3\"},\"electron-winstaller-5.4.0.tgz\":{\"integrity\":\"bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6cedf2d7462292e53052e0d441133829fc0d90a867a553bb20f75bb2b7a3c0df7f000049cf34d0e06787c32ccd4ab54efad107dff369db9e5adec559a590e3be\",\"name\":\"electron-winstaller\",\"version\":\"5.4.0\"},\"emoji-regex-8.0.0.tgz\":{\"integrity\":\"MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3128d8cdc58d380d1ec001e9cf4331a5816fc20eb28f2d4d1b7c6d7a8ab3eb8e150a8fd13e09ebd7f186b7e89cde2253cd0f04bb74dd335e126b09d5526184e8\",\"name\":\"emoji-regex\",\"version\":\"8.0.0\"},\"encodeurl-2.0.0.tgz\":{\"integrity\":\"Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4349fd1d18b89ba26e188575785966bc907b644571bbddc8accca232c182d25acc24c5b3460c7a586aaec9f4206556f7d6f8468179df98f34d5e6c673a4441ae\",\"name\":\"encodeurl\",\"version\":\"2.0.0\"},\"end-of-stream-1.4.5.tgz\":{\"integrity\":\"ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a2810673a1cfdbac57abf37e18218e4f424a08b0c6aead9b41466b43b832ac989900d27ff180d3c53a5005718c9fe59b2105cd569c96ca69bb2985480909f23a\",\"name\":\"end-of-stream\",\"version\":\"1.4.5\"},\"env-paths-2.2.1.tgz\":{\"integrity\":\"+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fa1d6590b2a164c4d88e8835544a49346ecd64959cb9cd830e4feab2a49345108e5e22e3790d5dd7fb9dad41a1a8cc5480097028d67471fdaea9a9f918bb92d8\",\"name\":\"env-paths\",\"version\":\"2.2.1\"},\"err-code-2.0.3.tgz\":{\"integrity\":\"2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d9b9a546934a0714ff09198f3a5c88490a4d8fea92798bdcca6fee4f4271d9b30e94a2ed4b2d5998bb95c5210a2b2a2bfcde7286fa7f6621b5a04dc311831214\",\"name\":\"err-code\",\"version\":\"2.0.3\"},\"es-define-property-1.0.1.tgz\":{\"integrity\":\"e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7b79d17e07d4678acd18bdb7da05205f4e90372c9ecf4e0a76316b17e2d34683979ab3a014a0e0e0109db235bc1274faf5ea9d606991a49c223d560dac2696de\",\"name\":\"es-define-property\",\"version\":\"1.0.1\"},\"es-errors-1.3.0.tgz\":{\"integrity\":\"Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"65fe47d8ac6ddb18d3bdb26f3f66562c4202c40ea3fa1026333225ca9cb8c5c060d6f2959f1f3d5b2d066d2fa47f9730095145cdd0858765d20853542d2e9cb3\",\"name\":\"es-errors\",\"version\":\"1.3.0\"},\"es-module-lexer-2.2.0.tgz\":{\"integrity\":\"3lGxdTXCLfe1MYfTz1y2ksAAUM4NAOP6rPEjxGJVKO7TZ5+tvHCaQWGpC4Y3IXvW3ece0Cz1cIP4FWBxOnGCTQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"de51b17535c22df7b53187d3cf5cb692c00050ce0d00e3faacf123c4625528eed3679fadbc709a4161a90b8637217bd6dde71ed02cf57083f81560713a71824d\",\"name\":\"es-module-lexer\",\"version\":\"2.2.0\"},\"es-object-atoms-1.1.2.tgz\":{\"integrity\":\"HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1d6701a0de8d8a57aab52c9d2b616a1db4bf2e80ddda9aab9d01cbc89cc18f890ea7f932d8c58c37af78c4e7e42bcfd29d4b16d831fb11fc9597274a0ac9b567\",\"name\":\"es-object-atoms\",\"version\":\"1.1.2\"},\"es-set-tostringtag-2.1.0.tgz\":{\"integrity\":\"j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8fabd6cdfac655fc97c607be3b4c79b21e9cbf10288346bfe1175dd8adfacc2315e5e27effeb4e0278113bc70e0cc3566d545d5659866502f6612df247c6c850\",\"name\":\"es-set-tostringtag\",\"version\":\"2.1.0\"},\"esbuild-0.28.1.tgz\":{\"integrity\":\"HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1eb26bbd9bf96b2c41ccf7f0a613a837393338822589fce4d0a26b18ad9cf11e3e2caa4cb6960b41e51d8e7c235affcb665907da569993ee30efca62f7d0f857\",\"name\":\"esbuild\",\"version\":\"0.28.1\"},\"escalade-3.2.0.tgz\":{\"integrity\":\"WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5948f6aa5c5a42d3b883a3eae5cdbd193716183c9df22b4bf334e58a98040b3dc97ac02288e2a8b5df0953aa2d0773c00a01bac64254c9585ba0c4be6e37bf8c\",\"name\":\"escalade\",\"version\":\"3.2.0\"},\"escape-html-1.0.3.tgz\":{\"integrity\":\"NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3624aea59e0e7ae1b0afaf251887b29bf92c219309a1d506392099fc54a74f172b7a46efaab81d53194938ca628da299563009ad6ac6b3fe89cbc38cbb28fda3\",\"name\":\"escape-html\",\"version\":\"1.0.3\"},\"esm-env-1.2.2.tgz\":{\"integrity\":\"Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"129c6bbfe36bfc268be1970518f24860b585a26f98795d43a8c2c726811df52611c4d6da16bb81c1f117fe49075097f9e63dbe4d46e60dc9ae8a56cfd539971c\",\"name\":\"esm-env\",\"version\":\"1.2.2\"},\"esrap-2.2.13.tgz\":{\"integrity\":\"m8jH5hZgJE2RRUK/jjkGPcJEDAV+dYnZYFkosQaPTcE+Yw4xynXHOo6FUdwaWBtdR3b1MMa7wEDTSHeR2VWsGA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9bc8c7e61660244d914542bf8e39063dc2440c057e7589d9605928b1068f4dc13e630e31ca75c73a8e8551dc1a581b5d4776f530c6bbc040d3487791d955ac18\",\"name\":\"esrap\",\"version\":\"2.2.13\"},\"estree-walker-3.0.3.tgz\":{\"integrity\":\"7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ed150a7d781230c933b7a66e5e6a9aa4ebab2c63cf7e08fa97db9167b9511a896f934cb6ca871cdf92dd731282e4f419767d8332a8a8010d8da1672b4ca9a6ea\",\"name\":\"estree-walker\",\"version\":\"3.0.3\"},\"etag-1.8.1.tgz\":{\"integrity\":\"aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6882f9171ee66b055adf4d1a976067104e2236fa35a844f12eb3c8fe8d392fbcfa828edf0b0d49e844266cae05989d804bb920545fca1195ae7c17dd0a531c3e\",\"name\":\"etag\",\"version\":\"1.8.1\"},\"eventsource-3.0.7.tgz\":{\"integrity\":\"CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0914f5593cae4280fbef5196e7a5c464543f66849f5a27756a52860d832692ddb297c517ad5478a6ca6a58d11ca8abd523383a3c096d5a3c5c4923eb6e803888\",\"name\":\"eventsource\",\"version\":\"3.0.7\"},\"eventsource-parser-3.1.0.tgz\":{\"integrity\":\"kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9097b3163f5814030b78e4728bb6822f12db0f9fea58c427a0c56554fc8722597b96044909cdc95659fd56097d9f0422d1890c9e17464cc367ec2911440a6d32\",\"name\":\"eventsource-parser\",\"version\":\"3.1.0\"},\"expect-type-1.4.0.tgz\":{\"integrity\":\"KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"29f61b9a9466d156cb8c4bd56bdc86c028bd188df8c6f8bb03f1d761640eeb90920f6bb731ccd4252bb05ca148c651ac801422cd5f6ae49f4d1e3e151b49fea4\",\"name\":\"expect-type\",\"version\":\"1.4.0\"},\"exponential-backoff-3.1.3.tgz\":{\"integrity\":\"ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"66011e6578f7d2af88d0437e09b492a48c8f689e475500f5f19d66faed455db01e4fde26af5cf0e74ab8aba8e2882e38ecd97f61370861201fb621aa7adc1708\",\"name\":\"exponential-backoff\",\"version\":\"3.1.3\"},\"express-5.2.1.tgz\":{\"integrity\":\"hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8484b889d5966a2ebd35ecc8751b76c455687da1788fee8834ea4995538b0cef335c6a54544573218935d94522d89ce313358bdc8380c5c4ee6e0cfd3e8d325f\",\"name\":\"express\",\"version\":\"5.2.1\"},\"express-rate-limit-8.5.2.tgz\":{\"integrity\":\"5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e4a6f7e22a4d5faf780c7e3cbcdf62ada935431df49dbd0f2d81d77c9830e18123882dd91266498703a9f957e2098c05cef153741f50900ad84b99176b6731d8\",\"name\":\"express-rate-limit\",\"version\":\"8.5.2\"},\"extract-zip-2.0.1.tgz\":{\"integrity\":\"GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"183854f67b70b8ac865dd6415204c87bebd79d68f47e9a5412d3032f4fa275de52b5af131a91ecb27fdebac03d9ab3ebf6a343ca6e92c406198cdbc29fff5106\",\"name\":\"extract-zip\",\"version\":\"2.0.1\"},\"fast-check-4.8.0.tgz\":{\"integrity\":\"GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"18e275e7c09432737a7126a1b2fe3e131011bc80eecf38a7163929d04f56b6205ae7371578ba3356459a13823315c73e638f16a7510395466c5d1c80ced41c4a\",\"name\":\"fast-check\",\"version\":\"4.8.0\"},\"fast-deep-equal-3.1.3.tgz\":{\"integrity\":\"f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7f7a90f68432f63d808417bf1fd542f75c0b98a042094fe00ce9ca340606e61b303bb04b2a3d3d1dce4760dcfd70623efb19690c22200da8ad56cd3701347ce1\",\"name\":\"fast-deep-equal\",\"version\":\"3.1.3\"},\"fast-uri-3.1.3.tgz\":{\"integrity\":\"i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8bbd0bc0659476e5eace270a5d6b21a28abeb162f52b7594539aca64d1bfd22ddad4e4a85f71ea847e566d6c139aa59fa2be2ead46a418f89141c95e4594f03a\",\"name\":\"fast-uri\",\"version\":\"3.1.3\"},\"fd-slicer-1.1.0.tgz\":{\"integrity\":\"cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"704d6ab01fd5c32428cd9faad5d1b147c2c160d65ea1f84475434648c6d00f71b0da50335fd65bdee214e846dcfc59b28e8f405967e79f4014087aad7afb3ff2\",\"name\":\"fd-slicer\",\"version\":\"1.1.0\"},\"fdir-6.5.0.tgz\":{\"integrity\":\"tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b486d8b596ee70eb340511aa3c992c84951874bf920c7edd54cf208f2f84469dd60148cb105244fb4da46a7c87b708d63a7c2b298062c0098cd29e242c90275e\",\"name\":\"fdir\",\"version\":\"6.5.0\"},\"filelist-1.0.6.tgz\":{\"integrity\":\"5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e608b2d8f90b618d5c3f7f69d7b11c87edb19694d12fd1cbb2939f1209b42fa0b005705382c2b9a2ed09b7362e7a9c64690fedbe1085209e6e5e8d0eaccd83c4\",\"name\":\"filelist\",\"version\":\"1.0.6\"},\"finalhandler-2.1.1.tgz\":{\"integrity\":\"S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4bc2a866045937e6b9acdc2a4f195965e3e34ffe1c9e6d11395ef42de7511d9d29f2ef5f4480f484951942990a2f3ae8f0b7e60bcb31db76d8ead54dc6ff2940\",\"name\":\"finalhandler\",\"version\":\"2.1.1\"},\"form-data-4.0.6.tgz\":{\"integrity\":\"vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bca6ad021e129557e06eff98b66862463844309b18a6c1b5636acc42d47e49549bcadb120f5606cc321cac026674579cf3cbbff95a069b19e5fbcd202f5b5109\",\"name\":\"form-data\",\"version\":\"4.0.6\"},\"forwarded-0.2.0.tgz\":{\"integrity\":\"buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6ee446d1fa41b511d24c238049eea10f6e7cb44b9b16844b6f864d03a3713151cdc3680e7301e8f70c9a6e5ccccce039cfdc40f4bd4a36393f36de8c4fd698a3\",\"name\":\"forwarded\",\"version\":\"0.2.0\"},\"fresh-2.0.0.tgz\":{\"integrity\":\"Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"471fd6c9c67ad0739aa8b2808ba70744a288ef3c566c9df53219ed9adc0ca1a4de17b5c51fd861069f2f21368c89d7e58d143a7985822a46932beca45491cfd8\",\"name\":\"fresh\",\"version\":\"2.0.0\"},\"fs-extra-10.1.0.tgz\":{\"integrity\":\"oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a115c0a6ae78113463e1e3221731a71d61b2fb3a39adab9d8eec4dd1bf07eecfd1536a16d16becc7d3b400244dfe446af44f15bbf45eb24181e68de38be1731d\",\"name\":\"fs-extra\",\"version\":\"10.1.0\"},\"fs-extra-11.3.1.tgz\":{\"integrity\":\"eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"797bc61b067908bd7b652c0759dddb6e093b514a45e88147b4fe7b35861a90fbc73acf060e00dee4a248dfa8c82730e427a7898eecd103c78141be9290ab9ed2\",\"name\":\"fs-extra\",\"version\":\"11.3.1\"},\"fs-extra-11.4.0.tgz\":{\"integrity\":\"EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"110b05ccc509902286af578faa56000e42149875b5b37657af962acbac1b1ab7d40a986997699a33f932388440d87a4fdc06854136570f895d8de93e9dc71d74\",\"name\":\"fs-extra\",\"version\":\"11.4.0\"},\"fs-extra-7.0.1.tgz\":{\"integrity\":\"YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6090da0896449c199c6f0d777ef74033d03034e2703b3ac4e29a8ca81ab99c5884a9752a1f094ae01fb7a54c3a24dbdf48fb57d39c451ed632ff59e2d357860b\",\"name\":\"fs-extra\",\"version\":\"7.0.1\"},\"fs-extra-8.1.0.tgz\":{\"integrity\":\"yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ca1950800ea69ce25428eb11505b2025d402be42a1733f2d9591b91c141f45e619cb8e8ec0b718f9989ad26b5d1ec3a8f72fe13fe0b130dd1353d431a0eb46e2\",\"name\":\"fs-extra\",\"version\":\"8.1.0\"},\"fs-extra-9.1.0.tgz\":{\"integrity\":\"hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"85c8376667a94b7d3fec1485a91be8a370ce310bbb223ab13b99c20edfb333d5d68dbdf75a0ef388d4fe42fa9bb9cdfe816a733b4d89b9b5729361b866fa3539\",\"name\":\"fs-extra\",\"version\":\"9.1.0\"},\"fs.realpath-1.0.0.tgz\":{\"integrity\":\"OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"38ed291f694ae9ad2166701d6aee48b731cf23aa5496f23b8cc567c54411b70e28c05db093c94e49a6ed1830933f81a0ae0d8c6c69d63bd5fc2b5b78f9f18c0f\",\"name\":\"fs.realpath\",\"version\":\"1.0.0\"},\"fsevents-2.3.3.tgz\":{\"integrity\":\"5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e71a037d7f9f2fb7da0139da82658fa5b16dc21fd1efb5a630caaa1c64bae42defbc1d181eb805f81d58999df8e35b4c8f99fade4d36d765cda09c339617df43\",\"name\":\"fsevents\",\"version\":\"2.3.3\"},\"function-bind-1.1.2.tgz\":{\"integrity\":\"7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ed71cdc47eea5fdc46e66230c6486e993a31fcc21135c3a00ebc56b0cb76a40af6dd61e9e8cad194dec50521690a9afea153b417be38894811f369c931f1b648\",\"name\":\"function-bind\",\"version\":\"1.1.2\"},\"get-caller-file-2.0.5.tgz\":{\"integrity\":\"DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0f214fdc133fdd81d340e0942ffc343991d1d25a4a786af1a2d70759ca8d11d9e5b6a1705d57e110143de1e228df801f429a34ac6922e1cc8889fb58d3a87616\",\"name\":\"get-caller-file\",\"version\":\"2.0.5\"},\"get-intrinsic-1.3.0.tgz\":{\"integrity\":\"9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f5f4a349aa2cfdf448548a7ec5226513a95fc21112ecb36d29a08121a987b23af69dad418800493e8d263a38f3f062435116ab9823c6a9a89583999f8dbf7c09\",\"name\":\"get-intrinsic\",\"version\":\"1.3.0\"},\"get-proto-1.0.1.tgz\":{\"integrity\":\"sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b1349f063a17069f3d26f20a21e7eac3b53608279bb1cef892263a6b0886a202ada1219b823604fc6ffe97db05dcc5853cd73d21ca0e0b83837ca1dfc459a9d2\",\"name\":\"get-proto\",\"version\":\"1.0.1\"},\"get-stream-5.2.0.tgz\":{\"integrity\":\"nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9c117e175ac06550aefe9eeb8f3800f986f895f617ae997b6ba56626b53cc05f48d422af3ff4303cd6479ce9706d3918e9dbed148cc5312c905db2e84d03d1a4\",\"name\":\"get-stream\",\"version\":\"5.2.0\"},\"glob-7.2.3.tgz\":{\"integrity\":\"nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9c5474ccba54d9809a471c28089bcbe94bc21f6245c85548bf04cbb087f6d40b8794cb240358614dd93e2e5609b4e958b7dbfa76fb330f604646a04bfa240af5\",\"name\":\"glob\",\"version\":\"7.2.3\"},\"gopd-1.2.0.tgz\":{\"integrity\":\"ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"65429187afe4505a0089302d4d83d9277870f70371c7e04804e8a39e51bd3e7ac9b027128ecd70cb20fabc9a5a62d827cc3aca6114aa7f738ee917daf77c6c46\",\"name\":\"gopd\",\"version\":\"1.2.0\"},\"got-11.8.6.tgz\":{\"integrity\":\"6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ead7d9f756ceafb6ce5e72bb3d10c21812dad47e14d3cd181cd6804362ac30694b13345b938e27b1917613521e45cdefb491cf55b2826207456da18eda58ddf2\",\"name\":\"got\",\"version\":\"11.8.6\"},\"graceful-fs-4.2.11.tgz\":{\"integrity\":\"RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"45b279fe398570d342703579a3d7939c12c9fc7b33595d0fef76dcf857f89d2feb263f98692e881b288e2f45680585fe9755ab97793ade1fcaac7fa7849d17bd\",\"name\":\"graceful-fs\",\"version\":\"4.2.11\"},\"has-flag-4.0.0.tgz\":{\"integrity\":\"EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1329094ff4352a34d672da698080207d23b4b4a56e6548e180caf5ee4a93ba6325e807efdc421295e53ba99533a170c54c01d30c2e0d3a81bf67153712f94c3d\",\"name\":\"has-flag\",\"version\":\"4.0.0\"},\"has-symbols-1.1.0.tgz\":{\"integrity\":\"1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d5c0cd77027625aa2199bdec8383a629a301c2e0b8f2c6278b91d4c360efb02f0b8c64cb2bd87e79bd57e91cae3877b8853d142c25baf22a26863528294aa53d\",\"name\":\"has-symbols\",\"version\":\"1.1.0\"},\"has-tostringtag-1.0.2.tgz\":{\"integrity\":\"NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"36a00307c5633c52ccd95d15bc751ec30c2cc3465605a21d828fa2787b4ade16ac2f3e2a78246361ca9f07a010ac182044aa69285f0be76fd5a9d56c3b8ec397\",\"name\":\"has-tostringtag\",\"version\":\"1.0.2\"},\"hasown-2.0.4.tgz\":{\"integrity\":\"T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4f651b7db044177db089ea5722c3254d6f7e743602eb0321fedfef600e2db8e30aa96cff9f7bebd4d152c508b23fece4da65eca0c03f8bfeea57a2cabadd6dd4\",\"name\":\"hasown\",\"version\":\"2.0.4\"},\"hono-4.12.27.tgz\":{\"integrity\":\"1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d72adbffec3a1d6409ad408b909d881798cd20fbef1646e557944d39897a6d5f8e03aa7d18b70ca47145193a2c4af1ef7005226ee52e911aa1958238cf7d82ed\",\"name\":\"hono\",\"version\":\"4.12.27\"},\"hosted-git-info-4.1.0.tgz\":{\"integrity\":\"kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9320ae10e5a326a66e0db447ccbf15f77373421c0807bd681564b2cd5a3e28f648fa99d03cfc6e71d92b399be42d19eb7f9511b1033e209d3d0f0dbd71100b20\",\"name\":\"hosted-git-info\",\"version\":\"4.1.0\"},\"html-to-image-1.11.13.tgz\":{\"integrity\":\"cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"72e38fa08ed6029ca10449534dbf68aac6b046f674ac785a1f082144b953b9f7e80f50766837a6942aee2de66b50821dbc6ee0b3dc5e10b10f9ba3e1b804aaae\",\"name\":\"html-to-image\",\"version\":\"1.11.13\"},\"http-cache-semantics-4.2.0.tgz\":{\"integrity\":\"dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"753c5cbcf5ea3ef5c1429ab9754afa9843095f8a08105bfa6f0a26dc50f02910ecb888e324600daa106ea009fd73545024874029abf7dc40fae44db2b3ef3b41\",\"name\":\"http-cache-semantics\",\"version\":\"4.2.0\"},\"http-errors-2.0.1.tgz\":{\"integrity\":\"4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e056d17405fe6d2766a3801416e4b458d88fcfc36016dfabf138603569a5ae3423b7543b651f7ecd395c7b6f39f71e0a497af022c69e4ea0e82909ad3fca4b99\",\"name\":\"http-errors\",\"version\":\"2.0.1\"},\"http-proxy-agent-7.0.2.tgz\":{\"integrity\":\"T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4f58240226180d6631dd5e419b2bbb1dc7dcbcbee652b4d688ceb239f6b73c8a6156227f8053dbbe2750faf7aa48e1dc8bf3f105c0da6de50d0b3a4e3832598a\",\"name\":\"http-proxy-agent\",\"version\":\"7.0.2\"},\"http2-wrapper-1.0.3.tgz\":{\"integrity\":\"V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"57edb7b0332bd765a7cfb893703789af73ba008c659ef4ff6e66800003ff5dd6b7e42f74a7de7df69d05d5e1d1fcdd4a20b592a1654088e3058c105769748cc6\",\"name\":\"http2-wrapper\",\"version\":\"1.0.3\"},\"https-proxy-agent-7.0.6.tgz\":{\"integrity\":\"vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bcaf4fe7f8947dd97de4023e255c94b88715b5de287efb6b3abdc736d336cb10bd6e731b11da77c74d4e8503678dbf082588b7f159531379815f071fbf2c2e4b\",\"name\":\"https-proxy-agent\",\"version\":\"7.0.6\"},\"iconv-lite-0.7.2.tgz\":{\"integrity\":\"im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8a6f438c40d0e79b3d7cbe04633380bf4c8caa6301499a7a1b456f1724cc3ca5b1892047523f4d5bfaaa2e65d4c17aeb33b02fa9295309fbea45bd1c33cc98ab\",\"name\":\"iconv-lite\",\"version\":\"0.7.2\"},\"inflight-1.0.6.tgz\":{\"integrity\":\"k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"93dd88fdbd3cab8c2f16c71708bbea7ec1c2ae3ac5ef2897b10b8856f544ecdf365b7f9aaa9cee51d05b7e159ccbf159477ff82207e532028b3acbcf0eb18224\",\"name\":\"inflight\",\"version\":\"1.0.6\"},\"inherits-2.0.4.tgz\":{\"integrity\":\"k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"93fbc6697e3f6256b75b3c8c0af4d039761e207bea38ab67a8176ecd31e9ce9419cc0b2428c859d8af849c189233dcc64a820578ca572b16b8758799210a9ec1\",\"name\":\"inherits\",\"version\":\"2.0.4\"},\"ip-address-10.2.0.tgz\":{\"integrity\":\"/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ffe4ba8f813d007bd6f5258c48463d5dfcbae8ee4f5af544274f0ed32e491b210a429a236f42b418aa73fefe4727f1b4be2dc3dac8c62bbf35d7da1765e134a8\",\"name\":\"ip-address\",\"version\":\"10.2.0\"},\"ipaddr.js-1.9.1.tgz\":{\"integrity\":\"0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d0a23feb4ef1a31493a07ec68cdd457d26cba14d3e6ed4e2723b1049642587f859ca437c2a998c7fbb98c0f5b747e6a467a47fc35f199574870585e26143cede\",\"name\":\"ipaddr.js\",\"version\":\"1.9.1\"},\"is-fullwidth-code-point-3.0.0.tgz\":{\"integrity\":\"zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cf29a6e7ebbeb02b125b20fda8d69e8d5dc316f84229c94a762cd868952e1c0f3744b8dbee74ae1a775d0871afd2193e298ec130096c59e2b851e83a115e9742\",\"name\":\"is-fullwidth-code-point\",\"version\":\"3.0.0\"},\"is-promise-4.0.0.tgz\":{\"integrity\":\"hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"86fa6823a928ae124c9de8f6f3975283a9eed7e7babb1b3bcc6dc16009b96f2a83b2024d5b0c7333acfa8998808104784c9df42660533b0a99530dd69721f701\",\"name\":\"is-promise\",\"version\":\"4.0.0\"},\"is-reference-3.0.3.tgz\":{\"integrity\":\"ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8b1909a2a42f00ff3c13ac0bc9d2c61aa089b2b1549eaa07e879da73307c5e60c7d6869653ec71769b6f8a44e068486d679dcacba617881b942365972cc0b08f\",\"name\":\"is-reference\",\"version\":\"3.0.3\"},\"isarray-1.0.0.tgz\":{\"integrity\":\"VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"54b82121634ce842d0ce8ef3c26720d0d99357258a623bc878cf37ca3a74c110d39949eb33aefc7d06dc281a3a9f6089105d2cce81bfff2b60f932a56bcf402d\",\"name\":\"isarray\",\"version\":\"1.0.0\"},\"isbinaryfile-4.0.10.tgz\":{\"integrity\":\"iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"887aea7b9b21bc151c15b999abdcce40706878e85926ee91406ac3a4181e9d49bf026f85dc9336320423fab2b767ad357f3acbe602d95ad00f1f638169255ccb\",\"name\":\"isbinaryfile\",\"version\":\"4.0.10\"},\"isbinaryfile-5.0.7.tgz\":{\"integrity\":\"gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"827583d78261dc5cd2dc23e117403134e27c0b1a9e6e53d3003cc8dfcaf4c2df19c9097979da72ef99b2b74f041b6a0abe9ca2a92aacc7e5a4cfdbed91b4ea61\",\"name\":\"isbinaryfile\",\"version\":\"5.0.7\"},\"isexe-2.0.0.tgz\":{\"integrity\":\"RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"447c4c2e9f659ca1c61d19e0f5016144231b600715a67ebdb2648672addfdfac638155564e18f8aaa2db4cb96aed2b23f01f9f210d44b8210623694ab3241e23\",\"name\":\"isexe\",\"version\":\"2.0.0\"},\"isexe-3.1.5.tgz\":{\"integrity\":\"6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e81ded2ed16ab504b87a46abbcb54c67e5fe565bd07a46dee2d69491ffeb8553b777f874336adf0119bfa572dc3c4b238ccb0582b1604ab85023171256b073f3\",\"name\":\"isexe\",\"version\":\"3.1.5\"},\"isexe-4.0.0.tgz\":{\"integrity\":\"FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"14552d64ca6867c46a1d2dd77971261d62c0e2d847f99c42bf694e88f227d5773b0b1aea856ccd483cc3fbf7214bfcdb61ece68b058b7500b4f497502a6b613b\",\"name\":\"isexe\",\"version\":\"4.0.0\"},\"jake-10.9.4.tgz\":{\"integrity\":\"wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c291d8ce1c625502fe215d3904b1365e7df8cd6d52db6de1be3b6a934fa0b0faf077ff0934b5c981964cfe23c5b18735c72a6117ee8ce84bdd13913d3011a40c\",\"name\":\"jake\",\"version\":\"10.9.4\"},\"jiti-2.7.0.tgz\":{\"integrity\":\"AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"002ffb2687c9bd91abae779635a12725e38b531f89946b7bb4d6b4c198913d3e0c635c267ca8eddbee8eda9daecf6fac92597c39966624c36a7a47bb90a6cd81\",\"name\":\"jiti\",\"version\":\"2.7.0\"},\"jose-6.2.3.tgz\":{\"integrity\":\"YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"61854322740a1497d1ff16b7a2351397c7362a84f088bd51e5683d602c9dc07d31d01f60adbce58391c2ee63230ad5098db43f627184648848e6d0a07d36f81f\",\"name\":\"jose\",\"version\":\"6.2.3\"},\"js-yaml-4.3.2.tgz\":{\"integrity\":\"SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"48534ebd227e0e07fff409fdd38631f828129483c2908a5aa38aa8e7596979edb94c845e8dd1f7ae1478119306a0dc77fd33f73bec335ae893165e2ca9b96dcc\",\"name\":\"js-yaml\",\"version\":\"4.3.2\"},\"json-buffer-3.0.1.tgz\":{\"integrity\":\"4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e1b57905f4769aa7d04c99be579b4f3dd7fe669ba1888bd3b8007983c91cad7399a534ff430c15456072c17d68cebea512e3dd6c7c70689966f46ea6236b1f49\",\"name\":\"json-buffer\",\"version\":\"3.0.1\"},\"json-schema-traverse-1.0.0.tgz\":{\"integrity\":\"NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"34cf3f3fd9f75e35e12199f594b86415a0024ce5114178d6855e0103f4673aff31be0aadaa9017f483b89914314b1d51968e2dab37aa6f4b0e96bb9a3b2dddba\",\"name\":\"json-schema-traverse\",\"version\":\"1.0.0\"},\"json-schema-typed-8.0.2.tgz\":{\"integrity\":\"fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7d08685dd72f737576f31ec2ec132ce0fe7e90d96051445eda39944f54fffe8051303aeacb540f7a52629b0646a3b1e0f553d5dc4415e419eae216c5cb6bdeb4\",\"name\":\"json-schema-typed\",\"version\":\"8.0.2\"},\"json5-2.2.3.tgz\":{\"integrity\":\"XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5e63967bb7b21d81f5e1c2dd54fa3283e18e1f7ad85fef8aa73af2949c125bdf2ddcd93e53c5ce97c15628e830b7375bf255c67facd8c035337873167f16acca\",\"name\":\"json5\",\"version\":\"2.2.3\"},\"jsonfile-4.0.0.tgz\":{\"integrity\":\"m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9ba175477cfc8e395fda29901d2d907b3e6c8ca590cdbbae86e27f14a605459bcf1373ee1dc48c559cdfb0b84654e91f776d286cbe5258405ec394a196ab8dc6\",\"name\":\"jsonfile\",\"version\":\"4.0.0\"},\"jsonfile-6.2.1.tgz\":{\"integrity\":\"zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cf039374bdeb150fe545d0679ed295397ea4e5c289c047351dd8a54fbd41584bbb278d605c8076311a7ebf176e3d2c1924f581c44cefe321f5c182c91941d7e1\",\"name\":\"jsonfile\",\"version\":\"6.2.1\"},\"keyv-4.5.4.tgz\":{\"integrity\":\"oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a3154790747f1097f608d5e75b144b5ba9a0ec9c82094706d03b441a62f672d528d4f3538a7d4f52297eafffb8af93295600bf7e7d648ecc7b9a34ae8caa88a7\",\"name\":\"keyv\",\"version\":\"4.5.4\"},\"lazy-val-1.0.5.tgz\":{\"integrity\":\"0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d3f06718209fc943240697838168a16a720017d2666611c1814844ab3bdff9a7613462e83fa4da888e6817ca326f7238e4ff8f727aea8a149fd353349741b9f9\",\"name\":\"lazy-val\",\"version\":\"1.0.5\"},\"lightningcss-1.32.0.tgz\":{\"integrity\":\"NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"357601ce29cdadb95fada3c6cab6cfa03d7d0b587d95f23fd66ce0598bd75137b8d781b3fd7d450f65c165264ceeb453acc03c24bdceb4068689fac82a1439c9\",\"name\":\"lightningcss\",\"version\":\"1.32.0\"},\"lightningcss-android-arm64-1.32.0.tgz\":{\"integrity\":\"YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"60aeff0a54ede2400ad2fa3ac375fe3e79b40f671fdaf3c76e139776836d8b519ad1a9753f84c1661c23013be33702c40429cabe325cda34201d71f4344c2502\",\"name\":\"lightningcss-android-arm64\",\"version\":\"1.32.0\"},\"lightningcss-darwin-arm64-1.32.0.tgz\":{\"integrity\":\"RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"473786f49bb96da83606fd7f97095526f044deae93b57b247592cb0b27e0e69b7e1cbcfd06a94808eecb64ced51cd4d39ffe4f4611c50528e4e65738726b1c3d\",\"name\":\"lightningcss-darwin-arm64\",\"version\":\"1.32.0\"},\"lightningcss-darwin-x64-1.32.0.tgz\":{\"integrity\":\"U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"53e42c069da6fecdb0aa95184ffeb09e56a07596ed65d9dd4a6badfcd26a94270c2d35a9e66b82ac80fe2b9509ea3a83d8116c85e8c26179e23c36cd87bdd5f3\",\"name\":\"lightningcss-darwin-x64\",\"version\":\"1.32.0\"},\"lightningcss-freebsd-x64-1.32.0.tgz\":{\"integrity\":\"JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2424e281e74492c664ded1d34ed86731d55f19feb5164cbc262d84e188d44c4417d78c62cbf953cd79eed6fc2265eddb61ed2af92a6c487fc24de0d72ba5878a\",\"name\":\"lightningcss-freebsd-x64\",\"version\":\"1.32.0\"},\"lightningcss-linux-arm-gnueabihf-1.32.0.tgz\":{\"integrity\":\"x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c7aae79e945ad862f4cd03a4b7aaedb376033f376e2e95afc0017a10c8571556570f8b4fac190416acc6a30cc2b085ac3e3a922beb723443835015de7951d293\",\"name\":\"lightningcss-linux-arm-gnueabihf\",\"version\":\"1.32.0\"},\"lightningcss-linux-arm64-gnu-1.32.0.tgz\":{\"integrity\":\"0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d279ccca8c8e2d12577db30e8a569245c2c7dc9c39cfd1c33467d3fe0c023e06838e7c748bcc3bbc1cc52c54757fa08c2ca17c8156de6e69143777dafe4409a5\",\"name\":\"lightningcss-linux-arm64-gnu\",\"version\":\"1.32.0\"},\"lightningcss-linux-arm64-musl-1.32.0.tgz\":{\"integrity\":\"UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"529424a1e9ebe14244ce054862923cd250c5bd198f560ea8a9ba0d1dfa07e024087cd03e1cead9ecca3b2993f4d9d0ba2e38213d025e06cbd7849a1dff09c806\",\"name\":\"lightningcss-linux-arm64-musl\",\"version\":\"1.32.0\"},\"lightningcss-linux-x64-gnu-1.32.0.tgz\":{\"integrity\":\"V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"57b42be7622166674a3d5afe56dc3ca3e58bb1025809377c96821fa4368c45619465f04e60425ec89224a862033193f03f1db8a5431fc12c7123ca61aff31b38\",\"name\":\"lightningcss-linux-x64-gnu\",\"version\":\"1.32.0\"},\"lightningcss-linux-x64-musl-1.32.0.tgz\":{\"integrity\":\"bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6d870ba7e55bd1ac2c89783ff34b8245ecc2607360d7f9779add20cc79d657d5cfd56e6c29ae7f4c274659a47fcc13363de17f1dbb10bff8f651134e895bb15a\",\"name\":\"lightningcss-linux-x64-musl\",\"version\":\"1.32.0\"},\"lightningcss-win32-arm64-msvc-1.32.0.tgz\":{\"integrity\":\"8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f126c2f01478d294ba6da08cf2c6ed6034b011541de099454ce95a0f78161877d385370006734305d6ba79365ea9ba1f6a5209845c74a8ace01c999c3d39c677\",\"name\":\"lightningcss-win32-arm64-msvc\",\"version\":\"1.32.0\"},\"lightningcss-win32-x64-msvc-1.32.0.tgz\":{\"integrity\":\"Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"026abd07f4a86587438b5905ae88e7a2a3cbc58850e16a395e22fc11526b56c07c011a02d4f596e951ad4f458a09e9a3cbc682fa5a2e2678d2ed4d7cc776f4e9\",\"name\":\"lightningcss-win32-x64-msvc\",\"version\":\"1.32.0\"},\"locate-character-3.0.0.tgz\":{\"integrity\":\"SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"496d77c2cec18da789ea9ed0e823b69dc85b6047375f727a5ab9934c3b68ef230fa954994d4c98e538db89df806fc80b9c04edca062d8832091904519f664e88\",\"name\":\"locate-character\",\"version\":\"3.0.0\"},\"lodash-4.18.1.tgz\":{\"integrity\":\"dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"74c22789c4cf544f1dd5ee68b5fc269a3971919a14a6254bc32793754b22fc26a3fe07f3cdb941702139b111d5fc0b23b829b15abb5ed93346498b82782abed1\",\"name\":\"lodash\",\"version\":\"4.18.1\"},\"lowercase-keys-2.0.0.tgz\":{\"integrity\":\"tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b6a357ad2efca0c384ef734cc4ae0430b42c428c167fc8caa281fd83bc4f6af453ef4e91e9b91027a0d8d937bb42e91a66cba5c5adf4c10edb934a66e1788798\",\"name\":\"lowercase-keys\",\"version\":\"2.0.0\"},\"lru-cache-6.0.0.tgz\":{\"integrity\":\"Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"268e9d274e029928eece7c09492de951e5a677f1f47df4e59175e0c198be7aad540a6a90c0287e78bb183980b063df758b615a878875044302c78a938466ec88\",\"name\":\"lru-cache\",\"version\":\"6.0.0\"},\"magic-string-0.30.21.tgz\":{\"integrity\":\"vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bddd85e1853211728670b1e8abe4c4c828f1b9e49e1e7171cb28cda7cd328345d5e2f5219c37abfe5bef96a33f6ab0796d740de4adbfde88a7c82472c7c4f609\",\"name\":\"magic-string\",\"version\":\"0.30.21\"},\"math-intrinsics-1.1.0.tgz\":{\"integrity\":\"/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fc85ed6f0124e474cfc84c32297ea11a4617c4cf676e3eb807e8a55499c2fd1e81d291f91b85776f4a556cbec3063e2d921040a696d05257fa17a5e5f4b1eed6\",\"name\":\"math-intrinsics\",\"version\":\"1.1.0\"},\"media-typer-1.1.0.tgz\":{\"integrity\":\"aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6a2b27ac33f818d7b4e9470a1675796df30d3c1530e23b0b19a5b059f9c7defd361a706e5d7d8c0959f945bad6a348f7a5ccd48a561b96aedf43b370dade572b\",\"name\":\"media-typer\",\"version\":\"1.1.0\"},\"merge-descriptors-2.0.0.tgz\":{\"integrity\":\"Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4a7937d785796b214b869ddf914444b9be96b6305f3dd08f6352e7f3ff26ba7b8bba2621b000600555aca33006f8c58c6d512f71d7296e2f51ef0c36da5f50de\",\"name\":\"merge-descriptors\",\"version\":\"2.0.0\"},\"mime-2.6.0.tgz\":{\"integrity\":\"USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5123e431e113df5ace3226abb013481d928b1a0bca73f2eb8e87c09c194eb6d7f96a346faa2440f10b1e9db728a1cb4ae9de93b3a6aa657040f976e42ad86242\",\"name\":\"mime\",\"version\":\"2.6.0\"},\"mime-db-1.52.0.tgz\":{\"integrity\":\"sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b0f538b95edd625bed589c70c311c3d0fba285536213b4f201b439496c43081f66518bce82ba103b061040e28f27c0886c4fb51135653a82b5502da7537818be\",\"name\":\"mime-db\",\"version\":\"1.52.0\"},\"mime-db-1.54.0.tgz\":{\"integrity\":\"aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"694e4426e20dd960de982700a76bc505fa7f9b810085626750d492c348b1b3bfe45db77a3e0eb8126c0990d745841f1a5add6c1f60935eb2f1a3f880195de83d\",\"name\":\"mime-db\",\"version\":\"1.54.0\"},\"mime-types-2.1.35.tgz\":{\"integrity\":\"ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"64363e6cf9b9cd34c5f98a42ac053d9cad148080983d3d10b53d4d65616fe2cfbe4cd91c815693d20ebee11dae238323423cf2b07075cf1b962f9d21cda7978b\",\"name\":\"mime-types\",\"version\":\"2.1.35\"},\"mime-types-3.0.2.tgz\":{\"integrity\":\"Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2db833764d21e23ba843d7c22975b86f2d1426a8fe9ce3ab23d309d6c4a3e2723c688d9ea35aa6bd01227b8543d6096c4b6e749f5e4bb16b18b42ba0892b52e4\",\"name\":\"mime-types\",\"version\":\"3.0.2\"},\"mimic-response-1.0.1.tgz\":{\"integrity\":\"j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8f911cb67907eda99f57fab91e09a86a5d60d901c5251ada3ad9b1d09a48aa4c6106123f9494a5d67329438e6155aaf03444cea161229a7759e102b4447c6ec5\",\"name\":\"mimic-response\",\"version\":\"1.0.1\"},\"mimic-response-3.1.0.tgz\":{\"integrity\":\"z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cf4c9623ee050ebaf0792f199ade048f91dd266932d79f8bd9ee96827dfe88ae5f5b36fa4f77e1345ab6f8c79345bd3ae1ce96af837fc2fd03cd04e33731cd19\",\"name\":\"mimic-response\",\"version\":\"3.1.0\"},\"minimatch-10.2.6.tgz\":{\"integrity\":\"vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"be92d012cf952c2af59d4d015d2d3b99a628170943007d209e042ebadb71230bad0c510c1ead9b957fbcbe98310dd2b72753f08c22627a9efb3a2b536782e5d4\",\"name\":\"minimatch\",\"version\":\"10.2.6\"},\"minimatch-3.1.5.tgz\":{\"integrity\":\"VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5608d652c9e74fa9fe35493a799abbef37857695b62d60f33facc51ab09b1d789836e9790f3aa4d871d0e6e147d83356e576e9f3e8d5cda78db7de2cb04125e3\",\"name\":\"minimatch\",\"version\":\"3.1.5\"},\"minimatch-5.1.9.tgz\":{\"integrity\":\"7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ee8d70100d91c8c3fb22eec635b6bdbdcd11596180089382641257d862568a9d22915fb070eb2056e63db84f023e2c908641854a586e4a464f6af37bbb573617\",\"name\":\"minimatch\",\"version\":\"5.1.9\"},\"minimatch-9.0.9.tgz\":{\"integrity\":\"OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"381c0137d00be1daa61139694b6cdab31faf4de59c956ce46e57d993b2930398f78de38e373fed4429d9a26532bcd83cdf02f966ff52b3a1cc2570202fc47662\",\"name\":\"minimatch\",\"version\":\"9.0.9\"},\"minimist-1.2.8.tgz\":{\"integrity\":\"2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"db2c8047ca8190ddd8ba17896a7529582e54ddb6f9a2c0f2c0d07c4730d5943c031dba1c009bdeaaa8f5bbcf92543ee39164f8cafb070a95aaa96a80c5bd3308\",\"name\":\"minimist\",\"version\":\"1.2.8\"},\"minipass-7.1.3.tgz\":{\"integrity\":\"tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b44047a839c8a0cff5ad7304d738246bd83a43695ca029311cbb9cece0c9e41c5b3f977873667970682d5c092ee7ddb4d02c7b762b874ce61f4810fc9fa9a6f0\",\"name\":\"minipass\",\"version\":\"7.1.3\"},\"minizlib-3.1.0.tgz\":{\"integrity\":\"KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"299c58a350549160f64d514baf4310a0cf2f5148a0583dcb943f376bfef906a0bee2a1341dbd55a39bf516071f68d5ef7d7cebfb912143a8a783f09a0628d397\",\"name\":\"minizlib\",\"version\":\"3.1.0\"},\"mkdirp-0.5.6.tgz\":{\"integrity\":\"FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"14ffa9f1107c396a45dd86410ab3f982d0039ad5c0a41e4030b9febddc80f8fcb10a3ac2b34d268f2528cecb0edf77300de4f7c0d19d2f127933ffd8aad1c027\",\"name\":\"mkdirp\",\"version\":\"0.5.6\"},\"mri-1.2.0.tgz\":{\"integrity\":\"tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b73cec91bddb1bc2ef606145fe60d3a6ade3a48e90f707372c49816a086ef83742b2c77515a90dec17348553661321aad5bab74607e409bddc9902e934f3aba0\",\"name\":\"mri\",\"version\":\"1.2.0\"},\"ms-2.1.3.tgz\":{\"integrity\":\"6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e85973b9b4cb646dc9d9afcd542025784863ceae68c601f268253dc985ef70bb2fa1568726afece715c8ebf5d73fab73ed1f7100eb479d23bfb57b45dd645394\",\"name\":\"ms\",\"version\":\"2.1.3\"},\"nanoid-3.3.15.tgz\":{\"integrity\":\"y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cbb5b282fffb9843afc53b8440307c4ad5dd3110567f5911fed961033051505901da37dc2ce0313bf48798e3b6ce0cf5a5580adbdfe4caea67d39f7f6c21dd8c\",\"name\":\"nanoid\",\"version\":\"3.3.15\"},\"negotiator-1.0.0.tgz\":{\"integrity\":\"8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f0e7ecfc051087c31a11cae5ab9c4e5f4090f72a53179765efc9a394c35f38ad3c7f3a604c741140f07170f944b48c34c91a70b3e668ff7afee5645bcbbbb71a\",\"name\":\"negotiator\",\"version\":\"1.0.0\"},\"node-abi-4.35.0.tgz\":{\"integrity\":\"ymk4aIzxdPopw2giv8Fs1Ec6vybGkjmyxUwVqhkI4MCy2tVfXdkOGGWieWVjL0THgH+7a8lRdevyupoYj3Js/Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ca6938688cf174fa29c36822bfc16cd4473abf26c69239b2c54c15aa1908e0c0b2dad55f5dd90e1865a27965632f44c7807fbb6bc95175ebf2ba9a188f726cfd\",\"name\":\"node-abi\",\"version\":\"4.35.0\"},\"node-api-version-0.2.1.tgz\":{\"integrity\":\"2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"db13ff20618c9a6490a48d7e3bf93bda317fca4bd9f3d25eb8a5f74cb24060f0d52d46a5aec86b2c791e55c08266a1bf7846badf972bf08058ce09c3bccd8ef1\",\"name\":\"node-api-version\",\"version\":\"0.2.1\"},\"node-gyp-12.4.0.tgz\":{\"integrity\":\"OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"38c70f36fa9308552735a06599d82afa57cda98ee04e24a63510e3637b805d1cae75e299119c6edc22ed8cc42bc78cd9c425f66ff9a936a4edc2e08981784793\",\"name\":\"node-gyp\",\"version\":\"12.4.0\"},\"node-int64-0.4.0.tgz\":{\"integrity\":\"O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3b9973f75c5239ea173fa0ee9721df965a6af84834d0c5a2b5921bb4f7e8484bea207765e607dc63a858cc35a78f4a83e6dcf9d8f234f2ef6a52f49579405e1f\",\"name\":\"node-int64\",\"version\":\"0.4.0\"},\"nopt-9.0.0.tgz\":{\"integrity\":\"Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"661ab76bec852ab63048196e2f81fd5cfde6df2e6ebd0901ff4f42c03aee0a246647f5096279fd5b8478f2bcb4b860bbd1a7933ca2f29c1b6c70ff5e7c515c3f\",\"name\":\"nopt\",\"version\":\"9.0.0\"},\"normalize-url-6.1.0.tgz\":{\"integrity\":\"DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0e52fe5f03b2dcdc4043cc6e0b4a243e02b8ea2b953402b4d5837b46e79806aa85786b018d5f5798203301d82dfbaebb6c297990f87d12a28a0f09da3c6d48ec\",\"name\":\"normalize-url\",\"version\":\"6.1.0\"},\"object-assign-4.1.1.tgz\":{\"integrity\":\"rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ac98134279149c7d6c170f324fa552537cc3dec5a6bbab19848b1e63c557f8646edcfe85ec5bbe24d0e85df9251256cb2529dcdc55101d57b8714e618fe05c52\",\"name\":\"object-assign\",\"version\":\"4.1.1\"},\"object-inspect-1.13.4.tgz\":{\"integrity\":\"W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5baee22e5e09d845c41936df78709f7eb8c37e2b6f2c0360d14957df01545124f1f762974457a0307515812a84fb0be101b8b85aa8c683d733cac4d5d84a5b7b\",\"name\":\"object-inspect\",\"version\":\"1.13.4\"},\"obug-2.1.3.tgz\":{\"integrity\":\"9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f6688580cd8e15b6bb841fa9460bed57ce2961305aa131e886f98882246de9d448cdbc0438868d68ff9d2251acd9f345a01d127884acd09cf958555189de97ca\",\"name\":\"obug\",\"version\":\"2.1.3\"},\"on-finished-2.4.1.tgz\":{\"integrity\":\"oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a15973920dc4340842936cddbfb209c1dfd0503e33d91c51c2991c198f29b0255c09864dab8c189d55802c733e6ebb6e26378f5a2605fc2966b83afc0a1e7e92\",\"name\":\"on-finished\",\"version\":\"2.4.1\"},\"once-1.4.0.tgz\":{\"integrity\":\"lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"94d689808fb643951140191c7042874d038f697754c67659125413658d0c15402e684a9ed44f8dcaf81dcff688c8d8ba67d3333b976fd47f27e7cfc610ba77fb\",\"name\":\"once\",\"version\":\"1.4.0\"},\"p-cancelable-2.1.1.tgz\":{\"integrity\":\"BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0593abde74501ce9ed5234eb1fcf8b879e2c98a1e81f2babf167b557c0d2315ae5e40da66a538ec2e2519ca4438d29e4a1e061e1ab7a0701276f923b265df5c2\",\"name\":\"p-cancelable\",\"version\":\"2.1.1\"},\"p-limit-3.1.0.tgz\":{\"integrity\":\"TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4d839a9ccdf01b0346b193767154d83c0af0e39e319d78f9aa6585d5b12801ce3e714fe897b19587ba1d7af8e9d4534776e1dcdca64c70576ec54e5773ab8945\",\"name\":\"p-limit\",\"version\":\"3.1.0\"},\"parseurl-1.3.3.tgz\":{\"integrity\":\"CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0a2c9e3b1153fc96723799b4cfd3df5f0e1208127a4b2833d43a65d30aa39610c418604fd469ec51510bd29eb78681b57dc8f77c7ca75e2f4d60ee2758e2fea9\",\"name\":\"parseurl\",\"version\":\"1.3.3\"},\"path-is-absolute-1.0.1.tgz\":{\"integrity\":\"AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0156f0dd42767bd6eaeb8bd2692f409b47e37b53daf296c6a934ec9977da2223299ebe4394385f24eb8b8fd49ff7964f5430147ab0df124f3c30f98f7bb50242\",\"name\":\"path-is-absolute\",\"version\":\"1.0.1\"},\"path-key-3.1.1.tgz\":{\"integrity\":\"ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a2399e374a9dfb2d23b3312da18e3caf43deab97703049089423aee90e5fe3595f92cc17b8ab58ae18284e92e7c887079b6e1486ac7ee53aa6d889d2c0b844e9\",\"name\":\"path-key\",\"version\":\"3.1.1\"},\"path-to-regexp-8.4.2.tgz\":{\"integrity\":\"qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a9172e21d3faf4d3e6e2a6c008af9a0e8808e42043322d6329ed2bcb9ad2409cfc2552ec0bb8d5f17a622631912cba25dcdf91e6284661cacf2d39e8ea901d04\",\"name\":\"path-to-regexp\",\"version\":\"8.4.2\"},\"pathe-2.0.3.tgz\":{\"integrity\":\"WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5948c6700a8fd6041a72841ef8e049b0503b2dde03c97b9422367971cef970b1ef27b76d36c4ee8298712000f0b294be02b68051e3c22ab495b4f2c58ff17cf3\",\"name\":\"pathe\",\"version\":\"2.0.3\"},\"pe-library-0.4.1.tgz\":{\"integrity\":\"eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"791581e4b073ecfa43bb83d49704f43e19d07d34099430dd3dadf9bab5783acae6d2dd00a901469fe508914de4959bf027c28f3b755b045b17aae03aa7a92a67\",\"name\":\"pe-library\",\"version\":\"0.4.1\"},\"pend-1.2.0.tgz\":{\"integrity\":\"F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1776acbf8d94b97721773b7ec57a9f5b538695505efa6c5ada6a88d29839c801d93ef16663763a76b49ffc643503ce9681610df4ace1fd6ae029aea219c1d72e\",\"name\":\"pend\",\"version\":\"1.2.0\"},\"picocolors-1.1.1.tgz\":{\"integrity\":\"xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c5c787dac9e1b5be4cf658aa0ec984c39ea57b7efa993664117fe311bfd1c4d1727a036e97b78db250973fd1438ff2dcbb45fc284c8c71e3f69eda5a1eb0c454\",\"name\":\"picocolors\",\"version\":\"1.1.1\"},\"picomatch-4.0.4.tgz\":{\"integrity\":\"QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"40ff3c0402af31a9bfdcdc47eaf8f6a36d51e8c8f165401dea7970012fe99c6bcdf4854ba1c2c7c46608cc5860e9f510fb9b61e8fe1dbf8796f635f70d2223ec\",\"name\":\"picomatch\",\"version\":\"4.0.4\"},\"pkce-challenge-5.0.1.tgz\":{\"integrity\":\"wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c10d1bfd6e05af4d6ab691e5a92aaca5c8f712106f8a6b1d8742a51e11fc1d166732c11ad1e6b67d350b397392f5c710af7a26f86706464e1efa2b2b65657ca9\",\"name\":\"pkce-challenge\",\"version\":\"5.0.1\"},\"pkijs-3.4.0.tgz\":{\"integrity\":\"emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7a611c2eea26b768f4defc43e78822541e12c538e7b2a914ebddb164e6571c3568632ca9126f9bde3a624dc73e09ffa6ca8a1cfbf2f2d33d358ea78d1d58091b\",\"name\":\"pkijs\",\"version\":\"3.4.0\"},\"plist-3.1.0.tgz\":{\"integrity\":\"uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bb2b2e9b2aef9145f4ad7fdd115aadf200b7b13073778ce859f2de4b6f676f9de299d69756f2c83585d323618dab368cbaf69c371e2e250f3e6f7cd7474a6481\",\"name\":\"plist\",\"version\":\"3.1.0\"},\"postcss-8.5.16.tgz\":{\"integrity\":\"vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"beec22965be28a57ca66c8345468f947f630c1c1f1e122ec20e23fecaea64245b1fa5e5c5074e38f983401ab1305cc97b1b7d382bc2c50d99551be71570c8fc2\",\"name\":\"postcss\",\"version\":\"8.5.16\"},\"proc-log-6.1.0.tgz\":{\"integrity\":\"iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"886f866257517f6050d140d401de8943f470cda432ea65e6b24fc8ce56326a5e00e12345c39e0c787e3fb4b905e08e56a161bd490c2ea96cd2f7d8da1501c1b9\",\"name\":\"proc-log\",\"version\":\"6.1.0\"},\"process-nextick-args-2.0.1.tgz\":{\"integrity\":\"3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"de8b943a9421b60adb39ad7b27bfaec4e4e92136166863fbfc0868477f80fbfd5ef6c92bcde9468bf757cc4632bdbc6e6c417a5a7db2a6c7132a22891459f56a\",\"name\":\"process-nextick-args\",\"version\":\"2.0.1\"},\"progress-2.0.3.tgz\":{\"integrity\":\"7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ecf887b4b965e4b767288330d74d08fbcc495d1e605b6430598913ea226f6b46d78ad64a6bf5ccad26dd9a0debd979da89dcfd42e99dd153da32b66517d57db0\",\"name\":\"progress\",\"version\":\"2.0.3\"},\"promise-retry-2.0.1.tgz\":{\"integrity\":\"y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cbe58a165051f011979ec3652071463d99b20dfdc314ca0b85a7e5027c99815eab1bac6ef89c1eb13a3643d47a5f0626b66c001429009377b7e6311da1e87fde\",\"name\":\"promise-retry\",\"version\":\"2.0.1\"},\"proper-lockfile-4.1.2.tgz\":{\"integrity\":\"TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4e334f6e537807001631753cb3d004cf82664319c3d4d34bedb34e63f00a533c9a99cdfbf4558049485cfcad692f69e855bf9799928b2faf1c8f32ec88e00c68\",\"name\":\"proper-lockfile\",\"version\":\"4.1.2\"},\"proxy-addr-2.0.7.tgz\":{\"integrity\":\"llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"96542c30b4940d43d3e388ddad4fcedfbaa59e27e2b433fe670ae699972848ac8b2afb59c69c95d27dbf6c3fcde2d040019fe024475953b28cadaa0ad7e5d802\",\"name\":\"proxy-addr\",\"version\":\"2.0.7\"},\"pump-3.0.4.tgz\":{\"integrity\":\"VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"552eec8dce8a47b7b5ba4445850498e4b336b8158050f88e3dafc0de690a9a23304a64455084edd31ba3fbf95eb209c2bfe74f204625933adcc9782ab881cc70\",\"name\":\"pump\",\"version\":\"3.0.4\"},\"pure-rand-8.4.1.tgz\":{\"integrity\":\"c58R2+SPFcSIPXoU834QN/KPDDOSd8sXcSrqf6e83Me6Rrp1EYkxukkjXMVrKvKaADs1SOyNkWdfvLf6zY8qLQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"739f11dbe48f15c4883d7a14f37e1037f28f0c339277cb17712aea7fa7bcdcc7ba46ba75118931ba49235cc56b2af29a003b3548ec8d91675fbcb7facd8f2a2d\",\"name\":\"pure-rand\",\"version\":\"8.4.1\"},\"pvtsutils-1.3.6.tgz\":{\"integrity\":\"PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3cb8105d0e87d8558269e45a93cbef935196e3ada5331079b37266ebbdcdf36cc8e2faad5543ee65d7df7596cf0c546853c900848b5616d3c25a23e9a78fc40e\",\"name\":\"pvtsutils\",\"version\":\"1.3.6\"},\"pvutils-1.2.0.tgz\":{\"integrity\":\"BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"05bb9b7821324ee42354c6a4bc943f4b16dcf77176a7099bb3138d4ff651af053b51adfc77cba7613c17a5354b00a278043b87f481b3b428d071dfcdff7f43be\",\"name\":\"pvutils\",\"version\":\"1.2.0\"},\"qs-6.15.3.tgz\":{\"integrity\":\"O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3bd825df30a5e61e5b970d4a194cd02a1039a145d297caf0508339a344b79c25cc9624afcb90f3c7bfc325c23e4b08080aff889de499c21061d684b210703bd4\",\"name\":\"qs\",\"version\":\"6.15.3\"},\"quick-lru-5.1.1.tgz\":{\"integrity\":\"WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5aec802d18d63c31adb7fc3326269d3b901763ef2167cd215697ba3328af82b691116ef9d57dd26e146f1b778b28e60dfbc544bea2dc7f7c1d9ede386784b848\",\"name\":\"quick-lru\",\"version\":\"5.1.1\"},\"range-parser-1.3.0.tgz\":{\"integrity\":\"hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"85e9369854293ee2381350412ab4ada3e054ddedf1e31b9aaec6e2c2bdfe95fee9e388eebc5315d171564003f7c54caa5c0e11ad72c8a1a49419b4add39e9933\",\"name\":\"range-parser\",\"version\":\"1.3.0\"},\"raw-body-3.0.2.tgz\":{\"integrity\":\"K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"2b9cd08c3965c5691fed9e7125d574fc1d164cdab1eafc46ef4cc9138374901b382e8be6118589cd01b10bd6d2f5100abb76e0338d25adde73a0b275d8c43904\",\"name\":\"raw-body\",\"version\":\"3.0.2\"},\"read-binary-file-arch-1.0.6.tgz\":{\"integrity\":\"BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"04d83d10ddc30f71ac0d75fb01af0ee29f76b2bca3926cd86209a04c073a080e2e18b103cc57f13b1ba0bb6d5a90ec697171e2120b18902ea73ec42f2cb2e612\",\"name\":\"read-binary-file-arch\",\"version\":\"1.0.6\"},\"readable-stream-2.3.8.tgz\":{\"integrity\":\"8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f29d00524e173838087b04a2d25f04a63b3e1159d688aecda03204194d07844efe67263c0f520c63ba1dbb9951ac55c683bd4bd79286f10acf9ae9b8e514ed74\",\"name\":\"readable-stream\",\"version\":\"2.3.8\"},\"readdirp-4.1.2.tgz\":{\"integrity\":\"GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"18387090b7f2c162f6b3abc48f286b8be79799f1fa8f52fb244dbb5a1a8b798ce887f0370c16981848f61ff1c56429ff90c7e29bbdc55f11094f0d3a5adc50c2\",\"name\":\"readdirp\",\"version\":\"4.1.2\"},\"require-directory-2.1.1.tgz\":{\"integrity\":\"fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7c6c4423bfb0b06f71aef763b2b9662f6d8e3134e21d1c0032ba2211e320abc833a0b0bf3d0afb46c4434932d483f6d9019b45f9354890773aff84482abba2f9\",\"name\":\"require-directory\",\"version\":\"2.1.1\"},\"require-from-string-2.0.2.tgz\":{\"integrity\":\"Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5dfd2759ee91b1ece214cbbe029f5b8a251b9a996ae92f7fa7eef0ed85cffc904786b5030d48706bebc0372b9bbaa7d9593bde53ffc36151ac0c6ed128bfef13\",\"name\":\"require-from-string\",\"version\":\"2.0.2\"},\"resedit-1.7.2.tgz\":{\"integrity\":\"vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bc78dc6363250084c9842d1e443fd5bfc565826bbd49ddcb5fdcd9bed1b353964899d4cddfe77a7bfe269d3c95f2f11bc9fd6c80d22b5b185696bcace763a410\",\"name\":\"resedit\",\"version\":\"1.7.2\"},\"resolve-alpn-1.2.1.tgz\":{\"integrity\":\"0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d1ad45e25ef7fd915939a9099d0dc5be4276fa0493416cffaf6284e4e7436344f13e6e61e0692a91659f338ed3ec7b1b9ceb5c255105e1ea42572eaeed0dcafa\",\"name\":\"resolve-alpn\",\"version\":\"1.2.1\"},\"responselike-2.0.1.tgz\":{\"integrity\":\"4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e20974df09f7863d473f7cb381d23b777942905f79176d4fcf804f1af2878a7c90cc02d1e426a9c02f32222d11879f0310c43f4a0b82d37c058f693433f98787\",\"name\":\"responselike\",\"version\":\"2.0.1\"},\"retry-0.12.0.tgz\":{\"integrity\":\"9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f4b9224f08d487aad3e79e43b44f6b4d7f81281c8f7eb333100b67944b5d130af73647dfc228a1a9ed9b5800e0f8e4118edf6097a20276607f6450c2180b52a3\",\"name\":\"retry\",\"version\":\"0.12.0\"},\"rimraf-2.6.3.tgz\":{\"integrity\":\"mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9b0a9e5b95ec036a807a31b8ea061d10d6b15e3c7da2744d09f9fb2f476eb8fe210ae4c88bf40eecf0cad3b2897e9d5dfa2cd63ebcc4243712a816b439942b88\",\"name\":\"rimraf\",\"version\":\"2.6.3\"},\"rolldown-1.1.3.tgz\":{\"integrity\":\"1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d45d5e12d501b45bdc1a6d4743d4e25085073d01bb99200e0eb848ce3c6850416ea3c39c6eb18b8952e47af3608fce131389671ef9ee9b01638493b912ed77e6\",\"name\":\"rolldown\",\"version\":\"1.1.3\"},\"router-2.2.0.tgz\":{\"integrity\":\"nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9cb4eb50a9b653288beeb9616a9bbf665e3917036091919a0a965b2076a30d883094908eccb4a4f9c20f027b04a95f79e468c82c99ca6dd402d6754fcfe80061\",\"name\":\"router\",\"version\":\"2.2.0\"},\"sade-1.8.1.tgz\":{\"integrity\":\"xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c5a9770995f55e5a3f938029c0216b1d50028bd7c1a89ed5fa6c2106cb9fff520e29b072d3df057b1f966bfe5032e6f0d3da5267fbbc118f0f5a07af26c5e9d4\",\"name\":\"sade\",\"version\":\"1.8.1\"},\"safe-buffer-5.1.2.tgz\":{\"integrity\":\"Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"19dd94641243917958ec66c9c5fb04f3f9ef2a45045351b7f1cd6c88de903fa6bd3d3f4c98707c1a7a6c71298c252a05f0b388aedf2e77fc0fb688f2b381bafa\",\"name\":\"safe-buffer\",\"version\":\"5.1.2\"},\"safer-buffer-2.1.2.tgz\":{\"integrity\":\"YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"619a372bcd920fb462ca2d04d4440fa232f3ee4a5ea6749023d2323db1c78355d75debdbe5d248eeda72376003c467106c71bbbdcc911e4d1c6f0a9c42b894b6\",\"name\":\"safer-buffer\",\"version\":\"2.1.2\"},\"sanitize-filename-1.6.4.tgz\":{\"integrity\":\"9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f59c88d3c3ecbdd425dabfdb0481ae6e955d477451f6c63a44389614fade036d42fc41654219a0a36d1466536364c31936e6eeb0b840428ce403439de49db512\",\"name\":\"sanitize-filename\",\"version\":\"1.6.4\"},\"sax-1.6.1.tgz\":{\"integrity\":\"42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e36b415702d69da42f5b9cdce076d9ad3b9671c1020997c18bdd850eec2dab16ac1fe25b3c1dff14e29bd66db6d8ae364785b1bb1cf332c4ecc1fce0b52bbae1\",\"name\":\"sax\",\"version\":\"1.6.1\"},\"semver-5.7.2.tgz\":{\"integrity\":\"cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"701ce79d0f4a8c9a94ebb079d91302eb908c6ab2b6eb4d161676e471a8b05aadf1cbfe61685265b21827a63a2f31527e1df7f8f5df06127d1bf3b0b9a43435d2\",\"name\":\"semver\",\"version\":\"5.7.2\"},\"semver-6.3.1.tgz\":{\"integrity\":\"BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"051ed5bc30951cefaadb10445ac9314ba0c9135a919dbec3c7352ba206fbd425a849f89c07162c88019df8a9749a6abf329ac6f7202b464cab4314cee978cccc\",\"name\":\"semver\",\"version\":\"6.3.1\"},\"semver-7.7.4.tgz\":{\"integrity\":\"vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"bc5282d8812d427561a53efc875629f30cf0adff0233e33328c1c62597c1b738593727111675ec1e4e84e53c4892432c80d4bb99d5f700607bc7640cd9d8b894\",\"name\":\"semver\",\"version\":\"7.7.4\"},\"semver-7.8.5.tgz\":{\"integrity\":\"Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"63bfca0ec6fc2e3a28669c1aa86cae94ee8342592c8029dc7211c693eb19218e1206f52870c044147e54af57c8e1d57e26f974c3a723bee71a222e34a6e462a0\",\"name\":\"semver\",\"version\":\"7.8.5\"},\"send-1.2.1.tgz\":{\"integrity\":\"1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d609d97fb0c572821c6a34e34f08f0b838f3bb3e0f3dc6364ad28f96c180435f981f6d08455ac169749699d8e8c1327abbc45cd353e860e1875df3f599871935\",\"name\":\"send\",\"version\":\"1.2.1\"},\"serve-static-2.2.1.tgz\":{\"integrity\":\"xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c515c19f4a4fa904d54220bcc3242b2acd8c3a55f6e334343ce19a8f492e96dbe8382b2d050339caf3a1015494c0e32342d4efb0f5a83421df3c6c1a6902614f\",\"name\":\"serve-static\",\"version\":\"2.2.1\"},\"setprototypeof-1.2.0.tgz\":{\"integrity\":\"E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"1392c35fb5aba7ce4a8a5e5b859bf8ea3f2339e6e82aae4932660cde05467461fcc45a4f59750cb0dae53830ab928c4c11e362fd7648c2e46f6385cdc18309a7\",\"name\":\"setprototypeof\",\"version\":\"1.2.0\"},\"shebang-command-2.0.0.tgz\":{\"integrity\":\"kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"907c6bdb366962d766acdd6a0e3aeb5ff675ad1d641bc0f1fa09292b51b87979af5ecc26704d614d6056614ce5ada630d7fc99a7a62e0d8efb62dbdb3747660c\",\"name\":\"shebang-command\",\"version\":\"2.0.0\"},\"shebang-regex-3.0.0.tgz\":{\"integrity\":\"7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"efef9d161b5cc77df9dee05aabc0c347836ec417ad0730bb6503a19934089c711de9b4ab5dd884cb30af1b4ed9e3851874b4a1594c97b7933fca1cfc7a471bd4\",\"name\":\"shebang-regex\",\"version\":\"3.0.0\"},\"side-channel-1.1.1.tgz\":{\"integrity\":\"6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"eb1e9d2bacc97694f3178b1078d631c2dbc1cdfe848381ad95eb12f781cebd3b9d51ec8ad965c06887e60e0b32b2562b441785225b22e78018b05194ba19afad\",\"name\":\"side-channel\",\"version\":\"1.1.1\"},\"side-channel-list-1.0.1.tgz\":{\"integrity\":\"mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9a39ffd1b8bfa145118dce5797b21a5a2fce24926e9aea0915025f0c3c8ee3afa1056b1f69533ae53047ab67a864187397d11c8713a28e991b442f12541414d3\",\"name\":\"side-channel-list\",\"version\":\"1.0.1\"},\"side-channel-map-1.0.1.tgz\":{\"integrity\":\"VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5428c235f80cb1bcb7b53768d369db8ed33f7b0adaea33c79a94e17a7913621f291bdb9c67fd4ff12a38bb814605e93f063a4e56c0c23282c0fe2b8128815744\",\"name\":\"side-channel-map\",\"version\":\"1.0.1\"},\"side-channel-weakmap-1.0.2.tgz\":{\"integrity\":\"WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"58f4bf1ef1d04d89c78ac2e8f4c72a0473899361641cefed969be5772ae77a6e1a790a7885a8b7832b61b3083aa74d684a84e5e7cadca621408c5d9baf6024d8\",\"name\":\"side-channel-weakmap\",\"version\":\"1.0.2\"},\"siginfo-2.0.0.tgz\":{\"integrity\":\"ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c9bc7458ed7ff1b4812c459766f11dee0316dd29f7245956dd3bd7d674446c32d135035a78d37c58ad26781c0f74068e23b4ed4514499ff12cd7386bac21eeee\",\"name\":\"siginfo\",\"version\":\"2.0.0\"},\"signal-exit-3.0.7.tgz\":{\"integrity\":\"wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c270f6644fa5f923c2feea12d2f5de13d2f5fb4c2e68ca8a95fcfd00c528dfc26cc8b48159215c1d1d51ae2eb62d9735daf2ebd606f78e5ee2c10860c2901b19\",\"name\":\"signal-exit\",\"version\":\"3.0.7\"},\"simple-update-notifier-2.0.0.tgz\":{\"integrity\":\"a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6b607d6342a535797dbbfbec5bab1322ef6f184a5f2aedb0455ea5d47dd711ab3fd20508cc6cc1a0ffc8a2e4dc5106e6f495992c7dc23b1ca7d374d89456b1eb\",\"name\":\"simple-update-notifier\",\"version\":\"2.0.0\"},\"source-map-0.6.1.tgz\":{\"integrity\":\"UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"52381aa6e99695b3219018334fb624739617513e3a17488abbc4865ead1b7303f9773fe1d0f963e9e9c9aa3cf565bab697959aa989eb55bc16396332177178ee\",\"name\":\"source-map\",\"version\":\"0.6.1\"},\"source-map-js-1.2.1.tgz\":{\"integrity\":\"UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"51758c2a12cec1529bef6f0852d40f5f17d853ebac7726ed52b2bff2e184f0240cbeb84ea70bf30c1c23d108522fb31073bbc8b084811bc550f3e203431a5f40\",\"name\":\"source-map-js\",\"version\":\"1.2.1\"},\"source-map-support-0.5.21.tgz\":{\"integrity\":\"uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b811d4dcbddccec232617297f3c7ddac6a2fc5d482a13183459e92617b524712d95331e0e4fffae87b7aba85251eef4466877e8a75e12a8dea420c17513ff2d7\",\"name\":\"source-map-support\",\"version\":\"0.5.21\"},\"stackback-0.0.2.tgz\":{\"integrity\":\"1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d573091397d0a358c61fa63fede6e7c0f3811242049d3e10177d9de51d7e557757bde334201309b7ccdf6b15f53f7421570ad87bee7bebe8e400db524b69816f\",\"name\":\"stackback\",\"version\":\"0.0.2\"},\"stat-mode-1.0.0.tgz\":{\"integrity\":\"jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8c7f4486d2888ee5d9d9c5b19974bc64ff345f20b789ab10c4c0d5f23ce1349a5f0dbed56d02d55b85afb31cfd419bf357e1b862849f05454a0cecb12f38bfb2\",\"name\":\"stat-mode\",\"version\":\"1.0.0\"},\"statuses-2.0.2.tgz\":{\"integrity\":\"DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0ef132e795770c1eee927468fb888e193e5f3f5b2547cc10a2155d9278a064f32932cb5a289416870898040089137525da94e70138a18416274616501c606247\",\"name\":\"statuses\",\"version\":\"2.0.2\"},\"std-env-4.1.0.tgz\":{\"integrity\":\"Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"46aef26dc5f646e0b9e6bf6868f5445bbff1bb7b63f2ee067816070560b272116dccc22bf3a03b7b73cf1013d3dfbb074ad297dfe4e25ff16bfc00a624b5652d\",\"name\":\"std-env\",\"version\":\"4.1.0\"},\"string-width-4.2.3.tgz\":{\"integrity\":\"wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c0ac90450a63274b08a7ad84ad265d1ac8cc256b1aa79a1136284786ee86ec954effd8c807a5327af2feb57b8eaab9e0f23fdcc4a4d6c96530bd24eb8a2673fe\",\"name\":\"string-width\",\"version\":\"4.2.3\"},\"string_decoder-1.1.1.tgz\":{\"integrity\":\"n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9ff4a19ef0e2e851db6d57ef8aba3e5a88e2173bfeb3c30f30705ccd578f7d4a4324bc282d3d21b759786300426e2f29240bde104767907c8fc933ff9b345fc2\",\"name\":\"string_decoder\",\"version\":\"1.1.1\"},\"strip-ansi-6.0.1.tgz\":{\"integrity\":\"Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"637f153d21dcaa416b0a916743dbee4979aabaebf9a1738aa46793e9a1abaf7a3719cf409556ba2417d448e0a76f1186645fbfd28a08ecaacfb944b3b54754e4\",\"name\":\"strip-ansi\",\"version\":\"6.0.1\"},\"sumchecker-3.0.1.tgz\":{\"integrity\":\"MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"32f8d7ce4cff04e7f2543906d2814eb41c475f6bb780a6cc1c817f7576e566c803dc158e14b987a2f229658ec1ca425d02372a442062d5660135d102f7223bbe\",\"name\":\"sumchecker\",\"version\":\"3.0.1\"},\"supports-color-7.2.0.tgz\":{\"integrity\":\"qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"aa9080bd197db2db8e1ef78ab27ec79dc251befe74d6a21a70acd094effe2f0c5cf7ed2adb02f2bf80dfbedf34fc33e7da9a8e06c25d0e2a205c647df8ebf047\",\"name\":\"supports-color\",\"version\":\"7.2.0\"},\"svelte-5.56.4.tgz\":{\"integrity\":\"/d0QHehmRuJW8gVz395MTkPcPozxzdjBMBE8oEYGz8O3b9KTMzzQ9ZHJQLuFKOHOPQbU6kx/X4iid/EBBzH7iw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"fddd101de86646e256f20573dfde4c4e43dc3e8cf1cdd8c130113ca04606cfc3b76fd293333cd0f591c940bb8528e1ce3d06d4ea4c7f5f88a277f1010731fb8b\",\"name\":\"svelte\",\"version\":\"5.56.4\"},\"svelte-check-4.7.1.tgz\":{\"integrity\":\"FGUOmAqxXdN/H9Zm8slrqO7SLtFisXRB7rfOsHNJ3MLTD2po/+Stg8XyErkpumPHbuUiYTcqrEIzxpVWKTLqtg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"14650e980ab15dd37f1fd666f2c96ba8eed22ed162b17441eeb7ceb07349dcc2d30f6a68ffe4ad83c5f212b929ba63c76ee52261372aac4233c695562932eab6\",\"name\":\"svelte-check\",\"version\":\"4.7.1\"},\"tar-7.5.22.tgz\":{\"integrity\":\"MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3053bf433bed00e9896e484e6824ef6c670537d2fd6fe26e9c8b03c1a2a58d239d70b31e6b7349d64f54b33feb8dd7d25d3ab875fcdf792ed6e29e1838000778\",\"name\":\"tar\",\"version\":\"7.5.22\"},\"temp-0.9.4.tgz\":{\"integrity\":\"yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c98aebb169eb5cc71db27bbfed83180287ccd64b692f9072eef6617f5e42ad78a3596ac461992ce405c1b9d6a57d25892e59de9ff4142540796a807492a65418\",\"name\":\"temp\",\"version\":\"0.9.4\"},\"temp-file-3.4.0.tgz\":{\"integrity\":\"C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"0b9b63942fc70ad5543a2dca595a24778bc755588e9868ed2f0221e0cbb33e8fe73184d5fe9d6eaeddd19cccf62165c374a106247de4e7e28fc6da91b14606b6\",\"name\":\"temp-file\",\"version\":\"3.4.0\"},\"tiny-async-pool-1.3.0.tgz\":{\"integrity\":\"01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d35100c39103adc56b760c822e0a123efab39c2d2c5710d255e88ecf4f455298e1ef51bbf550aa9de3abfb1beded3d6befa085e9965f3e31e8acddbe77ede6a8\",\"name\":\"tiny-async-pool\",\"version\":\"1.3.0\"},\"tinybench-2.9.0.tgz\":{\"integrity\":\"0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d3e0d4bea58c55a94b9a16ba96be240fc88030ad47cd5d3f68a9c2b566fdbfdeb8d539cffcc15becf7366f1a314234d7004aebc9756050e7efd98a8d965a867a\",\"name\":\"tinybench\",\"version\":\"2.9.0\"},\"tinyexec-1.2.4.tgz\":{\"integrity\":\"SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"4877ffaf8f1beef3ab8ef7bd3f1268dcc379bf9caeca31ef75472b41f7d3dd65cc51f9c69870d56c2e24dec1c96894e0642c29529948680a3900db4cca9dd81e\",\"name\":\"tinyexec\",\"version\":\"1.2.4\"},\"tinyglobby-0.2.17.tgz\":{\"integrity\":\"wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c1747f758a5ca8a99f5a911d66388a24ec023459dd0f40cc9eb5bf7188d51adb449017d581c2c51e836b963e3b9a339589cf72c8dbbae5a96c805e0d4324dada\",\"name\":\"tinyglobby\",\"version\":\"0.2.17\"},\"tinyrainbow-3.1.0.tgz\":{\"integrity\":\"Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"05ff882e6060adeb54add271cd73344a05cb6775df89a52e3a3fc82901ee4d78a9fb4e579febb21187558349180e2a5305c2eb095c94cc03f3ed0980adbd269b\",\"name\":\"tinyrainbow\",\"version\":\"3.1.0\"},\"tmp-0.2.7.tgz\":{\"integrity\":\"e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7b4be8b48a69e14a36009612cd51d5eb109c6b0ba27b3dc3cea0c06eb4dcdd8c4192994de9ef9d335dd97887199c383f4294ae536cdf677af3c18f2e9049da5f\",\"name\":\"tmp\",\"version\":\"0.2.7\"},\"tmp-promise-3.0.3.tgz\":{\"integrity\":\"RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"47033b3283e88cfc6c381627c9dda1cb46f1b48955ae284db3da63e5252f63c673d6c41c406dad1b5852afc3c3c5f80407c44d28386a6c896ba086ab48d0cdb1\",\"name\":\"tmp-promise\",\"version\":\"3.0.3\"},\"toidentifier-1.0.1.tgz\":{\"integrity\":\"o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a39b123ca12483f0c840d987e37574fee7ab2eba7355e764521f2d18dbda797a5fa6ec2329e9e54a8c7fd8efc14e5654b447be246eece58844cfad3c3e500744\",\"name\":\"toidentifier\",\"version\":\"1.0.1\"},\"truncate-utf8-bytes-1.0.2.tgz\":{\"integrity\":\"95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"f793eed505d0bebb86121bfad9708c3b7326f741ac70e08296fac853008cd0f60e5cade4685de5dec207c71ef54e125f71b3363b902ee923b701609211f5b899\",\"name\":\"truncate-utf8-bytes\",\"version\":\"1.0.2\"},\"tslib-2.8.1.tgz\":{\"integrity\":\"oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a0916ef781d06fe29576e49440bef09e99aa9df98bb0e03f9c087a6fa107d30084a0ad3f98f79753a737c0a0d5f373243ae1cf447b525ca294f7d2016b34bfdb\",\"name\":\"tslib\",\"version\":\"2.8.1\"},\"tsx-4.22.4.tgz\":{\"integrity\":\"X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5fc117f97578411e710acae0c5a103f79e334c37d8f0aaa50edb242842f47078724bf3fc6f82053af183429b02f50d579cbabdd79c047f0c18ff3cec902b6686\",\"name\":\"tsx\",\"version\":\"4.22.4\"},\"type-is-2.1.0.tgz\":{\"integrity\":\"faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"7da607c346a705b73f916177cc54c49f14853801945fd1856ce06d86f0dd2ec22512858e14eb52d3380289063022c90bf6219764bde40170fc3a86781a63004c\",\"name\":\"type-is\",\"version\":\"2.1.0\"},\"typescript-5.9.3.tgz\":{\"integrity\":\"jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8e5d6f6733c38a72ebf5e52ddc9feded5e8580d130f508ef04f772b33f4a7d00c3e357d0ac2d98e2f290762694a454f86d795bd511e12e9a7cc2d9ba3394e04b\",\"name\":\"typescript\",\"version\":\"5.9.3\"},\"undici-6.28.1.tgz\":{\"integrity\":\"zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"cd6a5d4d50f9e07e3c088c9b2f4ad6437ba4a5bf5ddb7c0cede1f946d7dd99e3fbd1c587363b5fa3b3f8bd95fee42a0370ee772783eee6e5e9ee535f8dce8344\",\"name\":\"undici\",\"version\":\"6.28.1\"},\"undici-types-6.21.0.tgz\":{\"integrity\":\"iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8b00d9aa0d10006ae0f516afe47e27d0ceb87379a4479f5c27ac10a7eec2e2723482c984c5a79d6982cd3b8e1e4f802d041c236d38863cc96dd8c7744fd1fd25\",\"name\":\"undici-types\",\"version\":\"6.21.0\"},\"undici-types-8.3.0.tgz\":{\"integrity\":\"j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"8f7ef949c57ad1da26f9890f1487d32dc3a23f190dfdbb87cf91a86e32e18b116e00d68db370bd9781a6ad6a9e8e05d627b05b25c158a53114912d467bc6e965\",\"name\":\"undici-types\",\"version\":\"8.3.0\"},\"universalify-0.1.2.tgz\":{\"integrity\":\"rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ac125e2390970259b2d6957eeb5ed607d27add4e9771acc71c5d9fd9d6c98b1e17ce9505d114b765b8f414620e080bdae4ffddfc604e61a002435c3ed1acd492\",\"name\":\"universalify\",\"version\":\"0.1.2\"},\"universalify-2.0.1.tgz\":{\"integrity\":\"gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"829b4735082120d9dcfef4c6224d12385185357c3b255ae5454b42a2725196f6b0e83b97d303b925e928f6c5ab301861f8fb18019ee85c088e9dffd42a88328b\",\"name\":\"universalify\",\"version\":\"2.0.1\"},\"unpipe-1.0.0.tgz\":{\"integrity\":\"pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a63cb66d8852b2e7f05a52b03dcfa5ddc37bfb0b8994aeaecf461d2443a54036e5ea3a3f6253e2e266fc6a0524542f0117b57c36ecdec8f36a464b00de1ced29\",\"name\":\"unpipe\",\"version\":\"1.0.0\"},\"unzipper-0.12.5.tgz\":{\"integrity\":\"tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b5760e8bd479ed48ffd99db948eb394514b3abcf3a301423da063c74f2fec65fe4bfab3a4af072a0a7c0b6f7d5784ba19ed583823776a3da7695be1354f033d0\",\"name\":\"unzipper\",\"version\":\"0.12.5\"},\"utf8-byte-length-1.0.5.tgz\":{\"integrity\":\"Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"5e7d30dccb6243ace8cf6bc5c9456bb9a08be773bf0f052f90478ebe3faeba5326d019141985a6058572125a996922e163a643d2e95f537681adad9a553e317c\",\"name\":\"utf8-byte-length\",\"version\":\"1.0.5\"},\"util-deprecate-1.0.2.tgz\":{\"integrity\":\"EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"10f0f9ab5b97c85c49a42acb9c27359c79eade039ae83641a1c008888d93692080ed5089d5424331a802cc891736c5187c3d5d68afff2d3110f318886eb1ed73\",\"name\":\"util-deprecate\",\"version\":\"1.0.2\"},\"vary-1.1.2.tgz\":{\"integrity\":\"BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"04d19b58b7ddd1e50f69b8645d4566d23f2ebaf444c93879a2f45afddca8c3f06a01b649c82fb97d4f88cd03b39802b362a6110084a8461750af778867f3d7aa\",\"name\":\"vary\",\"version\":\"1.1.2\"},\"vite-8.1.2.tgz\":{\"integrity\":\"6YYPbRXTxx6bRXmOn7XdnQAy5DQNHhDgtjhDHI13oe4pY93kkcdGJWxpGwOm++/Wh0QpQhDrpIoVMrmrsI5AGQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"e9860f6d15d3c71e9b45798e9fb5dd9d0032e4340d1e10e0b638431c8d77a1ee2963dde491c746256c691b03a6fbefd68744294210eba48a1532b9abb08e4019\",\"name\":\"vite\",\"version\":\"8.1.2\"},\"vitefu-1.1.3.tgz\":{\"integrity\":\"ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b9be28907ed9e4a2e36fa843ca3aab197a96b56be861d5372069bf368ae98079dc2a82d309f4486ef961066eebd18b2d21a411625a78c846c5a8370a4b35d24a\",\"name\":\"vitefu\",\"version\":\"1.1.3\"},\"vitest-4.1.9.tgz\":{\"integrity\":\"nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9c4dff2c4c9cd33f3bb8760b65e6ea09439a26bda176db8fa7b050e01a2c5459df96dc6002f306d3c372ad21a53e93945af476edce5f95299815336befc2fd19\",\"name\":\"vitest\",\"version\":\"4.1.9\"},\"wasmoon-1.16.0.tgz\":{\"integrity\":\"FlRLb15WwAOz1A9OQDbf6oOKKSiefi5VK0ZRF2wgH9xk3o5SnU11tNPaOnQuAh1Ucr66cwwvVXaeVRaFdRBt5g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"16544b6f5e56c003b3d40f4e4036dfea838a29289e7e2e552b4651176c201fdc64de8e529d4d75b4d3da3a742e021d5472beba730c2f55769e55168575106de6\",\"name\":\"wasmoon\",\"version\":\"1.16.0\"},\"webcrypto-core-1.9.2.tgz\":{\"integrity\":\"gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"82c5de726f365103654c1511246baa396cb55b0d3c4b791951caf768e252d363e4d312ed91f7940150b4bb4c6181da271667bcd1e752254209caebcbffbdb9d1\",\"name\":\"webcrypto-core\",\"version\":\"1.9.2\"},\"which-2.0.2.tgz\":{\"integrity\":\"BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"04b2374e5d535b73ef97bd25df2ab763ae22f9ac29c17aac181616924a8cb676d782b303fb28fbae15b492e103c7325a6171a3116e6881aa4a34c10a34c8e26c\",\"name\":\"which\",\"version\":\"2.0.2\"},\"which-5.0.0.tgz\":{\"integrity\":\"JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"244746cc7c3092b6d6a063a5207a90e60b69aca18e7a7a431e9c44f73551d5b59b3ad611c8f3c731ef4568feb1eb50a635a4d385291bd03009b5ee630fe0e6cd\",\"name\":\"which\",\"version\":\"5.0.0\"},\"which-6.0.1.tgz\":{\"integrity\":\"oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a062dee3a308ac246a5fbcad3d47fae84018bdd78c219627dd66a872aa8a640c6b06992a1df2ffaaf4f227f6d3939f80a870a35e6aefdc2116832dfaf3385152\",\"name\":\"which\",\"version\":\"6.0.1\"},\"why-is-node-running-2.3.0.tgz\":{\"integrity\":\"hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"854ae669605d543731bd8aa7ca1d3dcee9cacd13968db65388dcbc741123912ede8440d089b5c9ed7be59ad6f0b9372552223237e0b25d00f8566928f1f366f3\",\"name\":\"why-is-node-running\",\"version\":\"2.3.0\"},\"wrap-ansi-7.0.0.tgz\":{\"integrity\":\"YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"6151888f691a98b493c70e8db198e80717d2c2c9f4c9c75eb26738a7e436d5ce733ee675a65f8d7f155dc4fb5d1ef98d54e43a5d2606e0052dcadfc58bb0f5e9\",\"name\":\"wrap-ansi\",\"version\":\"7.0.0\"},\"wrappy-1.0.2.tgz\":{\"integrity\":\"l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"9784a9fc346c7a8afdc0be84bd5dbe4ee427eb774c90f8d9feca7d5e48214c46d5f4a94f4b5c54b19deeeff2103b8c31b5c141e1b82940f45c477402bdeccf71\",\"name\":\"wrappy\",\"version\":\"1.0.2\"},\"ws-8.21.0.tgz\":{\"integrity\":\"Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"56ca76f1bec345c8a6150bebaaed967a4df3d626310c25aa1d807c42c9e4fd2e117da090ccf18fc8136e563255ddc77a5222ad52da7ab0d33bee05afcdc087fa\",\"name\":\"ws\",\"version\":\"8.21.0\"},\"xmlbuilder-15.1.1.tgz\":{\"integrity\":\"yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"c8ca8606ab57c9e3757b74c662f80d803559de3f385b873090e5d0b30821a25e803e065669f7fd9676ef37b3076093a25ecbc63d7b634d8244882f49db0bfd12\",\"name\":\"xmlbuilder\",\"version\":\"15.1.1\"},\"y18n-5.0.8.tgz\":{\"integrity\":\"0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"d297c5cde81e0d62472480264cb44fd83c078dd179b3b8e8f6dbb3b5d43102120d09dbd2fb79c620da8f774d00a61a8947fd0b8403544baffeed209bf7c60e7c\",\"name\":\"y18n\",\"version\":\"5.0.8\"},\"yallist-4.0.0.tgz\":{\"integrity\":\"3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"df074689d672ab93c1d3ce172c44b94e9392440df08d7025216321ba6da445cbffe354a7d9e990d1dc9c416e2e6572de8f02af83a12cbdb76554bf8560472dec\",\"name\":\"yallist\",\"version\":\"4.0.0\"},\"yallist-5.0.0.tgz\":{\"integrity\":\"YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"620bd44dfc2ac9ced45d532b07e4889ac5584a64d2f17fed4abb5d35930898cfa7efe413ae2457c978a6d2606b4d735eab3545d0a5868073de8b2562145acd0f\",\"name\":\"yallist\",\"version\":\"5.0.0\"},\"yargs-17.7.3.tgz\":{\"integrity\":\"GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"199b63c66fc9ff84d2c6e2f714d6230a62e4b414e7230feb56629223229e6006699890768a0f556ae082e71b1af3618d29528302aa4e9f7295ccdb74ce6ad4d2\",\"name\":\"yargs\",\"version\":\"17.7.3\"},\"yargs-parser-21.1.1.tgz\":{\"integrity\":\"tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"b55a6c256ec376379c0221696c80757b7ab1210b04e8da0f739fde4ddadb6c80b88742d5b16867a1ade0fa6d87725048ba31f3b31678549540f8652e736fcb07\",\"name\":\"yargs-parser\",\"version\":\"21.1.1\"},\"yauzl-2.10.0.tgz\":{\"integrity\":\"p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"a786bd23a5fa9eee888681a606a01c6c9cb59a50b88f6eef10f657f45e0be3fbd94f72f2ab5564147c3f57f3d4701f41ba8f831b7887913d31dd0c9ae7ccdcde\",\"name\":\"yauzl\",\"version\":\"2.10.0\"},\"yocto-queue-0.1.0.tgz\":{\"integrity\":\"rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"ad592cbec9cd09d27fa2119ceb180fc3237c7a1782c6c88b33c9b1b84fedfe6395a897b03ee3b59a22e94c74224604ca08b7b12f831e00555a82db3b1e6359d9\",\"name\":\"yocto-queue\",\"version\":\"0.1.0\"},\"zimmerframe-1.1.4.tgz\":{\"integrity\":\"B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"079f0d18112873c63d31658240697f82af710427b822228cd1adb1ec665d40a396e44c6bf12d56db827a3a03359e32bcc42446bc02482ff3315c77fa4a499029\",\"name\":\"zimmerframe\",\"version\":\"1.1.4\"},\"zod-3.25.76.tgz\":{\"integrity\":\"gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"83352dfeab7cd675ec14628815c0b76277c4031e4d92e9c27e70e5bee0524854b4d9b717bb82e679ad001485306cb5b158fc7777da7c4b94286ae8ca70d43171\",\"name\":\"zod\",\"version\":\"3.25.76\"},\"zod-to-json-schema-3.25.2.tgz\":{\"integrity\":\"O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==\",\"integrity_algo\":\"sha512\",\"integrity_digest\":\"3bf3e07e7a53d712920de4184827d12391b2de13dff7598a543b982d41d924c883169b6f3f8d4c4a75a87e6f1d9c29b4db9e9935f64833b0d2cee48c0059e31c\",\"name\":\"zod-to-json-schema\",\"version\":\"3.25.2\"}},\"store_version\":\"v10\"}", + "dest-filename": "pnpm-manifest.json", + "dest": "flatpak-node" + }, + { + "type": "script", + "commands": [ + "case \"$FLATPAK_ARCH\" in", + "\"i386\")", + " export ELECTRON_BUILDER_ARCH_ARGS=\"--ia32\"", + " ;;", + "\"x86_64\")", + " export ELECTRON_BUILDER_ARCH_ARGS=\"--x64\"", + " ;;", + "\"arm\")", + " export ELECTRON_BUILDER_ARCH_ARGS=\"--armv7l\"", + " ;;", + "\"aarch64\")", + " export ELECTRON_BUILDER_ARCH_ARGS=\"--arm64\"", + " ;;", + "esac" + ], + "dest-filename": "electron-builder-arch-args.sh", + "dest": "flatpak-node" + }, + { + "type": "script", + "commands": [ + "version=$(node --version | sed \"s/^v//\")", + "nodedir=$(dirname \"$(dirname \"$(which node)\")\")", + "mkdir -p \"flatpak-node/cache/node-gyp/$version\"", + "ln -s \"$nodedir/include\" \"flatpak-node/cache/node-gyp/$version/include\"", + "echo 11 > \"flatpak-node/cache/node-gyp/$version/installVersion\"" + ], + "dest-filename": "setup_sdk_node_headers.sh", + "dest": "flatpak-node" + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d\"", + "ln -s \"../SHASUMS256.txt-38.8.6\" \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d/SHASUMS256.txt\"" + ], + "dest": "flatpak-node/cache/electron" + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d\"", + "ln -s \"../electron-v38.8.6-linux-arm64.zip\" \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d/electron-v38.8.6-linux-arm64.zip\"" + ], + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "aarch64" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d\"", + "ln -s \"../electron-v38.8.6-linux-armv7l.zip\" \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d/electron-v38.8.6-linux-armv7l.zip\"" + ], + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "arm" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d\"", + "ln -s \"../electron-v38.8.6-linux-x64.zip\" \"88235104d26da3ef5ac14266e9fa3215cbe53b9c4c7af05394addc599109230d/electron-v38.8.6-linux-x64.zip\"" + ], + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "x86_64" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"bin/@esbuild\"", + "cp \".package/@esbuild/linux-arm64@0.28.1/bin/esbuild\" \"bin/@esbuild/linux-arm64@0.28.1\"", + "ln -sf \"@esbuild/linux-arm64@0.28.1\" \"bin/esbuild-current\"" + ], + "dest": "flatpak-node/cache/esbuild", + "only-arches": [ + "aarch64" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"bin/@esbuild\"", + "cp \".package/@esbuild/linux-arm@0.28.1/bin/esbuild\" \"bin/@esbuild/linux-arm@0.28.1\"", + "ln -sf \"@esbuild/linux-arm@0.28.1\" \"bin/esbuild-current\"" + ], + "dest": "flatpak-node/cache/esbuild", + "only-arches": [ + "arm" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"bin/@esbuild\"", + "cp \".package/@esbuild/linux-ia32@0.28.1/bin/esbuild\" \"bin/@esbuild/linux-ia32@0.28.1\"", + "ln -sf \"@esbuild/linux-ia32@0.28.1\" \"bin/esbuild-current\"" + ], + "dest": "flatpak-node/cache/esbuild", + "only-arches": [ + "i386" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"bin/@esbuild\"", + "cp \".package/@esbuild/linux-x64@0.28.1/bin/esbuild\" \"bin/@esbuild/linux-x64@0.28.1\"", + "ln -sf \"@esbuild/linux-x64@0.28.1\" \"bin/esbuild-current\"" + ], + "dest": "flatpak-node/cache/esbuild", + "only-arches": [ + "x86_64" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"httpsgithub.comelectronelectronreleasesdownloadv38.8.6electron-v38.8.6-linux-arm64.zip\"", + "ln -s \"../electron-v38.8.6-linux-arm64.zip\" \"httpsgithub.comelectronelectronreleasesdownloadv38.8.6electron-v38.8.6-linux-arm64.zip/electron-v38.8.6-linux-arm64.zip\"" + ], + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "aarch64" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"httpsgithub.comelectronelectronreleasesdownloadv38.8.6electron-v38.8.6-linux-armv7l.zip\"", + "ln -s \"../electron-v38.8.6-linux-armv7l.zip\" \"httpsgithub.comelectronelectronreleasesdownloadv38.8.6electron-v38.8.6-linux-armv7l.zip/electron-v38.8.6-linux-armv7l.zip\"" + ], + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "arm" + ] + }, + { + "type": "shell", + "commands": [ + "mkdir -p \"httpsgithub.comelectronelectronreleasesdownloadv38.8.6electron-v38.8.6-linux-x64.zip\"", + "ln -s \"../electron-v38.8.6-linux-x64.zip\" \"httpsgithub.comelectronelectronreleasesdownloadv38.8.6electron-v38.8.6-linux-x64.zip/electron-v38.8.6-linux-x64.zip\"" + ], + "dest": "flatpak-node/cache/electron", + "only-arches": [ + "x86_64" + ] + }, + { + "type": "shell", + "commands": [ + "python3 flatpak-node/populate_pnpm_store.py flatpak-node/pnpm-manifest.json flatpak-node/pnpm-tarballs flatpak-node/pnpm-store", + "echo \"store-dir=$PWD/flatpak-node/pnpm-store\" >> .npmrc", + "bash flatpak-node/setup_sdk_node_headers.sh" + ] + } +] \ No newline at end of file diff --git a/flatpak/io.github.LucaSforza.NNModelling.desktop b/flatpak/io.github.LucaSforza.NNModelling.desktop new file mode 100644 index 00000000..74541b7d --- /dev/null +++ b/flatpak/io.github.LucaSforza.NNModelling.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=NNModelling +Comment=Visual editor for designing neural networks +Exec=run.sh %U +Icon=io.github.LucaSforza.NNModelling +Terminal=false +Type=Application +Categories=Science; +StartupNotify=true +StartupWMClass=NNModelling diff --git a/flatpak/io.github.LucaSforza.NNModelling.metainfo.xml b/flatpak/io.github.LucaSforza.NNModelling.metainfo.xml new file mode 100644 index 00000000..8ba380a4 --- /dev/null +++ b/flatpak/io.github.LucaSforza.NNModelling.metainfo.xml @@ -0,0 +1,24 @@ + + + io.github.LucaSforza.NNModelling + NNModelling + Visual editor for designing neural networks + + Luca Sforza + + CC0-1.0 + GPL-3.0-or-later + +

+ NNModelling is a visual editor and domain-specific language for designing + neural networks and generating PyTorch and Lightning training pipelines. +

+
+ io.github.LucaSforza.NNModelling.desktop + https://github.com/LucaSforza/NNModelling + https://github.com/LucaSforza/NNModelling/issues + + + + +
diff --git a/flatpak/io.github.LucaSforza.NNModelling.svg b/flatpak/io.github.LucaSforza.NNModelling.svg new file mode 100644 index 00000000..3fcfd9d0 --- /dev/null +++ b/flatpak/io.github.LucaSforza.NNModelling.svg @@ -0,0 +1,9 @@ + + NNModelling + A neural-network graph with three connected nodes + + + + + + diff --git a/flatpak/run.sh b/flatpak/run.sh new file mode 100755 index 00000000..ec85520b --- /dev/null +++ b/flatpak/run.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eu + +for executable in /app/main/nnmodelling /app/main/NNModelling; do + if [ -x "$executable" ]; then + exec zypak-wrapper.sh "$executable" "$@" + fi +done + +echo "NNModelling executable was not found in /app/main" >&2 +exit 1 diff --git a/front-end/package.json b/front-end/package.json index 9bc7bdce..10056b0a 100644 --- a/front-end/package.json +++ b/front-end/package.json @@ -33,10 +33,5 @@ "html-to-image": "^1.11.13", "wasmoon": "1.16.0" }, - "packageManager": "pnpm@10.11.0", - "pnpm": { - "onlyBuiltDependencies": [ - "esbuild" - ] - } + "packageManager": "pnpm@10.11.0" } diff --git a/front-end/src/App.svelte b/front-end/src/App.svelte index f388490f..f9141103 100644 --- a/front-end/src/App.svelte +++ b/front-end/src/App.svelte @@ -17,6 +17,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. import ProjectStart from "./components/ProjectStart.svelte"; import TrainingLogWindow from "./components/TrainingLogWindow.svelte"; import type { ProjectWorkspaceSession } from "./project-workspace"; + import { projectWorkspaceForHost } from "./project-workspace/desktop"; import { createPathProjectSession, type ProjectPathPayload } from "./project-workspace/path"; import { BrowserRPCHandler, type ProjectRPCBridge } from "./sync/BrowserRPCHandler"; import { TrainingController } from "./training/controller"; @@ -26,6 +27,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. let workspaceSession = $state(null); let workspaceError = $state(null); let readyWaiter: { resolve: () => void; reject: (error: Error) => void; previous: ProjectWorkspaceSession | null } | undefined; + const hostWorkspace = projectWorkspaceForHost(); const projectBridge: ProjectRPCBridge = { create: (payload) => activatePathProject(payload), @@ -33,7 +35,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. }; const trainingController = new TrainingController(); const rpcHandler = new BrowserRPCHandler(undefined, undefined, undefined, trainingController, projectBridge); - rpcHandler.connect(); + // Electron does not ship the browser-backed MCP WebSocket listener. The + // desktop host remains a local editor; web keeps the existing MCP behavior. + if (!hostWorkspace.desktop) rpcHandler.connect(); function handleWorkspaceOpen(session: ProjectWorkspaceSession): void { workspaceError = null; @@ -92,6 +96,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. {/key} {:else} - + {/if} {/if} diff --git a/front-end/src/__tests__/desktopProjectWorkspace.test.ts b/front-end/src/__tests__/desktopProjectWorkspace.test.ts new file mode 100644 index 00000000..95723de0 --- /dev/null +++ b/front-end/src/__tests__/desktopProjectWorkspace.test.ts @@ -0,0 +1,66 @@ +import { describe, expect, test } from "vitest" +import { + desktopProjectDirectoryPicker, + type DesktopProjectEntry, + type DesktopProjectFile, + type DesktopProjectFilesystemBridge, +} from "../project-workspace/desktop" +import { ProjectSelectionCancelledError, ProjectWorkspaceAdapter } from "../project-workspace" + +const MODEL = JSON.stringify({ manifest: { schemaVersion: 1, id: "demo", version: "1.0.0", name: "Demo", customPackages: [] }, nodes: [], edges: [] }) + +class FakeBridge implements DesktopProjectFilesystemBridge { + readonly version = 1 as const + readonly files = new Map([["model.json", { encoding: "utf8", data: MODEL }]]) + readonly writes: Array<{ path: string; value: DesktopProjectFile }> = [] + + async pickDirectory(): Promise<{ capability: string; name: string }> { return { capability: "opaque-capability", name: "demo" } } + async ensureDirectory(): Promise {} + async stat(_capability: string, path: string): Promise<"file" | "directory" | null> { + return this.files.has(path) ? "file" : path === "" ? "directory" : null + } + async listDirectory(_capability: string, path: string): Promise { + if (path !== "") return [] + return [...this.files.keys()].map((name) => ({ name, kind: "file" as const })) + } + async readFile(_capability: string, path: string): Promise { + const value = this.files.get(path) + if (!value) throw new DOMException("missing", "NotFoundError") + return value + } + async writeFile(_capability: string, path: string, value: DesktopProjectFile): Promise { + this.writes.push({ path, value }) + this.files.set(path, value) + } + async removeEntry(): Promise {} +} + +describe("desktop project workspace bridge", () => { + test("preserves project loading and ordered model writes behind an opaque capability", async () => { + const bridge = new FakeBridge() + const adapter = new ProjectWorkspaceAdapter(desktopProjectDirectoryPicker(bridge)) + const session = await adapter.openProject() + + expect(session.modelJson).toBe(MODEL) + expect(session.directory.name).toBe("demo") + const changed = MODEL.replace('"Demo"', '"Changed"') + await session.save(changed) + + expect(bridge.writes).toEqual([{ path: "model.json", value: { encoding: "utf8", data: changed } }]) + }) + + test("maps a cancelled native picker to the existing workspace error", async () => { + const bridge: DesktopProjectFilesystemBridge = { + version: 1, + pickDirectory: async () => null, + ensureDirectory: async () => undefined, + stat: async () => null, + listDirectory: async () => [], + readFile: async () => ({ encoding: "utf8", data: "" }), + writeFile: async () => undefined, + removeEntry: async () => undefined, + } + await expect(new ProjectWorkspaceAdapter(desktopProjectDirectoryPicker(bridge)).openProject()) + .rejects.toBeInstanceOf(ProjectSelectionCancelledError) + }) +}) diff --git a/front-end/src/project-workspace/desktop.ts b/front-end/src/project-workspace/desktop.ts new file mode 100644 index 00000000..80634874 --- /dev/null +++ b/front-end/src/project-workspace/desktop.ts @@ -0,0 +1,184 @@ +import { + normalizeProjectPath, + ProjectSelectionCancelledError, + ProjectWorkspaceAdapter, + type ProjectDirectoryHandle, + type ProjectDirectoryPicker, + type ProjectFile, + type ProjectFileHandle, + type ProjectWritableFile, +} from "./index" + +export type DesktopProjectCapability = { + readonly capability: string + readonly name: string +} + +export type DesktopProjectEntry = { + readonly name: string + readonly kind: "file" | "directory" +} + +export type DesktopProjectFile = { + readonly encoding: "utf8" | "base64" + readonly data: string +} + +/** Narrow renderer-side surface exposed by the Electron preload script. */ +export interface DesktopProjectFilesystemBridge { + readonly version: 1 + pickDirectory(options: { readonly mode: "readwrite" }): Promise + ensureDirectory(capability: string, path: string): Promise + stat(capability: string, path: string): Promise<"file" | "directory" | null> + listDirectory(capability: string, path: string): Promise + readFile(capability: string, path: string): Promise + writeFile(capability: string, path: string, value: DesktopProjectFile): Promise + removeEntry(capability: string, path: string, recursive: boolean): Promise +} + +declare global { + interface Window { + readonly nnmodellingDesktop?: DesktopProjectFilesystemBridge + } +} + +export type HostProjectWorkspace = { + readonly adapter?: ProjectWorkspaceAdapter + readonly desktop: boolean +} + +/** Selects the native capability when Electron preload is present, web otherwise. */ +export function projectWorkspaceForHost(): HostProjectWorkspace { + const bridge = desktopProjectFilesystemBridge() + return bridge + ? { adapter: new ProjectWorkspaceAdapter(desktopProjectDirectoryPicker(bridge)), desktop: true } + : { desktop: false } +} + +export function desktopProjectFilesystemBridge(): DesktopProjectFilesystemBridge | undefined { + if (typeof window === "undefined") return undefined + const bridge = window.nnmodellingDesktop + return bridge?.version === 1 ? bridge : undefined +} + +export function desktopProjectDirectoryPicker( + bridge: DesktopProjectFilesystemBridge, +): ProjectDirectoryPicker { + return async (options) => { + const selected = await bridge.pickDirectory(options) + if (!selected) throw new ProjectSelectionCancelledError() + return new DesktopDirectoryHandle(bridge, selected.capability, "", selected.name) + } +} + +class DesktopDirectoryHandle implements ProjectDirectoryHandle { + readonly kind = "directory" as const + + constructor( + private readonly bridge: DesktopProjectFilesystemBridge, + private readonly capability: string, + private readonly prefix: string, + readonly name: string, + ) {} + + async getDirectoryHandle(name: string, options?: { readonly create?: boolean }): Promise { + const path = childPath(this.prefix, name) + if (options?.create === true) { + await this.bridge.ensureDirectory(this.capability, path) + } else if (await this.bridge.stat(this.capability, path) !== "directory") { + throw notFound(name) + } + return new DesktopDirectoryHandle(this.bridge, this.capability, path, leafName(path)) + } + + async getFileHandle(name: string, options?: { readonly create?: boolean }): Promise { + const path = childPath(this.prefix, name) + if (options?.create !== true && await this.bridge.stat(this.capability, path) !== "file") { + throw notFound(name) + } + return new DesktopFileHandle(this.bridge, this.capability, path, leafName(path)) + } + + async *entries(): AsyncIterable<[string, ProjectDirectoryHandle | ProjectFileHandle]> { + for (const entry of await this.bridge.listDirectory(this.capability, this.prefix)) { + const path = childPath(this.prefix, entry.name) + yield [ + entry.name, + entry.kind === "directory" + ? new DesktopDirectoryHandle(this.bridge, this.capability, path, entry.name) + : new DesktopFileHandle(this.bridge, this.capability, path, entry.name), + ] + } + } + + async queryPermission(): Promise { return "granted" } + async requestPermission(): Promise { return "granted" } + + async removeEntry(name: string, options?: { readonly recursive?: boolean }): Promise { + await this.bridge.removeEntry(this.capability, childPath(this.prefix, name), options?.recursive === true) + } +} + +class DesktopFileHandle implements ProjectFileHandle { + readonly kind = "file" as const + + constructor( + private readonly bridge: DesktopProjectFilesystemBridge, + private readonly capability: string, + private readonly path: string, + readonly name: string, + ) {} + + async getFile(): Promise { + const value = await this.bridge.readFile(this.capability, this.path) + return new DesktopFile(value) + } + + async createWritable(): Promise { + let pending: DesktopProjectFile | undefined + return { + write: async (value) => { + pending = typeof value === "string" + ? { encoding: "utf8", data: value } + : { encoding: "base64", data: encode(value) } + }, + close: async () => { + if (pending !== undefined) await this.bridge.writeFile(this.capability, this.path, pending) + }, + abort: async () => { pending = undefined }, + } + } +} + +class DesktopFile implements ProjectFile { + constructor(private readonly value: DesktopProjectFile) {} + + async text(): Promise { + return this.value.encoding === "utf8" ? this.value.data : new TextDecoder().decode(decode(this.value.data)) + } + + async arrayBuffer(): Promise { + const bytes = this.value.encoding === "utf8" ? new TextEncoder().encode(this.value.data) : decode(this.value.data) + return bytes.slice().buffer + } +} + +function childPath(prefix: string, name: string): string { + return normalizeProjectPath(prefix ? `${prefix}/${name}` : name) +} + +function leafName(path: string): string { return path.split("/").at(-1)! } + +function notFound(name: string): DOMException { + return new DOMException(`Entry '${name}' was not found`, "NotFoundError") +} + +function encode(bytes: Uint8Array): string { + let binary = "" + for (const byte of bytes) binary += String.fromCharCode(byte) + return btoa(binary) +} + +function decode(value: string): Uint8Array { + return Uint8Array.from(atob(value), (byte) => byte.charCodeAt(0)) +} diff --git a/front-end/src/project-workspace/index.ts b/front-end/src/project-workspace/index.ts index f10c427a..d2022c9f 100644 --- a/front-end/src/project-workspace/index.ts +++ b/front-end/src/project-workspace/index.ts @@ -81,7 +81,7 @@ export class ProjectWorkspaceError extends Error { } export class UnsupportedProjectFilesystemError extends ProjectWorkspaceError { - constructor() { super("The browser does not support writable project directories", "unsupported") } + constructor() { super("This runtime does not support writable project directories", "unsupported") } } export class ProjectSelectionCancelledError extends ProjectWorkspaceError { diff --git a/front-end/vite.config.ts b/front-end/vite.config.ts index 54b25d6f..5c4fcba0 100644 --- a/front-end/vite.config.ts +++ b/front-end/vite.config.ts @@ -4,7 +4,10 @@ import { svelte } from "@sveltejs/vite-plugin-svelte"; export default defineConfig({ // GitHub Pages serves project sites below //; locally Vite stays // available from the root URL. - base: process.env.VITE_BASE_PATH ?? "/", + // Electron loads the renderer through app://nnmodelling, where absolute + // asset URLs would escape the custom protocol. Web builds retain `/` (or + // the GitHub Pages override) unless the desktop build opts into `./`. + base: process.env.VITE_BASE_PATH ?? (process.env.VITE_DESKTOP === "1" ? "./" : "/"), plugins: [ svelte({ emitCss: false, diff --git a/io.github.LucaSforza.NNModelling.yml b/io.github.LucaSforza.NNModelling.yml new file mode 100644 index 00000000..5797f404 --- /dev/null +++ b/io.github.LucaSforza.NNModelling.yml @@ -0,0 +1,96 @@ +app-id: io.github.LucaSforza.NNModelling +runtime: org.freedesktop.Platform +runtime-version: '25.08' +sdk: org.freedesktop.Sdk +base: org.electronjs.Electron2.BaseApp +base-version: '25.08' +sdk-extensions: + - org.freedesktop.Sdk.Extension.node24 +command: run.sh +separate-locales: false + +finish-args: + # Electron's display and GPU integration. + - --share=ipc + - --socket=wayland + - --socket=fallback-x11 + - --device=dri + # The renderer may connect to the existing remote backend or MCP bridge. + - --share=network + - --env=GTK_USE_PORTAL=1 + +build-options: + append-path: /usr/lib/sdk/node24/bin + env: + NPM_CONFIG_LOGLEVEL: info + +modules: + - name: nnmodelling + buildsystem: simple + build-options: + prepend-path: /run/build/nnmodelling/pnpm-bin + env: + XDG_CACHE_HOME: /run/build/nnmodelling/flatpak-node/cache + npm_config_cache: /run/build/nnmodelling/flatpak-node/npm-cache + npm_config_offline: 'true' + ELECTRON_CACHE: /run/build/nnmodelling/flatpak-node/cache/electron + build-commands: + - chmod +x pnpm-bin/pnpm + - cd source && pnpm install --offline --frozen-lockfile --store-dir=/run/build/nnmodelling/flatpak-node/pnpm-store + - cd source && VITE_BASE_PATH=./ pnpm --dir desktop build + - install -d /app/main + - cp -a source/desktop/release/linux-unpacked/. /app/main/ + - install -Dm755 source/flatpak/run.sh /app/bin/run.sh + - install -Dm644 source/flatpak/io.github.LucaSforza.NNModelling.desktop /app/share/applications/io.github.LucaSforza.NNModelling.desktop + - install -Dm644 source/flatpak/io.github.LucaSforza.NNModelling.metainfo.xml /app/share/metainfo/io.github.LucaSforza.NNModelling.metainfo.xml + - install -Dm644 source/flatpak/io.github.LucaSforza.NNModelling.svg /app/share/icons/hicolor/scalable/apps/io.github.LucaSforza.NNModelling.svg + sources: + # pnpm is not part of the Freedesktop Node SDK extension. Keep the + # executable pinned and provide one source for each supported arch. + - type: file + url: https://github.com/pnpm/pnpm/releases/download/v10.11.0/pnpm-linux-x64 + sha256: fb28f89021562a8b251d8b34485a0b560683f096af17a0793139df6b4f3c4d5a + dest: pnpm-bin + dest-filename: pnpm + only-arches: + - x86_64 + - type: file + url: https://github.com/pnpm/pnpm/releases/download/v10.11.0/pnpm-linux-arm64 + sha256: fd030b0566a70862ae06102316ed16bde0a7f953130551923c8bc11bb2a8ed87 + dest: pnpm-bin + dest-filename: pnpm + only-arches: + - aarch64 + - type: file + path: package.json + dest: source + - type: file + path: pnpm-lock.yaml + dest: source + - type: file + path: pnpm-workspace.yaml + dest: source + - type: dir + path: front-end + dest: source/front-end + skip: + - node_modules + - dist + - type: dir + path: desktop + dest: source/desktop + skip: + - node_modules + - dist + - release + - renderer + - type: dir + path: stereotype-packages + dest: source/stereotype-packages + - type: dir + path: flatpak + dest: source/flatpak + skip: + - build + - repo + - flatpak/generated-sources.json diff --git a/package.json b/package.json index 36698870..6df15f6f 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "private": true, "version": "0.1.0", "description": "DSL for designing neural networks via visual node editor", + "packageManager": "pnpm@10.11.0", "scripts": { "docs": "pnpm run docs:typedoc && pnpm run docs:sphinx", "docs:typedoc": "pnpm --filter @nnmodelling/front-end exec typedoc --options typedoc.json", @@ -11,5 +12,11 @@ }, "engines": { "node": ">=18" + }, + "pnpm": { + "onlyBuiltDependencies": [ + "electron", + "esbuild" + ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a6bf3e41..257fd0d5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,24 @@ importers: .: {} + desktop: + devDependencies: + '@types/node': + specifier: ^22.0.0 + version: 22.20.0 + electron: + specifier: 38.8.6 + version: 38.8.6 + electron-builder: + specifier: 26.15.3 + version: 26.15.3(electron-builder-squirrel-windows@26.15.3) + typescript: + specifier: ^5.8.3 + version: 5.9.3 + vitest: + specifier: ^4.1.7 + version: 4.1.9(@types/node@22.20.0)(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) + front-end: dependencies: '@dagrejs/dagre': @@ -28,7 +46,7 @@ importers: devDependencies: '@sveltejs/vite-plugin-svelte': specifier: ^7.0.0 - version: 7.1.2(svelte@5.56.4)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4)) + version: 7.1.2(svelte@5.56.4)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) '@tsconfig/svelte': specifier: ^5.0.8 version: 5.0.8 @@ -52,10 +70,10 @@ importers: version: 5.9.3 vite: specifier: ^8.0.0 - version: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4) + version: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) vitest: specifier: ^4.1.7 - version: 4.1.9(@types/node@26.1.0)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4)) + version: 4.1.9(@types/node@26.1.0)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) mcp-server: dependencies: @@ -86,7 +104,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.1.0 - version: 4.1.9(@types/node@22.20.0)(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) + version: 4.1.9(@types/node@22.20.0)(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) packages: @@ -96,6 +114,41 @@ packages: '@dagrejs/graphlib@4.0.5': resolution: {integrity: sha512-7xrBTqIts3o+PMUZX97wSc+7TUbW+/rULzGNCTP6yooNVDXbzw4Wutg/H/xOutTB/c/k0YqOAavgPh4/Zk9PFA==} + '@electron/asar@3.4.1': + resolution: {integrity: sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==} + engines: {node: '>=10.12.0'} + hasBin: true + + '@electron/fuses@1.8.0': + resolution: {integrity: sha512-zx0EIq78WlY/lBb1uXlziZmDZI4ubcCXIMJ4uGjXzZW0nS19TjSPeXPAjzzTmKQlJUZm0SbmZhPKP7tuQ1SsEw==} + hasBin: true + + '@electron/get@2.0.3': + resolution: {integrity: sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==} + engines: {node: '>=12'} + + '@electron/get@3.1.0': + resolution: {integrity: sha512-F+nKc0xW+kVbBRhFzaMgPy3KwmuNTYX1fx6+FxxoSnNgwYX6LD7AKBTWkU0MQ6IBoe7dz069CNkR673sPAgkCQ==} + engines: {node: '>=14'} + + '@electron/notarize@2.5.0': + resolution: {integrity: sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==} + engines: {node: '>= 10.0.0'} + + '@electron/osx-sign@1.3.3': + resolution: {integrity: sha512-KZ8mhXvWv2rIEgMbWZ4y33bDHyUKMXnx4M0sTyPNK/vcB81ImdeY9Ggdqy0SWbMDgmbqyQ+phgejh6V3R2QuSg==} + engines: {node: '>=12.0.0'} + hasBin: true + + '@electron/rebuild@4.2.0': + resolution: {integrity: sha512-RKL/O+jGoXJMxrx/5771y1n0xTKmFuOYGO3gMmwypBM6rsH0kou0mswwdXA2JrhIkE4xyC7v9vGk0n6NPzgOxQ==} + engines: {node: '>=22.12.0'} + hasBin: true + + '@electron/universal@2.0.3': + resolution: {integrity: sha512-Wn9sPYIVFRFl5HmwMJkARCCf7rqK/EurkfQ/rJZ14mHP3iYTjZSIOSVonEAnhWeAXwtw7zOekGRlc6yTtZ0t+g==} + engines: {node: '>=16.4'} + '@emnapi/core@1.11.1': resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} @@ -267,6 +320,10 @@ packages: peerDependencies: hono: ^4 + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + '@jridgewell/gen-mapping@0.3.13': resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} @@ -283,6 +340,14 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@malept/cross-spawn-promise@2.0.0': + resolution: {integrity: sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==} + engines: {node: '>= 12.13.0'} + + '@malept/flatpak-bundler@0.4.0': + resolution: {integrity: sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==} + engines: {node: '>= 10.0.0'} + '@modelcontextprotocol/sdk@1.29.0': resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} @@ -299,9 +364,32 @@ packages: '@emnapi/core': ^1.7.1 '@emnapi/runtime': ^1.7.1 + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@2.4.0': + resolution: {integrity: sha512-X5XaVWZIBCT7HHZGm5I7ZQXDwLG+bGXuSrMQAW+7Zvl87h1kmc1ZB1VSRJcpUfoUrGQp4Fkoxm5kZ+Ms+aW+eA==} + engines: {node: '>= 20.19.0'} + '@oxc-project/types@0.137.0': resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==} + '@peculiar/asn1-schema@2.9.4': + resolution: {integrity: sha512-GjzePcT9Iw8NzeOPf73iNS9xM+TBhd/FilAfP+RQGkTMQJTVWtytN3JHJACCjf/ABNau5S7mS3g+DcuxmRgYEg==} + engines: {node: '>=14'} + + '@peculiar/json-schema@1.1.12': + resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} + engines: {node: '>=8.0.0'} + + '@peculiar/utils@2.0.3': + resolution: {integrity: sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==} + + '@peculiar/webcrypto@1.7.1': + resolution: {integrity: sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==} + engines: {node: '>=14.18.0'} + '@rolldown/binding-android-arm64@1.1.3': resolution: {integrity: sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -337,42 +425,36 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.1.3': resolution: {integrity: sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.1.3': resolution: {integrity: sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.1.3': resolution: {integrity: sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.1.3': resolution: {integrity: sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-musl@1.1.3': resolution: {integrity: sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@rolldown/binding-openharmony-arm64@1.1.3': resolution: {integrity: sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==} @@ -400,6 +482,10 @@ packages: '@rolldown/pluginutils@1.0.1': resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@sindresorhus/is@4.6.0': + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} @@ -424,12 +510,19 @@ packages: svelte: ^5.46.4 vite: ^8.0.0-beta.7 || ^8.0.0 + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + '@tsconfig/svelte@5.0.8': resolution: {integrity: sha512-UkNnw1/oFEfecR8ypyHIQuWYdkPvHiwcQ78sh+ymIiYoF+uc5H1UBetbjyqT+vgGJ3qQN6nhucJviX6HesWtKQ==} '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/chai@5.2.3': resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} @@ -451,6 +544,9 @@ packages: '@types/d3-zoom@3.0.8': resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==} + '@types/debug@4.1.13': + resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} + '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -460,12 +556,27 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/fs-extra@9.0.13': + resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + + '@types/http-cache-semantics@4.2.0': + resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} + + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + '@types/node@22.20.0': resolution: {integrity: sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==} '@types/node@26.1.0': resolution: {integrity: sha512-O0A1G3xPGy4w7AgQdAQYUlQ+BKk2Oovw8eRpofyp5KdBZULnbe+WqaOVNrm705SHphCiG4XHsACrSmPu1f+Kgw==} + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -501,6 +612,10 @@ packages: '@vitest/utils@4.1.9': resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + '@xmldom/xmldom@0.8.15': + resolution: {integrity: sha512-/5NV/vDALVFDXgLmfsy9TRCBlKwO2LNBFzpzvb9iIj+jR+eSc6DLYYvVOdivT/jm7MtU6TebYuRmzEOI7w40UA==} + engines: {node: '>=10.0.0'} + '@xyflow/svelte@1.6.1': resolution: {integrity: sha512-o84RpjWMAs5tXjYPj6PUjMccBgeF4TFA8DllBqMSbnhJD3ZxLhttp4NmdHZAIM1T5bK5NAzCat+M37uT/9+rTw==} peerDependencies: @@ -509,6 +624,10 @@ packages: '@xyflow/system@0.0.78': resolution: {integrity: sha512-lY0z2qP33fUhTva9Vaxrk0lqZta2pkbxB1trHAx1omnJqRtPvDlAQYV2r5fhS6AdpkulYmbNW0svy+A4/t4B/g==} + abbrev@4.0.0: + resolution: {integrity: sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==} + engines: {node: ^20.17.0 || >=22.9.0} + accepts@2.0.0: resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} engines: {node: '>= 0.6'} @@ -518,6 +637,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + ajv-formats@3.0.1: resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} peerDependencies: @@ -529,26 +652,114 @@ packages: ajv@8.20.0: resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + app-builder-lib@26.15.3: + resolution: {integrity: sha512-2VnyWkqsP5v5XbBhL3tD5Syx8iNPBYsoU7kY4S2fz7wg8Rj/nztWKCUzGKaFRTv0Xwf3/H058CR1Kvtd/3lRow==} + engines: {node: '>=14.0.0'} + peerDependencies: + dmg-builder: 26.15.3 + electron-builder-squirrel-windows: 26.15.3 + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-query@5.3.1: resolution: {integrity: sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==} engines: {node: '>= 0.4'} + asn1js@3.0.10: + resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} + engines: {node: '>=12.0.0'} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + async-exit-hook@2.0.1: + resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} + engines: {node: '>=0.12.0'} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + body-parser@2.3.0: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} + brace-expansion@1.1.18: + resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==} + + brace-expansion@2.1.4: + resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==} + + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} + engines: {node: 20 || >=22} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + builder-util-runtime@9.7.0: + resolution: {integrity: sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==} + engines: {node: '>=12.0.0'} + + builder-util@26.15.3: + resolution: {integrity: sha512-q2hn7Mbo2nFNkVekPiHFx6Nfo3hURmES3tfBn+k5Pqxl2RkmP3QGqZUhH/q9Pch/4G05NRhPjDlVj1O8q4Txvw==} + engines: {node: '>=14.0.0'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + bytestreamjs@2.0.1: + resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} + engines: {node: '>=6.0.0'} + + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -561,14 +772,62 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chromium-pickle-js@0.2.0: + resolution: {integrity: sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==} + + ci-info@4.3.1: + resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==} + engines: {node: '>=8'} + + ci-info@4.4.0: + resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==} + engines: {node: '>=8'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} + + compare-version@0.1.2: + resolution: {integrity: sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==} + engines: {node: '>=0.10.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + content-disposition@1.1.0: resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} engines: {node: '>=18'} @@ -604,6 +863,9 @@ packages: '@cordisjs/plugin-loader': optional: true + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.6: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} @@ -662,10 +924,22 @@ packages: supports-color: optional: true + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -677,17 +951,72 @@ packages: devalue@5.8.1: resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} + dir-compare@4.2.0: + resolution: {integrity: sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==} + + dmg-builder@26.15.3: + resolution: {integrity: sha512-O3zJUFUYHJKgzPqioHxfxzBzlSC1eXCSr79gMSBKBP5AgjjpmrydMsMLotEg9fAJF36vdUncb+4ndRNxoPdlSQ==} + + dotenv-expand@11.0.7: + resolution: {integrity: sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + duplexer2@0.1.4: + resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-builder-squirrel-windows@26.15.3: + resolution: {integrity: sha512-Jc19XPV9y9+2bAdZPkXuVNGNIEFBq9poHC61l8Kv6FdK7DRG3+Ic0rerC0DXOaeHNz8yW0fg/JnF8GQROOF5MA==} + + electron-builder@26.15.3: + resolution: {integrity: sha512-a1KM5heqS3gQCZzizXEI8RjJy3QVogULPdeSknt76uLDpBIW/HDGsMg/XgP0riP6PI9COsRvFITKKGDqA8fJxA==} + engines: {node: '>=14.0.0'} + hasBin: true + + electron-publish@26.15.3: + resolution: {integrity: sha512-g/2bn8YTavY4cuS5F+jOS7zmZbXXBV8KZ8yHKfJjFPoKtzBqrpCdNPxBd3tqdBwP7BVd0lGzf7Bk2s0KesWZ4Q==} + + electron-winstaller@5.4.0: + resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==} + engines: {node: '>=8.0.0'} + + electron@38.8.6: + resolution: {integrity: sha512-lyBhcVi9QYAZL6FO6r5twAWAjWnYomo3iVDvrb5SJZlq928BGemHOKG0tPIq41NOLaCu9f3XdEEjMkjQPjprRg==} + engines: {node: '>= 12.20.55'} + hasBin: true + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + encodeurl@2.0.0: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -703,11 +1032,19 @@ packages: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + esbuild@0.28.1: resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==} engines: {node: '>=18'} hasBin: true + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -741,6 +1078,9 @@ packages: resolution: {integrity: sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==} engines: {node: '>=12.0.0'} + exponential-backoff@3.1.3: + resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==} + express-rate-limit@8.5.2: resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} engines: {node: '>= 16'} @@ -751,6 +1091,11 @@ packages: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + fast-check@4.8.0: resolution: {integrity: sha512-GOJ158CUMnN6cSahsv4+ExARvIDuzzinFjkp0E9WtiBa5zcVeLozVkWaE4IzFcc+Y48Wp1EDlUZsXRyAztQcSg==} engines: {node: '>=12.17.0'} @@ -761,6 +1106,9 @@ packages: fast-uri@3.1.3: resolution: {integrity: sha512-i70LwGWUduXqzicKXWshooq+sWL1K3WUU5rKZNG/0i3a1OSoX3HqhH5WbWwTmqWfor4urUakGPiRQcleRZTwOg==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -770,10 +1118,17 @@ packages: picomatch: optional: true + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} + finalhandler@2.1.1: resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} engines: {node: '>= 18.0.0'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -782,6 +1137,33 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.3.1: + resolution: {integrity: sha512-eXvGGwZ5CL17ZSwHWd3bbgk7UUpF6IFHtP57NYYakPvHOs8GDgDe5KJI36jIJzDkJ6eJjuzRA8eBQb6SkKue0g==} + engines: {node: '>=14.14'} + + fs-extra@11.4.0: + resolution: {integrity: sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -790,6 +1172,10 @@ packages: function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -798,14 +1184,37 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + has-symbols@1.1.0: resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -814,17 +1223,40 @@ packages: resolution: {integrity: sha512-1yrb/+w6HWQJrUCLkJ2IF5jNIPvvFkblV5RNOYl6bV+OA6p9GLcMpHFFGTosSvHvcAUibuUukRqhlYI4z32C7Q==} engines: {node: '>=16.9.0'} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + html-to-image@1.11.13: resolution: {integrity: sha512-cuOPoI7WApyhBElTTb9oqsawRvZ0rHhaHwghRLlTuffoD1B2aDemlCruLeZrUIIdvG7gs9xeELEPm6PhuASqrg==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + iconv-lite@0.7.2: resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} engines: {node: '>=0.10.0'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -836,24 +1268,80 @@ packages: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-promise@4.0.0: resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} is-reference@3.0.3: resolution: {integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.7: + resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} + engines: {node: '>= 18.0.0'} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + isexe@3.1.5: + resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} + engines: {node: '>=18'} + + isexe@4.0.0: + resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} + engines: {node: '>=20'} + + jake@10.9.4: + resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} + engines: {node: '>=10'} + hasBin: true + + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} + hasBin: true + jose@6.2.3: resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + js-yaml@4.3.2: + resolution: {integrity: sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} json-schema-typed@8.0.2: resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.2.1: + resolution: {integrity: sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + lazy-val@1.0.5: + resolution: {integrity: sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==} + lightningcss-android-arm64@1.32.0: resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} engines: {node: '>= 12.0.0'} @@ -889,28 +1377,24 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] lightningcss-linux-arm64-musl@1.32.0: resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] lightningcss-linux-x64-gnu@1.32.0: resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] lightningcss-linux-x64-musl@1.32.0: resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] lightningcss-win32-arm64-msvc@1.32.0: resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} @@ -931,6 +1415,17 @@ packages: locate-character@3.0.0: resolution: {integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -946,14 +1441,65 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + mime-db@1.54.0: resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} engines: {node: '>= 0.6'} + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + mime-types@3.0.2: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + minimatch@10.2.6: + resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==} + engines: {node: 18 || 20 || >=22} + + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.1.0: + resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==} + engines: {node: '>= 18'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -970,6 +1516,30 @@ packages: resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} engines: {node: '>= 0.6'} + node-abi@4.35.0: + resolution: {integrity: sha512-ymk4aIzxdPopw2giv8Fs1Ec6vybGkjmyxUwVqhkI4MCy2tVfXdkOGGWieWVjL0THgH+7a8lRdevyupoYj3Js/Q==} + engines: {node: '>=22.12.0'} + + node-api-version@0.2.1: + resolution: {integrity: sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==} + + node-gyp@12.4.0: + resolution: {integrity: sha512-OMcPNvqTCFUnNaBlmdgq+lfNqY7gTiSmNRDjY3uAXRyudeKZEZxu3CLtjMQrx4zZxCX2b/mpNqTtwuCJgXhHkw==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + nopt@9.0.0: + resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -989,10 +1559,22 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -1003,6 +1585,13 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pe-library@0.4.1: + resolution: {integrity: sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==} + engines: {node: '>=12', npm: '>=6'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1014,21 +1603,61 @@ packages: resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} engines: {node: '>=16.20.0'} + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} + engines: {node: '>=16.0.0'} + + plist@3.1.0: + resolution: {integrity: sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==} + engines: {node: '>=10.4.0'} + postcss@8.5.16: resolution: {integrity: sha512-vuwillviilfKZsg0VGj5R/YwwcHx4SLsIOI/7K6mQkWx+l5cUHTjj5g0AasTBcyXsbfTgrwsUNmVUb5xVwyPwg==} engines: {node: ^10 || ^12 || >=14} + proc-log@6.1.0: + resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==} + engines: {node: ^20.17.0 || >=22.9.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + pure-rand@8.4.1: resolution: {integrity: sha512-c58R2+SPFcSIPXoU834QN/KPDDOSd8sXcSrqf6e83Me6Rrp1EYkxukkjXMVrKvKaADs1SOyNkWdfvLf6zY8qLQ==} + pvtsutils@1.3.6: + resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} + + pvutils@1.2.0: + resolution: {integrity: sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==} + engines: {node: '>=16.0.0'} + qs@6.15.3: resolution: {integrity: sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==} engines: {node: '>=0.6'} + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + range-parser@1.3.0: resolution: {integrity: sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==} engines: {node: '>= 0.6'} @@ -1037,14 +1666,44 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} + read-binary-file-arch@1.0.6: + resolution: {integrity: sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==} + hasBin: true + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + resedit@1.7.2: + resolution: {integrity: sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==} + engines: {node: '>=12', npm: '>=6'} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rolldown@1.1.3: resolution: {integrity: sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -1058,19 +1717,47 @@ packages: resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} engines: {node: '>=6'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - send@1.2.1: - resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} - engines: {node: '>= 18'} + sanitize-filename@1.6.4: + resolution: {integrity: sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==} - serve-static@2.2.1: - resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} - engines: {node: '>= 18'} + sax@1.6.1: + resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} + engines: {node: '>=11.0.0'} - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.4: + resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.8.5: + resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -1099,13 +1786,31 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + stat-mode@1.0.0: + resolution: {integrity: sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==} + engines: {node: '>= 6'} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} @@ -1113,6 +1818,25 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + sumchecker@3.0.1: + resolution: {integrity: sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==} + engines: {node: '>= 8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + svelte-check@4.7.1: resolution: {integrity: sha512-FGUOmAqxXdN/H9Zm8slrqO7SLtFisXRB7rfOsHNJ3MLTD2po/+Stg8XyErkpumPHbuUiYTcqrEIzxpVWKTLqtg==} engines: {node: '>= 18.0.0'} @@ -1125,6 +1849,20 @@ packages: resolution: {integrity: sha512-/d0QHehmRuJW8gVz395MTkPcPozxzdjBMBE8oEYGz8O3b9KTMzzQ9ZHJQLuFKOHOPQbU6kx/X4iid/EBBzH7iw==} engines: {node: '>=18'} + tar@7.5.22: + resolution: {integrity: sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==} + engines: {node: '>=18'} + + temp-file@3.4.0: + resolution: {integrity: sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==} + + temp@0.9.4: + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} + engines: {node: '>=6.0.0'} + + tiny-async-pool@1.3.0: + resolution: {integrity: sha512-01EAw5EDrcVrdgyCLgoSPvqznC0sVxDSVeiOz09FUpjh71G79VCqneOr+xvt7T1r76CF6ZZfPjHorN2+d+3mqA==} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -1140,10 +1878,20 @@ packages: resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.7: + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} + engines: {node: '>=14.14'} + toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + truncate-utf8-bytes@1.0.2: + resolution: {integrity: sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==} + tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} @@ -1167,10 +1915,31 @@ packages: undici-types@8.3.0: resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==} + undici@6.28.1: + resolution: {integrity: sha512-zWpdTVD54H48CIybL0rWQ3ukpb9d23wM7eH5RtfdmeP70cWHNjtfo7P4vZX+5CoDcO53J4Pu5uXp7lNfjc6DRA==} + engines: {node: '>=18.17'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} + unzipper@0.12.5: + resolution: {integrity: sha512-tXYOi9R57Uj/2Z25SOs5RRSzq886MBQj2gY8dPL+xl/kv6s6SvByoKfAtvfVeEuhntWDgjd2o9p2lb4TVPAz0A==} + + utf8-byte-length@1.0.5: + resolution: {integrity: sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -1271,16 +2040,33 @@ packages: resolution: {integrity: sha512-FlRLb15WwAOz1A9OQDbf6oOKKSiefi5VK0ZRF2wgH9xk3o5SnU11tNPaOnQuAh1Ucr66cwwvVXaeVRaFdRBt5g==} hasBin: true + webcrypto-core@1.9.2: + resolution: {integrity: sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + which@6.0.1: + resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} hasBin: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -1296,6 +2082,36 @@ packages: utf-8-validate: optional: true + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + zimmerframe@1.1.4: resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} @@ -1315,6 +2131,84 @@ snapshots: '@dagrejs/graphlib@4.0.5': {} + '@electron/asar@3.4.1': + dependencies: + commander: 5.1.0 + glob: 7.2.3 + minimatch: 3.1.5 + + '@electron/fuses@1.8.0': + dependencies: + chalk: 4.1.2 + fs-extra: 9.1.0 + minimist: 1.2.8 + + '@electron/get@2.0.3': + dependencies: + debug: 4.4.3 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/get@3.1.0': + dependencies: + debug: 4.4.3 + env-paths: 2.2.1 + fs-extra: 8.1.0 + got: 11.8.6 + progress: 2.0.3 + semver: 6.3.1 + sumchecker: 3.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/notarize@2.5.0': + dependencies: + debug: 4.4.3 + fs-extra: 9.1.0 + promise-retry: 2.0.1 + transitivePeerDependencies: + - supports-color + + '@electron/osx-sign@1.3.3': + dependencies: + compare-version: 0.1.2 + debug: 4.4.3 + fs-extra: 10.1.0 + isbinaryfile: 4.0.10 + minimist: 1.2.8 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + + '@electron/rebuild@4.2.0': + dependencies: + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3 + node-abi: 4.35.0 + node-api-version: 0.2.1 + node-gyp: 12.4.0 + read-binary-file-arch: 1.0.6 + transitivePeerDependencies: + - supports-color + + '@electron/universal@2.0.3': + dependencies: + '@electron/asar': 3.4.1 + '@malept/cross-spawn-promise': 2.0.0 + debug: 4.4.3 + dir-compare: 4.2.0 + fs-extra: 11.4.0 + minimatch: 9.0.9 + plist: 3.1.0 + transitivePeerDependencies: + - supports-color + '@emnapi/core@1.11.1': dependencies: '@emnapi/wasi-threads': 1.2.2 @@ -1413,6 +2307,10 @@ snapshots: dependencies: hono: 4.12.27 + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.3 + '@jridgewell/gen-mapping@0.3.13': dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -1432,6 +2330,19 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@malept/cross-spawn-promise@2.0.0': + dependencies: + cross-spawn: 7.0.6 + + '@malept/flatpak-bundler@0.4.0': + dependencies: + debug: 4.4.3 + fs-extra: 9.1.0 + lodash: 4.18.1 + tmp-promise: 3.0.3 + transitivePeerDependencies: + - supports-color + '@modelcontextprotocol/sdk@1.29.0(zod@3.25.76)': dependencies: '@hono/node-server': 1.19.14(hono@4.12.27) @@ -1461,8 +2372,34 @@ snapshots: '@tybys/wasm-util': 0.10.3 optional: true + '@noble/hashes@1.4.0': {} + + '@noble/hashes@2.4.0': {} + '@oxc-project/types@0.137.0': {} + '@peculiar/asn1-schema@2.9.4': + dependencies: + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + + '@peculiar/json-schema@1.1.12': + dependencies: + tslib: 2.8.1 + + '@peculiar/utils@2.0.3': + dependencies: + tslib: 2.8.1 + + '@peculiar/webcrypto@1.7.1': + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + tslib: 2.8.1 + webcrypto-core: 1.9.2 + '@rolldown/binding-android-arm64@1.1.3': optional: true @@ -1514,6 +2451,8 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} + '@sindresorhus/is@4.6.0': {} + '@standard-schema/spec@1.1.0': {} '@svelte-put/shortcut@4.2.0(svelte@5.56.4)': @@ -1526,14 +2465,18 @@ snapshots: '@sveltejs/load-config@0.2.0': {} - '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4))': + '@sveltejs/vite-plugin-svelte@7.1.2(svelte@5.56.4)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4))': dependencies: deepmerge: 4.3.1 magic-string: 0.30.21 obug: 2.1.3 svelte: 5.56.4 - vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4) - vitefu: 1.1.3(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4)) + vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) + vitefu: 1.1.3(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) + + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 '@tsconfig/svelte@5.0.8': {} @@ -1542,6 +2485,13 @@ snapshots: tslib: 2.8.1 optional: true + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.2.0 + '@types/keyv': 3.1.4 + '@types/node': 26.1.0 + '@types/responselike': 1.0.3 + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 @@ -1568,12 +2518,28 @@ snapshots: '@types/d3-interpolate': 3.0.4 '@types/d3-selection': 3.0.11 + '@types/debug@4.1.13': + dependencies: + '@types/ms': 2.1.0 + '@types/deep-eql@4.0.2': {} '@types/emscripten@1.39.10': {} '@types/estree@1.0.9': {} + '@types/fs-extra@9.0.13': + dependencies: + '@types/node': 26.1.0 + + '@types/http-cache-semantics@4.2.0': {} + + '@types/keyv@3.1.4': + dependencies: + '@types/node': 26.1.0 + + '@types/ms@2.1.0': {} + '@types/node@22.20.0': dependencies: undici-types: 6.21.0 @@ -1582,11 +2548,15 @@ snapshots: dependencies: undici-types: 8.3.0 + '@types/responselike@1.0.3': + dependencies: + '@types/node': 26.1.0 + '@types/trusted-types@2.0.7': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.20.0 + '@types/node': 26.1.0 '@vitest/expect@4.1.9': dependencies: @@ -1597,21 +2567,21 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.9(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4))': + '@vitest/mocker@4.1.9(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4))': dependencies: '@vitest/spy': 4.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4) + vite: 8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) - '@vitest/mocker@4.1.9(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4))': + '@vitest/mocker@4.1.9(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4))': dependencies: '@vitest/spy': 4.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4) + vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) '@vitest/pretty-format@4.1.9': dependencies: @@ -1637,6 +2607,8 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + '@xmldom/xmldom@0.8.15': {} + '@xyflow/svelte@1.6.1(svelte@5.56.4)': dependencies: '@svelte-put/shortcut': 4.2.0(svelte@5.56.4) @@ -1655,6 +2627,8 @@ snapshots: d3-selection: 3.0.0 d3-zoom: 3.0.0 + abbrev@4.0.0: {} + accepts@2.0.0: dependencies: mime-types: 3.0.2 @@ -1662,6 +2636,8 @@ snapshots: acorn@8.17.0: {} + agent-base@7.1.4: {} + ajv-formats@3.0.1(ajv@8.20.0): optionalDependencies: ajv: 8.20.0 @@ -1673,12 +2649,92 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + app-builder-lib@26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3): + dependencies: + '@electron/asar': 3.4.1 + '@electron/fuses': 1.8.0 + '@electron/get': 3.1.0 + '@electron/notarize': 2.5.0 + '@electron/osx-sign': 1.3.3 + '@electron/rebuild': 4.2.0 + '@electron/universal': 2.0.3 + '@malept/flatpak-bundler': 0.4.0 + '@noble/hashes': 2.4.0 + '@peculiar/webcrypto': 1.7.1 + '@types/fs-extra': 9.0.13 + ajv: 8.20.0 + asn1js: 3.0.10 + async-exit-hook: 2.0.1 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 + chromium-pickle-js: 0.2.0 + ci-info: 4.3.1 + debug: 4.4.3 + dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) + dotenv: 16.6.1 + dotenv-expand: 11.0.7 + ejs: 3.1.10 + electron-builder-squirrel-windows: 26.15.3(dmg-builder@26.15.3) + electron-publish: 26.15.3 + fs-extra: 10.1.0 + hosted-git-info: 4.1.0 + isbinaryfile: 5.0.7 + jiti: 2.7.0 + js-yaml: 4.3.2 + json5: 2.2.3 + lazy-val: 1.0.5 + minimatch: 10.2.6 + pkijs: 3.4.0 + plist: 3.1.0 + proper-lockfile: 4.1.2 + resedit: 1.7.2 + semver: 7.7.4 + tar: 7.5.22 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + unzipper: 0.12.5 + which: 5.0.0 + transitivePeerDependencies: + - supports-color + + argparse@2.0.1: {} + aria-query@5.3.1: {} + asn1js@3.0.10: + dependencies: + pvtsutils: 1.3.6 + pvutils: 1.2.0 + tslib: 2.8.1 + assertion-error@2.0.1: {} + async-exit-hook@2.0.1: {} + + async@3.2.6: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + aws4@1.13.2: {} + axobject-query@4.1.0: {} + balanced-match@1.0.2: {} + + balanced-match@4.0.4: {} + + base64-js@1.5.1: {} + + bluebird@3.7.2: {} + body-parser@2.3.0: dependencies: bytes: 3.1.2 @@ -1693,8 +2749,65 @@ snapshots: transitivePeerDependencies: - supports-color + brace-expansion@1.1.18: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.1.4: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@5.0.9: + dependencies: + balanced-match: 4.0.4 + + buffer-crc32@0.2.13: {} + + buffer-from@1.1.2: {} + + builder-util-runtime@9.7.0: + dependencies: + debug: 4.4.3 + sax: 1.6.1 + transitivePeerDependencies: + - supports-color + + builder-util@26.15.3: + dependencies: + '@types/debug': 4.1.13 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.3 + fs-extra: 10.1.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + js-yaml: 4.3.2 + sanitize-filename: 1.6.4 + source-map-support: 0.5.21 + stat-mode: 1.0.0 + temp-file: 3.4.0 + tiny-async-pool: 1.3.0 + transitivePeerDependencies: + - supports-color + bytes@3.1.2: {} + bytestreamjs@2.0.1: {} + + cacheable-lookup@5.0.4: {} + + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -1707,12 +2820,51 @@ snapshots: chai@6.2.2: {} + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 + chownr@3.0.0: {} + + chromium-pickle-js@0.2.0: {} + + ci-info@4.3.1: {} + + ci-info@4.4.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + clsx@2.1.1: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@5.1.0: {} + + compare-version@0.1.2: {} + + concat-map@0.0.1: {} + content-disposition@1.1.0: {} content-type@1.0.5: {} @@ -1730,6 +2882,8 @@ snapshots: '@standard-schema/spec': 1.1.0 cosmokit: 1.8.1 + core-util-is@1.0.3: {} + cors@2.8.6: dependencies: object-assign: 4.1.1 @@ -1783,24 +2937,128 @@ snapshots: dependencies: ms: 2.1.3 + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + deepmerge@4.3.1: {} + defer-to-connect@2.0.1: {} + + delayed-stream@1.0.0: {} + depd@2.0.0: {} detect-libc@2.1.2: {} devalue@5.8.1: {} + dir-compare@4.2.0: + dependencies: + minimatch: 3.1.5 + p-limit: 3.1.0 + + dmg-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): + dependencies: + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 + fs-extra: 10.1.0 + js-yaml: 4.3.2 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + dotenv-expand@11.0.7: + dependencies: + dotenv: 16.6.1 + + dotenv@16.6.1: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 + duplexer2@0.1.4: + dependencies: + readable-stream: 2.3.8 + ee-first@1.1.1: {} + ejs@3.1.10: + dependencies: + jake: 10.9.4 + + electron-builder-squirrel-windows@26.15.3(dmg-builder@26.15.3): + dependencies: + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 + electron-winstaller: 5.4.0 + transitivePeerDependencies: + - dmg-builder + - supports-color + + electron-builder@26.15.3(electron-builder-squirrel-windows@26.15.3): + dependencies: + app-builder-lib: 26.15.3(dmg-builder@26.15.3)(electron-builder-squirrel-windows@26.15.3) + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + ci-info: 4.4.0 + dmg-builder: 26.15.3(electron-builder-squirrel-windows@26.15.3) + fs-extra: 10.1.0 + lazy-val: 1.0.5 + simple-update-notifier: 2.0.0 + yargs: 17.7.3 + transitivePeerDependencies: + - electron-builder-squirrel-windows + - supports-color + + electron-publish@26.15.3: + dependencies: + '@types/fs-extra': 9.0.13 + aws4: 1.13.2 + builder-util: 26.15.3 + builder-util-runtime: 9.7.0 + chalk: 4.1.2 + form-data: 4.0.6 + fs-extra: 10.1.0 + lazy-val: 1.0.5 + mime: 2.6.0 + transitivePeerDependencies: + - supports-color + + electron-winstaller@5.4.0: + dependencies: + '@electron/asar': 3.4.1 + debug: 4.4.3 + fs-extra: 7.0.1 + lodash: 4.18.1 + temp: 0.9.4 + transitivePeerDependencies: + - supports-color + + electron@38.8.6: + dependencies: + '@electron/get': 2.0.3 + '@types/node': 22.20.0 + extract-zip: 2.0.1 + transitivePeerDependencies: + - supports-color + + emoji-regex@8.0.0: {} + encodeurl@2.0.0: {} + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + + env-paths@2.2.1: {} + + err-code@2.0.3: {} + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -1811,6 +3069,13 @@ snapshots: dependencies: es-errors: 1.3.0 + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + esbuild@0.28.1: optionalDependencies: '@esbuild/aix-ppc64': 0.28.1 @@ -1840,6 +3105,8 @@ snapshots: '@esbuild/win32-ia32': 0.28.1 '@esbuild/win32-x64': 0.28.1 + escalade@3.2.0: {} + escape-html@1.0.3: {} esm-env@1.2.2: {} @@ -1862,6 +3129,8 @@ snapshots: expect-type@1.4.0: {} + exponential-backoff@3.1.3: {} + express-rate-limit@8.5.2(express@5.2.1): dependencies: express: 5.2.1 @@ -1900,6 +3169,14 @@ snapshots: transitivePeerDependencies: - supports-color + extract-zip@2.0.1: + dependencies: + debug: 4.4.3 + get-stream: 5.2.0 + yauzl: 2.10.0 + transitivePeerDependencies: + - supports-color + fast-check@4.8.0: dependencies: pure-rand: 8.4.1 @@ -1908,10 +3185,18 @@ snapshots: fast-uri@3.1.3: {} + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: picomatch: 4.0.4 + filelist@1.0.6: + dependencies: + minimatch: 5.1.9 + finalhandler@2.1.1: dependencies: debug: 4.4.3 @@ -1923,15 +3208,64 @@ snapshots: transitivePeerDependencies: - supports-color + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + forwarded@0.2.0: {} fresh@2.0.0: {} + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-extra@11.3.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-extra@11.4.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.2.1 + universalify: 2.0.1 + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true function-bind@1.1.2: {} + get-caller-file@2.0.5: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -1950,18 +3284,59 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.2 + get-stream@5.2.0: + dependencies: + pump: 3.0.4 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.5 + once: 1.4.0 + path-is-absolute: 1.0.1 + gopd@1.2.0: {} + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + + graceful-fs@4.2.11: {} + + has-flag@4.0.0: {} + has-symbols@1.1.0: {} + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + hasown@2.0.4: dependencies: function-bind: 1.1.2 hono@4.12.27: {} + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + html-to-image@1.11.13: {} + http-cache-semantics@4.2.0: {} + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -1970,30 +3345,98 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + iconv-lite@0.7.2: dependencies: safer-buffer: 2.1.2 + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} ip-address@10.2.0: {} ipaddr.js@1.9.1: {} + is-fullwidth-code-point@3.0.0: {} + is-promise@4.0.0: {} is-reference@3.0.3: dependencies: '@types/estree': 1.0.9 + isarray@1.0.0: {} + + isbinaryfile@4.0.10: {} + + isbinaryfile@5.0.7: {} + isexe@2.0.0: {} + isexe@3.1.5: {} + + isexe@4.0.0: {} + + jake@10.9.4: + dependencies: + async: 3.2.6 + filelist: 1.0.6 + picocolors: 1.1.1 + + jiti@2.7.0: {} + jose@6.2.3: {} + js-yaml@4.3.2: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + json-schema-traverse@1.0.0: {} json-schema-typed@8.0.2: {} + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.2.1: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + lazy-val@1.0.5: {} + lightningcss-android-arm64@1.32.0: optional: true @@ -2045,6 +3488,14 @@ snapshots: locate-character@3.0.0: {} + lodash@4.18.1: {} + + lowercase-keys@2.0.0: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -2055,12 +3506,52 @@ snapshots: merge-descriptors@2.0.0: {} + mime-db@1.52.0: {} + mime-db@1.54.0: {} + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + mime-types@3.0.2: dependencies: mime-db: 1.54.0 + mime@2.6.0: {} + + mimic-response@1.0.1: {} + + mimic-response@3.1.0: {} + + minimatch@10.2.6: + dependencies: + brace-expansion: 5.0.9 + + minimatch@3.1.5: + dependencies: + brace-expansion: 1.1.18 + + minimatch@5.1.9: + dependencies: + brace-expansion: 2.1.4 + + minimatch@9.0.9: + dependencies: + brace-expansion: 2.1.4 + + minimist@1.2.8: {} + + minipass@7.1.3: {} + + minizlib@3.1.0: + dependencies: + minipass: 7.1.3 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + mri@1.2.0: {} ms@2.1.3: {} @@ -2069,6 +3560,35 @@ snapshots: negotiator@1.0.0: {} + node-abi@4.35.0: + dependencies: + semver: 7.8.5 + + node-api-version@0.2.1: + dependencies: + semver: 7.8.5 + + node-gyp@12.4.0: + dependencies: + env-paths: 2.2.1 + exponential-backoff: 3.1.3 + graceful-fs: 4.2.11 + nopt: 9.0.0 + proc-log: 6.1.0 + semver: 7.8.5 + tar: 7.5.22 + tinyglobby: 0.2.17 + undici: 6.28.1 + which: 6.0.1 + + node-int64@0.4.0: {} + + nopt@9.0.0: + dependencies: + abbrev: 4.0.0 + + normalize-url@6.1.0: {} + object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -2083,38 +3603,95 @@ snapshots: dependencies: wrappy: 1.0.2 + p-cancelable@2.1.1: {} + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + parseurl@1.3.3: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-to-regexp@8.4.2: {} pathe@2.0.3: {} + pe-library@0.4.1: {} + + pend@1.2.0: {} + picocolors@1.1.1: {} picomatch@4.0.4: {} pkce-challenge@5.0.1: {} + pkijs@3.4.0: + dependencies: + '@noble/hashes': 1.4.0 + asn1js: 3.0.10 + bytestreamjs: 2.0.1 + pvtsutils: 1.3.6 + pvutils: 1.2.0 + tslib: 2.8.1 + + plist@3.1.0: + dependencies: + '@xmldom/xmldom': 0.8.15 + base64-js: 1.5.1 + xmlbuilder: 15.1.1 + postcss@8.5.16: dependencies: nanoid: 3.3.15 picocolors: 1.1.1 source-map-js: 1.2.1 + proc-log@6.1.0: {} + + process-nextick-args@2.0.1: {} + + progress@2.0.3: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + pure-rand@8.4.1: {} + pvtsutils@1.3.6: + dependencies: + tslib: 2.8.1 + + pvutils@1.2.0: {} + qs@6.15.3: dependencies: es-define-property: 1.0.1 side-channel: 1.1.1 + quick-lru@5.1.1: {} + range-parser@1.3.0: {} raw-body@3.0.2: @@ -2124,10 +3701,44 @@ snapshots: iconv-lite: 0.7.2 unpipe: 1.0.0 + read-binary-file-arch@1.0.6: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readdirp@4.1.2: {} + require-directory@2.1.1: {} + require-from-string@2.0.2: {} + resedit@1.7.2: + dependencies: + pe-library: 0.4.1 + + resolve-alpn@1.2.1: {} + + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + + retry@0.12.0: {} + + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + rolldown@1.1.3: dependencies: '@oxc-project/types': 0.137.0 @@ -2163,8 +3774,24 @@ snapshots: dependencies: mri: 1.2.0 + safe-buffer@5.1.2: {} + safer-buffer@2.1.2: {} + sanitize-filename@1.6.4: + dependencies: + truncate-utf8-bytes: 1.0.2 + + sax@1.6.1: {} + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.7.4: {} + + semver@7.8.5: {} + send@1.2.1: dependencies: debug: 4.4.3 @@ -2228,14 +3855,53 @@ snapshots: siginfo@2.0.0: {} + signal-exit@3.0.7: {} + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.8.5 + source-map-js@1.2.1: {} + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + stackback@0.0.2: {} + stat-mode@1.0.0: {} + statuses@2.0.2: {} std-env@4.1.0: {} + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + sumchecker@3.0.1: + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + svelte-check@4.7.1(picomatch@4.0.4)(svelte@5.56.4)(typescript@5.9.3): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -2270,6 +3936,28 @@ snapshots: transitivePeerDependencies: - '@typescript-eslint/types' + tar@7.5.22: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.3 + minizlib: 3.1.0 + yallist: 5.0.0 + + temp-file@3.4.0: + dependencies: + async-exit-hook: 2.0.1 + fs-extra: 10.1.0 + + temp@0.9.4: + dependencies: + mkdirp: 0.5.6 + rimraf: 2.6.3 + + tiny-async-pool@1.3.0: + dependencies: + semver: 5.7.2 + tinybench@2.9.0: {} tinyexec@1.2.4: {} @@ -2281,8 +3969,18 @@ snapshots: tinyrainbow@3.1.0: {} + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.7 + + tmp@0.2.7: {} + toidentifier@1.0.1: {} + truncate-utf8-bytes@1.0.2: + dependencies: + utf8-byte-length: 1.0.5 + tslib@2.8.1: {} tsx@4.22.4: @@ -2303,11 +4001,29 @@ snapshots: undici-types@8.3.0: {} + undici@6.28.1: {} + + universalify@0.1.2: {} + + universalify@2.0.1: {} + unpipe@1.0.0: {} + unzipper@0.12.5: + dependencies: + bluebird: 3.7.2 + duplexer2: 0.1.4 + fs-extra: 11.3.1 + graceful-fs: 4.2.11 + node-int64: 0.4.0 + + utf8-byte-length@1.0.5: {} + + util-deprecate@1.0.2: {} + vary@1.1.2: {} - vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4): + vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -2318,9 +4034,10 @@ snapshots: '@types/node': 22.20.0 esbuild: 0.28.1 fsevents: 2.3.3 + jiti: 2.7.0 tsx: 4.22.4 - vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4): + vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -2331,16 +4048,17 @@ snapshots: '@types/node': 26.1.0 esbuild: 0.28.1 fsevents: 2.3.3 + jiti: 2.7.0 tsx: 4.22.4 - vitefu@1.1.3(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4)): + vitefu@1.1.3(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)): optionalDependencies: - vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4) + vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) - vitest@4.1.9(@types/node@22.20.0)(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)): + vitest@4.1.9(@types/node@22.20.0)(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)): dependencies: '@vitest/expect': 4.1.9 - '@vitest/mocker': 4.1.9(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4)) + '@vitest/mocker': 4.1.9(vite@8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) '@vitest/pretty-format': 4.1.9 '@vitest/runner': 4.1.9 '@vitest/snapshot': 4.1.9 @@ -2357,17 +4075,17 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(tsx@4.22.4) + vite: 8.1.2(@types/node@22.20.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 22.20.0 transitivePeerDependencies: - msw - vitest@4.1.9(@types/node@26.1.0)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4)): + vitest@4.1.9(@types/node@26.1.0)(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)): dependencies: '@vitest/expect': 4.1.9 - '@vitest/mocker': 4.1.9(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4)) + '@vitest/mocker': 4.1.9(vite@8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)) '@vitest/pretty-format': 4.1.9 '@vitest/runner': 4.1.9 '@vitest/snapshot': 4.1.9 @@ -2384,7 +4102,7 @@ snapshots: tinyexec: 1.2.4 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(tsx@4.22.4) + vite: 8.1.2(@types/node@26.1.0)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 26.1.0 @@ -2395,19 +4113,68 @@ snapshots: dependencies: '@types/emscripten': 1.39.10 + webcrypto-core@1.9.2: + dependencies: + '@peculiar/asn1-schema': 2.9.4 + '@peculiar/json-schema': 1.1.12 + '@peculiar/utils': 2.0.3 + asn1js: 3.0.10 + tslib: 2.8.1 + which@2.0.2: dependencies: isexe: 2.0.0 + which@5.0.0: + dependencies: + isexe: 3.1.5 + + which@6.0.1: + dependencies: + isexe: 4.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 stackback: 0.0.2 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrappy@1.0.2: {} ws@8.21.0: {} + xmlbuilder@15.1.1: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yallist@5.0.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.3: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yocto-queue@0.1.0: {} + zimmerframe@1.1.4: {} zod-to-json-schema@3.25.2(zod@3.25.76): diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index db524585..347f8e41 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,4 @@ packages: - "front-end" - "mcp-server" + - "desktop" From 77dbffd01c23c2b3fab3d16441655dca65b0da84 Mon Sep 17 00:00:00 2001 From: Luca Sforza Date: Thu, 10 Sep 2026 14:08:03 +0200 Subject: [PATCH 3/5] MCP server on desktop web app --- front-end/src/App.svelte | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/front-end/src/App.svelte b/front-end/src/App.svelte index f9141103..7e7d1604 100644 --- a/front-end/src/App.svelte +++ b/front-end/src/App.svelte @@ -35,9 +35,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. }; const trainingController = new TrainingController(); const rpcHandler = new BrowserRPCHandler(undefined, undefined, undefined, trainingController, projectBridge); - // Electron does not ship the browser-backed MCP WebSocket listener. The - // desktop host remains a local editor; web keeps the existing MCP behavior. - if (!hostWorkspace.desktop) rpcHandler.connect(); + // Both web and desktop renderers connect to the external MCP WebSocket + // server; the renderer remains the sole owner of live diagram state. + rpcHandler.connect(); function handleWorkspaceOpen(session: ProjectWorkspaceSession): void { workspaceError = null; From c7364001b87058cfaebd17c6c9f1dee8630a3115 Mon Sep 17 00:00:00 2001 From: Luca Sforza Date: Thu, 10 Sep 2026 14:33:32 +0200 Subject: [PATCH 4/5] ci: fix pnpm setup and test flatpak --- .github/workflows/ci.yml | 59 ++++++++++++++++++++++++++++-- .github/workflows/deploy-pages.yml | 2 +- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0f596a4..364ed0df 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: - version: 10 + version: 10.11.0 - uses: actions/setup-node@v4 with: node-version: 20 @@ -46,7 +46,7 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: - version: 10 + version: 10.11.0 - uses: actions/setup-node@v4 with: node-version: 20 @@ -129,7 +129,7 @@ jobs: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 with: - version: 10 + version: 10.11.0 - uses: actions/setup-node@v4 with: node-version: 20 @@ -137,3 +137,56 @@ jobs: - run: pnpm install - run: pnpm --filter @nnmodelling/mcp-server run build - run: pnpm --filter @nnmodelling/mcp-server run test + + flatpak-ci: + name: Flatpak build and smoke test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: 10.11.0 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + - run: pnpm install --frozen-lockfile + - name: Test Electron host + run: pnpm --dir desktop test + - name: Install Flatpak tooling + run: | + sudo apt-get update + sudo apt-get install --yes flatpak flatpak-builder xauth xvfb + flatpak remote-add --if-not-exists --user flathub \ + https://dl.flathub.org/repo/flathub.flatpakrepo + - name: Build and install Flatpak + run: | + flatpak-builder --force-clean --user \ + --install-deps-from=flathub \ + --repo=repo --install builddir \ + io.github.LucaSforza.NNModelling.yml + - name: Validate installed Flatpak + run: | + flatpak info --user io.github.LucaSforza.NNModelling + test -x "$(flatpak info --user --show-location \ + io.github.LucaSforza.NNModelling)/files/bin/run.sh" + - name: Smoke test Flatpak launch + run: | + set +e + timeout --signal=TERM --kill-after=5s 20s \ + xvfb-run -a -s "-screen 0 1280x1024x24" \ + flatpak run --user io.github.LucaSforza.NNModelling --disable-gpu + status=$? + if [ "$status" -ne 124 ]; then + echo "Flatpak exited before the smoke-test timeout (status $status)" + exit "$status" + fi + - name: Build Flatpak bundle + run: | + flatpak build-bundle repo NNModelling.flatpak \ + io.github.LucaSforza.NNModelling \ + --runtime-repo=https://dl.flathub.org/repo/flathub.flatpakrepo + - uses: actions/upload-artifact@v4 + with: + name: nnmodelling-flatpak + path: NNModelling.flatpak diff --git a/.github/workflows/deploy-pages.yml b/.github/workflows/deploy-pages.yml index f018f2ba..310f0148 100644 --- a/.github/workflows/deploy-pages.yml +++ b/.github/workflows/deploy-pages.yml @@ -27,7 +27,7 @@ jobs: - name: Set up pnpm uses: pnpm/action-setup@v4 with: - version: 10 + version: 10.11.0 - name: Set up Node.js uses: actions/setup-node@v4 From cc8453dc888db71121035923f129d0b935f6f22c Mon Sep 17 00:00:00 2001 From: Luca Sforza Date: Thu, 10 Sep 2026 14:40:24 +0200 Subject: [PATCH 5/5] ci: provide dbus session for flatpak smoke test --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 364ed0df..036ee069 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -156,7 +156,7 @@ jobs: - name: Install Flatpak tooling run: | sudo apt-get update - sudo apt-get install --yes flatpak flatpak-builder xauth xvfb + sudo apt-get install --yes dbus-daemon dbus-x11 flatpak flatpak-builder xauth xvfb flatpak remote-add --if-not-exists --user flathub \ https://dl.flathub.org/repo/flathub.flatpakrepo - name: Build and install Flatpak @@ -174,7 +174,7 @@ jobs: run: | set +e timeout --signal=TERM --kill-after=5s 20s \ - xvfb-run -a -s "-screen 0 1280x1024x24" \ + dbus-run-session -- xvfb-run -a -s "-screen 0 1280x1024x24" \ flatpak run --user io.github.LucaSforza.NNModelling --disable-gpu status=$? if [ "$status" -ne 124 ]; then