diff --git a/.claude-context.md b/.claude-context.md new file mode 100644 index 00000000..2ca845f7 --- /dev/null +++ b/.claude-context.md @@ -0,0 +1,72 @@ +# Claude Context: Detaching Tauri from Yaak + +## Goal +Make Yaak runnable as a standalone CLI without Tauri as a dependency. The core Rust crates in `crates/` should be usable independently, while Tauri-specific code lives in `crates-tauri/`. + +## Project Structure +``` +crates/ # Core crates - should NOT depend on Tauri +crates-tauri/ # Tauri-specific crates (yaak-app, yaak-tauri-utils, etc.) +crates-cli/ # CLI crate (yaak-cli) +``` + +## Completed Work + +### 1. Folder Restructure +- Moved Tauri-dependent app code to `crates-tauri/yaak-app/` +- Created `crates-tauri/yaak-tauri-utils/` for shared Tauri utilities (window traits, api_client, error handling) +- Created `crates-cli/yaak-cli/` for the standalone CLI + +### 2. Decoupled Crates (no longer depend on Tauri) +- **yaak-models**: Uses `init_standalone()` pattern for CLI database access +- **yaak-http**: Removed Tauri plugin, HttpConnectionManager initialized in yaak-app setup +- **yaak-common**: Only contains Tauri-free utilities (serde, platform) +- **yaak-crypto**: Removed Tauri plugin, EncryptionManager initialized in yaak-app setup, commands moved to yaak-app +- **yaak-grpc**: Replaced AppHandle with GrpcConfig struct, uses tokio::process::Command instead of Tauri sidecar + +### 3. CLI Implementation +- Basic CLI at `crates-cli/yaak-cli/src/main.rs` +- Commands: workspaces, requests, send (by ID), get (ad-hoc URL), create +- Uses same database as Tauri app via `yaak_models::init_standalone()` + +## Remaining Work + +### Crates Still Depending on Tauri (in `crates/`) +1. **yaak-git** (3 files) - Moderate complexity +2. **yaak-plugins** (13 files) - **Hardest** - deeply integrated with Tauri for plugin-to-window communication +3. **yaak-sync** (4 files) - Moderate complexity +4. **yaak-ws** (5 files) - Moderate complexity + +### Pattern for Decoupling +1. Remove Tauri plugin `init()` function from the crate +2. Move commands to `yaak-app/src/commands.rs` or keep inline in `lib.rs` +3. Move extension traits (e.g., `SomethingManagerExt`) to yaak-app or yaak-tauri-utils +4. Initialize managers in yaak-app's `.setup()` block +5. Remove `tauri` from Cargo.toml dependencies +6. Update `crates-tauri/yaak-app/capabilities/default.json` to remove the plugin permission +7. Replace `tauri::async_runtime::block_on` with `tokio::runtime::Handle::current().block_on()` + +## Key Files +- `crates-tauri/yaak-app/src/lib.rs` - Main Tauri app, setup block initializes managers +- `crates-tauri/yaak-app/src/commands.rs` - Migrated Tauri commands +- `crates-tauri/yaak-app/src/models_ext.rs` - Database plugin and extension traits +- `crates-tauri/yaak-tauri-utils/src/window.rs` - WorkspaceWindowTrait for window state +- `crates/yaak-models/src/lib.rs` - Contains `init_standalone()` for CLI usage + +## Git Branch +Working on `detach-tauri` branch. + +## Recent Commits +``` +c40cff40 Remove Tauri dependencies from yaak-crypto and yaak-grpc +df495f1d Move Tauri utilities from yaak-common to yaak-tauri-utils +481e0273 Remove Tauri dependencies from yaak-http and yaak-common +10568ac3 Add HTTP request sending to yaak-cli +bcb7d600 Add yaak-cli stub with basic database access +e718a5f1 Refactor models_ext to use init_standalone from yaak-models +``` + +## Testing +- Run `cargo check -p ` to verify a crate builds without Tauri +- Run `npm run app-dev` to test the Tauri app still works +- Run `cargo run -p yaak-cli -- --help` to test the CLI diff --git a/.claude/rules.md b/.claude/rules.md index eb78902d..aa0fb391 100644 --- a/.claude/rules.md +++ b/.claude/rules.md @@ -1,22 +1,27 @@ # Project Rules ## General Development + - **NEVER** commit or push without explicit confirmation ## Build and Lint + - **ALWAYS** run `npm run lint` after modifying TypeScript or JavaScript files - Run `npm run bootstrap` after changing plugin runtime or MCP server code ## Plugin System ### Backend Constraints + - Always use `UpdateSource::Plugin` when calling database methods from plugin events - Never send timestamps (`createdAt`, `updatedAt`) from TypeScript - Rust backend controls these - Backend uses `NaiveDateTime` (no timezone) so avoid sending ISO timestamp strings ### MCP Server + - MCP server has **no active window context** - cannot call `window.workspaceId()` - Get workspace ID from `workspaceCtx.yaak.workspace.list()` instead ## Rust Type Generation -- Run `cd src-tauri && cargo test --package yaak-plugins` to regenerate TypeScript bindings after modifying Rust event types + +- Run `cargo test --package yaak-plugins` (and for other crates) to regenerate TypeScript bindings after modifying Rust event types diff --git a/.gitattributes b/.gitattributes index 0b6a9cb7..4565c740 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,7 +1,7 @@ -src-tauri/vendored/**/* linguist-generated=true -src-tauri/gen/schemas/**/* linguist-generated=true +crates-tauri/yaak-app/vendored/**/* linguist-generated=true +crates-tauri/yaak-app/gen/schemas/**/* linguist-generated=true **/bindings/* linguist-generated=true -src-tauri/yaak-templates/pkg/* linguist-generated=true +crates/yaak-templates/pkg/* linguist-generated=true # Ensure consistent line endings for test files that check exact content -src-tauri/yaak-http/tests/test.txt text eol=lf +crates/yaak-http/tests/test.txt text eol=lf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 65edb220..bf32f4a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,14 +18,13 @@ jobs: - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: - workspaces: 'src-tauri' shared-key: ci cache-on-failure: true - run: npm ci + - run: npm run bootstrap - run: npm run lint - name: Run JS Tests run: npm test - name: Run Rust Tests run: cargo test --all - working-directory: src-tauri diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 947f57ae..03c53e60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -60,7 +60,6 @@ jobs: - uses: Swatinem/rust-cache@v2 with: - workspaces: 'src-tauri' shared-key: ci cache-on-failure: true @@ -94,7 +93,6 @@ jobs: run: npm test - name: Run Rust Tests run: cargo test --all - working-directory: src-tauri - name: Set version run: npm run replace-version @@ -128,4 +126,4 @@ jobs: releaseBody: '[Changelog __VERSION__](https://yaak.app/blog/__VERSION__)' releaseDraft: true prerelease: true - args: '${{ matrix.args }} --config ./src-tauri/tauri.release.conf.json' + args: '${{ matrix.args }} --config ./crates-tauri/yaak-app/tauri.release.conf.json' diff --git a/.gitignore b/.gitignore index 3511cfe4..e8922cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,8 @@ codebook.toml target # Per-worktree Tauri config (generated by post-checkout hook) -src-tauri/tauri.worktree.conf.json +crates-tauri/yaak-app/tauri.worktree.conf.json + +# Tauri auto-generated permission files +**/permissions/autogenerated +**/permissions/schemas diff --git a/src-tauri/Cargo.lock b/Cargo.lock similarity index 97% rename from src-tauri/Cargo.lock rename to Cargo.lock index 91635e6d..d8872b4e 100644 --- a/src-tauri/Cargo.lock +++ b/Cargo.lock @@ -102,6 +102,56 @@ dependencies = [ "libc", ] +[[package]] +name = "anstream" +version = "0.6.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" + +[[package]] +name = "anstyle-parse" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" +dependencies = [ + "anstyle", + "once_cell_polyfill", + "windows-sys 0.61.2", +] + [[package]] name = "anyhow" version = "1.0.98" @@ -850,6 +900,46 @@ dependencies = [ "zeroize", ] +[[package]] +name = "clap" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.101", +] + +[[package]] +name = "clap_lex" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" + [[package]] name = "clipboard-win" version = "5.4.0" @@ -897,6 +987,12 @@ dependencies = [ "objc", ] +[[package]] +name = "colorchoice" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" + [[package]] name = "colored" version = "2.2.0" @@ -1478,6 +1574,19 @@ dependencies = [ "regex", ] +[[package]] +name = "env_logger" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f" +dependencies = [ + "anstream", + "anstyle", + "env_filter", + "jiff", + "log", +] + [[package]] name = "equivalent" version = "1.0.2" @@ -2684,6 +2793,12 @@ dependencies = [ "once_cell", ] +[[package]] +name = "is_terminal_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" + [[package]] name = "itertools" version = "0.14.0" @@ -2722,6 +2837,30 @@ dependencies = [ "system-deps", ] +[[package]] +name = "jiff" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e67e8da4c49d6d9909fe03361f9b620f58898859f5c7aded68351e85e71ecf50" +dependencies = [ + "jiff-static", + "log", + "portable-atomic", + "portable-atomic-util", + "serde_core", +] + +[[package]] +name = "jiff-static" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0c84ee7f197eca9a86c6fd6cb771e55eb991632f15f2bc3ca6ec838929e6e78" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.101", +] + [[package]] name = "jni" version = "0.21.1" @@ -3614,6 +3753,12 @@ version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +[[package]] +name = "once_cell_polyfill" +version = "1.70.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" + [[package]] name = "opaque-debug" version = "0.3.1" @@ -4100,6 +4245,21 @@ dependencies = [ "universal-hash", ] +[[package]] +name = "portable-atomic" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f89776e4d69bb58bc6993e99ffa1d11f228b839984854c7daeb5d37f87cbe950" + +[[package]] +name = "portable-atomic-util" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507" +dependencies = [ + "portable-atomic", +] + [[package]] name = "potential_utf" version = "0.1.2" @@ -6817,6 +6977,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + [[package]] name = "uuid" version = "1.17.0" @@ -7841,6 +8007,8 @@ dependencies = [ "md5 0.8.0", "mime_guess", "openssl-sys", + "r2d2", + "r2d2_sqlite", "rand 0.9.1", "reqwest", "serde", @@ -7861,10 +8029,13 @@ dependencies = [ "thiserror 2.0.17", "tokio", "tokio-stream", + "tokio-tungstenite", "tokio-util", "ts-rs", + "url", "uuid", "yaak-common", + "yaak-core", "yaak-crypto", "yaak-fonts", "yaak-git", @@ -7876,20 +8047,40 @@ dependencies = [ "yaak-plugins", "yaak-sse", "yaak-sync", + "yaak-tauri-utils", "yaak-templates", "yaak-tls", "yaak-ws", ] +[[package]] +name = "yaak-cli" +version = "0.1.0" +dependencies = [ + "clap", + "dirs", + "env_logger", + "log", + "serde_json", + "tokio", + "yaak-crypto", + "yaak-http", + "yaak-models", + "yaak-plugins", + "yaak-templates", +] + [[package]] name = "yaak-common" version = "0.1.0" dependencies = [ - "regex", - "reqwest", - "serde", "serde_json", - "tauri", +] + +[[package]] +name = "yaak-core" +version = "0.0.0" +dependencies = [ "thiserror 2.0.17", ] @@ -7903,8 +8094,6 @@ dependencies = [ "keyring", "log", "serde", - "tauri", - "tauri-plugin", "thiserror 2.0.17", "yaak-models", ] @@ -7931,10 +8120,9 @@ dependencies = [ "serde", "serde_json", "serde_yaml", - "tauri", - "tauri-plugin", "thiserror 2.0.17", "ts-rs", + "url", "yaak-models", "yaak-sync", ] @@ -7955,8 +8143,6 @@ dependencies = [ "prost-types", "serde", "serde_json", - "tauri", - "tauri-plugin-shell", "thiserror 2.0.17", "tokio", "tokio-stream", @@ -7984,7 +8170,6 @@ dependencies = [ "reqwest", "serde", "serde_json", - "tauri", "thiserror 2.0.17", "tokio", "tokio-util", @@ -8012,6 +8197,7 @@ dependencies = [ "ts-rs", "yaak-common", "yaak-models", + "yaak-tauri-utils", ] [[package]] @@ -8044,12 +8230,9 @@ dependencies = [ "serde", "serde_json", "sha2", - "tauri", - "tauri-plugin", - "tauri-plugin-dialog", "thiserror 2.0.17", "ts-rs", - "yaak-common", + "yaak-core", ] [[package]] @@ -8071,9 +8254,6 @@ dependencies = [ "serde", "serde_json", "sha2", - "tauri", - "tauri-plugin", - "tauri-plugin-shell", "thiserror 2.0.17", "tokio", "tokio-tungstenite", @@ -8106,14 +8286,24 @@ dependencies = [ "serde_path_to_error", "serde_yaml", "sha1", - "tauri", - "tauri-plugin", "thiserror 2.0.17", "tokio", "ts-rs", "yaak-models", ] +[[package]] +name = "yaak-tauri-utils" +version = "0.1.0" +dependencies = [ + "regex", + "reqwest", + "serde", + "tauri", + "thiserror 2.0.17", + "yaak-common", +] + [[package]] name = "yaak-templates" version = "0.1.0" @@ -8149,19 +8339,17 @@ name = "yaak-ws" version = "0.1.0" dependencies = [ "futures-util", + "http", "log", "md5 0.8.0", "serde", "serde_json", - "tauri", - "tauri-plugin", "thiserror 2.0.17", "tokio", "tokio-tungstenite", "url", "yaak-http", "yaak-models", - "yaak-plugins", "yaak-templates", "yaak-tls", ] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..18a45a58 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,69 @@ +[workspace] +resolver = "2" +members = [ + # Shared crates (no Tauri dependency) + "crates/yaak-core", + "crates/yaak-common", + "crates/yaak-crypto", + "crates/yaak-git", + "crates/yaak-grpc", + "crates/yaak-http", + "crates/yaak-models", + "crates/yaak-plugins", + "crates/yaak-sse", + "crates/yaak-sync", + "crates/yaak-templates", + "crates/yaak-tls", + "crates/yaak-ws", + # CLI crates + "crates-cli/yaak-cli", + # Tauri-specific crates + "crates-tauri/yaak-app", + "crates-tauri/yaak-fonts", + "crates-tauri/yaak-license", + "crates-tauri/yaak-mac-window", + "crates-tauri/yaak-tauri-utils", +] + +[workspace.dependencies] +chrono = "0.4.42" +hex = "0.4.3" +keyring = "3.6.3" +log = "0.4.29" +reqwest = "0.12.20" +rustls = { version = "0.23.34", default-features = false } +rustls-platform-verifier = "0.6.2" +serde = "1.0.228" +serde_json = "1.0.145" +sha2 = "0.10.9" +tauri = "2.9.5" +tauri-plugin = "2.5.2" +tauri-plugin-dialog = "2.4.2" +tauri-plugin-shell = "2.3.3" +thiserror = "2.0.17" +tokio = "1.48.0" +ts-rs = "11.1.0" + +# Internal crates - shared +yaak-core = { path = "crates/yaak-core" } +yaak-common = { path = "crates/yaak-common" } +yaak-crypto = { path = "crates/yaak-crypto" } +yaak-git = { path = "crates/yaak-git" } +yaak-grpc = { path = "crates/yaak-grpc" } +yaak-http = { path = "crates/yaak-http" } +yaak-models = { path = "crates/yaak-models" } +yaak-plugins = { path = "crates/yaak-plugins" } +yaak-sse = { path = "crates/yaak-sse" } +yaak-sync = { path = "crates/yaak-sync" } +yaak-templates = { path = "crates/yaak-templates" } +yaak-tls = { path = "crates/yaak-tls" } +yaak-ws = { path = "crates/yaak-ws" } + +# Internal crates - Tauri-specific +yaak-fonts = { path = "crates-tauri/yaak-fonts" } +yaak-license = { path = "crates-tauri/yaak-license" } +yaak-mac-window = { path = "crates-tauri/yaak-mac-window" } +yaak-tauri-utils = { path = "crates-tauri/yaak-tauri-utils" } + +[profile.release] +strip = false diff --git a/biome.json b/biome.json index 679215dc..13111ead 100644 --- a/biome.json +++ b/biome.json @@ -38,8 +38,10 @@ "!**/node_modules", "!**/dist", "!**/build", + "!target", "!scripts", - "!src-tauri", + "!crates", + "!crates-tauri", "!src-web/tailwind.config.cjs", "!src-web/postcss.config.cjs", "!src-web/vite.config.ts", diff --git a/crates-cli/yaak-cli/Cargo.toml b/crates-cli/yaak-cli/Cargo.toml new file mode 100644 index 00000000..f3c3c2fe --- /dev/null +++ b/crates-cli/yaak-cli/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "yaak-cli" +version = "0.1.0" +edition = "2024" +publish = false + +[[bin]] +name = "yaakcli" +path = "src/main.rs" + +[dependencies] +clap = { version = "4", features = ["derive"] } +dirs = "6" +env_logger = "0.11" +log = { workspace = true } +serde_json = { workspace = true } +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } +yaak-crypto = { workspace = true } +yaak-http = { workspace = true } +yaak-models = { workspace = true } +yaak-plugins = { workspace = true } +yaak-templates = { workspace = true } diff --git a/crates-cli/yaak-cli/src/main.rs b/crates-cli/yaak-cli/src/main.rs new file mode 100644 index 00000000..42fb6482 --- /dev/null +++ b/crates-cli/yaak-cli/src/main.rs @@ -0,0 +1,448 @@ +use clap::{Parser, Subcommand}; +use log::info; +use serde_json::Value; +use std::collections::BTreeMap; +use std::path::PathBuf; +use std::sync::Arc; +use tokio::sync::mpsc; +use yaak_crypto::manager::EncryptionManager; +use yaak_http::path_placeholders::apply_path_placeholders; +use yaak_http::sender::{HttpSender, ReqwestSender}; +use yaak_http::types::{SendableHttpRequest, SendableHttpRequestOptions}; +use yaak_models::models::{HttpRequest, HttpRequestHeader, HttpUrlParameter}; +use yaak_models::render::make_vars_hashmap; +use yaak_models::util::UpdateSource; +use yaak_plugins::events::{PluginContext, RenderPurpose}; +use yaak_plugins::manager::PluginManager; +use yaak_plugins::template_callback::PluginTemplateCallback; +use yaak_templates::{parse_and_render, render_json_value_raw, RenderOptions}; + +#[derive(Parser)] +#[command(name = "yaakcli")] +#[command(about = "Yaak CLI - API client from the command line")] +struct Cli { + /// Use a custom data directory + #[arg(long, global = true)] + data_dir: Option, + + /// Environment ID to use for variable substitution + #[arg(long, short, global = true)] + environment: Option, + + /// Enable verbose logging + #[arg(long, short, global = true)] + verbose: bool, + + #[command(subcommand)] + command: Commands, +} + +#[derive(Subcommand)] +enum Commands { + /// List all workspaces + Workspaces, + /// List requests in a workspace + Requests { + /// Workspace ID + workspace_id: String, + }, + /// Send an HTTP request by ID + Send { + /// Request ID + request_id: String, + }, + /// Send a GET request to a URL + Get { + /// URL to request + url: String, + }, + /// Create a new HTTP request + Create { + /// Workspace ID + workspace_id: String, + /// Request name + #[arg(short, long)] + name: String, + /// HTTP method + #[arg(short, long, default_value = "GET")] + method: String, + /// URL + #[arg(short, long)] + url: String, + }, +} + +/// Render an HTTP request with template variables and plugin functions +async fn render_http_request( + r: &HttpRequest, + environment_chain: Vec, + cb: &PluginTemplateCallback, + opt: &RenderOptions, +) -> yaak_templates::error::Result { + let vars = &make_vars_hashmap(environment_chain); + + let mut url_parameters = Vec::new(); + for p in r.url_parameters.clone() { + if !p.enabled { + continue; + } + url_parameters.push(HttpUrlParameter { + enabled: p.enabled, + name: parse_and_render(p.name.as_str(), vars, cb, opt).await?, + value: parse_and_render(p.value.as_str(), vars, cb, opt).await?, + id: p.id, + }) + } + + let mut headers = Vec::new(); + for p in r.headers.clone() { + if !p.enabled { + continue; + } + headers.push(HttpRequestHeader { + enabled: p.enabled, + name: parse_and_render(p.name.as_str(), vars, cb, opt).await?, + value: parse_and_render(p.value.as_str(), vars, cb, opt).await?, + id: p.id, + }) + } + + let mut body = BTreeMap::new(); + for (k, v) in r.body.clone() { + body.insert(k, render_json_value_raw(v, vars, cb, opt).await?); + } + + let authentication = { + let mut disabled = false; + let mut auth = BTreeMap::new(); + match r.authentication.get("disabled") { + Some(Value::Bool(true)) => { + disabled = true; + } + Some(Value::String(tmpl)) => { + disabled = parse_and_render(tmpl.as_str(), vars, cb, opt) + .await + .unwrap_or_default() + .is_empty(); + info!( + "Rendering authentication.disabled as a template: {disabled} from \"{tmpl}\"" + ); + } + _ => {} + } + if disabled { + auth.insert("disabled".to_string(), Value::Bool(true)); + } else { + for (k, v) in r.authentication.clone() { + if k == "disabled" { + auth.insert(k, Value::Bool(false)); + } else { + auth.insert(k, render_json_value_raw(v, vars, cb, opt).await?); + } + } + } + auth + }; + + let url = parse_and_render(r.url.clone().as_str(), vars, cb, opt).await?; + + // Apply path placeholders (e.g., /users/:id -> /users/123) + let (url, url_parameters) = apply_path_placeholders(&url, &url_parameters); + + Ok(HttpRequest { + url, + url_parameters, + headers, + body, + authentication, + ..r.to_owned() + }) +} + +#[tokio::main] +async fn main() { + let cli = Cli::parse(); + + // Initialize logging + if cli.verbose { + env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); + } + + // Use the same app_id for both data directory and keyring + let app_id = if cfg!(debug_assertions) { + "app.yaak.desktop.dev" + } else { + "app.yaak.desktop" + }; + + let data_dir = cli.data_dir.unwrap_or_else(|| { + dirs::data_dir() + .expect("Could not determine data directory") + .join(app_id) + }); + + let db_path = data_dir.join("db.sqlite"); + let blob_path = data_dir.join("blobs.sqlite"); + + let (query_manager, _blob_manager, _rx) = + yaak_models::init_standalone(&db_path, &blob_path).expect("Failed to initialize database"); + + let db = query_manager.connect(); + + // Initialize encryption manager for secure() template function + // Use the same app_id as the Tauri app for keyring access + let encryption_manager = Arc::new( + EncryptionManager::new(query_manager.clone(), app_id), + ); + + // Initialize plugin manager for template functions + let vendored_plugin_dir = data_dir.join("vendored-plugins"); + let installed_plugin_dir = data_dir.join("installed-plugins"); + + // Use system node for CLI (must be in PATH) + let node_bin_path = PathBuf::from("node"); + + // Find the plugin runtime - check YAAK_PLUGIN_RUNTIME env var, then fallback to development path + let plugin_runtime_main = std::env::var("YAAK_PLUGIN_RUNTIME") + .map(PathBuf::from) + .unwrap_or_else(|_| { + // Development fallback: look relative to crate root + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("../../crates-tauri/yaak-app/vendored/plugin-runtime/index.cjs") + }); + + // Create plugin manager (plugins may not be available in CLI context) + let plugin_manager = Arc::new( + PluginManager::new( + vendored_plugin_dir, + installed_plugin_dir, + node_bin_path, + plugin_runtime_main, + false, + ) + .await, + ); + + // Initialize plugins from database + let plugins = db.list_plugins().unwrap_or_default(); + if !plugins.is_empty() { + let errors = plugin_manager + .initialize_all_plugins(plugins, &PluginContext::new_empty()) + .await; + for (plugin_dir, error_msg) in errors { + eprintln!( + "Warning: Failed to initialize plugin '{}': {}", + plugin_dir, error_msg + ); + } + } + + match cli.command { + Commands::Workspaces => { + let workspaces = db.list_workspaces().expect("Failed to list workspaces"); + if workspaces.is_empty() { + println!("No workspaces found"); + } else { + for ws in workspaces { + println!("{} - {}", ws.id, ws.name); + } + } + } + Commands::Requests { workspace_id } => { + let requests = db + .list_http_requests(&workspace_id) + .expect("Failed to list requests"); + if requests.is_empty() { + println!("No requests found in workspace {}", workspace_id); + } else { + for req in requests { + println!("{} - {} {}", req.id, req.method, req.name); + } + } + } + Commands::Send { request_id } => { + let request = db + .get_http_request(&request_id) + .expect("Failed to get request"); + + // Resolve environment chain for variable substitution + let environment_chain = db + .resolve_environments( + &request.workspace_id, + request.folder_id.as_deref(), + cli.environment.as_deref(), + ) + .unwrap_or_default(); + + // Create template callback with plugin support + let plugin_context = PluginContext::new(None, Some(request.workspace_id.clone())); + let template_callback = PluginTemplateCallback::new( + plugin_manager.clone(), + encryption_manager.clone(), + &plugin_context, + RenderPurpose::Send, + ); + + // Render templates in the request + let rendered_request = render_http_request( + &request, + environment_chain, + &template_callback, + &RenderOptions::throw(), + ) + .await + .expect("Failed to render request templates"); + + if cli.verbose { + println!("> {} {}", rendered_request.method, rendered_request.url); + } + + // Convert to sendable request + let sendable = SendableHttpRequest::from_http_request( + &rendered_request, + SendableHttpRequestOptions::default(), + ) + .await + .expect("Failed to build request"); + + // Create event channel for progress + let (event_tx, mut event_rx) = mpsc::channel(100); + + // Spawn task to print events if verbose + let verbose = cli.verbose; + let verbose_handle = if verbose { + Some(tokio::spawn(async move { + while let Some(event) = event_rx.recv().await { + println!("{}", event); + } + })) + } else { + // Drain events silently + tokio::spawn(async move { + while event_rx.recv().await.is_some() {} + }); + None + }; + + // Send the request + let sender = ReqwestSender::new().expect("Failed to create HTTP client"); + let response = sender + .send(sendable, event_tx) + .await + .expect("Failed to send request"); + + // Wait for event handler to finish + if let Some(handle) = verbose_handle { + let _ = handle.await; + } + + // Print response + if verbose { + println!(); + } + println!( + "HTTP {} {}", + response.status, + response.status_reason.as_deref().unwrap_or("") + ); + + if verbose { + for (name, value) in &response.headers { + println!("{}: {}", name, value); + } + println!(); + } + + // Print body + let (body, _stats) = response.text().await.expect("Failed to read response body"); + println!("{}", body); + } + Commands::Get { url } => { + if cli.verbose { + println!("> GET {}", url); + } + + // Build a simple GET request + let sendable = SendableHttpRequest { + url: url.clone(), + method: "GET".to_string(), + headers: vec![], + body: None, + options: SendableHttpRequestOptions::default(), + }; + + // Create event channel for progress + let (event_tx, mut event_rx) = mpsc::channel(100); + + // Spawn task to print events if verbose + let verbose = cli.verbose; + let verbose_handle = if verbose { + Some(tokio::spawn(async move { + while let Some(event) = event_rx.recv().await { + println!("{}", event); + } + })) + } else { + tokio::spawn(async move { + while event_rx.recv().await.is_some() {} + }); + None + }; + + // Send the request + let sender = ReqwestSender::new().expect("Failed to create HTTP client"); + let response = sender + .send(sendable, event_tx) + .await + .expect("Failed to send request"); + + if let Some(handle) = verbose_handle { + let _ = handle.await; + } + + // Print response + if verbose { + println!(); + } + println!( + "HTTP {} {}", + response.status, + response.status_reason.as_deref().unwrap_or("") + ); + + if verbose { + for (name, value) in &response.headers { + println!("{}: {}", name, value); + } + println!(); + } + + // Print body + let (body, _stats) = response.text().await.expect("Failed to read response body"); + println!("{}", body); + } + Commands::Create { + workspace_id, + name, + method, + url, + } => { + let request = HttpRequest { + workspace_id, + name, + method: method.to_uppercase(), + url, + ..Default::default() + }; + + let created = db + .upsert_http_request(&request, &UpdateSource::Sync) + .expect("Failed to create request"); + + println!("Created request: {}", created.id); + } + } + + // Terminate plugin manager gracefully + plugin_manager.terminate().await; +} diff --git a/src-tauri/.gitignore b/crates-tauri/yaak-app/.gitignore similarity index 100% rename from src-tauri/.gitignore rename to crates-tauri/yaak-app/.gitignore diff --git a/src-tauri/Cargo.toml b/crates-tauri/yaak-app/Cargo.toml similarity index 55% rename from src-tauri/Cargo.toml rename to crates-tauri/yaak-app/Cargo.toml index f2702187..7213ea93 100644 --- a/src-tauri/Cargo.toml +++ b/crates-tauri/yaak-app/Cargo.toml @@ -1,21 +1,3 @@ -[workspace] -members = [ - "yaak-crypto", - "yaak-fonts", - "yaak-git", - "yaak-grpc", - "yaak-http", - "yaak-license", - "yaak-mac-window", - "yaak-models", - "yaak-plugins", - "yaak-sse", - "yaak-sync", - "yaak-templates", - "yaak-tls", - "yaak-ws", -] - [package] name = "yaak-app" version = "0.0.0" @@ -28,11 +10,6 @@ publish = false name = "tauri_app_lib" crate-type = ["staticlib", "cdylib", "lib"] -[profile.release] -# Currently disabled due to: -# Warn Failed to add bundler type to the binary: __TAURI_BUNDLE_TYPE variable not found in binary. Make sure tauri crate and tauri-cli are up to date and that symbol stripping is disabled (https://doc.rust-lang.org/cargo/reference/profiles.html#strip). Updater plugin may not be able to update this package. This shouldn't normally happen, please report it to https://github.com/tauri-apps/tauri/issues -strip = false - [features] cargo-clippy = [] default = [] @@ -53,6 +30,8 @@ eventsource-client = { git = "https://github.com/yaakapp/rust-eventsource-client http = { version = "1.2.0", default-features = false } log = { workspace = true } md5 = "0.8.0" +r2d2 = "0.8.10" +r2d2_sqlite = "0.25.0" mime_guess = "2.0.5" rand = "0.9.0" reqwest = { workspace = true, features = ["multipart", "gzip", "brotli", "deflate", "json", "rustls-tls-manual-roots-no-provider", "socks", "http2"] } @@ -73,50 +52,25 @@ tauri-plugin-window-state = "2.4.1" thiserror = { workspace = true } tokio = { workspace = true, features = ["sync"] } tokio-stream = "0.1.17" +tokio-tungstenite = { version = "0.26.2", default-features = false } +url = "2" tokio-util = { version = "0.7", features = ["codec"] } ts-rs = { workspace = true } uuid = "1.12.1" yaak-common = { workspace = true } +yaak-tauri-utils = { workspace = true } +yaak-core = { workspace = true } yaak-crypto = { workspace = true } yaak-fonts = { workspace = true } -yaak-git = { path = "yaak-git" } -yaak-grpc = { path = "yaak-grpc" } +yaak-git = { workspace = true } +yaak-grpc = { workspace = true } yaak-http = { workspace = true } -yaak-license = { path = "yaak-license", optional = true } -yaak-mac-window = { path = "yaak-mac-window" } +yaak-license = { workspace = true, optional = true } +yaak-mac-window = { workspace = true } yaak-models = { workspace = true } yaak-plugins = { workspace = true } yaak-sse = { workspace = true } yaak-sync = { workspace = true } yaak-templates = { workspace = true } yaak-tls = { workspace = true } -yaak-ws = { path = "yaak-ws" } - -[workspace.dependencies] -chrono = "0.4.42" -hex = "0.4.3" -keyring = "3.6.3" -reqwest = "0.12.20" -rustls = { version = "0.23.34", default-features = false } -rustls-platform-verifier = "0.6.2" -serde = "1.0.228" -serde_json = "1.0.145" -sha2 = "0.10.9" -log = "0.4.29" -tauri = "2.9.5" -tauri-plugin = "2.5.2" -tauri-plugin-dialog = "2.4.2" -tauri-plugin-shell = "2.3.3" -thiserror = "2.0.17" -tokio = "1.48.0" -ts-rs = "11.1.0" -yaak-common = { path = "yaak-common" } -yaak-crypto = { path = "yaak-crypto" } -yaak-fonts = { path = "yaak-fonts" } -yaak-http = { path = "yaak-http" } -yaak-models = { path = "yaak-models" } -yaak-plugins = { path = "yaak-plugins" } -yaak-sse = { path = "yaak-sse" } -yaak-sync = { path = "yaak-sync" } -yaak-templates = { path = "yaak-templates" } -yaak-tls = { path = "yaak-tls" } +yaak-ws = { workspace = true } diff --git a/crates-tauri/yaak-app/bindings/gen_watch.ts b/crates-tauri/yaak-app/bindings/gen_watch.ts new file mode 100644 index 00000000..f93ec8c5 --- /dev/null +++ b/crates-tauri/yaak-app/bindings/gen_watch.ts @@ -0,0 +1,3 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type WatchResult = { unlistenEvent: string, }; diff --git a/src-tauri/bindings/index.ts b/crates-tauri/yaak-app/bindings/index.ts similarity index 93% rename from src-tauri/bindings/index.ts rename to crates-tauri/yaak-app/bindings/index.ts index accd88f2..8f19e775 100644 --- a/src-tauri/bindings/index.ts +++ b/crates-tauri/yaak-app/bindings/index.ts @@ -10,6 +10,8 @@ export type UpdateResponse = { "type": "ack" } | { "type": "action", action: Upd export type UpdateResponseAction = "install" | "skip"; +export type WatchResult = { unlistenEvent: string, }; + export type YaakNotification = { timestamp: string, timeout: number | null, id: string, title: string | null, message: string, color: string | null, action: YaakNotificationAction | null, }; export type YaakNotificationAction = { label: string, url: string, }; diff --git a/crates-tauri/yaak-app/bindings/plugins_ext.ts b/crates-tauri/yaak-app/bindings/plugins_ext.ts new file mode 100644 index 00000000..0c036100 --- /dev/null +++ b/crates-tauri/yaak-app/bindings/plugins_ext.ts @@ -0,0 +1,5 @@ +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginUpdateInfo = { name: string, currentVersion: string, latestVersion: string, }; + +export type PluginUpdateNotification = { updateCount: number, plugins: Array, }; diff --git a/src-tauri/build.rs b/crates-tauri/yaak-app/build.rs similarity index 100% rename from src-tauri/build.rs rename to crates-tauri/yaak-app/build.rs diff --git a/src-tauri/capabilities/default.json b/crates-tauri/yaak-app/capabilities/default.json similarity index 89% rename from src-tauri/capabilities/default.json rename to crates-tauri/yaak-app/capabilities/default.json index 5132668c..684716e3 100644 --- a/src-tauri/capabilities/default.json +++ b/crates-tauri/yaak-app/capabilities/default.json @@ -51,13 +51,7 @@ "opener:allow-open-url", "opener:allow-reveal-item-in-dir", "shell:allow-open", - "yaak-crypto:default", "yaak-fonts:default", - "yaak-git:default", - "yaak-mac-window:default", - "yaak-models:default", - "yaak-plugins:default", - "yaak-sync:default", - "yaak-ws:default" + "yaak-mac-window:default" ] } diff --git a/src-tauri/icons/dev/128x128.png b/crates-tauri/yaak-app/icons/dev/128x128.png similarity index 100% rename from src-tauri/icons/dev/128x128.png rename to crates-tauri/yaak-app/icons/dev/128x128.png diff --git a/src-tauri/icons/dev/128x128@2x.png b/crates-tauri/yaak-app/icons/dev/128x128@2x.png similarity index 100% rename from src-tauri/icons/dev/128x128@2x.png rename to crates-tauri/yaak-app/icons/dev/128x128@2x.png diff --git a/src-tauri/icons/dev/32x32.png b/crates-tauri/yaak-app/icons/dev/32x32.png similarity index 100% rename from src-tauri/icons/dev/32x32.png rename to crates-tauri/yaak-app/icons/dev/32x32.png diff --git a/src-tauri/icons/dev/64x64.png b/crates-tauri/yaak-app/icons/dev/64x64.png similarity index 100% rename from src-tauri/icons/dev/64x64.png rename to crates-tauri/yaak-app/icons/dev/64x64.png diff --git a/src-tauri/icons/dev/Square107x107Logo.png b/crates-tauri/yaak-app/icons/dev/Square107x107Logo.png similarity index 100% rename from src-tauri/icons/dev/Square107x107Logo.png rename to crates-tauri/yaak-app/icons/dev/Square107x107Logo.png diff --git a/src-tauri/icons/dev/Square142x142Logo.png b/crates-tauri/yaak-app/icons/dev/Square142x142Logo.png similarity index 100% rename from src-tauri/icons/dev/Square142x142Logo.png rename to crates-tauri/yaak-app/icons/dev/Square142x142Logo.png diff --git a/src-tauri/icons/dev/Square150x150Logo.png b/crates-tauri/yaak-app/icons/dev/Square150x150Logo.png similarity index 100% rename from src-tauri/icons/dev/Square150x150Logo.png rename to crates-tauri/yaak-app/icons/dev/Square150x150Logo.png diff --git a/src-tauri/icons/dev/Square284x284Logo.png b/crates-tauri/yaak-app/icons/dev/Square284x284Logo.png similarity index 100% rename from src-tauri/icons/dev/Square284x284Logo.png rename to crates-tauri/yaak-app/icons/dev/Square284x284Logo.png diff --git a/src-tauri/icons/dev/Square30x30Logo.png b/crates-tauri/yaak-app/icons/dev/Square30x30Logo.png similarity index 100% rename from src-tauri/icons/dev/Square30x30Logo.png rename to crates-tauri/yaak-app/icons/dev/Square30x30Logo.png diff --git a/src-tauri/icons/dev/Square310x310Logo.png b/crates-tauri/yaak-app/icons/dev/Square310x310Logo.png similarity index 100% rename from src-tauri/icons/dev/Square310x310Logo.png rename to crates-tauri/yaak-app/icons/dev/Square310x310Logo.png diff --git a/src-tauri/icons/dev/Square44x44Logo.png b/crates-tauri/yaak-app/icons/dev/Square44x44Logo.png similarity index 100% rename from src-tauri/icons/dev/Square44x44Logo.png rename to crates-tauri/yaak-app/icons/dev/Square44x44Logo.png diff --git a/src-tauri/icons/dev/Square71x71Logo.png b/crates-tauri/yaak-app/icons/dev/Square71x71Logo.png similarity index 100% rename from src-tauri/icons/dev/Square71x71Logo.png rename to crates-tauri/yaak-app/icons/dev/Square71x71Logo.png diff --git a/src-tauri/icons/dev/Square89x89Logo.png b/crates-tauri/yaak-app/icons/dev/Square89x89Logo.png similarity index 100% rename from src-tauri/icons/dev/Square89x89Logo.png rename to crates-tauri/yaak-app/icons/dev/Square89x89Logo.png diff --git a/src-tauri/icons/dev/StoreLogo.png b/crates-tauri/yaak-app/icons/dev/StoreLogo.png similarity index 100% rename from src-tauri/icons/dev/StoreLogo.png rename to crates-tauri/yaak-app/icons/dev/StoreLogo.png diff --git a/src-tauri/icons/dev/android/mipmap-hdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-hdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-hdpi/ic_launcher.png diff --git a/src-tauri/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-hdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/dev/android/mipmap-hdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-hdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-hdpi/ic_launcher_round.png diff --git a/src-tauri/icons/dev/android/mipmap-mdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-mdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-mdpi/ic_launcher.png diff --git a/src-tauri/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-mdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/dev/android/mipmap-mdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-mdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-mdpi/ic_launcher_round.png diff --git a/src-tauri/icons/dev/android/mipmap-xhdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xhdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xhdpi/ic_launcher.png diff --git a/src-tauri/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xhdpi/ic_launcher_round.png diff --git a/src-tauri/icons/dev/android/mipmap-xxhdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xxhdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xxhdpi/ic_launcher.png diff --git a/src-tauri/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xxhdpi/ic_launcher_round.png diff --git a/src-tauri/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xxxhdpi/ic_launcher.png diff --git a/src-tauri/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/dev/android/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/src-tauri/icons/dev/icon.icns b/crates-tauri/yaak-app/icons/dev/icon.icns similarity index 100% rename from src-tauri/icons/dev/icon.icns rename to crates-tauri/yaak-app/icons/dev/icon.icns diff --git a/src-tauri/icons/dev/icon.ico b/crates-tauri/yaak-app/icons/dev/icon.ico similarity index 100% rename from src-tauri/icons/dev/icon.ico rename to crates-tauri/yaak-app/icons/dev/icon.ico diff --git a/src-tauri/icons/dev/icon.png b/crates-tauri/yaak-app/icons/dev/icon.png similarity index 100% rename from src-tauri/icons/dev/icon.png rename to crates-tauri/yaak-app/icons/dev/icon.png diff --git a/src-tauri/icons/dev/ios/AppIcon-20x20@1x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@1x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-20x20@1x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@1x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-20x20@2x-1.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@2x-1.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-20x20@2x-1.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@2x-1.png diff --git a/src-tauri/icons/dev/ios/AppIcon-20x20@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-20x20@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@2x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-20x20@3x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@3x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-20x20@3x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-20x20@3x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-29x29@1x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@1x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-29x29@1x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@1x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-29x29@2x-1.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@2x-1.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-29x29@2x-1.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@2x-1.png diff --git a/src-tauri/icons/dev/ios/AppIcon-29x29@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-29x29@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@2x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-29x29@3x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@3x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-29x29@3x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-29x29@3x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-40x40@1x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@1x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-40x40@1x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@1x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-40x40@2x-1.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@2x-1.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-40x40@2x-1.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@2x-1.png diff --git a/src-tauri/icons/dev/ios/AppIcon-40x40@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-40x40@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@2x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-40x40@3x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@3x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-40x40@3x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-40x40@3x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-512@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-512@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-512@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-512@2x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-60x60@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-60x60@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-60x60@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-60x60@2x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-60x60@3x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-60x60@3x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-60x60@3x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-60x60@3x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-76x76@1x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-76x76@1x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-76x76@1x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-76x76@1x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-76x76@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-76x76@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-76x76@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-76x76@2x.png diff --git a/src-tauri/icons/dev/ios/AppIcon-83.5x83.5@2x.png b/crates-tauri/yaak-app/icons/dev/ios/AppIcon-83.5x83.5@2x.png similarity index 100% rename from src-tauri/icons/dev/ios/AppIcon-83.5x83.5@2x.png rename to crates-tauri/yaak-app/icons/dev/ios/AppIcon-83.5x83.5@2x.png diff --git a/src-tauri/icons/icon-dev.png b/crates-tauri/yaak-app/icons/icon-dev.png similarity index 100% rename from src-tauri/icons/icon-dev.png rename to crates-tauri/yaak-app/icons/icon-dev.png diff --git a/src-tauri/icons/icon.png b/crates-tauri/yaak-app/icons/icon.png similarity index 100% rename from src-tauri/icons/icon.png rename to crates-tauri/yaak-app/icons/icon.png diff --git a/src-tauri/icons/release/128x128.png b/crates-tauri/yaak-app/icons/release/128x128.png similarity index 100% rename from src-tauri/icons/release/128x128.png rename to crates-tauri/yaak-app/icons/release/128x128.png diff --git a/src-tauri/icons/release/128x128@2x.png b/crates-tauri/yaak-app/icons/release/128x128@2x.png similarity index 100% rename from src-tauri/icons/release/128x128@2x.png rename to crates-tauri/yaak-app/icons/release/128x128@2x.png diff --git a/src-tauri/icons/release/32x32.png b/crates-tauri/yaak-app/icons/release/32x32.png similarity index 100% rename from src-tauri/icons/release/32x32.png rename to crates-tauri/yaak-app/icons/release/32x32.png diff --git a/src-tauri/icons/release/64x64.png b/crates-tauri/yaak-app/icons/release/64x64.png similarity index 100% rename from src-tauri/icons/release/64x64.png rename to crates-tauri/yaak-app/icons/release/64x64.png diff --git a/src-tauri/icons/release/Square107x107Logo.png b/crates-tauri/yaak-app/icons/release/Square107x107Logo.png similarity index 100% rename from src-tauri/icons/release/Square107x107Logo.png rename to crates-tauri/yaak-app/icons/release/Square107x107Logo.png diff --git a/src-tauri/icons/release/Square142x142Logo.png b/crates-tauri/yaak-app/icons/release/Square142x142Logo.png similarity index 100% rename from src-tauri/icons/release/Square142x142Logo.png rename to crates-tauri/yaak-app/icons/release/Square142x142Logo.png diff --git a/src-tauri/icons/release/Square150x150Logo.png b/crates-tauri/yaak-app/icons/release/Square150x150Logo.png similarity index 100% rename from src-tauri/icons/release/Square150x150Logo.png rename to crates-tauri/yaak-app/icons/release/Square150x150Logo.png diff --git a/src-tauri/icons/release/Square284x284Logo.png b/crates-tauri/yaak-app/icons/release/Square284x284Logo.png similarity index 100% rename from src-tauri/icons/release/Square284x284Logo.png rename to crates-tauri/yaak-app/icons/release/Square284x284Logo.png diff --git a/src-tauri/icons/release/Square30x30Logo.png b/crates-tauri/yaak-app/icons/release/Square30x30Logo.png similarity index 100% rename from src-tauri/icons/release/Square30x30Logo.png rename to crates-tauri/yaak-app/icons/release/Square30x30Logo.png diff --git a/src-tauri/icons/release/Square310x310Logo.png b/crates-tauri/yaak-app/icons/release/Square310x310Logo.png similarity index 100% rename from src-tauri/icons/release/Square310x310Logo.png rename to crates-tauri/yaak-app/icons/release/Square310x310Logo.png diff --git a/src-tauri/icons/release/Square44x44Logo.png b/crates-tauri/yaak-app/icons/release/Square44x44Logo.png similarity index 100% rename from src-tauri/icons/release/Square44x44Logo.png rename to crates-tauri/yaak-app/icons/release/Square44x44Logo.png diff --git a/src-tauri/icons/release/Square71x71Logo.png b/crates-tauri/yaak-app/icons/release/Square71x71Logo.png similarity index 100% rename from src-tauri/icons/release/Square71x71Logo.png rename to crates-tauri/yaak-app/icons/release/Square71x71Logo.png diff --git a/src-tauri/icons/release/Square89x89Logo.png b/crates-tauri/yaak-app/icons/release/Square89x89Logo.png similarity index 100% rename from src-tauri/icons/release/Square89x89Logo.png rename to crates-tauri/yaak-app/icons/release/Square89x89Logo.png diff --git a/src-tauri/icons/release/StoreLogo.png b/crates-tauri/yaak-app/icons/release/StoreLogo.png similarity index 100% rename from src-tauri/icons/release/StoreLogo.png rename to crates-tauri/yaak-app/icons/release/StoreLogo.png diff --git a/src-tauri/icons/release/android/mipmap-hdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/release/android/mipmap-hdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-hdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-hdpi/ic_launcher.png diff --git a/src-tauri/icons/release/android/mipmap-hdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/release/android/mipmap-hdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-hdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-hdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/release/android/mipmap-hdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/release/android/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-hdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-hdpi/ic_launcher_round.png diff --git a/src-tauri/icons/release/android/mipmap-mdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/release/android/mipmap-mdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-mdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-mdpi/ic_launcher.png diff --git a/src-tauri/icons/release/android/mipmap-mdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/release/android/mipmap-mdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-mdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-mdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/release/android/mipmap-mdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/release/android/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-mdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-mdpi/ic_launcher_round.png diff --git a/src-tauri/icons/release/android/mipmap-xhdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xhdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xhdpi/ic_launcher.png diff --git a/src-tauri/icons/release/android/mipmap-xhdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xhdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xhdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xhdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/release/android/mipmap-xhdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xhdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xhdpi/ic_launcher_round.png diff --git a/src-tauri/icons/release/android/mipmap-xxhdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xxhdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xxhdpi/ic_launcher.png diff --git a/src-tauri/icons/release/android/mipmap-xxhdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xxhdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xxhdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xxhdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/release/android/mipmap-xxhdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xxhdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xxhdpi/ic_launcher_round.png diff --git a/src-tauri/icons/release/android/mipmap-xxxhdpi/ic_launcher.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xxxhdpi/ic_launcher.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xxxhdpi/ic_launcher.png diff --git a/src-tauri/icons/release/android/mipmap-xxxhdpi/ic_launcher_foreground.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xxxhdpi/ic_launcher_foreground.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xxxhdpi/ic_launcher_foreground.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xxxhdpi/ic_launcher_foreground.png diff --git a/src-tauri/icons/release/android/mipmap-xxxhdpi/ic_launcher_round.png b/crates-tauri/yaak-app/icons/release/android/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from src-tauri/icons/release/android/mipmap-xxxhdpi/ic_launcher_round.png rename to crates-tauri/yaak-app/icons/release/android/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/src-tauri/icons/release/icon.icns b/crates-tauri/yaak-app/icons/release/icon.icns similarity index 100% rename from src-tauri/icons/release/icon.icns rename to crates-tauri/yaak-app/icons/release/icon.icns diff --git a/src-tauri/icons/release/icon.ico b/crates-tauri/yaak-app/icons/release/icon.ico similarity index 100% rename from src-tauri/icons/release/icon.ico rename to crates-tauri/yaak-app/icons/release/icon.ico diff --git a/src-tauri/icons/release/icon.png b/crates-tauri/yaak-app/icons/release/icon.png similarity index 100% rename from src-tauri/icons/release/icon.png rename to crates-tauri/yaak-app/icons/release/icon.png diff --git a/src-tauri/icons/release/ios/AppIcon-20x20@1x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@1x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-20x20@1x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@1x.png diff --git a/src-tauri/icons/release/ios/AppIcon-20x20@2x-1.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@2x-1.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-20x20@2x-1.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@2x-1.png diff --git a/src-tauri/icons/release/ios/AppIcon-20x20@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-20x20@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@2x.png diff --git a/src-tauri/icons/release/ios/AppIcon-20x20@3x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@3x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-20x20@3x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-20x20@3x.png diff --git a/src-tauri/icons/release/ios/AppIcon-29x29@1x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@1x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-29x29@1x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@1x.png diff --git a/src-tauri/icons/release/ios/AppIcon-29x29@2x-1.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@2x-1.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-29x29@2x-1.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@2x-1.png diff --git a/src-tauri/icons/release/ios/AppIcon-29x29@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-29x29@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@2x.png diff --git a/src-tauri/icons/release/ios/AppIcon-29x29@3x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@3x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-29x29@3x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-29x29@3x.png diff --git a/src-tauri/icons/release/ios/AppIcon-40x40@1x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@1x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-40x40@1x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@1x.png diff --git a/src-tauri/icons/release/ios/AppIcon-40x40@2x-1.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@2x-1.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-40x40@2x-1.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@2x-1.png diff --git a/src-tauri/icons/release/ios/AppIcon-40x40@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-40x40@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@2x.png diff --git a/src-tauri/icons/release/ios/AppIcon-40x40@3x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@3x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-40x40@3x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-40x40@3x.png diff --git a/src-tauri/icons/release/ios/AppIcon-512@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-512@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-512@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-512@2x.png diff --git a/src-tauri/icons/release/ios/AppIcon-60x60@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-60x60@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-60x60@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-60x60@2x.png diff --git a/src-tauri/icons/release/ios/AppIcon-60x60@3x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-60x60@3x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-60x60@3x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-60x60@3x.png diff --git a/src-tauri/icons/release/ios/AppIcon-76x76@1x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-76x76@1x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-76x76@1x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-76x76@1x.png diff --git a/src-tauri/icons/release/ios/AppIcon-76x76@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-76x76@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-76x76@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-76x76@2x.png diff --git a/src-tauri/icons/release/ios/AppIcon-83.5x83.5@2x.png b/crates-tauri/yaak-app/icons/release/ios/AppIcon-83.5x83.5@2x.png similarity index 100% rename from src-tauri/icons/release/ios/AppIcon-83.5x83.5@2x.png rename to crates-tauri/yaak-app/icons/release/ios/AppIcon-83.5x83.5@2x.png diff --git a/src-tauri/macos/entitlements.plist b/crates-tauri/yaak-app/macos/entitlements.plist similarity index 100% rename from src-tauri/macos/entitlements.plist rename to crates-tauri/yaak-app/macos/entitlements.plist diff --git a/src-tauri/package.json b/crates-tauri/yaak-app/package.json similarity index 100% rename from src-tauri/package.json rename to crates-tauri/yaak-app/package.json diff --git a/crates-tauri/yaak-app/src/commands.rs b/crates-tauri/yaak-app/src/commands.rs new file mode 100644 index 00000000..6103e8ae --- /dev/null +++ b/crates-tauri/yaak-app/src/commands.rs @@ -0,0 +1,94 @@ +use crate::error::Result; +use crate::PluginContextExt; +use std::sync::Arc; +use tauri::{AppHandle, Manager, Runtime, State, WebviewWindow, command}; +use tauri_plugin_dialog::{DialogExt, MessageDialogKind}; +use yaak_crypto::manager::EncryptionManager; +use yaak_plugins::events::GetThemesResponse; +use yaak_plugins::manager::PluginManager; +use yaak_plugins::native_template_functions::{ + decrypt_secure_template_function, encrypt_secure_template_function, +}; + +/// Extension trait for accessing the EncryptionManager from Tauri Manager types. +pub trait EncryptionManagerExt<'a, R> { + fn crypto(&'a self) -> State<'a, EncryptionManager>; +} + +impl<'a, R: Runtime, M: Manager> EncryptionManagerExt<'a, R> for M { + fn crypto(&'a self) -> State<'a, EncryptionManager> { + self.state::() + } +} + +#[command] +pub(crate) async fn cmd_show_workspace_key( + window: WebviewWindow, + workspace_id: &str, +) -> Result<()> { + let key = window.crypto().reveal_workspace_key(workspace_id)?; + window + .dialog() + .message(format!("Your workspace key is \n\n{}", key)) + .kind(MessageDialogKind::Info) + .show(|_v| {}); + Ok(()) +} + +#[command] +pub(crate) async fn cmd_decrypt_template( + window: WebviewWindow, + template: &str, +) -> Result { + let encryption_manager = window.app_handle().state::(); + let plugin_context = window.plugin_context(); + Ok(decrypt_secure_template_function(&encryption_manager, &plugin_context, template)?) +} + +#[command] +pub(crate) async fn cmd_secure_template( + app_handle: AppHandle, + window: WebviewWindow, + template: &str, +) -> Result { + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); + let plugin_context = window.plugin_context(); + Ok(encrypt_secure_template_function(plugin_manager, encryption_manager, &plugin_context, template)?) +} + +#[command] +pub(crate) async fn cmd_get_themes( + window: WebviewWindow, + plugin_manager: State<'_, PluginManager>, +) -> Result> { + Ok(plugin_manager.get_themes(&window.plugin_context()).await?) +} + +#[command] +pub(crate) async fn cmd_enable_encryption( + window: WebviewWindow, + workspace_id: &str, +) -> Result<()> { + window.crypto().ensure_workspace_key(workspace_id)?; + window.crypto().reveal_workspace_key(workspace_id)?; + Ok(()) +} + +#[command] +pub(crate) async fn cmd_reveal_workspace_key( + window: WebviewWindow, + workspace_id: &str, +) -> Result { + Ok(window.crypto().reveal_workspace_key(workspace_id)?) +} + +#[command] +pub(crate) async fn cmd_set_workspace_key( + window: WebviewWindow, + workspace_id: &str, + key: &str, +) -> Result<()> { + window.crypto().set_human_key(workspace_id, key)?; + Ok(()) +} diff --git a/src-tauri/src/encoding.rs b/crates-tauri/yaak-app/src/encoding.rs similarity index 100% rename from src-tauri/src/encoding.rs rename to crates-tauri/yaak-app/src/encoding.rs diff --git a/src-tauri/src/error.rs b/crates-tauri/yaak-app/src/error.rs similarity index 96% rename from src-tauri/src/error.rs rename to crates-tauri/yaak-app/src/error.rs index 1f809251..9af1ce16 100644 --- a/src-tauri/src/error.rs +++ b/crates-tauri/yaak-app/src/error.rs @@ -36,7 +36,7 @@ pub enum Error { PluginError(#[from] yaak_plugins::error::Error), #[error(transparent)] - CommonError(#[from] yaak_common::error::Error), + TauriUtilsError(#[from] yaak_tauri_utils::error::Error), #[error(transparent)] ClipboardError(#[from] tauri_plugin_clipboard_manager::Error), diff --git a/crates-tauri/yaak-app/src/git_ext.rs b/crates-tauri/yaak-app/src/git_ext.rs new file mode 100644 index 00000000..a5787598 --- /dev/null +++ b/crates-tauri/yaak-app/src/git_ext.rs @@ -0,0 +1,112 @@ +//! Tauri-specific extensions for yaak-git. +//! +//! This module provides the Tauri commands for git functionality. + +use crate::error::Result; +use std::path::{Path, PathBuf}; +use tauri::command; +use yaak_git::{ + GitCommit, GitRemote, GitStatusSummary, PullResult, PushResult, + git_add, git_add_credential, git_add_remote, git_checkout_branch, git_commit, + git_create_branch, git_delete_branch, git_fetch_all, git_init, git_log, + git_merge_branch, git_pull, git_push, git_remotes, git_rm_remote, git_status, + git_unstage, +}; + +// NOTE: All of these commands are async to prevent blocking work from locking up the UI + +#[command] +pub async fn cmd_git_checkout(dir: &Path, branch: &str, force: bool) -> Result { + Ok(git_checkout_branch(dir, branch, force)?) +} + +#[command] +pub async fn cmd_git_branch(dir: &Path, branch: &str) -> Result<()> { + Ok(git_create_branch(dir, branch)?) +} + +#[command] +pub async fn cmd_git_delete_branch(dir: &Path, branch: &str) -> Result<()> { + Ok(git_delete_branch(dir, branch)?) +} + +#[command] +pub async fn cmd_git_merge_branch(dir: &Path, branch: &str, force: bool) -> Result<()> { + Ok(git_merge_branch(dir, branch, force)?) +} + +#[command] +pub async fn cmd_git_status(dir: &Path) -> Result { + Ok(git_status(dir)?) +} + +#[command] +pub async fn cmd_git_log(dir: &Path) -> Result> { + Ok(git_log(dir)?) +} + +#[command] +pub async fn cmd_git_initialize(dir: &Path) -> Result<()> { + Ok(git_init(dir)?) +} + +#[command] +pub async fn cmd_git_commit(dir: &Path, message: &str) -> Result<()> { + Ok(git_commit(dir, message)?) +} + +#[command] +pub async fn cmd_git_fetch_all(dir: &Path) -> Result<()> { + Ok(git_fetch_all(dir)?) +} + +#[command] +pub async fn cmd_git_push(dir: &Path) -> Result { + Ok(git_push(dir)?) +} + +#[command] +pub async fn cmd_git_pull(dir: &Path) -> Result { + Ok(git_pull(dir)?) +} + +#[command] +pub async fn cmd_git_add(dir: &Path, rela_paths: Vec) -> Result<()> { + for path in rela_paths { + git_add(dir, &path)?; + } + Ok(()) +} + +#[command] +pub async fn cmd_git_unstage(dir: &Path, rela_paths: Vec) -> Result<()> { + for path in rela_paths { + git_unstage(dir, &path)?; + } + Ok(()) +} + +#[command] +pub async fn cmd_git_add_credential( + dir: &Path, + remote_url: &str, + username: &str, + password: &str, +) -> Result<()> { + Ok(git_add_credential(dir, remote_url, username, password).await?) +} + +#[command] +pub async fn cmd_git_remotes(dir: &Path) -> Result> { + Ok(git_remotes(dir)?) +} + +#[command] +pub async fn cmd_git_add_remote(dir: &Path, name: &str, url: &str) -> Result { + Ok(git_add_remote(dir, name, url)?) +} + +#[command] +pub async fn cmd_git_rm_remote(dir: &Path, name: &str) -> Result<()> { + Ok(git_rm_remote(dir, name)?) +} diff --git a/src-tauri/src/grpc.rs b/crates-tauri/yaak-app/src/grpc.rs similarity index 95% rename from src-tauri/src/grpc.rs rename to crates-tauri/yaak-app/src/grpc.rs index e2621de0..45cce031 100644 --- a/src-tauri/src/grpc.rs +++ b/crates-tauri/yaak-app/src/grpc.rs @@ -1,12 +1,13 @@ use std::collections::BTreeMap; use crate::error::Result; +use crate::PluginContextExt; use KeyAndValueRef::{Ascii, Binary}; use tauri::{Manager, Runtime, WebviewWindow}; use yaak_grpc::{KeyAndValueRef, MetadataMap}; use yaak_models::models::GrpcRequest; -use yaak_models::query_manager::QueryManagerExt; -use yaak_plugins::events::{CallHttpAuthenticationRequest, HttpHeader, PluginContext}; +use crate::models_ext::QueryManagerExt; +use yaak_plugins::events::{CallHttpAuthenticationRequest, HttpHeader}; use yaak_plugins::manager::PluginManager; pub(crate) fn metadata_to_map(metadata: MetadataMap) -> BTreeMap { @@ -82,10 +83,9 @@ pub(crate) async fn build_metadata( }; let plugin_result = plugin_manager .call_http_authentication( - &window, + &window.plugin_context(), &authentication_type, plugin_req, - &PluginContext::new(window), ) .await?; for header in plugin_result.set_headers.unwrap_or_default() { diff --git a/src-tauri/src/history.rs b/crates-tauri/yaak-app/src/history.rs similarity index 98% rename from src-tauri/src/history.rs rename to crates-tauri/yaak-app/src/history.rs index f3f8359a..aaa3e1cb 100644 --- a/src-tauri/src/history.rs +++ b/crates-tauri/yaak-app/src/history.rs @@ -2,7 +2,7 @@ use chrono::{NaiveDateTime, Utc}; use log::debug; use std::sync::OnceLock; use tauri::{AppHandle, Runtime}; -use yaak_models::query_manager::QueryManagerExt; +use crate::models_ext::QueryManagerExt; use yaak_models::util::UpdateSource; const NAMESPACE: &str = "analytics"; diff --git a/src-tauri/src/http_request.rs b/crates-tauri/yaak-app/src/http_request.rs similarity index 97% rename from src-tauri/src/http_request.rs rename to crates-tauri/yaak-app/src/http_request.rs index b8f69993..e7996a0c 100644 --- a/src-tauri/src/http_request.rs +++ b/crates-tauri/yaak-app/src/http_request.rs @@ -3,12 +3,14 @@ use crate::error::Result; use crate::render::render_http_request; use log::{debug, warn}; use std::pin::Pin; +use std::sync::Arc; use std::time::{Duration, Instant}; use tauri::{AppHandle, Manager, Runtime, WebviewWindow}; use tokio::fs::{File, create_dir_all}; use tokio::io::{AsyncRead, AsyncReadExt, AsyncWriteExt}; use tokio::sync::watch::Receiver; use tokio_util::bytes::Bytes; +use yaak_crypto::manager::EncryptionManager; use yaak_http::client::{ HttpConnectionOptions, HttpConnectionProxySetting, HttpConnectionProxySettingAuth, }; @@ -20,13 +22,15 @@ use yaak_http::transaction::HttpTransaction; use yaak_http::types::{ SendableBody, SendableHttpRequest, SendableHttpRequestOptions, append_query_params, }; -use yaak_models::blob_manager::{BlobManagerExt, BodyChunk}; +use crate::models_ext::BlobManagerExt; +use yaak_models::blob_manager::BodyChunk; use yaak_models::models::{ CookieJar, Environment, HttpRequest, HttpResponse, HttpResponseEvent, HttpResponseHeader, HttpResponseState, ProxySetting, ProxySettingAuth, }; -use yaak_models::query_manager::QueryManagerExt; +use crate::models_ext::QueryManagerExt; use yaak_models::util::UpdateSource; +use crate::PluginContextExt; use yaak_plugins::events::{ CallHttpAuthenticationRequest, HttpHeader, PluginContext, RenderPurpose, }; @@ -99,7 +103,7 @@ pub async fn send_http_request( environment, cookie_jar, cancelled_rx, - &PluginContext::new(window), + &window.plugin_context(), ) .await } @@ -114,7 +118,7 @@ pub async fn send_http_request_with_context( plugin_context: &PluginContext, ) -> Result { let app_handle = window.app_handle().clone(); - let update_source = UpdateSource::from_window(window); + let update_source = UpdateSource::from_window_label(window.label()); let mut response_ctx = ResponseContext::new(app_handle.clone(), og_response.clone(), update_source); @@ -160,7 +164,8 @@ async fn send_http_request_inner( response_ctx: &mut ResponseContext, ) -> Result { let app_handle = window.app_handle().clone(); - let plugin_manager = app_handle.state::(); + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let connection_manager = app_handle.state::(); let settings = window.db().get_settings(); let workspace_id = &unrendered_request.workspace_id; @@ -168,7 +173,7 @@ async fn send_http_request_inner( let environment_id = environment.map(|e| e.id); let workspace = window.db().get_workspace(workspace_id)?; let (resolved, auth_context_id) = resolve_http_request(window, unrendered_request)?; - let cb = PluginTemplateCallback::new(window.app_handle(), &plugin_context, RenderPurpose::Send); + let cb = PluginTemplateCallback::new(plugin_manager.clone(), encryption_manager.clone(), &plugin_context, RenderPurpose::Send); let env_chain = window.db().resolve_environments(&workspace.id, folder_id, environment_id.as_deref())?; let request = render_http_request(&resolved, env_chain, &cb, &RenderOptions::throw()).await?; @@ -625,7 +630,7 @@ async fn write_stream_chunks_to_db( } async fn apply_authentication( - window: &WebviewWindow, + _window: &WebviewWindow, sendable_request: &mut SendableHttpRequest, request: &HttpRequest, auth_context_id: String, @@ -655,7 +660,7 @@ async fn apply_authentication( .collect(), }; let plugin_result = plugin_manager - .call_http_authentication(&window, &authentication_type, req, plugin_context) + .call_http_authentication(plugin_context, &authentication_type, req) .await?; for header in plugin_result.set_headers.unwrap_or_default() { diff --git a/src-tauri/src/import.rs b/crates-tauri/yaak-app/src/import.rs similarity index 58% rename from src-tauri/src/import.rs rename to crates-tauri/yaak-app/src/import.rs index 288a4560..c47036cc 100644 --- a/src-tauri/src/import.rs +++ b/crates-tauri/yaak-app/src/import.rs @@ -1,12 +1,15 @@ use crate::error::Result; +use crate::models_ext::QueryManagerExt; +use crate::PluginContextExt; use log::info; use std::collections::BTreeMap; use std::fs::read_to_string; use tauri::{Manager, Runtime, WebviewWindow}; +use yaak_tauri_utils::window::WorkspaceWindowTrait; +use yaak_core::WorkspaceContext; use yaak_models::models::{ Environment, Folder, GrpcRequest, HttpRequest, WebsocketRequest, Workspace, }; -use yaak_models::query_manager::QueryManagerExt; use yaak_models::util::{BatchUpsertResult, UpdateSource, maybe_gen_id, maybe_gen_id_opt}; use yaak_plugins::manager::PluginManager; @@ -18,17 +21,25 @@ pub(crate) async fn import_data( let file = read_to_string(file_path).unwrap_or_else(|_| panic!("Unable to read file {}", file_path)); let file_contents = file.as_str(); - let import_result = plugin_manager.import_data(window, file_contents).await?; + let import_result = plugin_manager.import_data(&window.plugin_context(), file_contents).await?; let mut id_map: BTreeMap = BTreeMap::new(); + // Create WorkspaceContext from window + let ctx = WorkspaceContext { + workspace_id: window.workspace_id(), + environment_id: window.environment_id(), + cookie_jar_id: window.cookie_jar_id(), + request_id: None, + }; + let resources = import_result.resources; let workspaces: Vec = resources .workspaces .into_iter() .map(|mut v| { - v.id = maybe_gen_id::(window, v.id.as_str(), &mut id_map); + v.id = maybe_gen_id::(&ctx, v.id.as_str(), &mut id_map); v }) .collect(); @@ -37,12 +48,11 @@ pub(crate) async fn import_data( .environments .into_iter() .map(|mut v| { - v.id = maybe_gen_id::(window, v.id.as_str(), &mut id_map); - v.workspace_id = - maybe_gen_id::(window, v.workspace_id.as_str(), &mut id_map); + v.id = maybe_gen_id::(&ctx, v.id.as_str(), &mut id_map); + v.workspace_id = maybe_gen_id::(&ctx, v.workspace_id.as_str(), &mut id_map); match (v.parent_model.as_str(), v.parent_id.clone().as_deref()) { ("folder", Some(parent_id)) => { - v.parent_id = Some(maybe_gen_id::(window, &parent_id, &mut id_map)); + v.parent_id = Some(maybe_gen_id::(&ctx, &parent_id, &mut id_map)); } ("", _) => { // Fix any empty ones @@ -61,10 +71,9 @@ pub(crate) async fn import_data( .folders .into_iter() .map(|mut v| { - v.id = maybe_gen_id::(window, v.id.as_str(), &mut id_map); - v.workspace_id = - maybe_gen_id::(window, v.workspace_id.as_str(), &mut id_map); - v.folder_id = maybe_gen_id_opt::(window, v.folder_id, &mut id_map); + v.id = maybe_gen_id::(&ctx, v.id.as_str(), &mut id_map); + v.workspace_id = maybe_gen_id::(&ctx, v.workspace_id.as_str(), &mut id_map); + v.folder_id = maybe_gen_id_opt::(&ctx, v.folder_id, &mut id_map); v }) .collect(); @@ -73,10 +82,9 @@ pub(crate) async fn import_data( .http_requests .into_iter() .map(|mut v| { - v.id = maybe_gen_id::(window, v.id.as_str(), &mut id_map); - v.workspace_id = - maybe_gen_id::(window, v.workspace_id.as_str(), &mut id_map); - v.folder_id = maybe_gen_id_opt::(window, v.folder_id, &mut id_map); + v.id = maybe_gen_id::(&ctx, v.id.as_str(), &mut id_map); + v.workspace_id = maybe_gen_id::(&ctx, v.workspace_id.as_str(), &mut id_map); + v.folder_id = maybe_gen_id_opt::(&ctx, v.folder_id, &mut id_map); v }) .collect(); @@ -85,10 +93,9 @@ pub(crate) async fn import_data( .grpc_requests .into_iter() .map(|mut v| { - v.id = maybe_gen_id::(window, v.id.as_str(), &mut id_map); - v.workspace_id = - maybe_gen_id::(window, v.workspace_id.as_str(), &mut id_map); - v.folder_id = maybe_gen_id_opt::(window, v.folder_id, &mut id_map); + v.id = maybe_gen_id::(&ctx, v.id.as_str(), &mut id_map); + v.workspace_id = maybe_gen_id::(&ctx, v.workspace_id.as_str(), &mut id_map); + v.folder_id = maybe_gen_id_opt::(&ctx, v.folder_id, &mut id_map); v }) .collect(); @@ -97,10 +104,9 @@ pub(crate) async fn import_data( .websocket_requests .into_iter() .map(|mut v| { - v.id = maybe_gen_id::(window, v.id.as_str(), &mut id_map); - v.workspace_id = - maybe_gen_id::(window, v.workspace_id.as_str(), &mut id_map); - v.folder_id = maybe_gen_id_opt::(window, v.folder_id, &mut id_map); + v.id = maybe_gen_id::(&ctx, v.id.as_str(), &mut id_map); + v.workspace_id = maybe_gen_id::(&ctx, v.workspace_id.as_str(), &mut id_map); + v.folder_id = maybe_gen_id_opt::(&ctx, v.folder_id, &mut id_map); v }) .collect(); diff --git a/src-tauri/src/lib.rs b/crates-tauri/yaak-app/src/lib.rs similarity index 85% rename from src-tauri/src/lib.rs rename to crates-tauri/yaak-app/src/lib.rs index daad7e9b..ee3e281b 100644 --- a/src-tauri/src/lib.rs +++ b/crates-tauri/yaak-app/src/lib.rs @@ -5,6 +5,7 @@ use crate::error::Result; use crate::grpc::{build_metadata, metadata_to_map, resolve_grpc_request}; use crate::http_request::{resolve_http_request, send_http_request}; use crate::import::import_data; +use crate::models_ext::{BlobManagerExt, QueryManagerExt}; use crate::notifications::YaakNotifier; use crate::render::{render_grpc_request, render_template}; use crate::updates::{UpdateMode, UpdateTrigger, YaakUpdater}; @@ -13,9 +14,10 @@ use error::Result as YaakResult; use eventsource_client::{EventParser, SSE}; use log::{debug, error, info, warn}; use std::collections::HashMap; -use std::fs::{File, create_dir_all}; +use std::fs::File; use std::path::PathBuf; use std::str::FromStr; +use std::sync::Arc; use std::time::Duration; use std::{fs, panic}; use tauri::path::BaseDirectory; @@ -29,17 +31,15 @@ use tauri_plugin_window_state::{AppHandleExt, StateFlags}; use tokio::sync::Mutex; use tokio::task::block_in_place; use tokio::time; -use yaak_common::window::WorkspaceWindowTrait; -use yaak_grpc::manager::GrpcHandle; +use yaak_crypto::manager::EncryptionManager; +use yaak_grpc::manager::{GrpcConfig, GrpcHandle}; use yaak_grpc::{Code, ServiceDefinition, serialize_message}; use yaak_mac_window::AppHandleMacWindowExt; -use yaak_models::blob_manager::BlobManagerExt; use yaak_models::models::{ AnyModel, CookieJar, Environment, GrpcConnection, GrpcConnectionState, GrpcEvent, GrpcEventType, GrpcRequest, HttpRequest, HttpResponse, HttpResponseEvent, HttpResponseState, Plugin, Workspace, WorkspaceMeta, }; -use yaak_models::query_manager::QueryManagerExt; use yaak_models::util::{BatchUpsertResult, UpdateSource, get_workspace_export_resources}; use yaak_plugins::events::{ CallFolderActionArgs, CallFolderActionRequest, CallGrpcRequestActionArgs, @@ -56,6 +56,7 @@ use yaak_plugins::manager::PluginManager; use yaak_plugins::plugin_meta::PluginMetadata; use yaak_plugins::template_callback::PluginTemplateCallback; use yaak_sse::sse::ServerSentEvent; +use yaak_tauri_utils::window::WorkspaceWindowTrait; use yaak_templates::format_json::format_json; use yaak_templates::{RenderErrorBehavior, RenderOptions, Tokens, transform_args}; use yaak_tls::find_client_certificate; @@ -63,17 +64,33 @@ use yaak_tls::find_client_certificate; mod commands; mod encoding; mod error; +mod git_ext; mod grpc; mod history; mod http_request; mod import; +mod models_ext; mod notifications; mod plugin_events; +mod plugins_ext; mod render; +mod sync_ext; mod updates; mod uri_scheme; mod window; mod window_menu; +mod ws_ext; + +/// Extension trait for easily creating a PluginContext from a WebviewWindow +pub trait PluginContextExt { + fn plugin_context(&self) -> PluginContext; +} + +impl PluginContextExt for WebviewWindow { + fn plugin_context(&self) -> PluginContext { + PluginContext::new(Some(self.label().to_string()), self.workspace_id()) + } +} #[derive(serde::Serialize)] #[serde(default, rename_all = "camelCase")] @@ -112,9 +129,12 @@ async fn cmd_template_tokens_to_string( app_handle: AppHandle, tokens: Tokens, ) -> YaakResult { + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let cb = PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager, + encryption_manager, + &PluginContext::new(Some(window.label().to_string()), window.workspace_id()), RenderPurpose::Preview, ); let new_tokens = transform_args(tokens, &cb)?; @@ -133,12 +153,15 @@ async fn cmd_render_template( ) -> YaakResult { let environment_chain = app_handle.db().resolve_environments(workspace_id, None, environment_id)?; + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let result = render_template( template, environment_chain, &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager, + encryption_manager, + &PluginContext::new(Some(window.label().to_string()), window.workspace_id()), purpose.unwrap_or(RenderPurpose::Preview), ), &RenderOptions { @@ -181,12 +204,15 @@ async fn cmd_grpc_reflect( )?; let workspace = app_handle.db().get_workspace(&unrendered_request.workspace_id)?; + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let req = render_grpc_request( &resolved_request, environment_chain, &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager, + encryption_manager, + &PluginContext::new(Some(window.label().to_string()), window.workspace_id()), RenderPurpose::Send, ), &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, @@ -233,12 +259,15 @@ async fn cmd_grpc_go( )?; let workspace = app_handle.db().get_workspace(&unrendered_request.workspace_id)?; + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let request = render_grpc_request( &resolved_request, environment_chain.clone(), &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager.clone(), + encryption_manager.clone(), + &PluginContext::new(Some(window.label().to_string()), window.workspace_id()), RenderPurpose::Send, ), &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, @@ -261,7 +290,7 @@ async fn cmd_grpc_go( url: request.url.clone(), ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; let conn_id = conn.id.clone(); @@ -313,7 +342,7 @@ async fn cmd_grpc_go( state: GrpcConnectionState::Closed, ..conn.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; return Ok(conn_id); } @@ -335,6 +364,8 @@ async fn cmd_grpc_go( let environment_chain = environment_chain.clone(); let window = window.clone(); let base_msg = base_msg.clone(); + let plugin_manager = plugin_manager.clone(); + let encryption_manager = encryption_manager.clone(); move |ev: tauri::Event| { if *cancelled_rx.borrow() { @@ -357,14 +388,20 @@ async fn cmd_grpc_go( let app_handle = app_handle.clone(); let base_msg = base_msg.clone(); let environment_chain = environment_chain.clone(); + let plugin_manager = plugin_manager.clone(); + let encryption_manager = encryption_manager.clone(); let msg = block_in_place(|| { tauri::async_runtime::block_on(async { render_template( msg.as_str(), environment_chain, &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager, + encryption_manager, + &PluginContext::new( + Some(window.label().to_string()), + window.workspace_id(), + ), RenderPurpose::Send, ), &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, @@ -383,7 +420,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ClientMessage, ..base_msg.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); }); @@ -413,8 +450,9 @@ async fn cmd_grpc_go( msg.as_str(), environment_chain, &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager.clone(), + encryption_manager.clone(), + &PluginContext::new(Some(window.label().to_string()), window.workspace_id()), RenderPurpose::Send, ), &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, @@ -428,7 +466,7 @@ async fn cmd_grpc_go( metadata: metadata.clone(), ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; async move { @@ -477,7 +515,7 @@ async fn cmd_grpc_go( content: msg, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); } @@ -498,7 +536,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::Info, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); app_handle @@ -509,7 +547,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ServerMessage, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); app_handle @@ -521,7 +559,7 @@ async fn cmd_grpc_go( status: Some(Code::Ok as i32), ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); } @@ -546,7 +584,7 @@ async fn cmd_grpc_go( ..base_event.clone() }, }), - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); } @@ -561,7 +599,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); } @@ -586,7 +624,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::Info, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); stream.into_inner() @@ -613,7 +651,7 @@ async fn cmd_grpc_go( ..base_event.clone() }, }), - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); return; @@ -629,7 +667,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); return; @@ -649,7 +687,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ServerMessage, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); } @@ -666,7 +704,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); break; @@ -682,7 +720,7 @@ async fn cmd_grpc_go( event_type: GrpcEventType::ConnectionEnd, ..base_event.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) .unwrap(); } @@ -710,7 +748,7 @@ async fn cmd_grpc_go( state: GrpcConnectionState::Closed, ..c.get_grpc_connection( &conn_id).unwrap().clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) }).unwrap(); }, @@ -722,7 +760,7 @@ async fn cmd_grpc_go( status: Some(Code::Cancelled as i32), ..base_msg.clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ).unwrap(); w.with_tx(|c| { c.upsert_grpc_connection( @@ -732,7 +770,7 @@ async fn cmd_grpc_go( state: GrpcConnectionState::Closed, ..c.get_grpc_connection( &conn_id).unwrap().clone() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ) }).unwrap(); }, @@ -811,9 +849,9 @@ async fn cmd_http_response_body( .ok_or(GenericError("Failed to find response body".to_string()))?; match filter { - Some(filter) if !filter.is_empty() => { - Ok(plugin_manager.filter_data(&window, filter, &body, content_type).await?) - } + Some(filter) if !filter.is_empty() => Ok(plugin_manager + .filter_data(&window.plugin_context(), filter, &body, content_type) + .await?), _ => Ok(FilterResponse { content: body, error: None }), } } @@ -878,7 +916,7 @@ async fn cmd_http_request_actions( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - Ok(plugin_manager.get_http_request_actions(&window).await?) + Ok(plugin_manager.get_http_request_actions(&window.plugin_context()).await?) } #[tauri::command] @@ -886,7 +924,7 @@ async fn cmd_websocket_request_actions( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - Ok(plugin_manager.get_websocket_request_actions(&window).await?) + Ok(plugin_manager.get_websocket_request_actions(&window.plugin_context()).await?) } #[tauri::command] @@ -898,7 +936,7 @@ async fn cmd_call_websocket_request_action( let websocket_request = window.db().get_websocket_request(&req.args.websocket_request.id)?; Ok(plugin_manager .call_websocket_request_action( - &window, + &window.plugin_context(), CallWebsocketRequestActionRequest { args: CallWebsocketRequestActionArgs { websocket_request }, ..req @@ -912,7 +950,7 @@ async fn cmd_workspace_actions( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - Ok(plugin_manager.get_workspace_actions(&window).await?) + Ok(plugin_manager.get_workspace_actions(&window.plugin_context()).await?) } #[tauri::command] @@ -924,7 +962,7 @@ async fn cmd_call_workspace_action( let workspace = window.db().get_workspace(&req.args.workspace.id)?; Ok(plugin_manager .call_workspace_action( - &window, + &window.plugin_context(), CallWorkspaceActionRequest { args: CallWorkspaceActionArgs { workspace }, ..req }, ) .await?) @@ -935,7 +973,7 @@ async fn cmd_folder_actions( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - Ok(plugin_manager.get_folder_actions(&window).await?) + Ok(plugin_manager.get_folder_actions(&window.plugin_context()).await?) } #[tauri::command] @@ -947,7 +985,7 @@ async fn cmd_call_folder_action( let folder = window.db().get_folder(&req.args.folder.id)?; Ok(plugin_manager .call_folder_action( - &window, + &window.plugin_context(), CallFolderActionRequest { args: CallFolderActionArgs { folder }, ..req }, ) .await?) @@ -958,7 +996,7 @@ async fn cmd_grpc_request_actions( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - Ok(plugin_manager.get_grpc_request_actions(&window).await?) + Ok(plugin_manager.get_grpc_request_actions(&window.plugin_context()).await?) } #[tauri::command] @@ -966,7 +1004,7 @@ async fn cmd_template_function_summaries( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - let results = plugin_manager.get_template_function_summaries(&window).await?; + let results = plugin_manager.get_template_function_summaries(&window.plugin_context()).await?; Ok(results) } @@ -977,24 +1015,10 @@ async fn cmd_template_function_config( function_name: &str, values: HashMap, model: AnyModel, - environment_id: Option<&str>, + _environment_id: Option<&str>, ) -> YaakResult { - let (workspace_id, folder_id) = match model.clone() { - AnyModel::HttpRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::GrpcRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::WebsocketRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::Folder(m) => (m.workspace_id, m.folder_id), - AnyModel::Workspace(m) => (m.id, None), - m => { - return Err(GenericError(format!( - "Unsupported model to call template functions {m:?}" - ))); - } - }; - let environment_chain = - window.db().resolve_environments(&workspace_id, folder_id.as_deref(), environment_id)?; Ok(plugin_manager - .get_template_function_config(&window, function_name, environment_chain, values, model.id()) + .get_template_function_config(&window.plugin_context(), function_name, values, model.id()) .await?) } @@ -1003,7 +1027,8 @@ async fn cmd_get_http_authentication_summaries( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult> { - let results = plugin_manager.get_http_authentication_summaries(&window).await?; + let results = + plugin_manager.get_http_authentication_summaries(&window.plugin_context()).await?; Ok(results.into_iter().map(|(_, a)| a).collect()) } @@ -1014,24 +1039,10 @@ async fn cmd_get_http_authentication_config( auth_name: &str, values: HashMap, model: AnyModel, - environment_id: Option<&str>, + _environment_id: Option<&str>, ) -> YaakResult { - let (workspace_id, folder_id) = match model.clone() { - AnyModel::HttpRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::GrpcRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::WebsocketRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::Folder(m) => (m.workspace_id, m.folder_id), - AnyModel::Workspace(m) => (m.id, None), - m => { - return Err(GenericError(format!("Unsupported model to call auth config {m:?}"))); - } - }; - - let environment_chain = - window.db().resolve_environments(&workspace_id, folder_id.as_deref(), environment_id)?; - Ok(plugin_manager - .get_http_authentication_config(&window, environment_chain, auth_name, values, model.id()) + .get_http_authentication_config(&window.plugin_context(), auth_name, values, model.id()) .await?) } @@ -1043,7 +1054,7 @@ async fn cmd_call_http_request_action( ) -> YaakResult<()> { Ok(plugin_manager .call_http_request_action( - &window, + &window.plugin_context(), CallHttpRequestActionRequest { args: CallHttpRequestActionArgs { http_request: resolve_http_request(&window, &req.args.http_request)?.0, @@ -1063,7 +1074,7 @@ async fn cmd_call_grpc_request_action( ) -> YaakResult<()> { Ok(plugin_manager .call_grpc_request_action( - &window, + &window.plugin_context(), CallGrpcRequestActionRequest { args: CallGrpcRequestActionArgs { grpc_request: resolve_grpc_request(&window, &req.args.grpc_request)?.0, @@ -1083,24 +1094,11 @@ async fn cmd_call_http_authentication_action( action_index: i32, values: HashMap, model: AnyModel, - environment_id: Option<&str>, + _environment_id: Option<&str>, ) -> YaakResult<()> { - let (workspace_id, folder_id) = match model.clone() { - AnyModel::HttpRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::GrpcRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::WebsocketRequest(m) => (m.workspace_id, m.folder_id), - AnyModel::Folder(m) => (m.workspace_id, m.folder_id), - AnyModel::Workspace(m) => (m.id, None), - m => { - return Err(GenericError(format!("Unsupported model to call auth {m:?}"))); - } - }; - let environment_chain = - window.db().resolve_environments(&workspace_id, folder_id.as_deref(), environment_id)?; Ok(plugin_manager .call_http_authentication_action( - &window, - environment_chain, + &window.plugin_context(), auth_name, action_index, values, @@ -1116,7 +1114,7 @@ async fn cmd_curl_to_request( plugin_manager: State<'_, PluginManager>, workspace_id: &str, ) -> YaakResult { - let import_result = plugin_manager.import_data(&window, command).await?; + let import_result = plugin_manager.import_data(&window.plugin_context(), command).await?; Ok(import_result .resources @@ -1138,8 +1136,10 @@ async fn cmd_export_data( workspace_ids: Vec<&str>, include_private_environments: bool, ) -> YaakResult<()> { + let db = app_handle.db(); + let version = app_handle.package_info().version.to_string(); let export_data = - get_workspace_export_resources(&app_handle, workspace_ids, include_private_environments)?; + get_workspace_export_resources(&db, &version, workspace_ids, include_private_environments)?; let f = File::options() .create(true) .truncate(true) @@ -1218,7 +1218,7 @@ async fn cmd_send_http_request( workspace_id: request.workspace_id.clone(), ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), &blobs, )?; @@ -1264,7 +1264,7 @@ async fn cmd_send_http_request( error: Some(e.to_string()), ..resp }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), &blobs, )? } @@ -1283,10 +1283,15 @@ async fn cmd_install_plugin( ) -> YaakResult { let plugin = app_handle.db().upsert_plugin( &Plugin { directory: directory.into(), url, enabled: true, ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; - plugin_manager.add_plugin(&PluginContext::new(&window), &plugin).await?; + plugin_manager + .add_plugin( + &PluginContext::new(Some(window.label().to_string()), window.workspace_id()), + &plugin, + ) + .await?; Ok(plugin) } @@ -1308,7 +1313,7 @@ async fn cmd_create_grpc_request( sort_priority, ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?) } @@ -1318,7 +1323,11 @@ async fn cmd_reload_plugins( window: WebviewWindow, plugin_manager: State<'_, PluginManager>, ) -> YaakResult<()> { - plugin_manager.initialize_all_plugins(&app_handle, &PluginContext::new(&window)).await?; + let plugins = app_handle.db().list_plugins()?; + let plugin_context = + PluginContext::new(Some(window.label().to_string()), window.workspace_id()); + let _errors = plugin_manager.initialize_all_plugins(plugins, &plugin_context).await; + // Note: errors are returned but we don't show toasts here since this is a manual reload Ok(()) } @@ -1342,9 +1351,10 @@ async fn cmd_delete_all_grpc_connections( app_handle: AppHandle, window: WebviewWindow, ) -> YaakResult<()> { - Ok(app_handle - .db() - .delete_all_grpc_connections_for_request(request_id, &UpdateSource::from_window(&window))?) + Ok(app_handle.db().delete_all_grpc_connections_for_request( + request_id, + &UpdateSource::from_window_label(window.label()), + )?) } #[tauri::command] @@ -1354,7 +1364,7 @@ async fn cmd_delete_send_history( window: WebviewWindow, ) -> YaakResult<()> { Ok(app_handle.with_tx(|tx| { - let source = &UpdateSource::from_window(&window); + let source = &UpdateSource::from_window_label(window.label()); tx.delete_all_http_responses_for_workspace(workspace_id, source)?; tx.delete_all_grpc_connections_for_workspace(workspace_id, source)?; tx.delete_all_websocket_connections_for_workspace(workspace_id, source)?; @@ -1368,9 +1378,10 @@ async fn cmd_delete_all_http_responses( app_handle: AppHandle, window: WebviewWindow, ) -> YaakResult<()> { - Ok(app_handle - .db() - .delete_all_http_responses_for_request(request_id, &UpdateSource::from_window(&window))?) + Ok(app_handle.db().delete_all_http_responses_for_request( + request_id, + &UpdateSource::from_window_label(window.label()), + )?) } #[tauri::command] @@ -1474,14 +1485,9 @@ pub fn run() { .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_fs::init()) .plugin(yaak_mac_window::init()) - .plugin(yaak_models::init()) - .plugin(yaak_plugins::init()) - .plugin(yaak_crypto::init()) - .plugin(yaak_fonts::init()) - .plugin(yaak_git::init()) - .plugin(yaak_http::init()) - .plugin(yaak_ws::init()) - .plugin(yaak_sync::init()); + .plugin(models_ext::init()) // Database setup only. Must be before plugins_ext which depends on db + .plugin(plugins_ext::init()) + .plugin(yaak_fonts::init()); #[cfg(feature = "license")] { @@ -1495,6 +1501,15 @@ pub fn run() { builder .setup(|app| { + // Initialize HTTP connection manager + app.manage(yaak_http::manager::HttpConnectionManager::new()); + + // Initialize encryption manager + let query_manager = + app.state::().inner().clone(); + let app_id = app.config().identifier.to_string(); + app.manage(yaak_crypto::manager::EncryptionManager::new(query_manager, app_id)); + { let app_handle = app.app_handle().clone(); app.deep_link().on_open_url(move |event| { @@ -1522,9 +1537,6 @@ pub fn run() { }); }; - let app_data_dir = app.path().app_data_dir().unwrap(); - create_dir_all(app_data_dir.clone()).expect("Problem creating App directory!"); - // Add updater let yaak_updater = YaakUpdater::new(); app.manage(Mutex::new(yaak_updater)); @@ -1534,9 +1546,23 @@ pub fn run() { app.manage(Mutex::new(yaak_notifier)); // Add GRPC manager - let grpc_handle = GrpcHandle::new(&app.app_handle()); + let protoc_include_dir = app + .path() + .resolve("vendored/protoc/include", BaseDirectory::Resource) + .expect("failed to resolve protoc include directory"); + let protoc_bin_name = if cfg!(windows) { "yaakprotoc.exe" } else { "yaakprotoc" }; + let protoc_bin_path = app + .path() + .resolve(format!("vendored/protoc/{}", protoc_bin_name), BaseDirectory::Resource) + .expect("failed to resolve yaakprotoc binary"); + let grpc_config = GrpcConfig { protoc_include_dir, protoc_bin_path }; + let grpc_handle = GrpcHandle::new(grpc_config); app.manage(Mutex::new(grpc_handle)); + // Add WebSocket manager + let ws_manager = yaak_ws::WebsocketManager::new(); + app.manage(Mutex::new(ws_manager)); + // Specific settings let settings = app.db().get_settings(); app.app_handle().set_native_titlebar(settings.use_native_titlebar); @@ -1595,9 +1621,61 @@ pub fn run() { // // Migrated commands crate::commands::cmd_decrypt_template, + crate::commands::cmd_enable_encryption, crate::commands::cmd_get_themes, + crate::commands::cmd_reveal_workspace_key, crate::commands::cmd_secure_template, + crate::commands::cmd_set_workspace_key, crate::commands::cmd_show_workspace_key, + // + // Models commands + models_ext::models_delete, + models_ext::models_duplicate, + models_ext::models_get_graphql_introspection, + models_ext::models_get_settings, + models_ext::models_grpc_events, + models_ext::models_upsert, + models_ext::models_upsert_graphql_introspection, + models_ext::models_websocket_events, + models_ext::models_workspace_models, + // + // Sync commands + sync_ext::cmd_sync_calculate, + sync_ext::cmd_sync_calculate_fs, + sync_ext::cmd_sync_apply, + sync_ext::cmd_sync_watch, + // + // Git commands + git_ext::cmd_git_checkout, + git_ext::cmd_git_branch, + git_ext::cmd_git_delete_branch, + git_ext::cmd_git_merge_branch, + git_ext::cmd_git_status, + git_ext::cmd_git_log, + git_ext::cmd_git_initialize, + git_ext::cmd_git_commit, + git_ext::cmd_git_fetch_all, + git_ext::cmd_git_push, + git_ext::cmd_git_pull, + git_ext::cmd_git_add, + git_ext::cmd_git_unstage, + git_ext::cmd_git_add_credential, + git_ext::cmd_git_remotes, + git_ext::cmd_git_add_remote, + git_ext::cmd_git_rm_remote, + // + // WebSocket commands + ws_ext::cmd_ws_upsert_request, + ws_ext::cmd_ws_duplicate_request, + ws_ext::cmd_ws_delete_request, + ws_ext::cmd_ws_delete_connection, + ws_ext::cmd_ws_delete_connections, + ws_ext::cmd_ws_list_events, + ws_ext::cmd_ws_list_requests, + ws_ext::cmd_ws_list_connections, + ws_ext::cmd_ws_send, + ws_ext::cmd_ws_close, + ws_ext::cmd_ws_connect, ]) .build(tauri::generate_context!()) .expect("error while running tauri application") diff --git a/src-tauri/src/main.rs b/crates-tauri/yaak-app/src/main.rs similarity index 100% rename from src-tauri/src/main.rs rename to crates-tauri/yaak-app/src/main.rs diff --git a/src-tauri/yaak-models/src/commands.rs b/crates-tauri/yaak-app/src/models_ext.rs similarity index 55% rename from src-tauri/yaak-models/src/commands.rs rename to crates-tauri/yaak-app/src/models_ext.rs index f7bab2e1..7ed7ebd4 100644 --- a/src-tauri/yaak-models/src/commands.rs +++ b/crates-tauri/yaak-app/src/models_ext.rs @@ -1,16 +1,76 @@ -use crate::blob_manager::BlobManagerExt; -use crate::error::Error::GenericError; -use crate::error::Result; -use crate::models::{AnyModel, GraphQlIntrospection, GrpcEvent, Settings, WebsocketEvent}; -use crate::query_manager::QueryManagerExt; -use crate::util::UpdateSource; -use tauri::{AppHandle, Runtime, WebviewWindow}; +//! Tauri-specific extensions for yaak-models. +//! +//! This module provides the Tauri plugin initialization and extension traits +//! that allow accessing QueryManager and BlobManager from Tauri's Manager types. + +use tauri::plugin::TauriPlugin; +use tauri::{Emitter, Manager, Runtime, State}; +use tauri_plugin_dialog::{DialogExt, MessageDialogKind}; +use yaak_models::blob_manager::BlobManager; +use yaak_models::db_context::DbContext; +use yaak_models::error::Result; +use yaak_models::models::{AnyModel, GraphQlIntrospection, GrpcEvent, Settings, WebsocketEvent}; +use yaak_models::query_manager::QueryManager; +use yaak_models::util::UpdateSource; + +/// Extension trait for accessing the QueryManager from Tauri Manager types. +pub trait QueryManagerExt<'a, R> { + fn db_manager(&'a self) -> State<'a, QueryManager>; + fn db(&'a self) -> DbContext<'a>; + fn with_tx(&'a self, func: F) -> Result + where + F: FnOnce(&DbContext) -> Result; +} + +impl<'a, R: Runtime, M: Manager> QueryManagerExt<'a, R> for M { + fn db_manager(&'a self) -> State<'a, QueryManager> { + self.state::() + } + + fn db(&'a self) -> DbContext<'a> { + let qm = self.state::(); + qm.inner().connect() + } + + fn with_tx(&'a self, func: F) -> Result + where + F: FnOnce(&DbContext) -> Result, + { + let qm = self.state::(); + qm.inner().with_tx(func) + } +} + +/// Extension trait for accessing the BlobManager from Tauri Manager types. +pub trait BlobManagerExt<'a, R> { + fn blob_manager(&'a self) -> State<'a, BlobManager>; + fn blobs(&'a self) -> yaak_models::blob_manager::BlobContext; +} + +impl<'a, R: Runtime, M: Manager> BlobManagerExt<'a, R> for M { + fn blob_manager(&'a self) -> State<'a, BlobManager> { + self.state::() + } + + fn blobs(&'a self) -> yaak_models::blob_manager::BlobContext { + let manager = self.state::(); + manager.inner().connect() + } +} + +// Commands for yaak-models +use tauri::WebviewWindow; #[tauri::command] -pub(crate) fn upsert(window: WebviewWindow, model: AnyModel) -> Result { +pub(crate) fn models_upsert( + window: WebviewWindow, + model: AnyModel, +) -> Result { + use yaak_models::error::Error::GenericError; + let db = window.db(); let blobs = window.blob_manager(); - let source = &UpdateSource::from_window(&window); + let source = &UpdateSource::from_window_label(window.label()); let id = match model { AnyModel::CookieJar(m) => db.upsert_cookie_jar(&m, source)?.id, AnyModel::Environment(m) => db.upsert_environment(&m, source)?.id, @@ -31,11 +91,16 @@ pub(crate) fn upsert(window: WebviewWindow, model: AnyModel) -> R } #[tauri::command] -pub(crate) fn delete(window: WebviewWindow, model: AnyModel) -> Result { +pub(crate) fn models_delete( + window: WebviewWindow, + model: AnyModel, +) -> Result { + use yaak_models::error::Error::GenericError; + let blobs = window.blob_manager(); // Use transaction for deletions because it might recurse window.with_tx(|tx| { - let source = &UpdateSource::from_window(&window); + let source = &UpdateSource::from_window_label(window.label()); let id = match model { AnyModel::CookieJar(m) => tx.delete_cookie_jar(&m, source)?.id, AnyModel::Environment(m) => tx.delete_environment(&m, source)?.id, @@ -55,10 +120,15 @@ pub(crate) fn delete(window: WebviewWindow, model: AnyModel) -> R } #[tauri::command] -pub(crate) fn duplicate(window: WebviewWindow, model: AnyModel) -> Result { +pub(crate) fn models_duplicate( + window: WebviewWindow, + model: AnyModel, +) -> Result { + use yaak_models::error::Error::GenericError; + // Use transaction for duplications because it might recurse window.with_tx(|tx| { - let source = &UpdateSource::from_window(&window); + let source = &UpdateSource::from_window_label(window.label()); let id = match model { AnyModel::Environment(m) => tx.duplicate_environment(&m, source)?.id, AnyModel::Folder(m) => tx.duplicate_folder(&m, source)?.id, @@ -73,48 +143,48 @@ pub(crate) fn duplicate(window: WebviewWindow, model: AnyModel) - } #[tauri::command] -pub(crate) fn websocket_events( - app_handle: AppHandle, +pub(crate) fn models_websocket_events( + app_handle: tauri::AppHandle, connection_id: &str, ) -> Result> { Ok(app_handle.db().list_websocket_events(connection_id)?) } #[tauri::command] -pub(crate) fn grpc_events( - app_handle: AppHandle, +pub(crate) fn models_grpc_events( + app_handle: tauri::AppHandle, connection_id: &str, ) -> Result> { Ok(app_handle.db().list_grpc_events(connection_id)?) } #[tauri::command] -pub(crate) fn get_settings(app_handle: AppHandle) -> Result { +pub(crate) fn models_get_settings(app_handle: tauri::AppHandle) -> Result { Ok(app_handle.db().get_settings()) } #[tauri::command] -pub(crate) fn get_graphql_introspection( - app_handle: AppHandle, +pub(crate) fn models_get_graphql_introspection( + app_handle: tauri::AppHandle, request_id: &str, ) -> Result> { Ok(app_handle.db().get_graphql_introspection(request_id)) } #[tauri::command] -pub(crate) fn upsert_graphql_introspection( - app_handle: AppHandle, +pub(crate) fn models_upsert_graphql_introspection( + app_handle: tauri::AppHandle, request_id: &str, workspace_id: &str, content: Option, window: WebviewWindow, ) -> Result { - let source = UpdateSource::from_window(&window); + let source = UpdateSource::from_window_label(window.label()); Ok(app_handle.db().upsert_graphql_introspection(workspace_id, request_id, content, &source)?) } #[tauri::command] -pub(crate) fn workspace_models( +pub(crate) fn models_workspace_models( window: WebviewWindow, workspace_id: Option<&str>, ) -> Result { @@ -145,17 +215,6 @@ pub(crate) fn workspace_models( let j = serde_json::to_string(&l)?; - // NOTE: There's something weird that happens on Linux. If we send Cyrillic (or maybe other) - // unicode characters in this response (doesn't matter where) then the following bug happens: - // https://feedback.yaak.app/p/editing-the-url-sometimes-freezes-the-app - // - // It's as if every string resulting from the JSON.parse of the models gets encoded slightly - // wrong or something, causing the above bug where Codemirror can't calculate the cursor - // position anymore (even when none of the characters are included directly in the input). - // - // For some reason using escape sequences works, but it's a hacky fix. Hopefully the Linux - // webview dependency updates to a version where this bug doesn't exist, or we can use CEF - // (Chromium) for Linux in the future, which Tauri is working on. Ok(escape_str_for_webview(&j)) } @@ -179,3 +238,42 @@ fn escape_str_for_webview(input: &str) -> String { }) .collect() } + +/// Initialize database managers as a plugin (for initialization order). +/// Commands are in the main invoke_handler. +/// This must be registered before other plugins that depend on the database. +pub fn init() -> TauriPlugin { + tauri::plugin::Builder::new("yaak-models-db") + .setup(|app_handle, _api| { + let app_path = app_handle.path().app_data_dir().unwrap(); + let db_path = app_path.join("db.sqlite"); + let blob_path = app_path.join("blobs.sqlite"); + + let (query_manager, blob_manager, rx) = + match yaak_models::init_standalone(&db_path, &blob_path) { + Ok(result) => result, + Err(e) => { + app_handle + .dialog() + .message(e.to_string()) + .kind(MessageDialogKind::Error) + .blocking_show(); + return Err(Box::from(e.to_string())); + } + }; + + app_handle.manage(query_manager); + app_handle.manage(blob_manager); + + // Forward model change events to the frontend + let app_handle = app_handle.clone(); + tauri::async_runtime::spawn(async move { + for payload in rx { + app_handle.emit("model_write", payload).unwrap(); + } + }); + + Ok(()) + }) + .build() +} diff --git a/src-tauri/src/notifications.rs b/crates-tauri/yaak-app/src/notifications.rs similarity index 97% rename from src-tauri/src/notifications.rs rename to crates-tauri/yaak-app/src/notifications.rs index ca755965..674313d7 100644 --- a/src-tauri/src/notifications.rs +++ b/crates-tauri/yaak-app/src/notifications.rs @@ -7,9 +7,9 @@ use serde::{Deserialize, Serialize}; use std::time::Instant; use tauri::{AppHandle, Emitter, Manager, Runtime, WebviewWindow}; use ts_rs::TS; -use yaak_common::api_client::yaak_api_client; use yaak_common::platform::get_os_str; -use yaak_models::query_manager::QueryManagerExt; +use yaak_tauri_utils::api_client::yaak_api_client; +use crate::models_ext::QueryManagerExt; use yaak_models::util::UpdateSource; // Check for updates every hour @@ -59,7 +59,7 @@ impl YaakNotifier { KV_NAMESPACE, KV_KEY, seen_json.as_str(), - &UpdateSource::from_window(window), + &UpdateSource::from_window_label(window.label()), ); Ok(()) } diff --git a/src-tauri/src/plugin_events.rs b/crates-tauri/yaak-app/src/plugin_events.rs similarity index 94% rename from src-tauri/src/plugin_events.rs rename to crates-tauri/yaak-app/src/plugin_events.rs index 9ff2bcc4..8f074220 100644 --- a/src-tauri/src/plugin_events.rs +++ b/crates-tauri/yaak-app/src/plugin_events.rs @@ -9,14 +9,16 @@ use crate::{ use chrono::Utc; use cookie::Cookie; use log::error; +use std::sync::Arc; use tauri::{AppHandle, Emitter, Manager, Runtime}; use tauri_plugin_clipboard_manager::ClipboardExt; use tauri_plugin_opener::OpenerExt; -use yaak_common::window::WorkspaceWindowTrait; -use yaak_models::blob_manager::BlobManagerExt; +use yaak_crypto::manager::EncryptionManager; +use yaak_tauri_utils::window::WorkspaceWindowTrait; +use crate::models_ext::BlobManagerExt; use yaak_models::models::{AnyModel, HttpResponse, Plugin}; use yaak_models::queries::any_request::AnyRequest; -use yaak_models::query_manager::QueryManagerExt; +use crate::models_ext::QueryManagerExt; use yaak_models::util::UpdateSource; use yaak_plugins::error::Error::PluginErr; use yaak_plugins::events::{ @@ -27,6 +29,7 @@ use yaak_plugins::events::{ SendHttpRequestResponse, SetKeyValueResponse, ShowToastRequest, TemplateRenderResponse, WindowInfoResponse, WindowNavigateEvent, WorkspaceInfo, }; +use yaak_plugins::manager::PluginManager; use yaak_plugins::plugin_handle::PluginHandle; use yaak_plugins::template_callback::PluginTemplateCallback; use yaak_templates::{RenderErrorBehavior, RenderOptions}; @@ -161,7 +164,9 @@ pub(crate) async fn handle_plugin_event( req.grpc_request.folder_id.as_deref(), environment_id.as_deref(), )?; - let cb = PluginTemplateCallback::new(app_handle, &plugin_context, req.purpose); + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); + let cb = PluginTemplateCallback::new(plugin_manager, encryption_manager, &plugin_context, req.purpose); let opt = RenderOptions { error_behavior: RenderErrorBehavior::Throw }; let grpc_request = render_grpc_request(&req.grpc_request, environment_chain, &cb, &opt).await?; @@ -180,7 +185,9 @@ pub(crate) async fn handle_plugin_event( req.http_request.folder_id.as_deref(), environment_id.as_deref(), )?; - let cb = PluginTemplateCallback::new(app_handle, &plugin_context, req.purpose); + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); + let cb = PluginTemplateCallback::new(plugin_manager, encryption_manager, &plugin_context, req.purpose); let opt = &RenderOptions { error_behavior: RenderErrorBehavior::Throw }; let http_request = render_http_request(&req.http_request, environment_chain, &cb, &opt).await?; @@ -209,7 +216,9 @@ pub(crate) async fn handle_plugin_event( folder_id.as_deref(), environment_id.as_deref(), )?; - let cb = PluginTemplateCallback::new(app_handle, &plugin_context, req.purpose); + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); + let cb = PluginTemplateCallback::new(plugin_manager, encryption_manager, &plugin_context, req.purpose); let opt = RenderOptions { error_behavior: RenderErrorBehavior::Throw }; let data = render_json_value(req.data, environment_chain, &cb, &opt).await?; Ok(Some(InternalEventPayload::TemplateRenderResponse(TemplateRenderResponse { data }))) diff --git a/crates-tauri/yaak-app/src/plugins_ext.rs b/crates-tauri/yaak-app/src/plugins_ext.rs new file mode 100644 index 00000000..c9a89f4e --- /dev/null +++ b/crates-tauri/yaak-app/src/plugins_ext.rs @@ -0,0 +1,366 @@ +//! Tauri-specific plugin management code. +//! +//! This module contains all Tauri integration for the plugin system: +//! - Plugin initialization and lifecycle management +//! - Tauri commands for plugin search/install/uninstall +//! - Plugin update checking + +use crate::PluginContextExt; +use crate::error::Result; +use crate::models_ext::QueryManagerExt; +use log::{error, info, warn}; +use serde::Serialize; +use std::sync::Arc; +use std::sync::atomic::{AtomicBool, Ordering}; +use std::time::{Duration, Instant}; +use tauri::path::BaseDirectory; +use tauri::plugin::{Builder, TauriPlugin}; +use tauri::{ + AppHandle, Emitter, Manager, RunEvent, Runtime, State, WebviewWindow, WindowEvent, command, + generate_handler, is_dev, +}; +use tokio::sync::Mutex; +use ts_rs::TS; +use yaak_models::models::Plugin; +use yaak_models::util::UpdateSource; +use yaak_plugins::api::{ + PluginNameVersion, PluginSearchResponse, PluginUpdatesResponse, check_plugin_updates, + search_plugins, +}; +use yaak_plugins::events::{Color, Icon, PluginContext, ShowToastRequest}; +use yaak_plugins::install::{delete_and_uninstall, download_and_install}; +use yaak_plugins::manager::PluginManager; +use yaak_plugins::plugin_meta::get_plugin_meta; +use yaak_tauri_utils::api_client::yaak_api_client; + +static EXITING: AtomicBool = AtomicBool::new(false); + +// ============================================================================ +// Plugin Updater +// ============================================================================ + +const MAX_UPDATE_CHECK_HOURS: u64 = 12; + +pub struct PluginUpdater { + last_check: Option, +} + +#[derive(Debug, Clone, PartialEq, Serialize, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export, export_to = "index.ts")] +pub struct PluginUpdateNotification { + pub update_count: usize, + pub plugins: Vec, +} + +#[derive(Debug, Clone, PartialEq, Serialize, TS)] +#[serde(rename_all = "camelCase")] +#[ts(export, export_to = "index.ts")] +pub struct PluginUpdateInfo { + pub name: String, + pub current_version: String, + pub latest_version: String, +} + +impl PluginUpdater { + pub fn new() -> Self { + Self { last_check: None } + } + + pub async fn check_now(&mut self, window: &WebviewWindow) -> Result { + self.last_check = Some(Instant::now()); + + info!("Checking for plugin updates"); + + let http_client = yaak_api_client(window.app_handle())?; + let plugins = window.app_handle().db().list_plugins()?; + let updates = check_plugin_updates(&http_client, plugins.clone()).await?; + + if updates.plugins.is_empty() { + info!("No plugin updates available"); + return Ok(false); + } + + // Get current plugin versions to build notification + let mut update_infos = Vec::new(); + + for update in &updates.plugins { + if let Some(plugin) = plugins.iter().find(|p| { + if let Ok(meta) = get_plugin_meta(&std::path::Path::new(&p.directory)) { + meta.name == update.name + } else { + false + } + }) { + if let Ok(meta) = get_plugin_meta(&std::path::Path::new(&plugin.directory)) { + update_infos.push(PluginUpdateInfo { + name: update.name.clone(), + current_version: meta.version, + latest_version: update.version.clone(), + }); + } + } + } + + let notification = + PluginUpdateNotification { update_count: update_infos.len(), plugins: update_infos }; + + info!("Found {} plugin update(s)", notification.update_count); + + if let Err(e) = window.emit_to(window.label(), "plugin_updates_available", ¬ification) { + error!("Failed to emit plugin_updates_available event: {}", e); + } + + Ok(true) + } + + pub async fn maybe_check(&mut self, window: &WebviewWindow) -> Result { + let update_period_seconds = MAX_UPDATE_CHECK_HOURS * 60 * 60; + + if let Some(i) = self.last_check + && i.elapsed().as_secs() < update_period_seconds + { + return Ok(false); + } + + self.check_now(window).await + } +} + +// ============================================================================ +// Tauri Commands +// ============================================================================ + +#[command] +pub(crate) async fn cmd_plugins_search( + app_handle: AppHandle, + query: &str, +) -> Result { + let http_client = yaak_api_client(&app_handle)?; + Ok(search_plugins(&http_client, query).await?) +} + +#[command] +pub(crate) async fn cmd_plugins_install( + window: WebviewWindow, + name: &str, + version: Option, +) -> Result<()> { + let plugin_manager = Arc::new((*window.state::()).clone()); + let http_client = yaak_api_client(window.app_handle())?; + let query_manager = window.state::(); + let plugin_context = window.plugin_context(); + download_and_install( + plugin_manager, + &query_manager, + &http_client, + &plugin_context, + name, + version, + ) + .await?; + Ok(()) +} + +#[command] +pub(crate) async fn cmd_plugins_uninstall( + plugin_id: &str, + window: WebviewWindow, +) -> Result { + let plugin_manager = Arc::new((*window.state::()).clone()); + let query_manager = window.state::(); + let plugin_context = window.plugin_context(); + Ok(delete_and_uninstall(plugin_manager, &query_manager, &plugin_context, plugin_id).await?) +} + +#[command] +pub(crate) async fn cmd_plugins_updates( + app_handle: AppHandle, +) -> Result { + let http_client = yaak_api_client(&app_handle)?; + let plugins = app_handle.db().list_plugins()?; + Ok(check_plugin_updates(&http_client, plugins).await?) +} + +#[command] +pub(crate) async fn cmd_plugins_update_all( + window: WebviewWindow, +) -> Result> { + let http_client = yaak_api_client(window.app_handle())?; + let plugins = window.db().list_plugins()?; + + // Get list of available updates (already filtered to only registry plugins) + let updates = check_plugin_updates(&http_client, plugins).await?; + + if updates.plugins.is_empty() { + return Ok(Vec::new()); + } + + let plugin_manager = Arc::new((*window.state::()).clone()); + let query_manager = window.state::(); + let plugin_context = window.plugin_context(); + + let mut updated = Vec::new(); + + for update in updates.plugins { + info!("Updating plugin: {} to version {}", update.name, update.version); + match download_and_install( + plugin_manager.clone(), + &query_manager, + &http_client, + &plugin_context, + &update.name, + Some(update.version.clone()), + ) + .await + { + Ok(_) => { + info!("Successfully updated plugin: {}", update.name); + updated.push(update.clone()); + } + Err(e) => { + log::error!("Failed to update plugin {}: {:?}", update.name, e); + } + } + } + + Ok(updated) +} + +// ============================================================================ +// Tauri Plugin Initialization +// ============================================================================ + +pub fn init() -> TauriPlugin { + Builder::new("yaak-plugins") + .invoke_handler(generate_handler![ + cmd_plugins_search, + cmd_plugins_install, + cmd_plugins_uninstall, + cmd_plugins_updates, + cmd_plugins_update_all + ]) + .setup(|app_handle, _| { + // Resolve paths for plugin manager + let vendored_plugin_dir = app_handle + .path() + .resolve("vendored/plugins", BaseDirectory::Resource) + .expect("failed to resolve plugin directory resource"); + + let installed_plugin_dir = app_handle + .path() + .app_data_dir() + .expect("failed to get app data dir") + .join("installed-plugins"); + + #[cfg(target_os = "windows")] + let node_bin_name = "yaaknode.exe"; + #[cfg(not(target_os = "windows"))] + let node_bin_name = "yaaknode"; + + let node_bin_path = app_handle + .path() + .resolve(format!("vendored/node/{}", node_bin_name), BaseDirectory::Resource) + .expect("failed to resolve yaaknode binary"); + + let plugin_runtime_main = app_handle + .path() + .resolve("vendored/plugin-runtime", BaseDirectory::Resource) + .expect("failed to resolve plugin runtime") + .join("index.cjs"); + + let dev_mode = is_dev(); + + // Create plugin manager asynchronously + let app_handle_clone = app_handle.clone(); + tauri::async_runtime::block_on(async move { + let manager = PluginManager::new( + vendored_plugin_dir, + installed_plugin_dir, + node_bin_path, + plugin_runtime_main, + dev_mode, + ) + .await; + + // Initialize all plugins after manager is created + let bundled_dirs = manager + .list_bundled_plugin_dirs() + .await + .expect("Failed to list bundled plugins"); + + // Ensure all bundled plugins make it into the database + let db = app_handle_clone.db(); + for dir in &bundled_dirs { + if db.get_plugin_by_directory(dir).is_none() { + db.upsert_plugin( + &Plugin { + directory: dir.clone(), + enabled: true, + url: None, + ..Default::default() + }, + &UpdateSource::Background, + ) + .expect("Failed to upsert bundled plugin"); + } + } + + // Get all plugins from database and initialize + let plugins = db.list_plugins().expect("Failed to list plugins from database"); + drop(db); // Explicitly drop the connection before await + + let errors = + manager.initialize_all_plugins(plugins, &PluginContext::new_empty()).await; + + // Show toast for any failed plugins + for (plugin_dir, error_msg) in errors { + let plugin_name = plugin_dir.split('/').last().unwrap_or(&plugin_dir); + let toast = ShowToastRequest { + message: format!("Failed to start plugin '{}': {}", plugin_name, error_msg), + color: Some(Color::Danger), + icon: Some(Icon::AlertTriangle), + timeout: Some(10000), + }; + if let Err(emit_err) = app_handle_clone.emit("show_toast", toast) { + error!("Failed to emit toast for plugin error: {emit_err:?}"); + } + } + + app_handle_clone.manage(manager); + }); + + let plugin_updater = PluginUpdater::new(); + app_handle.manage(Mutex::new(plugin_updater)); + + Ok(()) + }) + .on_event(|app, e| match e { + RunEvent::ExitRequested { api, .. } => { + if EXITING.swap(true, Ordering::SeqCst) { + return; // Only exit once to prevent infinite recursion + } + api.prevent_exit(); + tauri::async_runtime::block_on(async move { + info!("Exiting plugin runtime due to app exit"); + let manager: State = app.state(); + manager.terminate().await; + app.exit(0); + }); + } + RunEvent::WindowEvent { event: WindowEvent::Focused(true), label, .. } => { + // Check for plugin updates on window focus + let w = app.get_webview_window(&label).unwrap(); + let h = app.clone(); + tauri::async_runtime::spawn(async move { + tokio::time::sleep(Duration::from_secs(3)).await; + let val: State<'_, Mutex> = h.state(); + if let Err(e) = val.lock().await.maybe_check(&w).await { + warn!("Failed to check for plugin updates {e:?}"); + } + }); + } + _ => {} + }) + .build() +} diff --git a/src-tauri/src/render.rs b/crates-tauri/yaak-app/src/render.rs similarity index 100% rename from src-tauri/src/render.rs rename to crates-tauri/yaak-app/src/render.rs diff --git a/src-tauri/yaak-sync/src/commands.rs b/crates-tauri/yaak-app/src/sync_ext.rs similarity index 64% rename from src-tauri/yaak-sync/src/commands.rs rename to crates-tauri/yaak-app/src/sync_ext.rs index b0d5c091..c5f54b5f 100644 --- a/src-tauri/yaak-sync/src/commands.rs +++ b/crates-tauri/yaak-app/src/sync_ext.rs @@ -1,10 +1,9 @@ -use crate::error::Error::InvalidSyncDirectory; +//! Tauri-specific extensions for yaak-sync. +//! +//! This module provides the Tauri commands for sync functionality. + use crate::error::Result; -use crate::sync::{ - FsCandidate, SyncOp, apply_sync_ops, apply_sync_state_ops, compute_sync_ops, get_db_candidates, - get_fs_candidates, -}; -use crate::watch::{WatchEvent, watch_directory}; +use crate::models_ext::QueryManagerExt; use chrono::Utc; use log::warn; use serde::{Deserialize, Serialize}; @@ -13,55 +12,63 @@ use tauri::ipc::Channel; use tauri::{AppHandle, Listener, Runtime, command}; use tokio::sync::watch; use ts_rs::TS; +use yaak_sync::error::Error::InvalidSyncDirectory; +use yaak_sync::sync::{ + FsCandidate, SyncOp, apply_sync_ops, apply_sync_state_ops, compute_sync_ops, get_db_candidates, + get_fs_candidates, +}; +use yaak_sync::watch::{WatchEvent, watch_directory}; #[command] -pub async fn calculate( +pub(crate) async fn cmd_sync_calculate( app_handle: AppHandle, workspace_id: &str, sync_dir: &Path, ) -> Result> { if !sync_dir.exists() { - return Err(InvalidSyncDirectory(sync_dir.to_string_lossy().to_string())); + return Err(InvalidSyncDirectory(sync_dir.to_string_lossy().to_string()).into()); } - let db_candidates = get_db_candidates(&app_handle, workspace_id, sync_dir)?; + let db = app_handle.db(); + let version = app_handle.package_info().version.to_string(); + let db_candidates = get_db_candidates(&db, &version, workspace_id, sync_dir)?; let fs_candidates = get_fs_candidates(sync_dir)? .into_iter() // Only keep items in the same workspace .filter(|fs| fs.model.workspace_id() == workspace_id) .collect::>(); - // println!("\ndb_candidates: \n{}\n", serde_json::to_string_pretty(&db_candidates)?); - // println!("\nfs_candidates: \n{}\n", serde_json::to_string_pretty(&fs_candidates)?); Ok(compute_sync_ops(db_candidates, fs_candidates)) } #[command] -pub async fn calculate_fs(dir: &Path) -> Result> { +pub(crate) async fn cmd_sync_calculate_fs(dir: &Path) -> Result> { let db_candidates = Vec::new(); let fs_candidates = get_fs_candidates(dir)?; Ok(compute_sync_ops(db_candidates, fs_candidates)) } #[command] -pub async fn apply( +pub(crate) async fn cmd_sync_apply( app_handle: AppHandle, sync_ops: Vec, sync_dir: &Path, workspace_id: &str, ) -> Result<()> { - let sync_state_ops = apply_sync_ops(&app_handle, &workspace_id, sync_dir, sync_ops)?; - apply_sync_state_ops(&app_handle, workspace_id, sync_dir, sync_state_ops) + let db = app_handle.db(); + let sync_state_ops = apply_sync_ops(&db, workspace_id, sync_dir, sync_ops)?; + apply_sync_state_ops(&db, workspace_id, sync_dir, sync_state_ops)?; + Ok(()) } #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase")] -#[ts(export, export_to = "gen_watch.ts")] +#[ts(export, export_to = "index.ts")] pub(crate) struct WatchResult { unlisten_event: String, } #[command] -pub async fn watch( +pub(crate) async fn cmd_sync_watch( app_handle: AppHandle, sync_dir: &Path, workspace_id: &str, @@ -69,7 +76,14 @@ pub async fn watch( ) -> Result { let (cancel_tx, cancel_rx) = watch::channel(()); - watch_directory(&sync_dir, channel, cancel_rx).await?; + // Create a callback that forwards events to the Tauri channel + let callback = move |event: WatchEvent| { + if let Err(e) = channel.send(event) { + warn!("Failed to send watch event: {:?}", e); + } + }; + + watch_directory(&sync_dir, callback, cancel_rx).await?; let app_handle_inner = app_handle.clone(); let unlisten_event = diff --git a/src-tauri/src/updates.rs b/crates-tauri/yaak-app/src/updates.rs similarity index 99% rename from src-tauri/src/updates.rs rename to crates-tauri/yaak-app/src/updates.rs index 3b8f721f..3307b282 100644 --- a/src-tauri/src/updates.rs +++ b/crates-tauri/yaak-app/src/updates.rs @@ -11,7 +11,7 @@ use tauri_plugin_updater::{Update, UpdaterExt}; use tokio::task::block_in_place; use tokio::time::sleep; use ts_rs::TS; -use yaak_models::query_manager::QueryManagerExt; +use crate::models_ext::QueryManagerExt; use yaak_models::util::generate_id; use yaak_plugins::manager::PluginManager; diff --git a/src-tauri/src/uri_scheme.rs b/crates-tauri/yaak-app/src/uri_scheme.rs similarity index 86% rename from src-tauri/src/uri_scheme.rs rename to crates-tauri/yaak-app/src/uri_scheme.rs index 2be03d37..ed6f2bae 100644 --- a/src-tauri/src/uri_scheme.rs +++ b/crates-tauri/yaak-app/src/uri_scheme.rs @@ -1,14 +1,18 @@ use crate::error::Result; use crate::import::import_data; +use crate::models_ext::QueryManagerExt; +use crate::PluginContextExt; use log::{info, warn}; use std::collections::HashMap; use std::fs; +use std::sync::Arc; use tauri::{AppHandle, Emitter, Manager, Runtime, Url}; use tauri_plugin_dialog::{DialogExt, MessageDialogButtons, MessageDialogKind}; -use yaak_common::api_client::yaak_api_client; +use yaak_tauri_utils::api_client::yaak_api_client; use yaak_models::util::generate_id; use yaak_plugins::events::{Color, ShowToastRequest}; use yaak_plugins::install::download_and_install; +use yaak_plugins::manager::PluginManager; pub(crate) async fn handle_deep_link( app_handle: &AppHandle, @@ -40,7 +44,18 @@ pub(crate) async fn handle_deep_link( return Ok(()); } - let pv = download_and_install(window, name, version).await?; + let plugin_manager = Arc::new((*window.state::()).clone()); + let query_manager = app_handle.db_manager(); + let http_client = yaak_api_client(app_handle)?; + let plugin_context = window.plugin_context(); + let pv = download_and_install( + plugin_manager, + &query_manager, + &http_client, + &plugin_context, + name, + version, + ).await?; app_handle.emit( "show_toast", ShowToastRequest { diff --git a/src-tauri/src/window.rs b/crates-tauri/yaak-app/src/window.rs similarity index 99% rename from src-tauri/src/window.rs rename to crates-tauri/yaak-app/src/window.rs index d0bbb7b3..ddc06fea 100644 --- a/src-tauri/src/window.rs +++ b/crates-tauri/yaak-app/src/window.rs @@ -8,7 +8,7 @@ use tauri::{ }; use tauri_plugin_opener::OpenerExt; use tokio::sync::mpsc; -use yaak_models::query_manager::QueryManagerExt; +use crate::models_ext::QueryManagerExt; const DEFAULT_WINDOW_WIDTH: f64 = 1100.0; const DEFAULT_WINDOW_HEIGHT: f64 = 600.0; diff --git a/src-tauri/src/window_menu.rs b/crates-tauri/yaak-app/src/window_menu.rs similarity index 100% rename from src-tauri/src/window_menu.rs rename to crates-tauri/yaak-app/src/window_menu.rs diff --git a/src-tauri/yaak-ws/src/commands.rs b/crates-tauri/yaak-app/src/ws_ext.rs similarity index 79% rename from src-tauri/yaak-ws/src/commands.rs rename to crates-tauri/yaak-app/src/ws_ext.rs index bef998a0..ab1f7f95 100644 --- a/src-tauri/yaak-ws/src/commands.rs +++ b/crates-tauri/yaak-app/src/ws_ext.rs @@ -1,112 +1,118 @@ +//! WebSocket Tauri command wrappers +//! These wrap the core yaak-ws functionality for Tauri IPC. + use crate::error::Result; -use crate::manager::WebsocketManager; -use crate::render::render_websocket_request; -use crate::resolve::resolve_websocket_request; -use log::debug; -use log::{info, warn}; +use crate::models_ext::QueryManagerExt; +use crate::PluginContextExt; +use http::HeaderMap; +use log::{debug, info, warn}; use std::str::FromStr; -use tauri::http::{HeaderMap, HeaderName}; -use tauri::{AppHandle, Runtime, State, WebviewWindow}; +use std::sync::Arc; +use tauri::http::HeaderValue; +use tauri::{AppHandle, Manager, Runtime, State, WebviewWindow, command}; use tokio::sync::{Mutex, mpsc}; use tokio_tungstenite::tungstenite::Message; -use tokio_tungstenite::tungstenite::http::HeaderValue; use url::Url; +use yaak_crypto::manager::EncryptionManager; use yaak_http::cookies::CookieStore; use yaak_http::path_placeholders::apply_path_placeholders; use yaak_models::models::{ HttpResponseHeader, WebsocketConnection, WebsocketConnectionState, WebsocketEvent, WebsocketEventType, WebsocketRequest, }; -use yaak_models::query_manager::QueryManagerExt; use yaak_models::util::UpdateSource; -use yaak_plugins::events::{ - CallHttpAuthenticationRequest, HttpHeader, PluginContext, RenderPurpose, -}; +use yaak_plugins::events::{CallHttpAuthenticationRequest, HttpHeader, RenderPurpose}; use yaak_plugins::manager::PluginManager; use yaak_plugins::template_callback::PluginTemplateCallback; use yaak_templates::{RenderErrorBehavior, RenderOptions}; use yaak_tls::find_client_certificate; +use yaak_ws::{WebsocketManager, render_websocket_request}; -#[tauri::command] -pub(crate) async fn upsert_request( +#[command] +pub async fn cmd_ws_upsert_request( request: WebsocketRequest, app_handle: AppHandle, window: WebviewWindow, ) -> Result { - Ok(app_handle.db().upsert_websocket_request(&request, &UpdateSource::from_window(&window))?) + Ok(app_handle + .db() + .upsert_websocket_request(&request, &UpdateSource::from_window_label(window.label()))?) } -#[tauri::command] -pub(crate) async fn duplicate_request( +#[command] +pub async fn cmd_ws_duplicate_request( request_id: &str, app_handle: AppHandle, window: WebviewWindow, ) -> Result { let db = app_handle.db(); let request = db.get_websocket_request(request_id)?; - Ok(db.duplicate_websocket_request(&request, &UpdateSource::from_window(&window))?) + Ok(db.duplicate_websocket_request(&request, &UpdateSource::from_window_label(window.label()))?) } -#[tauri::command] -pub(crate) async fn delete_request( +#[command] +pub async fn cmd_ws_delete_request( request_id: &str, app_handle: AppHandle, window: WebviewWindow, ) -> Result { Ok(app_handle .db() - .delete_websocket_request_by_id(request_id, &UpdateSource::from_window(&window))?) + .delete_websocket_request_by_id(request_id, &UpdateSource::from_window_label(window.label()))?) } -#[tauri::command] -pub(crate) async fn delete_connection( +#[command] +pub async fn cmd_ws_delete_connection( connection_id: &str, app_handle: AppHandle, window: WebviewWindow, ) -> Result { Ok(app_handle .db() - .delete_websocket_connection_by_id(connection_id, &UpdateSource::from_window(&window))?) + .delete_websocket_connection_by_id( + connection_id, + &UpdateSource::from_window_label(window.label()), + )?) } -#[tauri::command] -pub(crate) async fn delete_connections( +#[command] +pub async fn cmd_ws_delete_connections( request_id: &str, app_handle: AppHandle, window: WebviewWindow, ) -> Result<()> { Ok(app_handle.db().delete_all_websocket_connections_for_request( request_id, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?) } -#[tauri::command] -pub(crate) async fn list_events( +#[command] +pub async fn cmd_ws_list_events( connection_id: &str, app_handle: AppHandle, ) -> Result> { Ok(app_handle.db().list_websocket_events(connection_id)?) } -#[tauri::command] -pub(crate) async fn list_requests( +#[command] +pub async fn cmd_ws_list_requests( workspace_id: &str, app_handle: AppHandle, ) -> Result> { Ok(app_handle.db().list_websocket_requests(workspace_id)?) } -#[tauri::command] -pub(crate) async fn list_connections( +#[command] +pub async fn cmd_ws_list_connections( workspace_id: &str, app_handle: AppHandle, ) -> Result> { Ok(app_handle.db().list_websocket_connections(workspace_id)?) } -#[tauri::command] -pub(crate) async fn send( +#[command] +pub async fn cmd_ws_send( connection_id: &str, environment_id: Option<&str>, app_handle: AppHandle, @@ -122,12 +128,15 @@ pub(crate) async fn send( )?; let (resolved_request, _auth_context_id) = resolve_websocket_request(&window, &unrendered_request)?; + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let request = render_websocket_request( &resolved_request, environment_chain, &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager, + encryption_manager, + &window.plugin_context(), RenderPurpose::Send, ), &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, @@ -147,14 +156,14 @@ pub(crate) async fn send( message: request.message.into(), ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; Ok(connection) } -#[tauri::command] -pub(crate) async fn close( +#[command] +pub async fn cmd_ws_close( connection_id: &str, app_handle: AppHandle, window: WebviewWindow, @@ -165,7 +174,7 @@ pub(crate) async fn close( let connection = db.get_websocket_connection(connection_id)?; db.upsert_websocket_connection( &WebsocketConnection { state: WebsocketConnectionState::Closing, ..connection }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )? }; @@ -177,14 +186,14 @@ pub(crate) async fn close( Ok(connection) } -#[tauri::command] -pub(crate) async fn connect( +#[command] +pub async fn cmd_ws_connect( request_id: &str, environment_id: Option<&str>, cookie_jar_id: Option<&str>, app_handle: AppHandle, window: WebviewWindow, - plugin_manager: State<'_, PluginManager>, + _plugin_manager: State<'_, PluginManager>, ws_manager: State<'_, Mutex>, ) -> Result { let unrendered_request = app_handle.db().get_websocket_request(request_id)?; @@ -197,12 +206,15 @@ pub(crate) async fn connect( let settings = app_handle.db().get_settings(); let (resolved_request, auth_context_id) = resolve_websocket_request(&window, &unrendered_request)?; + let plugin_manager = Arc::new((*app_handle.state::()).clone()); + let encryption_manager = Arc::new((*app_handle.state::()).clone()); let request = render_websocket_request( &resolved_request, environment_chain, &PluginTemplateCallback::new( - &app_handle, - &PluginContext::new(&window), + plugin_manager.clone(), + encryption_manager.clone(), + &window.plugin_context(), RenderPurpose::Send, ), &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, @@ -215,7 +227,7 @@ pub(crate) async fn connect( request_id: request_id.to_string(), ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; let (mut url, url_parameters) = apply_path_placeholders(&request.url, &request.url_parameters); @@ -233,7 +245,7 @@ pub(crate) async fn connect( state: WebsocketConnectionState::Closed, ..connection }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?); } }; @@ -250,7 +262,7 @@ pub(crate) async fn connect( } headers.insert( - HeaderName::from_str(&h.name).unwrap(), + http::HeaderName::from_str(&h.name).unwrap(), HeaderValue::from_str(&h.value).unwrap(), ); } @@ -278,14 +290,14 @@ pub(crate) async fn connect( }; let plugin_result = plugin_manager .call_http_authentication( - &window, + &window.plugin_context(), &authentication_type, plugin_req, - &PluginContext::new(&window), ) .await?; for header in plugin_result.set_headers.unwrap_or_default() { - match (HeaderName::from_str(&header.name), HeaderValue::from_str(&header.value)) { + match (http::HeaderName::from_str(&header.name), HeaderValue::from_str(&header.value)) + { (Ok(name), Ok(value)) => { headers.insert(name, value); } @@ -312,7 +324,7 @@ pub(crate) async fn connect( if let Some(cookie_header_value) = store.get_cookie_header(&http_url) { debug!("Inserting cookies into WS upgrade to {}: {}", url, cookie_header_value); headers.insert( - HeaderName::from_static("cookie"), + http::HeaderName::from_static("cookie"), HeaderValue::from_str(&cookie_header_value).unwrap(), ); } @@ -356,7 +368,7 @@ pub(crate) async fn connect( state: WebsocketConnectionState::Closed, ..connection }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?); } }; @@ -370,7 +382,7 @@ pub(crate) async fn connect( message_type: WebsocketEventType::Open, ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; let response_headers = response @@ -390,7 +402,7 @@ pub(crate) async fn connect( url: request.url.clone(), ..connection }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; { @@ -398,6 +410,7 @@ pub(crate) async fn connect( let request_id = request.id.to_string(); let workspace_id = request.workspace_id.clone(); let connection = connection.clone(); + let window_label = window.label().to_string(); let mut has_written_close = false; tokio::spawn(async move { while let Some(message) = receive_rx.recv().await { @@ -425,7 +438,7 @@ pub(crate) async fn connect( message: message.into_data().into(), ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(&window_label), ) .unwrap(); } @@ -442,7 +455,7 @@ pub(crate) async fn connect( message_type: WebsocketEventType::Close, ..Default::default() }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(&window_label), ) .unwrap(); } @@ -455,7 +468,7 @@ pub(crate) async fn connect( state: WebsocketConnectionState::Closed, ..connection }, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(&window_label), ) .unwrap(); }); @@ -464,6 +477,24 @@ pub(crate) async fn connect( Ok(connection) } +/// Resolve inherited authentication and headers for a websocket request +fn resolve_websocket_request( + window: &WebviewWindow, + request: &WebsocketRequest, +) -> Result<(WebsocketRequest, String)> { + let mut new_request = request.clone(); + + let (authentication_type, authentication, authentication_context_id) = + window.db().resolve_auth_for_websocket_request(request)?; + new_request.authentication_type = authentication_type; + new_request.authentication = authentication; + + let headers = window.db().resolve_headers_for_websocket_request(request)?; + new_request.headers = headers; + + Ok((new_request, authentication_context_id)) +} + /// Convert WS URL to HTTP URL for cookie filtering /// WebSocket upgrade requests are HTTP requests initially, so HttpOnly cookies should apply fn convert_ws_url_to_http(ws_url: &Url) -> Url { diff --git a/src-tauri/static/greg.jpeg b/crates-tauri/yaak-app/static/greg.jpeg similarity index 100% rename from src-tauri/static/greg.jpeg rename to crates-tauri/yaak-app/static/greg.jpeg diff --git a/src-tauri/tauri.conf.json b/crates-tauri/yaak-app/tauri.conf.json similarity index 78% rename from src-tauri/tauri.conf.json rename to crates-tauri/yaak-app/tauri.conf.json index 83d7c24e..3291164c 100644 --- a/src-tauri/tauri.conf.json +++ b/crates-tauri/yaak-app/tauri.conf.json @@ -6,7 +6,7 @@ "beforeBuildCommand": "npm run tauri-before-build", "beforeDevCommand": "npm run tauri-before-dev", "devUrl": "http://localhost:1420", - "frontendDist": "../dist" + "frontendDist": "../../dist" }, "app": { "withGlobalTauri": false, @@ -38,6 +38,14 @@ "icons/release/128x128@2x.png", "icons/release/icon.icns", "icons/release/icon.ico" + ], + "resources": [ + "static", + "vendored/protoc/include", + "vendored/plugins", + "vendored/plugin-runtime", + "vendored/node/yaaknode", + "vendored/protoc/yaakprotoc" ] } } diff --git a/src-tauri/tauri.development.conf.json b/crates-tauri/yaak-app/tauri.development.conf.json similarity index 52% rename from src-tauri/tauri.development.conf.json rename to crates-tauri/yaak-app/tauri.development.conf.json index 0c2b993d..2ad1fa5e 100644 --- a/src-tauri/tauri.development.conf.json +++ b/crates-tauri/yaak-app/tauri.development.conf.json @@ -2,16 +2,6 @@ "productName": "Daak", "identifier": "app.yaak.desktop.dev", "bundle": { - "externalBin": [ - "vendored/node/yaaknode", - "vendored/protoc/yaakprotoc" - ], - "resources": [ - "static", - "vendored/protoc/include", - "vendored/plugins", - "vendored/plugin-runtime" - ], "icon": [ "icons/dev/32x32.png", "icons/dev/128x128.png", diff --git a/src-tauri/tauri.linux.conf.json b/crates-tauri/yaak-app/tauri.linux.conf.json similarity index 100% rename from src-tauri/tauri.linux.conf.json rename to crates-tauri/yaak-app/tauri.linux.conf.json diff --git a/src-tauri/tauri.release.conf.json b/crates-tauri/yaak-app/tauri.release.conf.json similarity index 87% rename from src-tauri/tauri.release.conf.json rename to crates-tauri/yaak-app/tauri.release.conf.json index 39bf23ad..20ad2868 100644 --- a/src-tauri/tauri.release.conf.json +++ b/crates-tauri/yaak-app/tauri.release.conf.json @@ -37,17 +37,7 @@ "active": true, "category": "DeveloperTool", "createUpdaterArtifacts": true, - "externalBin": [ - "vendored/node/yaaknode", - "vendored/protoc/yaakprotoc" - ], "longDescription": "A cross-platform desktop app for interacting with REST, GraphQL, and gRPC", - "resources": [ - "static", - "vendored/protoc/include", - "vendored/plugins", - "vendored/plugin-runtime" - ], "shortDescription": "Play with APIs, intuitively", "targets": [ "app", diff --git a/crates-tauri/yaak-app/tauri.worktree.conf.json b/crates-tauri/yaak-app/tauri.worktree.conf.json new file mode 100644 index 00000000..6791e451 --- /dev/null +++ b/crates-tauri/yaak-app/tauri.worktree.conf.json @@ -0,0 +1,4 @@ +{ + "identifier": "app.yaak.desktop.dev.yaak-detach-tauri", + "productName": "Daak (yaak-detach-tauri)" +} diff --git a/src-tauri/template.desktop b/crates-tauri/yaak-app/template.desktop similarity index 100% rename from src-tauri/template.desktop rename to crates-tauri/yaak-app/template.desktop diff --git a/src-tauri/yaak-fonts/Cargo.toml b/crates-tauri/yaak-fonts/Cargo.toml similarity index 100% rename from src-tauri/yaak-fonts/Cargo.toml rename to crates-tauri/yaak-fonts/Cargo.toml diff --git a/src-tauri/yaak-fonts/bindings/gen_fonts.ts b/crates-tauri/yaak-fonts/bindings/gen_fonts.ts similarity index 100% rename from src-tauri/yaak-fonts/bindings/gen_fonts.ts rename to crates-tauri/yaak-fonts/bindings/gen_fonts.ts diff --git a/src-tauri/yaak-fonts/build.rs b/crates-tauri/yaak-fonts/build.rs similarity index 100% rename from src-tauri/yaak-fonts/build.rs rename to crates-tauri/yaak-fonts/build.rs diff --git a/src-tauri/yaak-fonts/index.ts b/crates-tauri/yaak-fonts/index.ts similarity index 100% rename from src-tauri/yaak-fonts/index.ts rename to crates-tauri/yaak-fonts/index.ts diff --git a/src-tauri/yaak-fonts/package.json b/crates-tauri/yaak-fonts/package.json similarity index 100% rename from src-tauri/yaak-fonts/package.json rename to crates-tauri/yaak-fonts/package.json diff --git a/src-tauri/yaak-fonts/permissions/default.toml b/crates-tauri/yaak-fonts/permissions/default.toml similarity index 100% rename from src-tauri/yaak-fonts/permissions/default.toml rename to crates-tauri/yaak-fonts/permissions/default.toml diff --git a/src-tauri/yaak-fonts/src/commands.rs b/crates-tauri/yaak-fonts/src/commands.rs similarity index 100% rename from src-tauri/yaak-fonts/src/commands.rs rename to crates-tauri/yaak-fonts/src/commands.rs diff --git a/src-tauri/yaak-fonts/src/error.rs b/crates-tauri/yaak-fonts/src/error.rs similarity index 100% rename from src-tauri/yaak-fonts/src/error.rs rename to crates-tauri/yaak-fonts/src/error.rs diff --git a/src-tauri/yaak-fonts/src/lib.rs b/crates-tauri/yaak-fonts/src/lib.rs similarity index 100% rename from src-tauri/yaak-fonts/src/lib.rs rename to crates-tauri/yaak-fonts/src/lib.rs diff --git a/src-tauri/yaak-license/Cargo.toml b/crates-tauri/yaak-license/Cargo.toml similarity index 93% rename from src-tauri/yaak-license/Cargo.toml rename to crates-tauri/yaak-license/Cargo.toml index 93f3229e..3560040a 100644 --- a/src-tauri/yaak-license/Cargo.toml +++ b/crates-tauri/yaak-license/Cargo.toml @@ -14,8 +14,9 @@ serde_json = { workspace = true } tauri = { workspace = true } thiserror = { workspace = true } ts-rs = { workspace = true } -yaak-models = { workspace = true } yaak-common = { workspace = true } +yaak-models = { workspace = true } +yaak-tauri-utils = { workspace = true } [build-dependencies] tauri-plugin = { workspace = true, features = ["build"] } diff --git a/src-tauri/yaak-license/bindings/gen_models.ts b/crates-tauri/yaak-license/bindings/gen_models.ts similarity index 100% rename from src-tauri/yaak-license/bindings/gen_models.ts rename to crates-tauri/yaak-license/bindings/gen_models.ts diff --git a/src-tauri/yaak-license/bindings/license.ts b/crates-tauri/yaak-license/bindings/license.ts similarity index 100% rename from src-tauri/yaak-license/bindings/license.ts rename to crates-tauri/yaak-license/bindings/license.ts diff --git a/src-tauri/yaak-license/bindings/models.ts b/crates-tauri/yaak-license/bindings/models.ts similarity index 100% rename from src-tauri/yaak-license/bindings/models.ts rename to crates-tauri/yaak-license/bindings/models.ts diff --git a/src-tauri/yaak-license/build.rs b/crates-tauri/yaak-license/build.rs similarity index 100% rename from src-tauri/yaak-license/build.rs rename to crates-tauri/yaak-license/build.rs diff --git a/src-tauri/yaak-license/index.ts b/crates-tauri/yaak-license/index.ts similarity index 100% rename from src-tauri/yaak-license/index.ts rename to crates-tauri/yaak-license/index.ts diff --git a/src-tauri/yaak-license/package.json b/crates-tauri/yaak-license/package.json similarity index 100% rename from src-tauri/yaak-license/package.json rename to crates-tauri/yaak-license/package.json diff --git a/src-tauri/yaak-license/permissions/default.toml b/crates-tauri/yaak-license/permissions/default.toml similarity index 100% rename from src-tauri/yaak-license/permissions/default.toml rename to crates-tauri/yaak-license/permissions/default.toml diff --git a/src-tauri/yaak-license/src/commands.rs b/crates-tauri/yaak-license/src/commands.rs similarity index 100% rename from src-tauri/yaak-license/src/commands.rs rename to crates-tauri/yaak-license/src/commands.rs diff --git a/src-tauri/yaak-license/src/error.rs b/crates-tauri/yaak-license/src/error.rs similarity index 92% rename from src-tauri/yaak-license/src/error.rs rename to crates-tauri/yaak-license/src/error.rs index 8db9f5ce..823260fe 100644 --- a/src-tauri/yaak-license/src/error.rs +++ b/crates-tauri/yaak-license/src/error.rs @@ -16,7 +16,7 @@ pub enum Error { ModelError(#[from] yaak_models::error::Error), #[error(transparent)] - CommonError(#[from] yaak_common::error::Error), + TauriUtilsError(#[from] yaak_tauri_utils::error::Error), #[error("Internal server error")] ServerError, diff --git a/src-tauri/yaak-license/src/lib.rs b/crates-tauri/yaak-license/src/lib.rs similarity index 100% rename from src-tauri/yaak-license/src/lib.rs rename to crates-tauri/yaak-license/src/lib.rs diff --git a/src-tauri/yaak-license/src/license.rs b/crates-tauri/yaak-license/src/license.rs similarity index 91% rename from src-tauri/yaak-license/src/license.rs rename to crates-tauri/yaak-license/src/license.rs index 435eb223..fa7f97d7 100644 --- a/src-tauri/yaak-license/src/license.rs +++ b/crates-tauri/yaak-license/src/license.rs @@ -7,11 +7,25 @@ use std::ops::Add; use std::time::Duration; use tauri::{AppHandle, Emitter, Manager, Runtime, WebviewWindow, is_dev}; use ts_rs::TS; -use yaak_common::api_client::yaak_api_client; use yaak_common::platform::get_os_str; -use yaak_models::query_manager::QueryManagerExt; +use yaak_tauri_utils::api_client::yaak_api_client; +use yaak_models::db_context::DbContext; +use yaak_models::query_manager::QueryManager; use yaak_models::util::UpdateSource; +/// Extension trait for accessing the QueryManager from Tauri Manager types. +/// This is needed temporarily until all crates are refactored to not use Tauri. +trait QueryManagerExt<'a, R> { + fn db(&'a self) -> DbContext<'a>; +} + +impl<'a, R: Runtime, M: Manager> QueryManagerExt<'a, R> for M { + fn db(&'a self) -> DbContext<'a> { + let qm = self.state::(); + qm.inner().connect() + } +} + const KV_NAMESPACE: &str = "license"; const KV_ACTIVATION_ID_KEY: &str = "activation_id"; const TRIAL_SECONDS: u64 = 3600 * 24 * 30; @@ -126,7 +140,7 @@ pub async fn activate_license( KV_ACTIVATION_ID_KEY, KV_NAMESPACE, body.activation_id.as_str(), - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), ); if let Err(e) = window.emit("license-activated", true) { @@ -161,7 +175,7 @@ pub async fn deactivate_license(window: &WebviewWindow) -> Result app_handle.db().delete_key_value( KV_ACTIVATION_ID_KEY, KV_NAMESPACE, - &UpdateSource::from_window(&window), + &UpdateSource::from_window_label(window.label()), )?; if let Err(e) = app_handle.emit("license-deactivated", true) { diff --git a/src-tauri/yaak-mac-window/Cargo.toml b/crates-tauri/yaak-mac-window/Cargo.toml similarity index 100% rename from src-tauri/yaak-mac-window/Cargo.toml rename to crates-tauri/yaak-mac-window/Cargo.toml diff --git a/src-tauri/yaak-mac-window/build.rs b/crates-tauri/yaak-mac-window/build.rs similarity index 100% rename from src-tauri/yaak-mac-window/build.rs rename to crates-tauri/yaak-mac-window/build.rs diff --git a/src-tauri/yaak-mac-window/index.ts b/crates-tauri/yaak-mac-window/index.ts similarity index 100% rename from src-tauri/yaak-mac-window/index.ts rename to crates-tauri/yaak-mac-window/index.ts diff --git a/src-tauri/yaak-mac-window/package.json b/crates-tauri/yaak-mac-window/package.json similarity index 100% rename from src-tauri/yaak-mac-window/package.json rename to crates-tauri/yaak-mac-window/package.json diff --git a/src-tauri/yaak-mac-window/permissions/default.toml b/crates-tauri/yaak-mac-window/permissions/default.toml similarity index 100% rename from src-tauri/yaak-mac-window/permissions/default.toml rename to crates-tauri/yaak-mac-window/permissions/default.toml diff --git a/src-tauri/yaak-mac-window/src/commands.rs b/crates-tauri/yaak-mac-window/src/commands.rs similarity index 100% rename from src-tauri/yaak-mac-window/src/commands.rs rename to crates-tauri/yaak-mac-window/src/commands.rs diff --git a/src-tauri/yaak-mac-window/src/lib.rs b/crates-tauri/yaak-mac-window/src/lib.rs similarity index 100% rename from src-tauri/yaak-mac-window/src/lib.rs rename to crates-tauri/yaak-mac-window/src/lib.rs diff --git a/src-tauri/yaak-mac-window/src/mac.rs b/crates-tauri/yaak-mac-window/src/mac.rs similarity index 100% rename from src-tauri/yaak-mac-window/src/mac.rs rename to crates-tauri/yaak-mac-window/src/mac.rs diff --git a/src-tauri/yaak-common/Cargo.toml b/crates-tauri/yaak-tauri-utils/Cargo.toml similarity index 62% rename from src-tauri/yaak-common/Cargo.toml rename to crates-tauri/yaak-tauri-utils/Cargo.toml index 3e872f12..11652f1a 100644 --- a/src-tauri/yaak-common/Cargo.toml +++ b/crates-tauri/yaak-tauri-utils/Cargo.toml @@ -1,13 +1,13 @@ [package] -name = "yaak-common" +name = "yaak-tauri-utils" version = "0.1.0" edition = "2024" publish = false [dependencies] tauri = { workspace = true } -reqwest = { workspace = true, features = ["system-proxy", "gzip"] } +reqwest = { workspace = true, features = ["gzip"] } thiserror = { workspace = true } -regex = "1.11.0" serde = { workspace = true, features = ["derive"] } -serde_json = { workspace = true } +regex = "1.11.0" +yaak-common = { workspace = true } diff --git a/src-tauri/yaak-common/src/api_client.rs b/crates-tauri/yaak-tauri-utils/src/api_client.rs similarity index 92% rename from src-tauri/yaak-common/src/api_client.rs rename to crates-tauri/yaak-tauri-utils/src/api_client.rs index f7ef75f1..cc308126 100644 --- a/src-tauri/yaak-common/src/api_client.rs +++ b/crates-tauri/yaak-tauri-utils/src/api_client.rs @@ -1,9 +1,9 @@ use crate::error::Result; -use crate::platform::{get_ua_arch, get_ua_platform}; use reqwest::Client; use std::time::Duration; use tauri::http::{HeaderMap, HeaderValue}; use tauri::{AppHandle, Runtime}; +use yaak_common::platform::{get_ua_arch, get_ua_platform}; pub fn yaak_api_client(app_handle: &AppHandle) -> Result { let platform = get_ua_platform(); diff --git a/src-tauri/yaak-common/src/error.rs b/crates-tauri/yaak-tauri-utils/src/error.rs similarity index 100% rename from src-tauri/yaak-common/src/error.rs rename to crates-tauri/yaak-tauri-utils/src/error.rs diff --git a/src-tauri/yaak-common/src/lib.rs b/crates-tauri/yaak-tauri-utils/src/lib.rs similarity index 60% rename from src-tauri/yaak-common/src/lib.rs rename to crates-tauri/yaak-tauri-utils/src/lib.rs index cac9bcc6..719ee7f0 100644 --- a/src-tauri/yaak-common/src/lib.rs +++ b/crates-tauri/yaak-tauri-utils/src/lib.rs @@ -1,5 +1,3 @@ pub mod api_client; pub mod error; -pub mod platform; -pub mod serde; pub mod window; diff --git a/src-tauri/yaak-common/src/window.rs b/crates-tauri/yaak-tauri-utils/src/window.rs similarity index 100% rename from src-tauri/yaak-common/src/window.rs rename to crates-tauri/yaak-tauri-utils/src/window.rs diff --git a/crates/yaak-common/Cargo.toml b/crates/yaak-common/Cargo.toml new file mode 100644 index 00000000..bfbd3168 --- /dev/null +++ b/crates/yaak-common/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "yaak-common" +version = "0.1.0" +edition = "2024" +publish = false + +[dependencies] +serde_json = { workspace = true } diff --git a/crates/yaak-common/src/lib.rs b/crates/yaak-common/src/lib.rs new file mode 100644 index 00000000..149fb345 --- /dev/null +++ b/crates/yaak-common/src/lib.rs @@ -0,0 +1,2 @@ +pub mod platform; +pub mod serde; diff --git a/src-tauri/yaak-common/src/platform.rs b/crates/yaak-common/src/platform.rs similarity index 100% rename from src-tauri/yaak-common/src/platform.rs rename to crates/yaak-common/src/platform.rs diff --git a/src-tauri/yaak-common/src/serde.rs b/crates/yaak-common/src/serde.rs similarity index 100% rename from src-tauri/yaak-common/src/serde.rs rename to crates/yaak-common/src/serde.rs diff --git a/crates/yaak-core/Cargo.toml b/crates/yaak-core/Cargo.toml new file mode 100644 index 00000000..c26cda80 --- /dev/null +++ b/crates/yaak-core/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "yaak-core" +version = "0.0.0" +edition = "2024" +authors = ["Gregory Schier"] +publish = false + +[dependencies] +thiserror = { workspace = true } diff --git a/crates/yaak-core/src/context.rs b/crates/yaak-core/src/context.rs new file mode 100644 index 00000000..e792fd28 --- /dev/null +++ b/crates/yaak-core/src/context.rs @@ -0,0 +1,56 @@ +use std::path::PathBuf; + +/// Context for a workspace operation. +/// +/// In Tauri, this is extracted from the WebviewWindow URL. +/// In CLI, this is constructed from command arguments or config. +#[derive(Debug, Clone, Default)] +pub struct WorkspaceContext { + pub workspace_id: Option, + pub environment_id: Option, + pub cookie_jar_id: Option, + pub request_id: Option, +} + +impl WorkspaceContext { + pub fn new() -> Self { + Self::default() + } + + pub fn with_workspace(mut self, workspace_id: impl Into) -> Self { + self.workspace_id = Some(workspace_id.into()); + self + } + + pub fn with_environment(mut self, environment_id: impl Into) -> Self { + self.environment_id = Some(environment_id.into()); + self + } + + pub fn with_cookie_jar(mut self, cookie_jar_id: impl Into) -> Self { + self.cookie_jar_id = Some(cookie_jar_id.into()); + self + } + + pub fn with_request(mut self, request_id: impl Into) -> Self { + self.request_id = Some(request_id.into()); + self + } +} + +/// Application context trait for accessing app-level resources. +/// +/// This abstracts over Tauri's `AppHandle` for path resolution and app identity. +/// Implemented by Tauri's AppHandle and by CLI's own context struct. +pub trait AppContext: Send + Sync + Clone { + /// Returns the path to the application data directory. + /// This is where the database and other persistent data are stored. + fn app_data_dir(&self) -> PathBuf; + + /// Returns the application identifier (e.g., "app.yaak.desktop"). + /// Used for keyring access and other platform-specific features. + fn app_identifier(&self) -> &str; + + /// Returns true if running in development mode. + fn is_dev(&self) -> bool; +} diff --git a/crates/yaak-core/src/error.rs b/crates/yaak-core/src/error.rs new file mode 100644 index 00000000..d0c6cd81 --- /dev/null +++ b/crates/yaak-core/src/error.rs @@ -0,0 +1,15 @@ +use thiserror::Error; + +pub type Result = std::result::Result; + +#[derive(Error, Debug)] +pub enum Error { + #[error("Missing required context: {0}")] + MissingContext(String), + + #[error("Configuration error: {0}")] + Config(String), + + #[error("IO error: {0}")] + Io(#[from] std::io::Error), +} diff --git a/crates/yaak-core/src/lib.rs b/crates/yaak-core/src/lib.rs new file mode 100644 index 00000000..101b53e3 --- /dev/null +++ b/crates/yaak-core/src/lib.rs @@ -0,0 +1,10 @@ +//! Core abstractions for Yaak that work without Tauri. +//! +//! This crate provides foundational types and traits that allow Yaak's +//! business logic to run in both Tauri (desktop app) and CLI contexts. + +mod context; +mod error; + +pub use context::{AppContext, WorkspaceContext}; +pub use error::{Error, Result}; diff --git a/src-tauri/yaak-crypto/Cargo.toml b/crates/yaak-crypto/Cargo.toml similarity index 78% rename from src-tauri/yaak-crypto/Cargo.toml rename to crates/yaak-crypto/Cargo.toml index cf3de89a..202a0360 100644 --- a/src-tauri/yaak-crypto/Cargo.toml +++ b/crates/yaak-crypto/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "yaak-crypto" -links = "yaak-crypto" version = "0.1.0" edition = "2021" publish = false @@ -12,9 +11,5 @@ chacha20poly1305 = "0.10.1" keyring = { workspace = true, features = ["apple-native", "windows-native", "sync-secret-service"] } log = { workspace = true } serde = { workspace = true, features = ["derive"] } -tauri = { workspace = true } thiserror = { workspace = true } yaak-models = { workspace = true } - -[build-dependencies] -tauri-plugin = { workspace = true, features = ["build"] } diff --git a/src-tauri/yaak-crypto/index.ts b/crates/yaak-crypto/index.ts similarity index 51% rename from src-tauri/yaak-crypto/index.ts rename to crates/yaak-crypto/index.ts index 0ebc1c68..61592cc2 100644 --- a/src-tauri/yaak-crypto/index.ts +++ b/crates/yaak-crypto/index.ts @@ -1,13 +1,13 @@ import { invoke } from '@tauri-apps/api/core'; export function enableEncryption(workspaceId: string) { - return invoke('plugin:yaak-crypto|enable_encryption', { workspaceId }); + return invoke('cmd_enable_encryption', { workspaceId }); } export function revealWorkspaceKey(workspaceId: string) { - return invoke('plugin:yaak-crypto|reveal_workspace_key', { workspaceId }); + return invoke('cmd_reveal_workspace_key', { workspaceId }); } export function setWorkspaceKey(args: { workspaceId: string; key: string }) { - return invoke('plugin:yaak-crypto|set_workspace_key', args); + return invoke('cmd_set_workspace_key', args); } diff --git a/src-tauri/yaak-crypto/package.json b/crates/yaak-crypto/package.json similarity index 100% rename from src-tauri/yaak-crypto/package.json rename to crates/yaak-crypto/package.json diff --git a/src-tauri/yaak-crypto/src/encryption.rs b/crates/yaak-crypto/src/encryption.rs similarity index 100% rename from src-tauri/yaak-crypto/src/encryption.rs rename to crates/yaak-crypto/src/encryption.rs diff --git a/src-tauri/yaak-crypto/src/error.rs b/crates/yaak-crypto/src/error.rs similarity index 100% rename from src-tauri/yaak-crypto/src/error.rs rename to crates/yaak-crypto/src/error.rs diff --git a/crates/yaak-crypto/src/lib.rs b/crates/yaak-crypto/src/lib.rs new file mode 100644 index 00000000..6fe9224c --- /dev/null +++ b/crates/yaak-crypto/src/lib.rs @@ -0,0 +1,7 @@ +extern crate core; + +pub mod encryption; +pub mod error; +pub mod manager; +mod master_key; +mod workspace_key; diff --git a/src-tauri/yaak-crypto/src/manager.rs b/crates/yaak-crypto/src/manager.rs similarity index 89% rename from src-tauri/yaak-crypto/src/manager.rs rename to crates/yaak-crypto/src/manager.rs index ec10b9b2..d0b58b93 100644 --- a/src-tauri/yaak-crypto/src/manager.rs +++ b/crates/yaak-crypto/src/manager.rs @@ -9,23 +9,12 @@ use base64::Engine; use log::{info, warn}; use std::collections::HashMap; use std::sync::{Arc, Mutex}; -use tauri::{AppHandle, Manager, Runtime, State}; use yaak_models::models::{EncryptedKey, Workspace, WorkspaceMeta}; -use yaak_models::query_manager::{QueryManager, QueryManagerExt}; +use yaak_models::query_manager::QueryManager; use yaak_models::util::{generate_id_of_length, UpdateSource}; const KEY_USER: &str = "encryption-key"; -pub trait EncryptionManagerExt<'a, R> { - fn crypto(&'a self) -> State<'a, EncryptionManager>; -} - -impl<'a, R: Runtime, M: Manager> EncryptionManagerExt<'a, R> for M { - fn crypto(&'a self) -> State<'a, EncryptionManager> { - self.state::() - } -} - #[derive(Debug, Clone)] pub struct EncryptionManager { cached_master_key: Arc>>, @@ -35,12 +24,12 @@ pub struct EncryptionManager { } impl EncryptionManager { - pub fn new(app_handle: &AppHandle) -> Self { + pub fn new(query_manager: QueryManager, app_id: impl Into) -> Self { Self { cached_master_key: Default::default(), cached_workspace_keys: Default::default(), - query_manager: app_handle.db_manager().inner().clone(), - app_id: app_handle.config().identifier.to_string(), + query_manager, + app_id: app_id.into(), } } @@ -112,7 +101,7 @@ impl EncryptionManager { Ok(workspace_meta) } - pub(crate) fn ensure_workspace_key(&self, workspace_id: &str) -> Result { + pub fn ensure_workspace_key(&self, workspace_id: &str) -> Result { let workspace_meta = self.query_manager.connect().get_or_create_workspace_meta(workspace_id)?; diff --git a/src-tauri/yaak-crypto/src/master_key.rs b/crates/yaak-crypto/src/master_key.rs similarity index 100% rename from src-tauri/yaak-crypto/src/master_key.rs rename to crates/yaak-crypto/src/master_key.rs diff --git a/src-tauri/yaak-crypto/src/workspace_key.rs b/crates/yaak-crypto/src/workspace_key.rs similarity index 100% rename from src-tauri/yaak-crypto/src/workspace_key.rs rename to crates/yaak-crypto/src/workspace_key.rs diff --git a/src-tauri/yaak-git/Cargo.toml b/crates/yaak-git/Cargo.toml similarity index 80% rename from src-tauri/yaak-git/Cargo.toml rename to crates/yaak-git/Cargo.toml index aede407d..e924e6e1 100644 --- a/src-tauri/yaak-git/Cargo.toml +++ b/crates/yaak-git/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "yaak-git" -links = "yaak-git" version = "0.1.0" edition = "2024" publish = false @@ -12,11 +11,8 @@ log = { workspace = true } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } serde_yaml = "0.9.34" -tauri = { workspace = true } thiserror = { workspace = true } ts-rs = { workspace = true, features = ["chrono-impl", "serde-json-impl"] } +url = "2" yaak-models = { workspace = true } yaak-sync = { workspace = true } - -[build-dependencies] -tauri-plugin = { workspace = true, features = ["build"] } diff --git a/src-tauri/yaak-git/bindings/gen_git.ts b/crates/yaak-git/bindings/gen_git.ts similarity index 100% rename from src-tauri/yaak-git/bindings/gen_git.ts rename to crates/yaak-git/bindings/gen_git.ts diff --git a/src-tauri/yaak-git/bindings/gen_models.ts b/crates/yaak-git/bindings/gen_models.ts similarity index 100% rename from src-tauri/yaak-git/bindings/gen_models.ts rename to crates/yaak-git/bindings/gen_models.ts diff --git a/src-tauri/yaak-git/index.ts b/crates/yaak-git/index.ts similarity index 74% rename from src-tauri/yaak-git/index.ts rename to crates/yaak-git/index.ts index 37b3a369..dd415c4b 100644 --- a/src-tauri/yaak-git/index.ts +++ b/crates/yaak-git/index.ts @@ -31,12 +31,12 @@ export function useGit(dir: string, callbacks: GitCallbacks) { }), log: useQuery({ queryKey: ['git', 'log', dir], - queryFn: () => invoke('plugin:yaak-git|log', { dir }), + queryFn: () => invoke('cmd_git_log', { dir }), }), status: useQuery({ refetchOnMount: true, queryKey: ['git', 'status', dir], - queryFn: () => invoke('plugin:yaak-git|status', { dir }), + queryFn: () => invoke('cmd_git_status', { dir }), }), }, mutations, @@ -51,14 +51,14 @@ export const gitMutations = (dir: string, callbacks: GitCallbacks) => { if (remote == null) throw new Error('No remote found'); } - const result = await invoke('plugin:yaak-git|push', { dir }); + const result = await invoke('cmd_git_push', { dir }); if (result.type !== 'needs_credentials') return result; // Needs credentials, prompt for them const creds = await callbacks.promptCredentials(result); if (creds == null) throw new Error('Canceled'); - await invoke('plugin:yaak-git|add_credential', { + await invoke('cmd_git_add_credential', { dir, remoteUrl: result.url, username: creds.username, @@ -66,66 +66,66 @@ export const gitMutations = (dir: string, callbacks: GitCallbacks) => { }); // Push again - return invoke('plugin:yaak-git|push', { dir }); + return invoke('cmd_git_push', { dir }); }; return { init: createFastMutation({ mutationKey: ['git', 'init'], - mutationFn: () => invoke('plugin:yaak-git|initialize', { dir }), + mutationFn: () => invoke('cmd_git_initialize', { dir }), onSuccess, }), add: createFastMutation({ mutationKey: ['git', 'add', dir], - mutationFn: (args) => invoke('plugin:yaak-git|add', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_add', { dir, ...args }), onSuccess, }), addRemote: createFastMutation({ mutationKey: ['git', 'add-remote'], - mutationFn: (args) => invoke('plugin:yaak-git|add_remote', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_add_remote', { dir, ...args }), onSuccess, }), rmRemote: createFastMutation({ mutationKey: ['git', 'rm-remote', dir], - mutationFn: (args) => invoke('plugin:yaak-git|rm_remote', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_rm_remote', { dir, ...args }), onSuccess, }), branch: createFastMutation({ mutationKey: ['git', 'branch', dir], - mutationFn: (args) => invoke('plugin:yaak-git|branch', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_branch', { dir, ...args }), onSuccess, }), mergeBranch: createFastMutation({ mutationKey: ['git', 'merge', dir], - mutationFn: (args) => invoke('plugin:yaak-git|merge_branch', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_merge_branch', { dir, ...args }), onSuccess, }), deleteBranch: createFastMutation({ mutationKey: ['git', 'delete-branch', dir], - mutationFn: (args) => invoke('plugin:yaak-git|delete_branch', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_delete_branch', { dir, ...args }), onSuccess, }), checkout: createFastMutation({ mutationKey: ['git', 'checkout', dir], - mutationFn: (args) => invoke('plugin:yaak-git|checkout', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_checkout', { dir, ...args }), onSuccess, }), commit: createFastMutation({ mutationKey: ['git', 'commit', dir], - mutationFn: (args) => invoke('plugin:yaak-git|commit', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_commit', { dir, ...args }), onSuccess, }), commitAndPush: createFastMutation({ mutationKey: ['git', 'commit_push', dir], mutationFn: async (args) => { - await invoke('plugin:yaak-git|commit', { dir, ...args }); + await invoke('cmd_git_commit', { dir, ...args }); return push(); }, onSuccess, }), fetchAll: createFastMutation({ mutationKey: ['git', 'checkout', dir], - mutationFn: () => invoke('plugin:yaak-git|fetch_all', { dir }), + mutationFn: () => invoke('cmd_git_fetch_all', { dir }), onSuccess, }), push: createFastMutation({ @@ -136,14 +136,14 @@ export const gitMutations = (dir: string, callbacks: GitCallbacks) => { pull: createFastMutation({ mutationKey: ['git', 'pull', dir], async mutationFn() { - const result = await invoke('plugin:yaak-git|pull', { dir }); + const result = await invoke('cmd_git_pull', { dir }); if (result.type !== 'needs_credentials') return result; // Needs credentials, prompt for them const creds = await callbacks.promptCredentials(result); if (creds == null) throw new Error('Canceled'); - await invoke('plugin:yaak-git|add_credential', { + await invoke('cmd_git_add_credential', { dir, remoteUrl: result.url, username: creds.username, @@ -151,18 +151,18 @@ export const gitMutations = (dir: string, callbacks: GitCallbacks) => { }); // Pull again - return invoke('plugin:yaak-git|pull', { dir }); + return invoke('cmd_git_pull', { dir }); }, onSuccess, }), unstage: createFastMutation({ mutationKey: ['git', 'unstage', dir], - mutationFn: (args) => invoke('plugin:yaak-git|unstage', { dir, ...args }), + mutationFn: (args) => invoke('cmd_git_unstage', { dir, ...args }), onSuccess, }), } as const; }; async function getRemotes(dir: string) { - return invoke('plugin:yaak-git|remotes', { dir }); + return invoke('cmd_git_remotes', { dir }); } diff --git a/src-tauri/yaak-git/package.json b/crates/yaak-git/package.json similarity index 100% rename from src-tauri/yaak-git/package.json rename to crates/yaak-git/package.json diff --git a/src-tauri/yaak-git/src/add.rs b/crates/yaak-git/src/add.rs similarity index 83% rename from src-tauri/yaak-git/src/add.rs rename to crates/yaak-git/src/add.rs index bdfc0db6..ea501347 100644 --- a/src-tauri/yaak-git/src/add.rs +++ b/crates/yaak-git/src/add.rs @@ -4,7 +4,7 @@ use git2::IndexAddOption; use log::info; use std::path::Path; -pub(crate) fn git_add(dir: &Path, rela_path: &Path) -> Result<()> { +pub fn git_add(dir: &Path, rela_path: &Path) -> Result<()> { let repo = open_repo(dir)?; let mut index = repo.index()?; diff --git a/src-tauri/yaak-git/src/binary.rs b/crates/yaak-git/src/binary.rs similarity index 100% rename from src-tauri/yaak-git/src/binary.rs rename to crates/yaak-git/src/binary.rs diff --git a/src-tauri/yaak-git/src/branch.rs b/crates/yaak-git/src/branch.rs similarity index 89% rename from src-tauri/yaak-git/src/branch.rs rename to crates/yaak-git/src/branch.rs index bfa9918d..52b0f11a 100644 --- a/src-tauri/yaak-git/src/branch.rs +++ b/crates/yaak-git/src/branch.rs @@ -8,7 +8,7 @@ use git2::build::CheckoutBuilder; use log::info; use std::path::Path; -pub(crate) fn git_checkout_branch(dir: &Path, branch_name: &str, force: bool) -> Result { +pub fn git_checkout_branch(dir: &Path, branch_name: &str, force: bool) -> Result { if branch_name.starts_with("origin/") { return git_checkout_remote_branch(dir, branch_name, force); } @@ -48,7 +48,7 @@ pub(crate) fn git_checkout_remote_branch( git_checkout_branch(dir, branch_name, force) } -pub(crate) fn git_create_branch(dir: &Path, name: &str) -> Result<()> { +pub fn git_create_branch(dir: &Path, name: &str) -> Result<()> { let repo = open_repo(dir)?; let head = match repo.head() { Ok(h) => h, @@ -65,7 +65,7 @@ pub(crate) fn git_create_branch(dir: &Path, name: &str) -> Result<()> { Ok(()) } -pub(crate) fn git_delete_branch(dir: &Path, name: &str) -> Result<()> { +pub fn git_delete_branch(dir: &Path, name: &str) -> Result<()> { let repo = open_repo(dir)?; let mut branch = get_branch_by_name(&repo, name)?; @@ -86,7 +86,7 @@ pub(crate) fn git_delete_branch(dir: &Path, name: &str) -> Result<()> { Ok(()) } -pub(crate) fn git_merge_branch(dir: &Path, name: &str, _force: bool) -> Result<()> { +pub fn git_merge_branch(dir: &Path, name: &str, _force: bool) -> Result<()> { let repo = open_repo(dir)?; let local_branch = get_current_branch(&repo)?.unwrap(); diff --git a/src-tauri/yaak-git/src/commit.rs b/crates/yaak-git/src/commit.rs similarity index 86% rename from src-tauri/yaak-git/src/commit.rs rename to crates/yaak-git/src/commit.rs index c58aeb6b..847b62a7 100644 --- a/src-tauri/yaak-git/src/commit.rs +++ b/crates/yaak-git/src/commit.rs @@ -3,7 +3,7 @@ use crate::error::Error::GenericError; use log::info; use std::path::Path; -pub(crate) fn git_commit(dir: &Path, message: &str) -> crate::error::Result<()> { +pub fn git_commit(dir: &Path, message: &str) -> crate::error::Result<()> { let out = new_binary_command(dir)?.args(["commit", "--message", message]).output()?; let stdout = String::from_utf8_lossy(&out.stdout); diff --git a/src-tauri/yaak-git/src/credential.rs b/crates/yaak-git/src/credential.rs similarity index 95% rename from src-tauri/yaak-git/src/credential.rs rename to crates/yaak-git/src/credential.rs index b270383b..8e547e4c 100644 --- a/src-tauri/yaak-git/src/credential.rs +++ b/crates/yaak-git/src/credential.rs @@ -4,9 +4,9 @@ use crate::error::Result; use std::io::Write; use std::path::Path; use std::process::Stdio; -use tauri::Url; +use url::Url; -pub(crate) async fn git_add_credential( +pub async fn git_add_credential( dir: &Path, remote_url: &str, username: &str, diff --git a/src-tauri/yaak-git/src/error.rs b/crates/yaak-git/src/error.rs similarity index 100% rename from src-tauri/yaak-git/src/error.rs rename to crates/yaak-git/src/error.rs diff --git a/src-tauri/yaak-git/src/fetch.rs b/crates/yaak-git/src/fetch.rs similarity index 91% rename from src-tauri/yaak-git/src/fetch.rs rename to crates/yaak-git/src/fetch.rs index 371d20b8..cde03f3d 100644 --- a/src-tauri/yaak-git/src/fetch.rs +++ b/crates/yaak-git/src/fetch.rs @@ -3,7 +3,7 @@ use crate::error::Error::GenericError; use crate::error::Result; use std::path::Path; -pub(crate) fn git_fetch_all(dir: &Path) -> Result<()> { +pub fn git_fetch_all(dir: &Path) -> Result<()> { let out = new_binary_command(dir)? .args(["fetch", "--all", "--prune", "--tags"]) .output() diff --git a/src-tauri/yaak-git/src/init.rs b/crates/yaak-git/src/init.rs similarity index 87% rename from src-tauri/yaak-git/src/init.rs rename to crates/yaak-git/src/init.rs index 28095b91..553b89b0 100644 --- a/src-tauri/yaak-git/src/init.rs +++ b/crates/yaak-git/src/init.rs @@ -3,7 +3,7 @@ use crate::repository::open_repo; use log::info; use std::path::Path; -pub(crate) fn git_init(dir: &Path) -> Result<()> { +pub fn git_init(dir: &Path) -> Result<()> { git2::Repository::init(dir)?; let repo = open_repo(dir)?; // Default to main instead of master, to align with diff --git a/crates/yaak-git/src/lib.rs b/crates/yaak-git/src/lib.rs new file mode 100644 index 00000000..fc21d9ea --- /dev/null +++ b/crates/yaak-git/src/lib.rs @@ -0,0 +1,31 @@ +mod add; +mod binary; +mod branch; +mod commit; +mod credential; +pub mod error; +mod fetch; +mod init; +mod log; +mod merge; +mod pull; +mod push; +mod remotes; +mod repository; +mod status; +mod unstage; +mod util; + +// Re-export all git functions for external use +pub use add::git_add; +pub use branch::{git_checkout_branch, git_create_branch, git_delete_branch, git_merge_branch}; +pub use commit::git_commit; +pub use credential::git_add_credential; +pub use fetch::git_fetch_all; +pub use init::git_init; +pub use log::{GitCommit, git_log}; +pub use pull::{PullResult, git_pull}; +pub use push::{PushResult, git_push}; +pub use remotes::{GitRemote, git_add_remote, git_remotes, git_rm_remote}; +pub use status::{GitStatusSummary, git_status}; +pub use unstage::git_unstage; diff --git a/src-tauri/yaak-git/src/log.rs b/crates/yaak-git/src/log.rs similarity index 93% rename from src-tauri/yaak-git/src/log.rs rename to crates/yaak-git/src/log.rs index 704ede94..108c0fbd 100644 --- a/src-tauri/yaak-git/src/log.rs +++ b/crates/yaak-git/src/log.rs @@ -7,7 +7,7 @@ use ts_rs::TS; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase")] #[ts(export, export_to = "gen_git.ts")] -pub(crate) struct GitCommit { +pub struct GitCommit { pub author: GitAuthor, pub when: DateTime, pub message: Option, @@ -16,12 +16,12 @@ pub(crate) struct GitCommit { #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase")] #[ts(export, export_to = "gen_git.ts")] -pub(crate) struct GitAuthor { +pub struct GitAuthor { pub name: Option, pub email: Option, } -pub(crate) fn git_log(dir: &Path) -> crate::error::Result> { +pub fn git_log(dir: &Path) -> crate::error::Result> { let repo = open_repo(dir)?; // Return empty if empty repo or no head (new repo) diff --git a/src-tauri/yaak-git/src/merge.rs b/crates/yaak-git/src/merge.rs similarity index 100% rename from src-tauri/yaak-git/src/merge.rs rename to crates/yaak-git/src/merge.rs diff --git a/src-tauri/yaak-git/src/pull.rs b/crates/yaak-git/src/pull.rs similarity index 97% rename from src-tauri/yaak-git/src/pull.rs rename to crates/yaak-git/src/pull.rs index 4b30e296..4bcbd6a7 100644 --- a/src-tauri/yaak-git/src/pull.rs +++ b/crates/yaak-git/src/pull.rs @@ -11,13 +11,13 @@ use ts_rs::TS; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case", tag = "type")] #[ts(export, export_to = "gen_git.ts")] -pub(crate) enum PullResult { +pub enum PullResult { Success { message: String }, UpToDate, NeedsCredentials { url: String, error: Option }, } -pub(crate) fn git_pull(dir: &Path) -> Result { +pub fn git_pull(dir: &Path) -> Result { let repo = open_repo(dir)?; let branch_name = get_current_branch_name(&repo)?; let remote = get_default_remote_in_repo(&repo)?; diff --git a/src-tauri/yaak-git/src/push.rs b/crates/yaak-git/src/push.rs similarity index 97% rename from src-tauri/yaak-git/src/push.rs rename to crates/yaak-git/src/push.rs index 622c9c6b..e5a20ada 100644 --- a/src-tauri/yaak-git/src/push.rs +++ b/crates/yaak-git/src/push.rs @@ -11,13 +11,13 @@ use ts_rs::TS; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)] #[serde(rename_all = "snake_case", tag = "type")] #[ts(export, export_to = "gen_git.ts")] -pub(crate) enum PushResult { +pub enum PushResult { Success { message: String }, UpToDate, NeedsCredentials { url: String, error: Option }, } -pub(crate) fn git_push(dir: &Path) -> Result { +pub fn git_push(dir: &Path) -> Result { let repo = open_repo(dir)?; let branch_name = get_current_branch_name(&repo)?; let remote = get_default_remote_for_push_in_repo(&repo)?; diff --git a/src-tauri/yaak-git/src/remotes.rs b/crates/yaak-git/src/remotes.rs similarity index 80% rename from src-tauri/yaak-git/src/remotes.rs rename to crates/yaak-git/src/remotes.rs index 386f047f..7b508e39 100644 --- a/src-tauri/yaak-git/src/remotes.rs +++ b/crates/yaak-git/src/remotes.rs @@ -7,12 +7,12 @@ use ts_rs::TS; #[derive(Debug, Clone, PartialEq, Serialize, Deserialize, TS)] #[ts(export, export_to = "gen_git.ts")] -pub(crate) struct GitRemote { +pub struct GitRemote { name: String, url: Option, } -pub(crate) fn git_remotes(dir: &Path) -> Result> { +pub fn git_remotes(dir: &Path) -> Result> { let repo = open_repo(dir)?; let mut remotes = Vec::new(); @@ -34,13 +34,13 @@ pub(crate) fn git_remotes(dir: &Path) -> Result> { Ok(remotes) } -pub(crate) fn git_add_remote(dir: &Path, name: &str, url: &str) -> Result { +pub fn git_add_remote(dir: &Path, name: &str, url: &str) -> Result { let repo = open_repo(dir)?; repo.remote(name, url)?; Ok(GitRemote { name: name.to_string(), url: Some(url.to_string()) }) } -pub(crate) fn git_rm_remote(dir: &Path, name: &str) -> Result<()> { +pub fn git_rm_remote(dir: &Path, name: &str) -> Result<()> { let repo = open_repo(dir)?; repo.remote_delete(name)?; Ok(()) diff --git a/src-tauri/yaak-git/src/repository.rs b/crates/yaak-git/src/repository.rs similarity index 100% rename from src-tauri/yaak-git/src/repository.rs rename to crates/yaak-git/src/repository.rs diff --git a/src-tauri/yaak-git/src/status.rs b/crates/yaak-git/src/status.rs similarity index 98% rename from src-tauri/yaak-git/src/status.rs rename to crates/yaak-git/src/status.rs index 41ab0574..7625360f 100644 --- a/src-tauri/yaak-git/src/status.rs +++ b/crates/yaak-git/src/status.rs @@ -44,7 +44,7 @@ pub enum GitStatus { TypeChange, } -pub(crate) fn git_status(dir: &Path) -> crate::error::Result { +pub fn git_status(dir: &Path) -> crate::error::Result { let repo = open_repo(dir)?; let (head_tree, head_ref, head_ref_shorthand) = match repo.head() { Ok(head) => { diff --git a/src-tauri/yaak-git/src/unstage.rs b/crates/yaak-git/src/unstage.rs similarity index 90% rename from src-tauri/yaak-git/src/unstage.rs rename to crates/yaak-git/src/unstage.rs index f2ef796a..19d6127c 100644 --- a/src-tauri/yaak-git/src/unstage.rs +++ b/crates/yaak-git/src/unstage.rs @@ -2,7 +2,7 @@ use crate::repository::open_repo; use log::info; use std::path::Path; -pub(crate) fn git_unstage(dir: &Path, rela_path: &Path) -> crate::error::Result<()> { +pub fn git_unstage(dir: &Path, rela_path: &Path) -> crate::error::Result<()> { let repo = open_repo(dir)?; let head = match repo.head() { diff --git a/src-tauri/yaak-git/src/util.rs b/crates/yaak-git/src/util.rs similarity index 100% rename from src-tauri/yaak-git/src/util.rs rename to crates/yaak-git/src/util.rs diff --git a/src-tauri/yaak-grpc/Cargo.toml b/crates/yaak-grpc/Cargo.toml similarity index 91% rename from src-tauri/yaak-grpc/Cargo.toml rename to crates/yaak-grpc/Cargo.toml index 1aa154f5..40c74e3f 100644 --- a/src-tauri/yaak-grpc/Cargo.toml +++ b/crates/yaak-grpc/Cargo.toml @@ -17,9 +17,7 @@ prost-reflect = { version = "0.14.4", default-features = false, features = ["ser prost-types = "0.13.4" serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } -tauri = { workspace = true } -tauri-plugin-shell = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "fs"] } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "fs", "process"] } tokio-stream = "0.1.14" tonic = { version = "0.12.3", default-features = false, features = ["transport"] } tonic-reflection = "0.12.3" diff --git a/src-tauri/yaak-grpc/src/any.rs b/crates/yaak-grpc/src/any.rs similarity index 100% rename from src-tauri/yaak-grpc/src/any.rs rename to crates/yaak-grpc/src/any.rs diff --git a/src-tauri/yaak-grpc/src/client.rs b/crates/yaak-grpc/src/client.rs similarity index 100% rename from src-tauri/yaak-grpc/src/client.rs rename to crates/yaak-grpc/src/client.rs diff --git a/src-tauri/yaak-grpc/src/codec.rs b/crates/yaak-grpc/src/codec.rs similarity index 100% rename from src-tauri/yaak-grpc/src/codec.rs rename to crates/yaak-grpc/src/codec.rs diff --git a/src-tauri/yaak-grpc/src/error.rs b/crates/yaak-grpc/src/error.rs similarity index 100% rename from src-tauri/yaak-grpc/src/error.rs rename to crates/yaak-grpc/src/error.rs diff --git a/src-tauri/yaak-grpc/src/json_schema.rs b/crates/yaak-grpc/src/json_schema.rs similarity index 100% rename from src-tauri/yaak-grpc/src/json_schema.rs rename to crates/yaak-grpc/src/json_schema.rs diff --git a/src-tauri/yaak-grpc/src/lib.rs b/crates/yaak-grpc/src/lib.rs similarity index 100% rename from src-tauri/yaak-grpc/src/lib.rs rename to crates/yaak-grpc/src/lib.rs diff --git a/src-tauri/yaak-grpc/src/manager.rs b/crates/yaak-grpc/src/manager.rs similarity index 96% rename from src-tauri/yaak-grpc/src/manager.rs rename to crates/yaak-grpc/src/manager.rs index d2bc7a60..3dc36c2c 100644 --- a/src-tauri/yaak-grpc/src/manager.rs +++ b/crates/yaak-grpc/src/manager.rs @@ -20,7 +20,6 @@ use std::fmt::Display; use std::path::PathBuf; use std::str::FromStr; use std::sync::Arc; -use tauri::AppHandle; use tokio::sync::RwLock; use tokio_stream::StreamExt; use tokio_stream::wrappers::ReceiverStream; @@ -139,7 +138,7 @@ impl GrpcConnection { let md = md.clone(); let use_reflection = use_reflection.clone(); let client_cert = client_cert.clone(); - tauri::async_runtime::block_on(async move { + tokio::runtime::Handle::current().block_on(async move { if use_reflection { if let Err(e) = reflect_types_for_message(pool, &uri, &json, &md, client_cert).await @@ -193,7 +192,7 @@ impl GrpcConnection { let md = md.clone(); let use_reflection = use_reflection.clone(); let client_cert = client_cert.clone(); - tauri::async_runtime::block_on(async move { + tokio::runtime::Handle::current().block_on(async move { if use_reflection { if let Err(e) = reflect_types_for_message(pool, &uri, &json, &md, client_cert).await @@ -253,15 +252,24 @@ impl GrpcConnection { } } +/// Configuration for GrpcHandle to compile proto files +#[derive(Clone)] +pub struct GrpcConfig { + /// Path to the protoc include directory (vendored/protoc/include) + pub protoc_include_dir: PathBuf, + /// Path to the yaakprotoc sidecar binary + pub protoc_bin_path: PathBuf, +} + pub struct GrpcHandle { - app_handle: AppHandle, + config: GrpcConfig, pools: BTreeMap, } impl GrpcHandle { - pub fn new(app_handle: &AppHandle) -> Self { + pub fn new(config: GrpcConfig) -> Self { let pools = BTreeMap::new(); - Self { pools, app_handle: app_handle.clone() } + Self { pools, config } } } @@ -293,7 +301,7 @@ impl GrpcHandle { let full_uri = uri_from_str(uri)?; fill_pool_from_reflection(&full_uri, metadata, validate_certificates, client_cert).await } else { - fill_pool_from_files(&self.app_handle, proto_files).await + fill_pool_from_files(&self.config, proto_files).await }?; self.pools.insert(key, pool.clone()); diff --git a/src-tauri/yaak-grpc/src/reflection.rs b/crates/yaak-grpc/src/reflection.rs similarity index 95% rename from src-tauri/yaak-grpc/src/reflection.rs rename to crates/yaak-grpc/src/reflection.rs index 9b038e59..4ad37160 100644 --- a/src-tauri/yaak-grpc/src/reflection.rs +++ b/crates/yaak-grpc/src/reflection.rs @@ -2,6 +2,7 @@ use crate::any::collect_any_types; use crate::client::AutoReflectionClient; use crate::error::Error::GenericError; use crate::error::Result; +use crate::manager::GrpcConfig; use anyhow::anyhow; use async_recursion::async_recursion; use log::{debug, info, warn}; @@ -14,10 +15,8 @@ use std::ops::Deref; use std::path::{Path, PathBuf}; use std::str::FromStr; use std::sync::Arc; -use tauri::path::BaseDirectory; -use tauri::{AppHandle, Manager}; -use tauri_plugin_shell::ShellExt; use tokio::fs; +use tokio::process::Command; use tokio::sync::RwLock; use tonic::codegen::http::uri::PathAndQuery; use tonic::transport::Uri; @@ -26,20 +25,16 @@ use tonic_reflection::pb::v1::server_reflection_response::MessageResponse; use yaak_tls::ClientCertificateConfig; pub async fn fill_pool_from_files( - app_handle: &AppHandle, + config: &GrpcConfig, paths: &Vec, ) -> Result { let mut pool = DescriptorPool::new(); let random_file_name = format!("{}.desc", uuid::Uuid::new_v4()); let desc_path = temp_dir().join(random_file_name); - let global_import_dir = app_handle - .path() - .resolve("vendored/protoc/include", BaseDirectory::Resource) - .expect("failed to resolve protoc include directory"); // HACK: Remove UNC prefix for Windows paths let global_import_dir = - dunce::simplified(global_import_dir.as_path()).to_string_lossy().to_string(); + dunce::simplified(config.protoc_include_dir.as_path()).to_string_lossy().to_string(); let desc_path = dunce::simplified(desc_path.as_path()); let mut args = vec![ @@ -96,19 +91,16 @@ pub async fn fill_pool_from_files( info!("Invoking protoc with {}", args.join(" ")); - let out = app_handle - .shell() - .sidecar("yaakprotoc") - .expect("yaakprotoc not found") - .args(args) + let out = Command::new(&config.protoc_bin_path) + .args(&args) .output() .await - .expect("yaakprotoc failed to run"); + .map_err(|e| GenericError(format!("Failed to run protoc: {}", e)))?; if !out.status.success() { return Err(GenericError(format!( "protoc failed with status {}: {}", - out.status.code().unwrap(), + out.status.code().unwrap_or(-1), String::from_utf8_lossy(out.stderr.as_slice()) ))); } diff --git a/src-tauri/yaak-grpc/src/transport.rs b/crates/yaak-grpc/src/transport.rs similarity index 100% rename from src-tauri/yaak-grpc/src/transport.rs rename to crates/yaak-grpc/src/transport.rs diff --git a/src-tauri/yaak-http/Cargo.toml b/crates/yaak-http/Cargo.toml similarity index 97% rename from src-tauri/yaak-http/Cargo.toml rename to crates/yaak-http/Cargo.toml index c25384ae..17c36628 100644 --- a/src-tauri/yaak-http/Cargo.toml +++ b/crates/yaak-http/Cargo.toml @@ -21,7 +21,6 @@ regex = "1.11.1" reqwest = { workspace = true, features = ["rustls-tls-manual-roots-no-provider", "socks", "http2", "stream"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } -tauri = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true, features = ["macros", "rt", "fs", "io-util"] } tokio-util = { version = "0.7", features = ["codec", "io", "io-util"] } diff --git a/src-tauri/yaak-http/src/chained_reader.rs b/crates/yaak-http/src/chained_reader.rs similarity index 100% rename from src-tauri/yaak-http/src/chained_reader.rs rename to crates/yaak-http/src/chained_reader.rs diff --git a/src-tauri/yaak-http/src/client.rs b/crates/yaak-http/src/client.rs similarity index 100% rename from src-tauri/yaak-http/src/client.rs rename to crates/yaak-http/src/client.rs diff --git a/src-tauri/yaak-http/src/cookies.rs b/crates/yaak-http/src/cookies.rs similarity index 100% rename from src-tauri/yaak-http/src/cookies.rs rename to crates/yaak-http/src/cookies.rs diff --git a/src-tauri/yaak-http/src/decompress.rs b/crates/yaak-http/src/decompress.rs similarity index 100% rename from src-tauri/yaak-http/src/decompress.rs rename to crates/yaak-http/src/decompress.rs diff --git a/src-tauri/yaak-http/src/dns.rs b/crates/yaak-http/src/dns.rs similarity index 100% rename from src-tauri/yaak-http/src/dns.rs rename to crates/yaak-http/src/dns.rs diff --git a/src-tauri/yaak-http/src/error.rs b/crates/yaak-http/src/error.rs similarity index 100% rename from src-tauri/yaak-http/src/error.rs rename to crates/yaak-http/src/error.rs diff --git a/crates/yaak-http/src/lib.rs b/crates/yaak-http/src/lib.rs new file mode 100644 index 00000000..cee46d80 --- /dev/null +++ b/crates/yaak-http/src/lib.rs @@ -0,0 +1,13 @@ +mod chained_reader; +pub mod client; +pub mod cookies; +pub mod decompress; +pub mod dns; +pub mod error; +pub mod manager; +pub mod path_placeholders; +mod proto; +pub mod sender; +pub mod tee_reader; +pub mod transaction; +pub mod types; diff --git a/src-tauri/yaak-http/src/manager.rs b/crates/yaak-http/src/manager.rs similarity index 100% rename from src-tauri/yaak-http/src/manager.rs rename to crates/yaak-http/src/manager.rs diff --git a/src-tauri/yaak-http/src/path_placeholders.rs b/crates/yaak-http/src/path_placeholders.rs similarity index 100% rename from src-tauri/yaak-http/src/path_placeholders.rs rename to crates/yaak-http/src/path_placeholders.rs diff --git a/src-tauri/yaak-http/src/proto.rs b/crates/yaak-http/src/proto.rs similarity index 100% rename from src-tauri/yaak-http/src/proto.rs rename to crates/yaak-http/src/proto.rs diff --git a/src-tauri/yaak-http/src/sender.rs b/crates/yaak-http/src/sender.rs similarity index 100% rename from src-tauri/yaak-http/src/sender.rs rename to crates/yaak-http/src/sender.rs diff --git a/src-tauri/yaak-http/src/tee_reader.rs b/crates/yaak-http/src/tee_reader.rs similarity index 100% rename from src-tauri/yaak-http/src/tee_reader.rs rename to crates/yaak-http/src/tee_reader.rs diff --git a/src-tauri/yaak-http/src/transaction.rs b/crates/yaak-http/src/transaction.rs similarity index 100% rename from src-tauri/yaak-http/src/transaction.rs rename to crates/yaak-http/src/transaction.rs diff --git a/src-tauri/yaak-http/src/types.rs b/crates/yaak-http/src/types.rs similarity index 100% rename from src-tauri/yaak-http/src/types.rs rename to crates/yaak-http/src/types.rs diff --git a/src-tauri/yaak-http/tests/test.txt b/crates/yaak-http/tests/test.txt similarity index 100% rename from src-tauri/yaak-http/tests/test.txt rename to crates/yaak-http/tests/test.txt diff --git a/src-tauri/yaak-models/Cargo.toml b/crates/yaak-models/Cargo.toml similarity index 77% rename from src-tauri/yaak-models/Cargo.toml rename to crates/yaak-models/Cargo.toml index efedc7b2..015d489f 100644 --- a/src-tauri/yaak-models/Cargo.toml +++ b/crates/yaak-models/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "yaak-models" -links = "yaak-models" version = "0.1.0" edition = "2024" publish = false @@ -19,11 +18,6 @@ sea-query-rusqlite = { version = "0.7.0", features = ["with-chrono"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } sha2 = { workspace = true } -tauri = { workspace = true } -tauri-plugin-dialog = { workspace = true } thiserror = { workspace = true } ts-rs = { workspace = true, features = ["chrono-impl", "serde-json-impl"] } -yaak-common = { workspace = true } - -[build-dependencies] -tauri-plugin = { workspace = true, features = ["build"] } +yaak-core = { workspace = true } diff --git a/src-tauri/yaak-models/bindings/gen_models.ts b/crates/yaak-models/bindings/gen_models.ts similarity index 99% rename from src-tauri/yaak-models/bindings/gen_models.ts rename to crates/yaak-models/bindings/gen_models.ts index cb3eb035..b709807b 100644 --- a/src-tauri/yaak-models/bindings/gen_models.ts +++ b/crates/yaak-models/bindings/gen_models.ts @@ -73,7 +73,7 @@ export type ProxySetting = { "type": "enabled", http: string, https: string, aut export type ProxySettingAuth = { user: string, password: string, }; -export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, clientCertificates: Array, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, useNativeTitlebar: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, hotkeys: Record, }; +export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, clientCertificates: Array, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, useNativeTitlebar: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, hotkeys: { [key in string]?: Array }, }; export type SyncState = { model: "sync_state", id: string, workspaceId: string, createdAt: string, updatedAt: string, flushedAt: string, modelId: string, checksum: string, relPath: string, syncDir: string, }; diff --git a/src-tauri/yaak-models/bindings/gen_util.ts b/crates/yaak-models/bindings/gen_util.ts similarity index 100% rename from src-tauri/yaak-models/bindings/gen_util.ts rename to crates/yaak-models/bindings/gen_util.ts diff --git a/src-tauri/yaak-models/blob_migrations/00000000000000_init.sql b/crates/yaak-models/blob_migrations/00000000000000_init.sql similarity index 100% rename from src-tauri/yaak-models/blob_migrations/00000000000000_init.sql rename to crates/yaak-models/blob_migrations/00000000000000_init.sql diff --git a/src-tauri/yaak-models/guest-js/atoms.ts b/crates/yaak-models/guest-js/atoms.ts similarity index 100% rename from src-tauri/yaak-models/guest-js/atoms.ts rename to crates/yaak-models/guest-js/atoms.ts diff --git a/src-tauri/yaak-models/guest-js/index.ts b/crates/yaak-models/guest-js/index.ts similarity index 100% rename from src-tauri/yaak-models/guest-js/index.ts rename to crates/yaak-models/guest-js/index.ts diff --git a/src-tauri/yaak-models/guest-js/store.ts b/crates/yaak-models/guest-js/store.ts similarity index 93% rename from src-tauri/yaak-models/guest-js/store.ts rename to crates/yaak-models/guest-js/store.ts index eb703027..836ba9d1 100644 --- a/src-tauri/yaak-models/guest-js/store.ts +++ b/crates/yaak-models/guest-js/store.ts @@ -46,7 +46,7 @@ let _activeWorkspaceId: string | null = null; export async function changeModelStoreWorkspace(workspaceId: string | null) { console.log('Syncing models with new workspace', workspaceId); - const workspaceModelsStr = await invoke('plugin:yaak-models|workspace_models', { + const workspaceModelsStr = await invoke('models_workspace_models', { workspaceId, // NOTE: if no workspace id provided, it will just fetch global models }); const workspaceModels = JSON.parse(workspaceModelsStr) as AnyModel[]; @@ -118,7 +118,7 @@ export async function patchModel>( model: T, ): Promise { - return invoke('plugin:yaak-models|upsert', { model }); + return invoke('models_upsert', { model }); } export async function deleteModelById< @@ -135,7 +135,7 @@ export async function deleteModel('plugin:yaak-models|delete', { model }); + await invoke('models_delete', { model }); } export function duplicateModel>( @@ -174,19 +174,19 @@ export function duplicateModel('plugin:yaak-models|duplicate', { model: { ...model, name } }); + return invoke('models_duplicate', { model: { ...model, name } }); } export async function createGlobalModel>( patch: Partial & Pick, ): Promise { - return invoke('plugin:yaak-models|upsert', { model: patch }); + return invoke('models_upsert', { model: patch }); } export async function createWorkspaceModel>( patch: Partial & Pick, ): Promise { - return invoke('plugin:yaak-models|upsert', { model: patch }); + return invoke('models_upsert', { model: patch }); } export function replaceModelsInStore< diff --git a/src-tauri/yaak-models/guest-js/types.ts b/crates/yaak-models/guest-js/types.ts similarity index 100% rename from src-tauri/yaak-models/guest-js/types.ts rename to crates/yaak-models/guest-js/types.ts diff --git a/src-tauri/yaak-models/guest-js/util.ts b/crates/yaak-models/guest-js/util.ts similarity index 100% rename from src-tauri/yaak-models/guest-js/util.ts rename to crates/yaak-models/guest-js/util.ts diff --git a/src-tauri/yaak-models/migrations/20230225181302_init.sql b/crates/yaak-models/migrations/20230225181302_init.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20230225181302_init.sql rename to crates/yaak-models/migrations/20230225181302_init.sql diff --git a/src-tauri/yaak-models/migrations/20230319042610_sort-priority.sql b/crates/yaak-models/migrations/20230319042610_sort-priority.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20230319042610_sort-priority.sql rename to crates/yaak-models/migrations/20230319042610_sort-priority.sql diff --git a/src-tauri/yaak-models/migrations/20230330143214_request-auth.sql b/crates/yaak-models/migrations/20230330143214_request-auth.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20230330143214_request-auth.sql rename to crates/yaak-models/migrations/20230330143214_request-auth.sql diff --git a/src-tauri/yaak-models/migrations/20230413232435_response-body-blob.sql b/crates/yaak-models/migrations/20230413232435_response-body-blob.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20230413232435_response-body-blob.sql rename to crates/yaak-models/migrations/20230413232435_response-body-blob.sql diff --git a/src-tauri/yaak-models/migrations/20231022205109_environments.sql b/crates/yaak-models/migrations/20231022205109_environments.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231022205109_environments.sql rename to crates/yaak-models/migrations/20231022205109_environments.sql diff --git a/src-tauri/yaak-models/migrations/20231028161007_variables.sql b/crates/yaak-models/migrations/20231028161007_variables.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231028161007_variables.sql rename to crates/yaak-models/migrations/20231028161007_variables.sql diff --git a/src-tauri/yaak-models/migrations/20231103004111_workspace-variables.sql b/crates/yaak-models/migrations/20231103004111_workspace-variables.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231103004111_workspace-variables.sql rename to crates/yaak-models/migrations/20231103004111_workspace-variables.sql diff --git a/src-tauri/yaak-models/migrations/20231103142807_folders.sql b/crates/yaak-models/migrations/20231103142807_folders.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231103142807_folders.sql rename to crates/yaak-models/migrations/20231103142807_folders.sql diff --git a/src-tauri/yaak-models/migrations/20231112180500_body_object.sql b/crates/yaak-models/migrations/20231112180500_body_object.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231112180500_body_object.sql rename to crates/yaak-models/migrations/20231112180500_body_object.sql diff --git a/src-tauri/yaak-models/migrations/20231113183810_url_params.sql b/crates/yaak-models/migrations/20231113183810_url_params.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231113183810_url_params.sql rename to crates/yaak-models/migrations/20231113183810_url_params.sql diff --git a/src-tauri/yaak-models/migrations/20231122055216_remove_body.sql b/crates/yaak-models/migrations/20231122055216_remove_body.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20231122055216_remove_body.sql rename to crates/yaak-models/migrations/20231122055216_remove_body.sql diff --git a/src-tauri/yaak-models/migrations/20240111221224_settings.sql b/crates/yaak-models/migrations/20240111221224_settings.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240111221224_settings.sql rename to crates/yaak-models/migrations/20240111221224_settings.sql diff --git a/src-tauri/yaak-models/migrations/20240115193751_workspace_settings.sql b/crates/yaak-models/migrations/20240115193751_workspace_settings.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240115193751_workspace_settings.sql rename to crates/yaak-models/migrations/20240115193751_workspace_settings.sql diff --git a/src-tauri/yaak-models/migrations/20240118181105_channel_setting.sql b/crates/yaak-models/migrations/20240118181105_channel_setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240118181105_channel_setting.sql rename to crates/yaak-models/migrations/20240118181105_channel_setting.sql diff --git a/src-tauri/yaak-models/migrations/20240127013915_cookies.sql b/crates/yaak-models/migrations/20240127013915_cookies.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240127013915_cookies.sql rename to crates/yaak-models/migrations/20240127013915_cookies.sql diff --git a/src-tauri/yaak-models/migrations/20240128230717_more_response_attrs.sql b/crates/yaak-models/migrations/20240128230717_more_response_attrs.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240128230717_more_response_attrs.sql rename to crates/yaak-models/migrations/20240128230717_more_response_attrs.sql diff --git a/src-tauri/yaak-models/migrations/20240203164833_grpc.sql b/crates/yaak-models/migrations/20240203164833_grpc.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240203164833_grpc.sql rename to crates/yaak-models/migrations/20240203164833_grpc.sql diff --git a/src-tauri/yaak-models/migrations/20240522031045_theme-settings.sql b/crates/yaak-models/migrations/20240522031045_theme-settings.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240522031045_theme-settings.sql rename to crates/yaak-models/migrations/20240522031045_theme-settings.sql diff --git a/src-tauri/yaak-models/migrations/20240529143147_more-settings.sql b/crates/yaak-models/migrations/20240529143147_more-settings.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240529143147_more-settings.sql rename to crates/yaak-models/migrations/20240529143147_more-settings.sql diff --git a/src-tauri/yaak-models/migrations/20240607151115_open-workspace-setting.sql b/crates/yaak-models/migrations/20240607151115_open-workspace-setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240607151115_open-workspace-setting.sql rename to crates/yaak-models/migrations/20240607151115_open-workspace-setting.sql diff --git a/src-tauri/yaak-models/migrations/20240814013812_fix-env-model.sql b/crates/yaak-models/migrations/20240814013812_fix-env-model.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240814013812_fix-env-model.sql rename to crates/yaak-models/migrations/20240814013812_fix-env-model.sql diff --git a/src-tauri/yaak-models/migrations/20240826184943_disable-telemetry.sql b/crates/yaak-models/migrations/20240826184943_disable-telemetry.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240826184943_disable-telemetry.sql rename to crates/yaak-models/migrations/20240826184943_disable-telemetry.sql diff --git a/src-tauri/yaak-models/migrations/20240829131004_plugins.sql b/crates/yaak-models/migrations/20240829131004_plugins.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20240829131004_plugins.sql rename to crates/yaak-models/migrations/20240829131004_plugins.sql diff --git a/src-tauri/yaak-models/migrations/20241003134208_response-state.sql b/crates/yaak-models/migrations/20241003134208_response-state.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20241003134208_response-state.sql rename to crates/yaak-models/migrations/20241003134208_response-state.sql diff --git a/src-tauri/yaak-models/migrations/20241012181547_proxy-setting.sql b/crates/yaak-models/migrations/20241012181547_proxy-setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20241012181547_proxy-setting.sql rename to crates/yaak-models/migrations/20241012181547_proxy-setting.sql diff --git a/src-tauri/yaak-models/migrations/20241217204951_docs.sql b/crates/yaak-models/migrations/20241217204951_docs.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20241217204951_docs.sql rename to crates/yaak-models/migrations/20241217204951_docs.sql diff --git a/src-tauri/yaak-models/migrations/20241219140051_base-environments.sql b/crates/yaak-models/migrations/20241219140051_base-environments.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20241219140051_base-environments.sql rename to crates/yaak-models/migrations/20241219140051_base-environments.sql diff --git a/src-tauri/yaak-models/migrations/20250102141937_sync.sql b/crates/yaak-models/migrations/20250102141937_sync.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250102141937_sync.sql rename to crates/yaak-models/migrations/20250102141937_sync.sql diff --git a/src-tauri/yaak-models/migrations/20250108035425_editor-keymap.sql b/crates/yaak-models/migrations/20250108035425_editor-keymap.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250108035425_editor-keymap.sql rename to crates/yaak-models/migrations/20250108035425_editor-keymap.sql diff --git a/src-tauri/yaak-models/migrations/20250108205117_workspace-meta.sql b/crates/yaak-models/migrations/20250108205117_workspace-meta.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250108205117_workspace-meta.sql rename to crates/yaak-models/migrations/20250108205117_workspace-meta.sql diff --git a/src-tauri/yaak-models/migrations/20250114160022_remove-workspace-sync-setting.sql b/crates/yaak-models/migrations/20250114160022_remove-workspace-sync-setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250114160022_remove-workspace-sync-setting.sql rename to crates/yaak-models/migrations/20250114160022_remove-workspace-sync-setting.sql diff --git a/src-tauri/yaak-models/migrations/20250123192023_plugin-kv.sql b/crates/yaak-models/migrations/20250123192023_plugin-kv.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250123192023_plugin-kv.sql rename to crates/yaak-models/migrations/20250123192023_plugin-kv.sql diff --git a/src-tauri/yaak-models/migrations/20250128155623_websockets.sql b/crates/yaak-models/migrations/20250128155623_websockets.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250128155623_websockets.sql rename to crates/yaak-models/migrations/20250128155623_websockets.sql diff --git a/src-tauri/yaak-models/migrations/20250302041707_hide-window-controls.sql b/crates/yaak-models/migrations/20250302041707_hide-window-controls.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250302041707_hide-window-controls.sql rename to crates/yaak-models/migrations/20250302041707_hide-window-controls.sql diff --git a/src-tauri/yaak-models/migrations/20250326193143_key-value-id.sql b/crates/yaak-models/migrations/20250326193143_key-value-id.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250326193143_key-value-id.sql rename to crates/yaak-models/migrations/20250326193143_key-value-id.sql diff --git a/src-tauri/yaak-models/migrations/20250401122407_encrypted-key.sql b/crates/yaak-models/migrations/20250401122407_encrypted-key.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250401122407_encrypted-key.sql rename to crates/yaak-models/migrations/20250401122407_encrypted-key.sql diff --git a/src-tauri/yaak-models/migrations/20250402144842_encryption-key-challenge.sql b/crates/yaak-models/migrations/20250402144842_encryption-key-challenge.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250402144842_encryption-key-challenge.sql rename to crates/yaak-models/migrations/20250402144842_encryption-key-challenge.sql diff --git a/src-tauri/yaak-models/migrations/20250424152740_remove-fks.sql b/crates/yaak-models/migrations/20250424152740_remove-fks.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250424152740_remove-fks.sql rename to crates/yaak-models/migrations/20250424152740_remove-fks.sql diff --git a/src-tauri/yaak-models/migrations/20250507140702_remove-ev-sync-states.sql b/crates/yaak-models/migrations/20250507140702_remove-ev-sync-states.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250507140702_remove-ev-sync-states.sql rename to crates/yaak-models/migrations/20250507140702_remove-ev-sync-states.sql diff --git a/src-tauri/yaak-models/migrations/20250508161145_public-environments.sql b/crates/yaak-models/migrations/20250508161145_public-environments.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250508161145_public-environments.sql rename to crates/yaak-models/migrations/20250508161145_public-environments.sql diff --git a/src-tauri/yaak-models/migrations/20250516182745_default-attrs.sql b/crates/yaak-models/migrations/20250516182745_default-attrs.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250516182745_default-attrs.sql rename to crates/yaak-models/migrations/20250516182745_default-attrs.sql diff --git a/src-tauri/yaak-models/migrations/20250530174021_graphql-introspection.sql b/crates/yaak-models/migrations/20250530174021_graphql-introspection.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250530174021_graphql-introspection.sql rename to crates/yaak-models/migrations/20250530174021_graphql-introspection.sql diff --git a/src-tauri/yaak-models/migrations/20250531193722_sync-state-index.sql b/crates/yaak-models/migrations/20250531193722_sync-state-index.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250531193722_sync-state-index.sql rename to crates/yaak-models/migrations/20250531193722_sync-state-index.sql diff --git a/src-tauri/yaak-models/migrations/20250604102922_colored-methods-setting.sql b/crates/yaak-models/migrations/20250604102922_colored-methods-setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250604102922_colored-methods-setting.sql rename to crates/yaak-models/migrations/20250604102922_colored-methods-setting.sql diff --git a/src-tauri/yaak-models/migrations/20250608150053_font-settings.sql b/crates/yaak-models/migrations/20250608150053_font-settings.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250608150053_font-settings.sql rename to crates/yaak-models/migrations/20250608150053_font-settings.sql diff --git a/src-tauri/yaak-models/migrations/20250611120000_environment-color.sql b/crates/yaak-models/migrations/20250611120000_environment-color.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250611120000_environment-color.sql rename to crates/yaak-models/migrations/20250611120000_environment-color.sql diff --git a/src-tauri/yaak-models/migrations/20250727190746_autoupdate_setting.sql b/crates/yaak-models/migrations/20250727190746_autoupdate_setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250727190746_autoupdate_setting.sql rename to crates/yaak-models/migrations/20250727190746_autoupdate_setting.sql diff --git a/src-tauri/yaak-models/migrations/20250918141129_request-folder-environments.sql b/crates/yaak-models/migrations/20250918141129_request-folder-environments.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250918141129_request-folder-environments.sql rename to crates/yaak-models/migrations/20250918141129_request-folder-environments.sql diff --git a/src-tauri/yaak-models/migrations/20250929132954_dismiss-license-badge.sql b/crates/yaak-models/migrations/20250929132954_dismiss-license-badge.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20250929132954_dismiss-license-badge.sql rename to crates/yaak-models/migrations/20250929132954_dismiss-license-badge.sql diff --git a/src-tauri/yaak-models/migrations/20251001082054_auto-download.sql b/crates/yaak-models/migrations/20251001082054_auto-download.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251001082054_auto-download.sql rename to crates/yaak-models/migrations/20251001082054_auto-download.sql diff --git a/src-tauri/yaak-models/migrations/20251028060300_check_notifications_setting.sql b/crates/yaak-models/migrations/20251028060300_check_notifications_setting.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251028060300_check_notifications_setting.sql rename to crates/yaak-models/migrations/20251028060300_check_notifications_setting.sql diff --git a/src-tauri/yaak-models/migrations/20251029062024_aws-auth-name.sql b/crates/yaak-models/migrations/20251029062024_aws-auth-name.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251029062024_aws-auth-name.sql rename to crates/yaak-models/migrations/20251029062024_aws-auth-name.sql diff --git a/src-tauri/yaak-models/migrations/20251031070515_environment-sort-priority.sql b/crates/yaak-models/migrations/20251031070515_environment-sort-priority.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251031070515_environment-sort-priority.sql rename to crates/yaak-models/migrations/20251031070515_environment-sort-priority.sql diff --git a/src-tauri/yaak-models/migrations/20251202080000_use-native-titlebar.sql b/crates/yaak-models/migrations/20251202080000_use-native-titlebar.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251202080000_use-native-titlebar.sql rename to crates/yaak-models/migrations/20251202080000_use-native-titlebar.sql diff --git a/src-tauri/yaak-models/migrations/20251209000000_client-certificates.sql b/crates/yaak-models/migrations/20251209000000_client-certificates.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251209000000_client-certificates.sql rename to crates/yaak-models/migrations/20251209000000_client-certificates.sql diff --git a/src-tauri/yaak-models/migrations/20251219074602_default-workspace-headers.sql b/crates/yaak-models/migrations/20251219074602_default-workspace-headers.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251219074602_default-workspace-headers.sql rename to crates/yaak-models/migrations/20251219074602_default-workspace-headers.sql diff --git a/src-tauri/yaak-models/migrations/20251220000000_response-request-headers.sql b/crates/yaak-models/migrations/20251220000000_response-request-headers.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251220000000_response-request-headers.sql rename to crates/yaak-models/migrations/20251220000000_response-request-headers.sql diff --git a/src-tauri/yaak-models/migrations/20251221000000_http-response-events.sql b/crates/yaak-models/migrations/20251221000000_http-response-events.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251221000000_http-response-events.sql rename to crates/yaak-models/migrations/20251221000000_http-response-events.sql diff --git a/src-tauri/yaak-models/migrations/20251221100000_request-content-length.sql b/crates/yaak-models/migrations/20251221100000_request-content-length.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20251221100000_request-content-length.sql rename to crates/yaak-models/migrations/20251221100000_request-content-length.sql diff --git a/src-tauri/yaak-models/migrations/20260104000000_hotkeys.sql b/crates/yaak-models/migrations/20260104000000_hotkeys.sql similarity index 100% rename from src-tauri/yaak-models/migrations/20260104000000_hotkeys.sql rename to crates/yaak-models/migrations/20260104000000_hotkeys.sql diff --git a/src-tauri/yaak-models/package.json b/crates/yaak-models/package.json similarity index 100% rename from src-tauri/yaak-models/package.json rename to crates/yaak-models/package.json diff --git a/src-tauri/yaak-models/src/blob_manager.rs b/crates/yaak-models/src/blob_manager.rs similarity index 95% rename from src-tauri/yaak-models/src/blob_manager.rs rename to crates/yaak-models/src/blob_manager.rs index cb817db9..2f2fc2ef 100644 --- a/src-tauri/yaak-models/src/blob_manager.rs +++ b/crates/yaak-models/src/blob_manager.rs @@ -6,7 +6,6 @@ use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use rusqlite::{OptionalExtension, params}; use std::sync::{Arc, Mutex}; -use tauri::{Manager, Runtime, State}; static BLOB_MIGRATIONS_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/blob_migrations"); @@ -25,23 +24,6 @@ impl BodyChunk { } } -/// Extension trait for accessing the blob manager from app handle. -pub trait BlobManagerExt<'a, R> { - fn blob_manager(&'a self) -> State<'a, BlobManager>; - fn blobs(&'a self) -> BlobContext; -} - -impl<'a, R: Runtime, M: Manager> BlobManagerExt<'a, R> for M { - fn blob_manager(&'a self) -> State<'a, BlobManager> { - self.state::() - } - - fn blobs(&'a self) -> BlobContext { - let manager = self.state::(); - manager.inner().connect() - } -} - /// Manages the blob database connection pool. #[derive(Debug, Clone)] pub struct BlobManager { diff --git a/src-tauri/yaak-models/src/connection_or_tx.rs b/crates/yaak-models/src/connection_or_tx.rs similarity index 100% rename from src-tauri/yaak-models/src/connection_or_tx.rs rename to crates/yaak-models/src/connection_or_tx.rs diff --git a/src-tauri/yaak-models/src/db_context.rs b/crates/yaak-models/src/db_context.rs similarity index 100% rename from src-tauri/yaak-models/src/db_context.rs rename to crates/yaak-models/src/db_context.rs diff --git a/src-tauri/yaak-models/src/error.rs b/crates/yaak-models/src/error.rs similarity index 90% rename from src-tauri/yaak-models/src/error.rs rename to crates/yaak-models/src/error.rs index f92785a1..3be44ab0 100644 --- a/src-tauri/yaak-models/src/error.rs +++ b/crates/yaak-models/src/error.rs @@ -9,6 +9,12 @@ pub enum Error { #[error("SQL Pool error: {0}")] SqlPoolError(#[from] r2d2::Error), + #[error("Database error: {0}")] + Database(String), + + #[error("IO error: {0}")] + Io(#[from] std::io::Error), + #[error("JSON error: {0}")] JsonError(#[from] serde_json::Error), diff --git a/crates/yaak-models/src/lib.rs b/crates/yaak-models/src/lib.rs new file mode 100644 index 00000000..b7ba06b5 --- /dev/null +++ b/crates/yaak-models/src/lib.rs @@ -0,0 +1,96 @@ +use crate::blob_manager::{BlobManager, migrate_blob_db}; +use crate::error::{Error, Result}; +use crate::migrate::migrate_db; +use crate::query_manager::QueryManager; +use crate::util::ModelPayload; +use r2d2::Pool; +use r2d2_sqlite::SqliteConnectionManager; +use std::fs::create_dir_all; +use std::path::Path; +use std::sync::mpsc; +use std::time::Duration; + +pub mod blob_manager; +mod connection_or_tx; +pub mod db_context; +pub mod error; +pub mod migrate; +pub mod models; +pub mod queries; +pub mod query_manager; +pub mod render; +pub mod util; + +/// Initialize the database managers for standalone (non-Tauri) usage. +/// +/// Returns a tuple of (QueryManager, BlobManager, event_receiver). +/// The event_receiver can be used to listen for model change events. +pub fn init_standalone( + db_path: impl AsRef, + blob_path: impl AsRef, +) -> Result<(QueryManager, BlobManager, mpsc::Receiver)> { + let db_path = db_path.as_ref(); + let blob_path = blob_path.as_ref(); + + // Create parent directories if needed + if let Some(parent) = db_path.parent() { + create_dir_all(parent)?; + } + if let Some(parent) = blob_path.parent() { + create_dir_all(parent)?; + } + + // Main database pool + let manager = SqliteConnectionManager::file(db_path); + let pool = Pool::builder() + .max_size(100) + .connection_timeout(Duration::from_secs(10)) + .build(manager) + .map_err(|e| Error::Database(e.to_string()))?; + + migrate_db(&pool)?; + + // Blob database pool + let blob_manager = SqliteConnectionManager::file(blob_path); + let blob_pool = Pool::builder() + .max_size(50) + .connection_timeout(Duration::from_secs(10)) + .build(blob_manager) + .map_err(|e| Error::Database(e.to_string()))?; + + migrate_blob_db(&blob_pool)?; + + let (tx, rx) = mpsc::channel(); + let query_manager = QueryManager::new(pool, tx); + let blob_manager = BlobManager::new(blob_pool); + + Ok((query_manager, blob_manager, rx)) +} + +/// Initialize the database managers with in-memory SQLite databases. +/// Useful for testing and CI environments. +pub fn init_in_memory() -> Result<(QueryManager, BlobManager, mpsc::Receiver)> { + // Main database pool + let manager = SqliteConnectionManager::memory(); + let pool = Pool::builder() + .max_size(1) // In-memory DB doesn't support multiple connections + .build(manager) + .map_err(|e| Error::Database(e.to_string()))?; + + migrate_db(&pool)?; + + // Blob database pool + let blob_manager = SqliteConnectionManager::memory(); + let blob_pool = Pool::builder() + .max_size(1) + .build(blob_manager) + .map_err(|e| Error::Database(e.to_string()))?; + + migrate_blob_db(&blob_pool)?; + + let (tx, rx) = mpsc::channel(); + let query_manager = QueryManager::new(pool, tx); + let blob_manager = BlobManager::new(blob_pool); + + Ok((query_manager, blob_manager, rx)) +} diff --git a/src-tauri/yaak-models/src/migrate.rs b/crates/yaak-models/src/migrate.rs similarity index 98% rename from src-tauri/yaak-models/src/migrate.rs rename to crates/yaak-models/src/migrate.rs index 4186b5f5..96ab801a 100644 --- a/src-tauri/yaak-models/src/migrate.rs +++ b/crates/yaak-models/src/migrate.rs @@ -9,7 +9,7 @@ use sha2::{Digest, Sha384}; static MIGRATIONS_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR/migrations"); -pub(crate) fn migrate_db(pool: &Pool) -> Result<()> { +pub fn migrate_db(pool: &Pool) -> Result<()> { info!("Running database migrations"); // Ensure the table exists diff --git a/src-tauri/yaak-models/src/models.rs b/crates/yaak-models/src/models.rs similarity index 100% rename from src-tauri/yaak-models/src/models.rs rename to crates/yaak-models/src/models.rs diff --git a/src-tauri/yaak-models/src/queries/any_request.rs b/crates/yaak-models/src/queries/any_request.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/any_request.rs rename to crates/yaak-models/src/queries/any_request.rs diff --git a/src-tauri/yaak-models/src/queries/batch.rs b/crates/yaak-models/src/queries/batch.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/batch.rs rename to crates/yaak-models/src/queries/batch.rs diff --git a/src-tauri/yaak-models/src/queries/cookie_jars.rs b/crates/yaak-models/src/queries/cookie_jars.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/cookie_jars.rs rename to crates/yaak-models/src/queries/cookie_jars.rs diff --git a/src-tauri/yaak-models/src/queries/environments.rs b/crates/yaak-models/src/queries/environments.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/environments.rs rename to crates/yaak-models/src/queries/environments.rs diff --git a/src-tauri/yaak-models/src/queries/folders.rs b/crates/yaak-models/src/queries/folders.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/folders.rs rename to crates/yaak-models/src/queries/folders.rs diff --git a/src-tauri/yaak-models/src/queries/graphql_introspections.rs b/crates/yaak-models/src/queries/graphql_introspections.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/graphql_introspections.rs rename to crates/yaak-models/src/queries/graphql_introspections.rs diff --git a/src-tauri/yaak-models/src/queries/grpc_connections.rs b/crates/yaak-models/src/queries/grpc_connections.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/grpc_connections.rs rename to crates/yaak-models/src/queries/grpc_connections.rs diff --git a/src-tauri/yaak-models/src/queries/grpc_events.rs b/crates/yaak-models/src/queries/grpc_events.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/grpc_events.rs rename to crates/yaak-models/src/queries/grpc_events.rs diff --git a/src-tauri/yaak-models/src/queries/grpc_requests.rs b/crates/yaak-models/src/queries/grpc_requests.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/grpc_requests.rs rename to crates/yaak-models/src/queries/grpc_requests.rs diff --git a/src-tauri/yaak-models/src/queries/http_requests.rs b/crates/yaak-models/src/queries/http_requests.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/http_requests.rs rename to crates/yaak-models/src/queries/http_requests.rs diff --git a/src-tauri/yaak-models/src/queries/http_response_events.rs b/crates/yaak-models/src/queries/http_response_events.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/http_response_events.rs rename to crates/yaak-models/src/queries/http_response_events.rs diff --git a/src-tauri/yaak-models/src/queries/http_responses.rs b/crates/yaak-models/src/queries/http_responses.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/http_responses.rs rename to crates/yaak-models/src/queries/http_responses.rs diff --git a/src-tauri/yaak-models/src/queries/key_values.rs b/crates/yaak-models/src/queries/key_values.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/key_values.rs rename to crates/yaak-models/src/queries/key_values.rs diff --git a/src-tauri/yaak-models/src/queries/mod.rs b/crates/yaak-models/src/queries/mod.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/mod.rs rename to crates/yaak-models/src/queries/mod.rs diff --git a/src-tauri/yaak-models/src/queries/plugin_key_values.rs b/crates/yaak-models/src/queries/plugin_key_values.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/plugin_key_values.rs rename to crates/yaak-models/src/queries/plugin_key_values.rs diff --git a/src-tauri/yaak-models/src/queries/plugins.rs b/crates/yaak-models/src/queries/plugins.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/plugins.rs rename to crates/yaak-models/src/queries/plugins.rs diff --git a/src-tauri/yaak-models/src/queries/settings.rs b/crates/yaak-models/src/queries/settings.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/settings.rs rename to crates/yaak-models/src/queries/settings.rs diff --git a/src-tauri/yaak-models/src/queries/sync_states.rs b/crates/yaak-models/src/queries/sync_states.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/sync_states.rs rename to crates/yaak-models/src/queries/sync_states.rs diff --git a/src-tauri/yaak-models/src/queries/websocket_connections.rs b/crates/yaak-models/src/queries/websocket_connections.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/websocket_connections.rs rename to crates/yaak-models/src/queries/websocket_connections.rs diff --git a/src-tauri/yaak-models/src/queries/websocket_events.rs b/crates/yaak-models/src/queries/websocket_events.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/websocket_events.rs rename to crates/yaak-models/src/queries/websocket_events.rs diff --git a/src-tauri/yaak-models/src/queries/websocket_requests.rs b/crates/yaak-models/src/queries/websocket_requests.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/websocket_requests.rs rename to crates/yaak-models/src/queries/websocket_requests.rs diff --git a/src-tauri/yaak-models/src/queries/workspace_metas.rs b/crates/yaak-models/src/queries/workspace_metas.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/workspace_metas.rs rename to crates/yaak-models/src/queries/workspace_metas.rs diff --git a/src-tauri/yaak-models/src/queries/workspaces.rs b/crates/yaak-models/src/queries/workspaces.rs similarity index 100% rename from src-tauri/yaak-models/src/queries/workspaces.rs rename to crates/yaak-models/src/queries/workspaces.rs diff --git a/src-tauri/yaak-models/src/query_manager.rs b/crates/yaak-models/src/query_manager.rs similarity index 67% rename from src-tauri/yaak-models/src/query_manager.rs rename to crates/yaak-models/src/query_manager.rs index a7e71657..c123c4ff 100644 --- a/src-tauri/yaak-models/src/query_manager.rs +++ b/crates/yaak-models/src/query_manager.rs @@ -1,51 +1,11 @@ use crate::connection_or_tx::ConnectionOrTx; use crate::db_context::DbContext; use crate::error::Error::GenericError; -use crate::error::Result; use crate::util::ModelPayload; use r2d2::Pool; use r2d2_sqlite::SqliteConnectionManager; use rusqlite::TransactionBehavior; use std::sync::{Arc, Mutex, mpsc}; -use tauri::{Manager, Runtime, State}; - -pub trait QueryManagerExt<'a, R> { - fn db_manager(&'a self) -> State<'a, QueryManager>; - fn db(&'a self) -> DbContext<'a>; - fn with_db(&'a self, func: F) -> T - where - F: FnOnce(&DbContext) -> T; - fn with_tx(&'a self, func: F) -> Result - where - F: FnOnce(&DbContext) -> Result; -} - -impl<'a, R: Runtime, M: Manager> QueryManagerExt<'a, R> for M { - fn db_manager(&'a self) -> State<'a, QueryManager> { - self.state::() - } - - fn db(&'a self) -> DbContext<'a> { - let qm = self.state::(); - qm.inner().connect() - } - - fn with_db(&'a self, func: F) -> T - where - F: FnOnce(&DbContext) -> T, - { - let qm = self.state::(); - qm.inner().with_conn(func) - } - - fn with_tx(&'a self, func: F) -> Result - where - F: FnOnce(&DbContext) -> Result, - { - let qm = self.state::(); - qm.inner().with_tx(func) - } -} #[derive(Debug, Clone)] pub struct QueryManager { @@ -54,10 +14,7 @@ pub struct QueryManager { } impl QueryManager { - pub(crate) fn new( - pool: Pool, - events_tx: mpsc::Sender, - ) -> Self { + pub fn new(pool: Pool, events_tx: mpsc::Sender) -> Self { QueryManager { pool: Arc::new(Mutex::new(pool)), events_tx } } diff --git a/src-tauri/yaak-models/src/render.rs b/crates/yaak-models/src/render.rs similarity index 100% rename from src-tauri/yaak-models/src/render.rs rename to crates/yaak-models/src/render.rs diff --git a/src-tauri/yaak-models/src/util.rs b/crates/yaak-models/src/util.rs similarity index 71% rename from src-tauri/yaak-models/src/util.rs rename to crates/yaak-models/src/util.rs index 08bfe5ee..583425e4 100644 --- a/src-tauri/yaak-models/src/util.rs +++ b/crates/yaak-models/src/util.rs @@ -1,17 +1,15 @@ +use crate::db_context::DbContext; use crate::error::Result; use crate::models::{ AnyModel, Environment, Folder, GrpcRequest, HttpRequest, UpsertModelInfo, WebsocketRequest, Workspace, WorkspaceIden, }; -use crate::query_manager::QueryManagerExt; use chrono::{NaiveDateTime, Utc}; -use log::warn; use nanoid::nanoid; use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; -use tauri::{AppHandle, Listener, Runtime, WebviewWindow}; use ts_rs::TS; -use yaak_common::window::WorkspaceWindowTrait; +use yaak_core::WorkspaceContext; pub fn generate_prefixed_id(prefix: &str) -> String { format!("{prefix}_{}", generate_id()) @@ -61,43 +59,11 @@ pub enum UpdateSource { } impl UpdateSource { - pub fn from_window(window: &WebviewWindow) -> Self { - Self::Window { label: window.label().to_string() } + pub fn from_window_label(label: impl Into) -> Self { + Self::Window { label: label.into() } } } -pub fn listen_to_model_delete(app_handle: &AppHandle, handler: F) -where - F: Fn(ModelPayload) + Send + 'static, - R: Runtime, -{ - app_handle.listen_any("deleted_model", move |e| { - match serde_json::from_str(e.payload()) { - Ok(payload) => handler(payload), - Err(e) => { - warn!("Failed to deserialize deleted model {}", e); - return; - } - }; - }); -} - -pub fn listen_to_model_upsert(app_handle: &AppHandle, handler: F) -where - F: Fn(ModelPayload) + Send + 'static, - R: Runtime, -{ - app_handle.listen_any("upserted_model", move |e| { - match serde_json::from_str(e.payload()) { - Ok(payload) => handler(payload), - Err(e) => { - warn!("Failed to deserialize upserted model {}", e); - return; - } - }; - }); -} - #[derive(Default, Debug, Deserialize, Serialize)] #[serde(default, rename_all = "camelCase")] pub struct WorkspaceExport { @@ -119,13 +85,14 @@ pub struct BatchUpsertResult { pub websocket_requests: Vec, } -pub fn get_workspace_export_resources( - app_handle: &AppHandle, +pub fn get_workspace_export_resources( + db: &DbContext, + yaak_version: &str, workspace_ids: Vec<&str>, include_private_environments: bool, ) -> Result { let mut data = WorkspaceExport { - yaak_version: app_handle.package_info().version.clone().to_string(), + yaak_version: yaak_version.to_string(), yaak_schema: 4, timestamp: Utc::now().naive_utc(), resources: BatchUpsertResult { @@ -138,7 +105,6 @@ pub fn get_workspace_export_resources( }, }; - let db = app_handle.db(); for workspace_id in workspace_ids { data.resources.workspaces.push(db.find_one(WorkspaceIden::Id, workspace_id)?); data.resources.environments.append( @@ -157,13 +123,13 @@ pub fn get_workspace_export_resources( Ok(data) } -pub fn maybe_gen_id( - window: &WebviewWindow, +pub fn maybe_gen_id( + ctx: &WorkspaceContext, id: &str, ids: &mut BTreeMap, ) -> String { if id == "CURRENT_WORKSPACE" { - if let Some(wid) = window.workspace_id() { + if let Some(wid) = &ctx.workspace_id { return wid.to_string(); } } @@ -182,13 +148,13 @@ pub fn maybe_gen_id( } } -pub fn maybe_gen_id_opt( - window: &WebviewWindow, +pub fn maybe_gen_id_opt( + ctx: &WorkspaceContext, id: Option, ids: &mut BTreeMap, ) -> Option { match id { - Some(id) => Some(maybe_gen_id::(window, id.as_str(), ids)), + Some(id) => Some(maybe_gen_id::(ctx, id.as_str(), ids)), None => None, } } diff --git a/src-tauri/yaak-plugins/Cargo.toml b/crates/yaak-plugins/Cargo.toml similarity index 82% rename from src-tauri/yaak-plugins/Cargo.toml rename to crates/yaak-plugins/Cargo.toml index b46a0e32..f78f676b 100644 --- a/src-tauri/yaak-plugins/Cargo.toml +++ b/crates/yaak-plugins/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "yaak-plugins" -links = "yaak-plugins" version = "0.1.0" edition = "2024" publish = false @@ -21,10 +20,8 @@ reqwest = { workspace = true, features = ["json"] } serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } sha2 = { workspace = true } -tauri = { workspace = true } -tauri-plugin-shell = { workspace = true } thiserror = { workspace = true } -tokio = { workspace = true, features = ["macros", "rt-multi-thread", "process"] } +tokio = { workspace = true, features = ["macros", "rt-multi-thread", "process", "fs"] } tokio-tungstenite = "0.26.1" ts-rs = { workspace = true } yaak-common = { workspace = true } @@ -32,6 +29,3 @@ yaak-crypto = { workspace = true } yaak-models = { workspace = true } yaak-templates = { workspace = true } zip-extract = "0.4.0" - -[build-dependencies] -tauri-plugin = { workspace = true, features = ["build"] } diff --git a/src-tauri/yaak-plugins/bindings/gen_api.ts b/crates/yaak-plugins/bindings/gen_api.ts similarity index 100% rename from src-tauri/yaak-plugins/bindings/gen_api.ts rename to crates/yaak-plugins/bindings/gen_api.ts diff --git a/src-tauri/yaak-plugins/bindings/gen_events.ts b/crates/yaak-plugins/bindings/gen_events.ts similarity index 99% rename from src-tauri/yaak-plugins/bindings/gen_events.ts rename to crates/yaak-plugins/bindings/gen_events.ts index 2b7b9b3f..f10515d6 100644 --- a/src-tauri/yaak-plugins/bindings/gen_events.ts +++ b/crates/yaak-plugins/bindings/gen_events.ts @@ -437,7 +437,7 @@ export type ListWorkspacesResponse = { workspaces: Array, }; export type OpenExternalUrlRequest = { url: string, }; -export type OpenWindowRequest = { url: string, +export type OpenWindowRequest = { url: string, /** * Label for the window. If not provided, a random one will be generated. */ diff --git a/src-tauri/yaak-plugins/bindings/gen_models.ts b/crates/yaak-plugins/bindings/gen_models.ts similarity index 99% rename from src-tauri/yaak-plugins/bindings/gen_models.ts rename to crates/yaak-plugins/bindings/gen_models.ts index ba67aba3..61f6c54d 100644 --- a/src-tauri/yaak-plugins/bindings/gen_models.ts +++ b/crates/yaak-plugins/bindings/gen_models.ts @@ -63,7 +63,7 @@ export type ProxySetting = { "type": "enabled", http: string, https: string, aut export type ProxySettingAuth = { user: string, password: string, }; -export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, clientCertificates: Array, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, useNativeTitlebar: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, }; +export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, clientCertificates: Array, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, useNativeTitlebar: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, hotkeys: { [key in string]?: Array }, }; export type SyncState = { model: "sync_state", id: string, workspaceId: string, createdAt: string, updatedAt: string, flushedAt: string, modelId: string, checksum: string, relPath: string, syncDir: string, }; diff --git a/src-tauri/yaak-plugins/bindings/gen_search.ts b/crates/yaak-plugins/bindings/gen_search.ts similarity index 100% rename from src-tauri/yaak-plugins/bindings/gen_search.ts rename to crates/yaak-plugins/bindings/gen_search.ts diff --git a/src-tauri/yaak-plugins/bindings/serde_json/JsonValue.ts b/crates/yaak-plugins/bindings/serde_json/JsonValue.ts similarity index 100% rename from src-tauri/yaak-plugins/bindings/serde_json/JsonValue.ts rename to crates/yaak-plugins/bindings/serde_json/JsonValue.ts diff --git a/src-tauri/yaak-plugins/index.ts b/crates/yaak-plugins/index.ts similarity index 59% rename from src-tauri/yaak-plugins/index.ts rename to crates/yaak-plugins/index.ts index 2af012e2..04eeb0dd 100644 --- a/src-tauri/yaak-plugins/index.ts +++ b/crates/yaak-plugins/index.ts @@ -6,21 +6,21 @@ export * from './bindings/gen_events'; export * from './bindings/gen_search'; export async function searchPlugins(query: string) { - return invoke('plugin:yaak-plugins|search', { query }); + return invoke('cmd_plugins_search', { query }); } export async function installPlugin(name: string, version: string | null) { - return invoke('plugin:yaak-plugins|install', { name, version }); + return invoke('cmd_plugins_install', { name, version }); } export async function uninstallPlugin(pluginId: string) { - return invoke('plugin:yaak-plugins|uninstall', { pluginId }); + return invoke('cmd_plugins_uninstall', { pluginId }); } export async function checkPluginUpdates() { - return invoke('plugin:yaak-plugins|updates', {}); + return invoke('cmd_plugins_updates', {}); } export async function updateAllPlugins() { - return invoke('plugin:yaak-plugins|update_all', {}); + return invoke('cmd_plugins_update_all', {}); } diff --git a/src-tauri/yaak-plugins/package.json b/crates/yaak-plugins/package.json similarity index 100% rename from src-tauri/yaak-plugins/package.json rename to crates/yaak-plugins/package.json diff --git a/src-tauri/yaak-plugins/src/api.rs b/crates/yaak-plugins/src/api.rs similarity index 80% rename from src-tauri/yaak-plugins/src/api.rs rename to crates/yaak-plugins/src/api.rs index aa72e444..2d84e6f6 100644 --- a/src-tauri/yaak-plugins/src/api.rs +++ b/crates/yaak-plugins/src/api.rs @@ -2,17 +2,16 @@ use crate::error::Error::ApiErr; use crate::error::Result; use crate::plugin_meta::get_plugin_meta; use log::{info, warn}; -use reqwest::{Response, Url}; +use reqwest::{Client, Response, Url}; use serde::{Deserialize, Serialize}; use std::path::Path; use std::str::FromStr; -use tauri::{AppHandle, Runtime}; use ts_rs::TS; -use yaak_common::api_client::yaak_api_client; -use yaak_models::query_manager::QueryManagerExt; +use yaak_models::models::Plugin; -pub async fn get_plugin( - app_handle: &AppHandle, +/// Get plugin info from the registry. +pub async fn get_plugin( + http_client: &Client, name: &str, version: Option, ) -> Result { @@ -22,15 +21,16 @@ pub async fn get_plugin( let mut query_pairs = url.query_pairs_mut(); query_pairs.append_pair("version", &version); }; - let resp = yaak_api_client(app_handle)?.get(url.clone()).send().await?; + let resp = http_client.get(url.clone()).send().await?; if !resp.status().is_success() { return Err(ApiErr(format!("{} response to {}", resp.status(), url.to_string()))); } Ok(resp.json().await?) } -pub async fn download_plugin_archive( - app_handle: &AppHandle, +/// Download the plugin archive from the registry. +pub async fn download_plugin_archive( + http_client: &Client, plugin_version: &PluginVersion, ) -> Result { let name = plugin_version.name.clone(); @@ -41,7 +41,7 @@ pub async fn download_plugin_archive( let mut query_pairs = url.query_pairs_mut(); query_pairs.append_pair("version", &version); }; - let resp = yaak_api_client(app_handle)?.get(url.clone()).send().await?; + let resp = http_client.get(url.clone()).send().await?; if !resp.status().is_success() { warn!("Failed to download plugin: {name} {version}"); return Err(ApiErr(format!("{} response to {}", resp.status(), url.to_string()))); @@ -50,12 +50,13 @@ pub async fn download_plugin_archive( Ok(resp) } -pub async fn check_plugin_updates( - app_handle: &AppHandle, +/// Check for plugin updates. +/// Takes a list of plugins to check against the registry. +pub async fn check_plugin_updates( + http_client: &Client, + plugins: Vec, ) -> Result { - let name_versions: Vec = app_handle - .db() - .list_plugins()? + let name_versions: Vec = plugins .into_iter() .filter(|p| p.url.is_some()) // Only check plugins with URLs (from registry) .filter_map(|p| match get_plugin_meta(&Path::new(&p.directory)) { @@ -69,7 +70,7 @@ pub async fn check_plugin_updates( let url = build_url("/updates"); let body = serde_json::to_vec(&PluginUpdatesResponse { plugins: name_versions })?; - let resp = yaak_api_client(app_handle)?.post(url.clone()).body(body).send().await?; + let resp = http_client.post(url.clone()).body(body).send().await?; if !resp.status().is_success() { return Err(ApiErr(format!("{} response to {}", resp.status(), url.to_string()))); } @@ -78,8 +79,9 @@ pub async fn check_plugin_updates( Ok(results) } -pub async fn search_plugins( - app_handle: &AppHandle, +/// Search for plugins in the registry. +pub async fn search_plugins( + http_client: &Client, query: &str, ) -> Result { let mut url = build_url("/search"); @@ -87,7 +89,7 @@ pub async fn search_plugins( let mut query_pairs = url.query_pairs_mut(); query_pairs.append_pair("query", query); }; - let resp = yaak_api_client(app_handle)?.get(url).send().await?; + let resp = http_client.get(url).send().await?; Ok(resp.json().await?) } diff --git a/src-tauri/yaak-plugins/src/checksum.rs b/crates/yaak-plugins/src/checksum.rs similarity index 100% rename from src-tauri/yaak-plugins/src/checksum.rs rename to crates/yaak-plugins/src/checksum.rs diff --git a/src-tauri/yaak-plugins/src/error.rs b/crates/yaak-plugins/src/error.rs similarity index 86% rename from src-tauri/yaak-plugins/src/error.rs rename to crates/yaak-plugins/src/error.rs index 6b3d40b8..f5db0333 100644 --- a/src-tauri/yaak-plugins/src/error.rs +++ b/crates/yaak-plugins/src/error.rs @@ -18,12 +18,6 @@ pub enum Error { #[error("IO error: {0}")] IoErr(#[from] io::Error), - #[error("Tauri error: {0}")] - TauriErr(#[from] tauri::Error), - - #[error("Tauri shell error: {0}")] - TauriShellErr(#[from] tauri_plugin_shell::Error), - #[error("Grpc send error: {0}")] GrpcSendErr(#[from] SendError), @@ -36,9 +30,6 @@ pub enum Error { #[error("API Error: {0}")] ApiErr(String), - #[error(transparent)] - CommonError(#[from] yaak_common::error::Error), - #[error("Timeout elapsed: {0}")] TimeoutElapsed(#[from] tokio::time::error::Elapsed), diff --git a/src-tauri/yaak-plugins/src/events.rs b/crates/yaak-plugins/src/events.rs similarity index 99% rename from src-tauri/yaak-plugins/src/events.rs rename to crates/yaak-plugins/src/events.rs index 3871be8a..bef16a96 100644 --- a/src-tauri/yaak-plugins/src/events.rs +++ b/crates/yaak-plugins/src/events.rs @@ -1,8 +1,6 @@ use serde::{Deserialize, Serialize}; use std::collections::HashMap; -use tauri::{Runtime, WebviewWindow}; use ts_rs::TS; -use yaak_common::window::WorkspaceWindowTrait; use yaak_models::models::{ AnyModel, Environment, Folder, GrpcRequest, HttpRequest, HttpResponse, WebsocketRequest, Workspace, @@ -48,10 +46,11 @@ impl PluginContext { pub fn new_empty() -> Self { Self { id: "default".to_string(), label: None, workspace_id: None } } - pub fn new(window: &WebviewWindow) -> Self { + + pub fn new(label: Option, workspace_id: Option) -> Self { Self { - label: Some(window.label().to_string()), - workspace_id: window.workspace_id(), + label, + workspace_id, id: generate_prefixed_id("pctx"), } } diff --git a/crates/yaak-plugins/src/install.rs b/crates/yaak-plugins/src/install.rs new file mode 100644 index 00000000..99acc996 --- /dev/null +++ b/crates/yaak-plugins/src/install.rs @@ -0,0 +1,92 @@ +use crate::api::{PluginVersion, download_plugin_archive, get_plugin}; +use crate::checksum::compute_checksum; +use crate::error::Error::PluginErr; +use crate::error::Result; +use crate::events::PluginContext; +use crate::manager::PluginManager; +use chrono::Utc; +use log::info; +use std::fs::{create_dir_all, remove_dir_all}; +use std::io::Cursor; +use std::sync::Arc; +use yaak_models::models::Plugin; +use yaak_models::query_manager::QueryManager; +use yaak_models::util::UpdateSource; + +/// Delete a plugin from the database and uninstall it. +pub async fn delete_and_uninstall( + plugin_manager: Arc, + query_manager: &QueryManager, + plugin_context: &PluginContext, + plugin_id: &str, +) -> Result { + let update_source = match plugin_context.label.clone() { + Some(label) => UpdateSource::from_window_label(label), + None => UpdateSource::Background, + }; + // Scope the db connection so it doesn't live across await + let plugin = { + let db = query_manager.connect(); + db.delete_plugin_by_id(plugin_id, &update_source)? + }; + plugin_manager.uninstall(plugin_context, plugin.directory.as_str()).await?; + Ok(plugin) +} + +/// Download and install a plugin. +pub async fn download_and_install( + plugin_manager: Arc, + query_manager: &QueryManager, + http_client: &reqwest::Client, + plugin_context: &PluginContext, + name: &str, + version: Option, +) -> Result { + info!("Installing plugin {} {}", name, version.clone().unwrap_or_default()); + let plugin_version = get_plugin(http_client, name, version).await?; + let resp = download_plugin_archive(http_client, &plugin_version).await?; + let bytes = resp.bytes().await?; + + let checksum = compute_checksum(&bytes); + if checksum != plugin_version.checksum { + return Err(PluginErr(format!( + "Checksum mismatch {}b {checksum} != {}", + bytes.len(), + plugin_version.checksum + ))); + } + + info!("Checksum matched {}", checksum); + + let plugin_dir = plugin_manager.installed_plugin_dir.join(name); + let plugin_dir_str = plugin_dir.to_str().unwrap().to_string(); + + // Re-create the plugin directory + let _ = remove_dir_all(&plugin_dir); + create_dir_all(&plugin_dir)?; + + zip_extract::extract(Cursor::new(&bytes), &plugin_dir, true)?; + info!("Extracted plugin {} to {}", plugin_version.id, plugin_dir_str); + + // Scope the db connection so it doesn't live across await + let plugin = { + let db = query_manager.connect(); + db.upsert_plugin( + &Plugin { + id: plugin_version.id.clone(), + checked_at: Some(Utc::now().naive_utc()), + directory: plugin_dir_str.clone(), + enabled: true, + url: Some(plugin_version.url.clone()), + ..Default::default() + }, + &UpdateSource::Background, + )? + }; + + plugin_manager.add_plugin(plugin_context, &plugin).await?; + + info!("Installed plugin {} to {}", plugin_version.id, plugin_dir_str); + + Ok(plugin_version) +} diff --git a/crates/yaak-plugins/src/lib.rs b/crates/yaak-plugins/src/lib.rs new file mode 100644 index 00000000..510756d0 --- /dev/null +++ b/crates/yaak-plugins/src/lib.rs @@ -0,0 +1,21 @@ +//! Core plugin system for Yaak. +//! +//! This crate provides the plugin manager and supporting functionality +//! for running JavaScript plugins via a Node.js runtime. +//! +//! Note: This crate is Tauri-independent. Tauri integration is provided +//! by yaak-app's plugins_ext module. + +pub mod api; +mod checksum; +pub mod error; +pub mod events; +pub mod install; +pub mod manager; +pub mod native_template_functions; +mod nodejs; +pub mod plugin_handle; +pub mod plugin_meta; +mod server_ws; +pub mod template_callback; +mod util; diff --git a/src-tauri/yaak-plugins/src/manager.rs b/crates/yaak-plugins/src/manager.rs similarity index 74% rename from src-tauri/yaak-plugins/src/manager.rs rename to crates/yaak-plugins/src/manager.rs index 03cf175e..32d8df8f 100644 --- a/src-tauri/yaak-plugins/src/manager.rs +++ b/crates/yaak-plugins/src/manager.rs @@ -8,42 +8,35 @@ use crate::events::{ CallHttpAuthenticationActionArgs, CallHttpAuthenticationActionRequest, CallHttpAuthenticationRequest, CallHttpAuthenticationResponse, CallHttpRequestActionRequest, CallTemplateFunctionArgs, CallTemplateFunctionRequest, CallTemplateFunctionResponse, - CallWebsocketRequestActionRequest, CallWorkspaceActionRequest, Color, EmptyPayload, - ErrorResponse, FilterRequest, FilterResponse, GetFolderActionsResponse, - GetGrpcRequestActionsResponse, GetHttpAuthenticationConfigRequest, - GetHttpAuthenticationConfigResponse, GetHttpAuthenticationSummaryResponse, - GetHttpRequestActionsResponse, GetTemplateFunctionConfigRequest, - GetTemplateFunctionConfigResponse, GetTemplateFunctionSummaryResponse, GetThemesRequest, - GetThemesResponse, GetWebsocketRequestActionsResponse, GetWorkspaceActionsResponse, Icon, - ImportRequest, ImportResponse, InternalEvent, InternalEventPayload, JsonPrimitive, - PluginContext, RenderPurpose, ShowToastRequest, + CallWebsocketRequestActionRequest, CallWorkspaceActionRequest, EmptyPayload, ErrorResponse, + FilterRequest, FilterResponse, GetFolderActionsResponse, GetGrpcRequestActionsResponse, + GetHttpAuthenticationConfigRequest, GetHttpAuthenticationConfigResponse, + GetHttpAuthenticationSummaryResponse, GetHttpRequestActionsResponse, + GetTemplateFunctionConfigRequest, GetTemplateFunctionConfigResponse, + GetTemplateFunctionSummaryResponse, GetThemesRequest, GetThemesResponse, + GetWebsocketRequestActionsResponse, GetWorkspaceActionsResponse, ImportRequest, ImportResponse, + InternalEvent, InternalEventPayload, JsonPrimitive, PluginContext, RenderPurpose, + ShowToastRequest, }; use crate::native_template_functions::{template_function_keyring, template_function_secure}; use crate::nodejs::start_nodejs_plugin_runtime; use crate::plugin_handle::PluginHandle; use crate::server_ws::PluginRuntimeServerWebsocket; -use crate::template_callback::PluginTemplateCallback; use log::{error, info, warn}; -use serde_json::json; use std::collections::HashMap; use std::env; use std::path::{Path, PathBuf}; use std::sync::Arc; use std::time::Duration; -use tauri::path::BaseDirectory; -use tauri::{AppHandle, Emitter, Manager, Runtime, WebviewWindow, is_dev}; use tokio::fs::read_dir; use tokio::net::TcpListener; use tokio::sync::mpsc::error::TrySendError; use tokio::sync::{Mutex, mpsc}; use tokio::time::{Instant, timeout}; -use yaak_models::models::{Environment, Plugin}; -use yaak_models::query_manager::QueryManagerExt; -use yaak_models::render::make_vars_hashmap; -use yaak_models::util::{UpdateSource, generate_id}; +use yaak_models::models::Plugin; +use yaak_models::util::generate_id; use yaak_templates::error::Error::RenderError; use yaak_templates::error::Result as TemplateResult; -use yaak_templates::{RenderErrorBehavior, RenderOptions, render_json_value_raw}; #[derive(Clone)] pub struct PluginManager { @@ -53,10 +46,28 @@ pub struct PluginManager { ws_service: Arc, vendored_plugin_dir: PathBuf, pub(crate) installed_plugin_dir: PathBuf, + dev_mode: bool, } +/// Callback for plugin initialization events (e.g., toast notifications) +pub type PluginInitCallback = Box; + impl PluginManager { - pub fn new(app_handle: AppHandle) -> PluginManager { + /// Create a new PluginManager with the given paths. + /// + /// # Arguments + /// * `vendored_plugin_dir` - Path to vendored plugins directory + /// * `installed_plugin_dir` - Path to installed plugins directory + /// * `node_bin_path` - Path to the yaaknode binary + /// * `plugin_runtime_main` - Path to the plugin runtime index.cjs + /// * `dev_mode` - Whether the app is in dev mode (affects plugin loading) + pub async fn new( + vendored_plugin_dir: PathBuf, + installed_plugin_dir: PathBuf, + node_bin_path: PathBuf, + plugin_runtime_main: PathBuf, + dev_mode: bool, + ) -> PluginManager { let (events_tx, mut events_rx) = mpsc::channel(2048); let (kill_server_tx, kill_server_rx) = tokio::sync::watch::channel(false); @@ -65,17 +76,6 @@ impl PluginManager { let ws_service = PluginRuntimeServerWebsocket::new(events_tx, client_disconnect_tx, client_connect_tx); - let vendored_plugin_dir = app_handle - .path() - .resolve("vendored/plugins", BaseDirectory::Resource) - .expect("failed to resolve plugin directory resource"); - - let installed_plugin_dir = app_handle - .path() - .app_data_dir() - .expect("failed to get app data dir") - .join("installed-plugins"); - let plugin_manager = PluginManager { plugin_handles: Default::default(), subscribers: Default::default(), @@ -83,11 +83,12 @@ impl PluginManager { kill_tx: kill_server_tx, vendored_plugin_dir, installed_plugin_dir, + dev_mode, }; // Forward events to subscribers let subscribers = plugin_manager.subscribers.clone(); - tauri::async_runtime::spawn(async move { + tokio::spawn(async move { while let Some(event) = events_rx.recv().await { for (tx_id, tx) in subscribers.lock().await.iter_mut() { if let Err(e) = tx.try_send(event.clone()) { @@ -105,7 +106,7 @@ impl PluginManager { }); // Handle when client plugin runtime disconnects - tauri::async_runtime::spawn(async move { + tokio::spawn(async move { while (client_disconnect_rx.recv().await).is_some() { // Happens when the app is closed info!("Plugin runtime client disconnected"); @@ -116,86 +117,58 @@ impl PluginManager { Some(port) => format!("127.0.0.1:{port}"), None => "127.0.0.1:0".to_string(), }; - let listener = tauri::async_runtime::block_on(async move { - TcpListener::bind(listen_addr).await.expect("Failed to bind TCP listener") - }); + let listener = TcpListener::bind(listen_addr).await.expect("Failed to bind TCP listener"); let addr = listener.local_addr().expect("Failed to get local address"); - // 1. Reload all plugins when the Node.js runtime connects - let init_plugins_task = { - let plugin_manager = plugin_manager.clone(); - let app_handle = app_handle.clone(); - tauri::async_runtime::spawn(async move { - match client_connect_rx.changed().await { - Ok(_) => { - info!("Plugin runtime client connected!"); - plugin_manager - .initialize_all_plugins(&app_handle, &PluginContext::new_empty()) - .await - .expect("Failed to reload plugins"); - } - Err(e) => { - warn!("Failed to receive from client connection rx {e:?}"); - } + // 1. Wait for Node.js runtime to connect + let init_plugins_task = tokio::spawn(async move { + match client_connect_rx.changed().await { + Ok(_) => { + info!("Plugin runtime client connected!"); + // Note: initialize_all_plugins is now called separately by the app + // after setting up the plugin list } - }) - }; + Err(e) => { + warn!("Failed to receive from client connection rx {e:?}"); + } + } + }); // 1. Spawn server in the background info!("Starting plugin server on {addr}"); - tauri::async_runtime::spawn(async move { + tokio::spawn(async move { ws_service.listen(listener).await; }); - // 2. Start Node.js runtime and initialize plugins - tauri::async_runtime::block_on(async move { - start_nodejs_plugin_runtime(&app_handle, addr, &kill_server_rx).await.unwrap(); - info!("Waiting for plugins to initialize"); - init_plugins_task.await.unwrap(); - }); - - // 3. Block waiting for plugins to initialize - tauri::async_runtime::block_on(async move {}); + // 2. Start Node.js runtime + start_nodejs_plugin_runtime(&node_bin_path, &plugin_runtime_main, addr, &kill_server_rx) + .await + .unwrap(); + info!("Waiting for plugins to initialize"); + init_plugins_task.await.unwrap(); plugin_manager } - async fn list_available_plugins( - &self, - app_handle: &AppHandle, - ) -> Result> { - let plugins_dir = if is_dev() { + /// Get the vendored plugin directory path (resolves dev mode path if applicable) + pub fn get_plugins_dir(&self) -> PathBuf { + if self.dev_mode { // Use plugins directly for easy development + // Tauri runs from crates-tauri/yaak-app/, so go up two levels to reach project root env::current_dir() - .map(|cwd| cwd.join("../plugins").canonicalize().unwrap()) - .unwrap_or_else(|_| self.vendored_plugin_dir.to_path_buf()) + .map(|cwd| cwd.join("../../plugins").canonicalize().unwrap()) + .unwrap_or_else(|_| self.vendored_plugin_dir.clone()) } else { - self.vendored_plugin_dir.to_path_buf() - }; - - info!("Loading bundled plugins from {plugins_dir:?}"); - - // Read bundled plugin directories from disk - let bundled_plugin_dirs: Vec = read_plugins_dir(&plugins_dir) - .await - .expect(&format!("Failed to read plugins dir: {:?}", plugins_dir)); - - // Ensure all bundled plugins make it into the database - for dir in &bundled_plugin_dirs { - if app_handle.db().get_plugin_by_directory(dir).is_none() { - app_handle.db().upsert_plugin( - &Plugin { - directory: dir.clone(), - enabled: true, - url: None, - ..Default::default() - }, - &UpdateSource::Background, - )?; - } + self.vendored_plugin_dir.clone() } + } - Ok(app_handle.db().list_plugins()?) + /// Read plugin directories from disk and return their paths. + /// This is useful for discovering bundled plugins. + pub async fn list_bundled_plugin_dirs(&self) -> Result> { + let plugins_dir = self.get_plugins_dir(); + info!("Loading bundled plugins from {plugins_dir:?}"); + read_plugins_dir(&plugins_dir).await } pub async fn uninstall(&self, plugin_context: &PluginContext, dir: &str) -> Result<()> { @@ -272,14 +245,18 @@ impl PluginManager { Ok(()) } - pub async fn initialize_all_plugins( + /// Initialize all plugins from the provided list. + /// Returns a list of (plugin_directory, error_message) for any plugins that failed to initialize. + pub async fn initialize_all_plugins( &self, - app_handle: &AppHandle, + plugins: Vec, plugin_context: &PluginContext, - ) -> Result<()> { + ) -> Vec<(String, String)> { info!("Initializing all plugins"); let start = Instant::now(); - for plugin in self.list_available_plugins(app_handle).await?.clone() { + let mut errors = Vec::new(); + + for plugin in plugins { // First remove the plugin if it exists and is enabled if let Some(plugin_handle) = self.get_plugin_by_dir(&plugin.directory).await { if let Err(e) = self.remove_plugin(plugin_context, &plugin_handle).await { @@ -289,34 +266,20 @@ impl PluginManager { } if let Err(e) = self.add_plugin(plugin_context, &plugin).await { warn!("Failed to add plugin {} {e:?}", plugin.directory); - - // Extract a user-friendly plugin name from the directory path - let plugin_name = plugin.directory.split('/').last().unwrap_or(&plugin.directory); - - // Show a toast for all plugin failures - let toast = ShowToastRequest { - message: format!("Failed to start plugin '{}': {}", plugin_name, e), - color: Some(Color::Danger), - icon: Some(Icon::AlertTriangle), - timeout: Some(10000), - }; - - if let Err(emit_err) = app_handle.emit("show_toast", toast) { - error!("Failed to emit toast for plugin error: {emit_err:?}"); - } + errors.push((plugin.directory.clone(), e.to_string())); } } - let plugins = self.plugin_handles.lock().await; - let names = plugins.iter().map(|p| p.dir.to_string()).collect::>(); + let plugin_handles = self.plugin_handles.lock().await; + let names = plugin_handles.iter().map(|p| p.dir.to_string()).collect::>(); info!( "Initialized {} plugins in {:?}:\n - {}", - plugins.len(), + plugin_handles.len(), start.elapsed(), names.join("\n - "), ); - Ok(()) + errors } pub async fn subscribe(&self, label: &str) -> (String, mpsc::Receiver) { @@ -478,13 +441,13 @@ impl PluginManager { Ok(events) } - pub async fn get_themes( + pub async fn get_themes( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::GetThemesRequest(GetThemesRequest {}), Duration::from_secs(5), ) @@ -500,13 +463,13 @@ impl PluginManager { Ok(themes) } - pub async fn get_grpc_request_actions( + pub async fn get_grpc_request_actions( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::GetGrpcRequestActionsRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -522,13 +485,13 @@ impl PluginManager { Ok(all_actions) } - pub async fn get_http_request_actions( + pub async fn get_http_request_actions( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::GetHttpRequestActionsRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -544,13 +507,13 @@ impl PluginManager { Ok(all_actions) } - pub async fn get_websocket_request_actions( + pub async fn get_websocket_request_actions( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::GetWebsocketRequestActionsRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -566,13 +529,13 @@ impl PluginManager { Ok(all_actions) } - pub async fn get_workspace_actions( + pub async fn get_workspace_actions( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::GetWorkspaceActionsRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -588,13 +551,13 @@ impl PluginManager { Ok(all_actions) } - pub async fn get_folder_actions( + pub async fn get_folder_actions( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::GetFolderActionsRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -610,15 +573,16 @@ impl PluginManager { Ok(all_actions) } - pub async fn get_template_function_config( + /// Get template function config. + /// Note: Values should be pre-rendered by the caller if needed. + pub async fn get_template_function_config( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, fn_name: &str, - environment_chain: Vec, - values: HashMap, + rendered_values: HashMap, model_id: &str, ) -> Result { - let results = self.get_template_function_summaries(window).await?; + let results = self.get_template_function_summaries(plugin_context).await?; let r = results .iter() .find(|r| r.functions.iter().any(|f| f.name == fn_name)) @@ -640,25 +604,15 @@ impl PluginManager { Some(v) => v, }; - let plugin_context = &PluginContext::new(&window); - let vars = &make_vars_hashmap(environment_chain); - let cb = PluginTemplateCallback::new( - window.app_handle(), - &plugin_context, - RenderPurpose::Preview, - ); - // We don't want to fail for this op because the UI will not be able to list any auth types then - let render_opt = RenderOptions { error_behavior: RenderErrorBehavior::ReturnEmpty }; - let rendered_values = render_json_value_raw(json!(values), vars, &cb, &render_opt).await?; let context_id = format!("{:x}", md5::compute(model_id)); let event = self .send_to_plugin_and_wait( - &PluginContext::new(window), + plugin_context, &plugin, &InternalEventPayload::GetTemplateFunctionConfigRequest( GetTemplateFunctionConfigRequest { - values: serde_json::from_value(rendered_values)?, + values: rendered_values, name: fn_name.to_string(), context_id, }, @@ -676,16 +630,16 @@ impl PluginManager { } } - pub async fn call_http_request_action( + pub async fn call_http_request_action( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, req: CallHttpRequestActionRequest, ) -> Result<()> { let ref_id = req.plugin_ref_id.clone(); let plugin = self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?; let event = plugin.build_event_to_send( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::CallHttpRequestActionRequest(req), None, ); @@ -693,16 +647,16 @@ impl PluginManager { Ok(()) } - pub async fn call_websocket_request_action( + pub async fn call_websocket_request_action( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, req: CallWebsocketRequestActionRequest, ) -> Result<()> { let ref_id = req.plugin_ref_id.clone(); let plugin = self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?; let event = plugin.build_event_to_send( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::CallWebsocketRequestActionRequest(req), None, ); @@ -710,16 +664,16 @@ impl PluginManager { Ok(()) } - pub async fn call_workspace_action( + pub async fn call_workspace_action( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, req: CallWorkspaceActionRequest, ) -> Result<()> { let ref_id = req.plugin_ref_id.clone(); let plugin = self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?; let event = plugin.build_event_to_send( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::CallWorkspaceActionRequest(req), None, ); @@ -727,16 +681,16 @@ impl PluginManager { Ok(()) } - pub async fn call_folder_action( + pub async fn call_folder_action( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, req: CallFolderActionRequest, ) -> Result<()> { let ref_id = req.plugin_ref_id.clone(); let plugin = self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?; let event = plugin.build_event_to_send( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::CallFolderActionRequest(req), None, ); @@ -744,16 +698,16 @@ impl PluginManager { Ok(()) } - pub async fn call_grpc_request_action( + pub async fn call_grpc_request_action( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, req: CallGrpcRequestActionRequest, ) -> Result<()> { let ref_id = req.plugin_ref_id.clone(); let plugin = self.get_plugin_by_ref_id(ref_id.as_str()).await.ok_or(PluginNotFoundErr(ref_id))?; let event = plugin.build_event_to_send( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::CallGrpcRequestActionRequest(req), None, ); @@ -761,14 +715,13 @@ impl PluginManager { Ok(()) } - pub async fn get_http_authentication_summaries( + pub async fn get_http_authentication_summaries( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { - let plugin_context = PluginContext::new(window); let reply_events = self .send_and_wait( - &plugin_context, + plugin_context, &InternalEventPayload::GetHttpAuthenticationSummaryRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -789,12 +742,13 @@ impl PluginManager { Ok(results) } - pub async fn get_http_authentication_config( + /// Get HTTP authentication config. + /// Note: Values should be pre-rendered by the caller if needed. + pub async fn get_http_authentication_config( &self, - window: &WebviewWindow, - environment_chain: Vec, + plugin_context: &PluginContext, auth_name: &str, - values: HashMap, + rendered_values: HashMap, model_id: &str, ) -> Result { if auth_name == "none" { @@ -805,31 +759,19 @@ impl PluginManager { }); } - let results = self.get_http_authentication_summaries(window).await?; + let results = self.get_http_authentication_summaries(plugin_context).await?; let plugin = results .iter() .find_map(|(p, r)| if r.name == auth_name { Some(p) } else { None }) .ok_or(PluginNotFoundErr(auth_name.into()))?; - let vars = &make_vars_hashmap(environment_chain); - let cb = PluginTemplateCallback::new( - window.app_handle(), - &PluginContext::new(&window), - RenderPurpose::Preview, - ); - // We don't want to fail for this op because the UI will not be able to list any auth types then - let render_opt = RenderOptions { error_behavior: RenderErrorBehavior::ReturnEmpty }; - let rendered_values = render_json_value_raw(json!(values), vars, &cb, &render_opt).await?; let context_id = format!("{:x}", md5::compute(model_id)); let event = self .send_to_plugin_and_wait( - &PluginContext::new(window), + plugin_context, &plugin, &InternalEventPayload::GetHttpAuthenticationConfigRequest( - GetHttpAuthenticationConfigRequest { - values: serde_json::from_value(rendered_values)?, - context_id, - }, + GetHttpAuthenticationConfigRequest { values: rendered_values, context_id }, ), Duration::from_secs(5), ) @@ -844,28 +786,17 @@ impl PluginManager { } } - pub async fn call_http_authentication_action( + /// Call HTTP authentication action. + /// Note: Values should be pre-rendered by the caller if needed. + pub async fn call_http_authentication_action( &self, - window: &WebviewWindow, - environment_chain: Vec, + plugin_context: &PluginContext, auth_name: &str, action_index: i32, - values: HashMap, + rendered_values: HashMap, model_id: &str, ) -> Result<()> { - let vars = &make_vars_hashmap(environment_chain); - let rendered_values = render_json_value_raw( - json!(values), - vars, - &PluginTemplateCallback::new( - window.app_handle(), - &PluginContext::new(&window), - RenderPurpose::Preview, - ), - &RenderOptions { error_behavior: RenderErrorBehavior::Throw }, - ) - .await?; - let results = self.get_http_authentication_summaries(window).await?; + let results = self.get_http_authentication_summaries(plugin_context).await?; let plugin = results .iter() .find_map(|(p, r)| if r.name == auth_name { Some(p) } else { None }) @@ -873,16 +804,13 @@ impl PluginManager { let context_id = format!("{:x}", md5::compute(model_id)); self.send_to_plugin_and_wait( - &PluginContext::new(window), + plugin_context, &plugin, &InternalEventPayload::CallHttpAuthenticationActionRequest( CallHttpAuthenticationActionRequest { index: action_index, plugin_ref_id: plugin.clone().ref_id, - args: CallHttpAuthenticationActionArgs { - context_id, - values: serde_json::from_value(rendered_values)?, - }, + args: CallHttpAuthenticationActionArgs { context_id, values: rendered_values }, }, ), Duration::from_secs(300), // 5 minutes for OAuth flows @@ -891,12 +819,11 @@ impl PluginManager { Ok(()) } - pub async fn call_http_authentication( + pub async fn call_http_authentication( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, auth_name: &str, req: CallHttpAuthenticationRequest, - plugin_context: &PluginContext, ) -> Result { let disabled = match req.values.get("disabled") { Some(JsonPrimitive::Boolean(v)) => *v, @@ -912,7 +839,7 @@ impl PluginManager { }); } - let handlers = self.get_http_authentication_summaries(window).await?; + let handlers = self.get_http_authentication_summaries(plugin_context).await?; let (plugin, _) = handlers .iter() .find(|(_, a)| a.name == auth_name) @@ -936,14 +863,13 @@ impl PluginManager { } } - pub async fn get_template_function_summaries( + pub async fn get_template_function_summaries( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, ) -> Result> { - let plugin_context = PluginContext::new(window); let reply_events = self .send_and_wait( - &plugin_context, + plugin_context, &InternalEventPayload::GetTemplateFunctionSummaryRequest(EmptyPayload {}), Duration::from_secs(5), ) @@ -1008,14 +934,14 @@ impl PluginManager { } } - pub async fn import_data( + pub async fn import_data( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, content: &str, ) -> Result { let reply_events = self .send_and_wait( - &PluginContext::new(window), + plugin_context, &InternalEventPayload::ImportRequest(ImportRequest { content: content.to_string(), }), @@ -1035,9 +961,9 @@ impl PluginManager { } } - pub async fn filter_data( + pub async fn filter_data( &self, - window: &WebviewWindow, + plugin_context: &PluginContext, filter: &str, content: &str, content_type: &str, @@ -1056,7 +982,7 @@ impl PluginManager { let event = self .send_to_plugin_and_wait( - &PluginContext::new(window), + plugin_context, &plugin, &InternalEventPayload::FilterRequest(FilterRequest { filter: filter.to_string(), diff --git a/src-tauri/yaak-plugins/src/native_template_functions.rs b/crates/yaak-plugins/src/native_template_functions.rs similarity index 87% rename from src-tauri/yaak-plugins/src/native_template_functions.rs rename to crates/yaak-plugins/src/native_template_functions.rs index be40a3c7..56c97e95 100644 --- a/src-tauri/yaak-plugins/src/native_template_functions.rs +++ b/crates/yaak-plugins/src/native_template_functions.rs @@ -1,17 +1,24 @@ +//! Native template functions implemented in Rust. +//! +//! These are built-in template functions that don't require plugins: +//! - `secure()` - encrypts/decrypts values using the EncryptionManager +//! - `keychain()` / `keyring()` - accesses system keychain + use crate::events::{ Color, FormInput, FormInputBanner, FormInputBase, FormInputMarkdown, FormInputText, PluginContext, RenderPurpose, TemplateFunction, TemplateFunctionArg, TemplateFunctionPreviewType, }; +use crate::manager::PluginManager; use crate::template_callback::PluginTemplateCallback; use base64::Engine; use base64::prelude::BASE64_STANDARD; use keyring::Error::NoEntry; use log::{debug, info}; use std::collections::HashMap; -use tauri::{AppHandle, Runtime}; +use std::sync::Arc; use yaak_common::platform::{OperatingSystem, get_os}; -use yaak_crypto::manager::EncryptionManagerExt; +use yaak_crypto::manager::EncryptionManager; use yaak_templates::error::Error::RenderError; use yaak_templates::error::Result; use yaak_templates::{FnArg, Parser, Token, Tokens, Val, transform_args}; @@ -101,8 +108,8 @@ pub(crate) fn template_function_keyring() -> TemplateFunction { } } -pub fn template_function_secure_run( - app_handle: &AppHandle, +pub fn template_function_secure_run( + encryption_manager: &EncryptionManager, args: HashMap, plugin_context: &PluginContext, ) -> Result { @@ -126,7 +133,7 @@ pub fn template_function_secure_run( }; let value = BASE64_STANDARD.decode(&value).unwrap(); - let r = match app_handle.crypto().decrypt(&wid, value.as_slice()) { + let r = match encryption_manager.decrypt(&wid, value.as_slice()) { Ok(r) => Ok(r), Err(e) => Err(RenderError(e.to_string())), }?; @@ -137,8 +144,8 @@ pub fn template_function_secure_run( } } -pub fn template_function_secure_transform_arg( - app_handle: &AppHandle, +pub fn template_function_secure_transform_arg( + encryption_manager: &EncryptionManager, plugin_context: &PluginContext, arg_name: &str, arg_value: &str, @@ -158,8 +165,7 @@ pub fn template_function_secure_transform_arg( return Ok(arg_value.to_string()); } - let r = app_handle - .crypto() + let r = encryption_manager .encrypt(&wid, arg_value.as_bytes()) .map_err(|e| RenderError(e.to_string()))?; let r = BASE64_STANDARD.encode(r); @@ -169,8 +175,8 @@ pub fn template_function_secure_transform_arg( } } -pub fn decrypt_secure_template_function( - app_handle: &AppHandle, +pub fn decrypt_secure_template_function( + encryption_manager: &EncryptionManager, plugin_context: &PluginContext, template: &str, ) -> Result { @@ -190,7 +196,7 @@ pub fn decrypt_secure_template_function( } } new_tokens.push(Token::Raw { - text: template_function_secure_run(app_handle, args_map, plugin_context)?, + text: template_function_secure_run(encryption_manager, args_map, plugin_context)?, }); } t => { @@ -204,12 +210,13 @@ pub fn decrypt_secure_template_function( Ok(parsed.to_string()) } -pub fn encrypt_secure_template_function( - app_handle: &AppHandle, +pub fn encrypt_secure_template_function( + plugin_manager: Arc, + encryption_manager: Arc, plugin_context: &PluginContext, template: &str, ) -> Result { - let decrypted = decrypt_secure_template_function(&app_handle, plugin_context, template)?; + let decrypted = decrypt_secure_template_function(&encryption_manager, plugin_context, template)?; let tokens = Tokens { tokens: vec![Token::Tag { val: Val::Fn { @@ -224,7 +231,7 @@ pub fn encrypt_secure_template_function( Ok(transform_args( tokens, - &PluginTemplateCallback::new(app_handle, plugin_context, RenderPurpose::Preview), + &PluginTemplateCallback::new(plugin_manager, encryption_manager, plugin_context, RenderPurpose::Preview), )? .to_string()) } diff --git a/crates/yaak-plugins/src/nodejs.rs b/crates/yaak-plugins/src/nodejs.rs new file mode 100644 index 00000000..58bf7ecd --- /dev/null +++ b/crates/yaak-plugins/src/nodejs.rs @@ -0,0 +1,77 @@ +use crate::error::Result; +use log::{info, warn}; +use std::net::SocketAddr; +use std::path::Path; +use std::process::Stdio; +use tokio::io::{AsyncBufReadExt, BufReader}; +use tokio::process::Command; +use tokio::sync::watch::Receiver; + +/// Start the Node.js plugin runtime process. +/// +/// # Arguments +/// * `node_bin_path` - Path to the yaaknode binary +/// * `plugin_runtime_main` - Path to the plugin runtime index.cjs +/// * `addr` - Socket address for the plugin runtime to connect to +/// * `kill_rx` - Channel to signal shutdown +pub async fn start_nodejs_plugin_runtime( + node_bin_path: &Path, + plugin_runtime_main: &Path, + addr: SocketAddr, + kill_rx: &Receiver, +) -> Result<()> { + // HACK: Remove UNC prefix for Windows paths to pass to sidecar + let plugin_runtime_main_str = + dunce::simplified(plugin_runtime_main).to_string_lossy().to_string(); + + info!( + "Starting plugin runtime node={} main={}", + node_bin_path.display(), + plugin_runtime_main_str + ); + + let mut child = Command::new(node_bin_path) + .env("HOST", addr.ip().to_string()) + .env("PORT", addr.port().to_string()) + .arg(&plugin_runtime_main_str) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) + .spawn()?; + + info!("Spawned plugin runtime"); + + // Stream stdout + if let Some(stdout) = child.stdout.take() { + tokio::spawn(async move { + let reader = BufReader::new(stdout); + let mut lines = reader.lines(); + while let Ok(Some(line)) = lines.next_line().await { + info!("{}", line); + } + }); + } + + // Stream stderr + if let Some(stderr) = child.stderr.take() { + tokio::spawn(async move { + let reader = BufReader::new(stderr); + let mut lines = reader.lines(); + while let Ok(Some(line)) = lines.next_line().await { + warn!("{}", line); + } + }); + } + + // Handle kill signal + let mut kill_rx = kill_rx.clone(); + tokio::spawn(async move { + kill_rx.wait_for(|b| *b == true).await.expect("Kill channel errored"); + info!("Killing plugin runtime"); + if let Err(e) = child.kill().await { + warn!("Failed to kill plugin runtime: {e}"); + } + info!("Killed plugin runtime"); + }); + + Ok(()) +} diff --git a/src-tauri/yaak-plugins/src/plugin_handle.rs b/crates/yaak-plugins/src/plugin_handle.rs similarity index 100% rename from src-tauri/yaak-plugins/src/plugin_handle.rs rename to crates/yaak-plugins/src/plugin_handle.rs diff --git a/src-tauri/yaak-plugins/src/plugin_meta.rs b/crates/yaak-plugins/src/plugin_meta.rs similarity index 96% rename from src-tauri/yaak-plugins/src/plugin_meta.rs rename to crates/yaak-plugins/src/plugin_meta.rs index 5dd2549e..13cd3b2f 100644 --- a/src-tauri/yaak-plugins/src/plugin_meta.rs +++ b/crates/yaak-plugins/src/plugin_meta.rs @@ -16,7 +16,7 @@ pub struct PluginMetadata { pub repository_url: Option, } -pub(crate) fn get_plugin_meta(plugin_dir: &Path) -> Result { +pub fn get_plugin_meta(plugin_dir: &Path) -> Result { let package_json = fs::File::open(plugin_dir.join("package.json"))?; let package_json: PackageJson = serde_json::from_reader(package_json)?; diff --git a/src-tauri/yaak-plugins/src/server_ws.rs b/crates/yaak-plugins/src/server_ws.rs similarity index 99% rename from src-tauri/yaak-plugins/src/server_ws.rs rename to crates/yaak-plugins/src/server_ws.rs index 0d28eddf..141053a7 100644 --- a/src-tauri/yaak-plugins/src/server_ws.rs +++ b/crates/yaak-plugins/src/server_ws.rs @@ -54,7 +54,7 @@ impl PluginRuntimeServerWebsocket { let (mut ws_sender, mut ws_receiver) = ws_stream.split(); - tauri::async_runtime::spawn(async move { + tokio::spawn(async move { client_connect_tx.send(true).expect("Failed to send client ready event"); info!("New plugin runtime websocket connection: {}", addr); diff --git a/src-tauri/yaak-plugins/src/template_callback.rs b/crates/yaak-plugins/src/template_callback.rs similarity index 70% rename from src-tauri/yaak-plugins/src/template_callback.rs rename to crates/yaak-plugins/src/template_callback.rs index 15016222..1c6ff7d1 100644 --- a/src-tauri/yaak-plugins/src/template_callback.rs +++ b/crates/yaak-plugins/src/template_callback.rs @@ -1,3 +1,8 @@ +//! Plugin template callback implementation. +//! +//! This provides a TemplateCallback implementation that delegates to plugins +//! for template function execution. + use crate::events::{JsonPrimitive, PluginContext, RenderPurpose}; use crate::manager::PluginManager; use crate::native_template_functions::{ @@ -5,39 +10,43 @@ use crate::native_template_functions::{ template_function_secure_transform_arg, }; use std::collections::HashMap; -use tauri::{AppHandle, Manager, Runtime}; +use std::sync::Arc; +use yaak_crypto::manager::EncryptionManager; use yaak_templates::TemplateCallback; use yaak_templates::error::Result; #[derive(Clone)] -pub struct PluginTemplateCallback { - app_handle: AppHandle, +pub struct PluginTemplateCallback { + plugin_manager: Arc, + encryption_manager: Arc, render_purpose: RenderPurpose, plugin_context: PluginContext, } -impl PluginTemplateCallback { +impl PluginTemplateCallback { pub fn new( - app_handle: &AppHandle, + plugin_manager: Arc, + encryption_manager: Arc, plugin_context: &PluginContext, render_purpose: RenderPurpose, - ) -> PluginTemplateCallback { + ) -> PluginTemplateCallback { PluginTemplateCallback { + plugin_manager, + encryption_manager, render_purpose, - app_handle: app_handle.to_owned(), plugin_context: plugin_context.to_owned(), } } } -impl TemplateCallback for PluginTemplateCallback { +impl TemplateCallback for PluginTemplateCallback { async fn run(&self, fn_name: &str, args: HashMap) -> Result { // The beta named the function `Response` but was changed in stable. // Keep this here for a while because there's no easy way to migrate let fn_name = if fn_name == "Response" { "response" } else { fn_name }; if fn_name == "secure" { - return template_function_secure_run(&self.app_handle, args, &self.plugin_context); + return template_function_secure_run(&self.encryption_manager, args, &self.plugin_context); } else if fn_name == "keychain" || fn_name == "keyring" { return template_function_keychain_run(args); } @@ -47,8 +56,7 @@ impl TemplateCallback for PluginTemplateCallback { primitive_args.insert(key, JsonPrimitive::from(value)); } - let plugin_manager = &*self.app_handle.state::(); - let resp = plugin_manager + let resp = self.plugin_manager .call_template_function( &self.plugin_context, fn_name, @@ -62,7 +70,7 @@ impl TemplateCallback for PluginTemplateCallback { fn transform_arg(&self, fn_name: &str, arg_name: &str, arg_value: &str) -> Result { if fn_name == "secure" { return template_function_secure_transform_arg( - &self.app_handle, + &self.encryption_manager, &self.plugin_context, arg_name, arg_value, diff --git a/src-tauri/yaak-plugins/src/util.rs b/crates/yaak-plugins/src/util.rs similarity index 100% rename from src-tauri/yaak-plugins/src/util.rs rename to crates/yaak-plugins/src/util.rs diff --git a/src-tauri/yaak-sse/Cargo.toml b/crates/yaak-sse/Cargo.toml similarity index 100% rename from src-tauri/yaak-sse/Cargo.toml rename to crates/yaak-sse/Cargo.toml diff --git a/src-tauri/yaak-sse/bindings/sse.ts b/crates/yaak-sse/bindings/sse.ts similarity index 100% rename from src-tauri/yaak-sse/bindings/sse.ts rename to crates/yaak-sse/bindings/sse.ts diff --git a/src-tauri/yaak-sse/index.ts b/crates/yaak-sse/index.ts similarity index 100% rename from src-tauri/yaak-sse/index.ts rename to crates/yaak-sse/index.ts diff --git a/src-tauri/yaak-sse/package.json b/crates/yaak-sse/package.json similarity index 100% rename from src-tauri/yaak-sse/package.json rename to crates/yaak-sse/package.json diff --git a/src-tauri/yaak-sse/src/lib.rs b/crates/yaak-sse/src/lib.rs similarity index 100% rename from src-tauri/yaak-sse/src/lib.rs rename to crates/yaak-sse/src/lib.rs diff --git a/src-tauri/yaak-sse/src/sse.rs b/crates/yaak-sse/src/sse.rs similarity index 100% rename from src-tauri/yaak-sse/src/sse.rs rename to crates/yaak-sse/src/sse.rs diff --git a/src-tauri/yaak-sync/Cargo.toml b/crates/yaak-sync/Cargo.toml similarity index 72% rename from src-tauri/yaak-sync/Cargo.toml rename to crates/yaak-sync/Cargo.toml index 91875803..cd4f7f9d 100644 --- a/src-tauri/yaak-sync/Cargo.toml +++ b/crates/yaak-sync/Cargo.toml @@ -1,6 +1,5 @@ [package] name = "yaak-sync" -links = "yaak-sync" version = "0.1.0" edition = "2024" publish = false @@ -14,12 +13,8 @@ serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } serde_yaml = "0.9.34" sha1 = "0.10.6" -tauri = { workspace = true } thiserror = { workspace = true } -tokio = { workspace = true, features = ["fs", "sync", "macros"] } +tokio = { workspace = true, features = ["fs", "sync", "macros", "rt"] } ts-rs = { workspace = true, features = ["chrono-impl", "serde-json-impl"] } yaak-models = { workspace = true } serde_path_to_error = "0.1.20" - -[build-dependencies] -tauri-plugin = { workspace = true, features = ["build"] } diff --git a/src-tauri/yaak-sync/bindings/gen_models.ts b/crates/yaak-sync/bindings/gen_models.ts similarity index 100% rename from src-tauri/yaak-sync/bindings/gen_models.ts rename to crates/yaak-sync/bindings/gen_models.ts diff --git a/src-tauri/yaak-sync/bindings/gen_sync.ts b/crates/yaak-sync/bindings/gen_sync.ts similarity index 100% rename from src-tauri/yaak-sync/bindings/gen_sync.ts rename to crates/yaak-sync/bindings/gen_sync.ts diff --git a/src-tauri/yaak-sync/bindings/gen_watch.ts b/crates/yaak-sync/bindings/gen_watch.ts similarity index 76% rename from src-tauri/yaak-sync/bindings/gen_watch.ts rename to crates/yaak-sync/bindings/gen_watch.ts index a3462e0a..be7ddecf 100644 --- a/src-tauri/yaak-sync/bindings/gen_watch.ts +++ b/crates/yaak-sync/bindings/gen_watch.ts @@ -1,5 +1,3 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. export type WatchEvent = { paths: Array, kind: string, }; - -export type WatchResult = { unlistenEvent: string, }; diff --git a/src-tauri/yaak-sync/bindings/git.ts b/crates/yaak-sync/bindings/git.ts similarity index 100% rename from src-tauri/yaak-sync/bindings/git.ts rename to crates/yaak-sync/bindings/git.ts diff --git a/src-tauri/yaak-sync/index.ts b/crates/yaak-sync/index.ts similarity index 85% rename from src-tauri/yaak-sync/index.ts rename to crates/yaak-sync/index.ts index 3d5bd4a6..38f9e30e 100644 --- a/src-tauri/yaak-sync/index.ts +++ b/crates/yaak-sync/index.ts @@ -1,23 +1,24 @@ import { Channel, invoke } from '@tauri-apps/api/core'; import { emit } from '@tauri-apps/api/event'; +import type { WatchResult } from '@yaakapp-internal/tauri'; import { SyncOp } from './bindings/gen_sync'; -import { WatchEvent, WatchResult } from './bindings/gen_watch'; +import { WatchEvent } from './bindings/gen_watch'; export * from './bindings/gen_models'; export async function calculateSync(workspaceId: string, syncDir: string) { - return invoke('plugin:yaak-sync|calculate', { + return invoke('cmd_sync_calculate', { workspaceId, syncDir, }); } export async function calculateSyncFsOnly(dir: string) { - return invoke('plugin:yaak-sync|calculate_fs', { dir }); + return invoke('cmd_sync_calculate_fs', { dir }); } export async function applySync(workspaceId: string, syncDir: string, syncOps: SyncOp[]) { - return invoke('plugin:yaak-sync|apply', { + return invoke('cmd_sync_apply', { workspaceId, syncDir, syncOps: syncOps, @@ -32,7 +33,7 @@ export function watchWorkspaceFiles( console.log('Watching workspace files', workspaceId, syncDir); const channel = new Channel(); channel.onmessage = callback; - const unlistenPromise = invoke('plugin:yaak-sync|watch', { + const unlistenPromise = invoke('cmd_sync_watch', { workspaceId, syncDir, channel, diff --git a/src-tauri/yaak-sync/package.json b/crates/yaak-sync/package.json similarity index 100% rename from src-tauri/yaak-sync/package.json rename to crates/yaak-sync/package.json diff --git a/src-tauri/yaak-sync/src/error.rs b/crates/yaak-sync/src/error.rs similarity index 100% rename from src-tauri/yaak-sync/src/error.rs rename to crates/yaak-sync/src/error.rs diff --git a/crates/yaak-sync/src/lib.rs b/crates/yaak-sync/src/lib.rs new file mode 100644 index 00000000..3c91736b --- /dev/null +++ b/crates/yaak-sync/src/lib.rs @@ -0,0 +1,4 @@ +pub mod error; +pub mod models; +pub mod sync; +pub mod watch; diff --git a/src-tauri/yaak-sync/src/models.rs b/crates/yaak-sync/src/models.rs similarity index 100% rename from src-tauri/yaak-sync/src/models.rs rename to crates/yaak-sync/src/models.rs diff --git a/src-tauri/yaak-sync/src/sync.rs b/crates/yaak-sync/src/sync.rs similarity index 87% rename from src-tauri/yaak-sync/src/sync.rs rename to crates/yaak-sync/src/sync.rs index 8679617a..566dad72 100644 --- a/src-tauri/yaak-sync/src/sync.rs +++ b/crates/yaak-sync/src/sync.rs @@ -9,16 +9,15 @@ use std::fs; use std::fs::File; use std::io::Write; use std::path::{Path, PathBuf}; -use tauri::{AppHandle, Runtime}; use ts_rs::TS; +use yaak_models::db_context::DbContext; use yaak_models::models::{SyncState, WorkspaceMeta}; -use yaak_models::query_manager::QueryManagerExt; use yaak_models::util::{UpdateSource, get_workspace_export_resources}; #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase", tag = "type")] #[ts(export, export_to = "gen_sync.ts")] -pub(crate) enum SyncOp { +pub enum SyncOp { FsCreate { model: SyncModel, }, @@ -79,7 +78,7 @@ impl Display for SyncOp { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "snake_case")] -pub(crate) enum DbCandidate { +pub enum DbCandidate { Added(SyncModel), Deleted(SyncState), Modified(SyncModel, SyncState), @@ -100,21 +99,21 @@ impl DbCandidate { #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase", tag = "type")] #[ts(export, export_to = "gen_sync.ts")] -pub(crate) struct FsCandidate { - pub(crate) model: SyncModel, - pub(crate) rel_path: PathBuf, - pub(crate) checksum: String, +pub struct FsCandidate { + pub model: SyncModel, + pub rel_path: PathBuf, + pub checksum: String, } -pub(crate) fn get_db_candidates( - app_handle: &AppHandle, +pub fn get_db_candidates( + db: &DbContext, + version: &str, workspace_id: &str, sync_dir: &Path, ) -> Result> { let models: HashMap<_, _> = - workspace_models(app_handle, workspace_id)?.into_iter().map(|m| (m.id(), m)).collect(); - let sync_states: HashMap<_, _> = app_handle - .db() + workspace_models(db, version, workspace_id)?.into_iter().map(|m| (m.id(), m)).collect(); + let sync_states: HashMap<_, _> = db .list_sync_states_for_workspace(workspace_id, sync_dir)? .into_iter() .map(|s| (s.model_id.clone(), s)) @@ -175,7 +174,7 @@ pub(crate) fn get_db_candidates( Ok(candidates) } -pub(crate) fn get_fs_candidates(dir: &Path) -> Result> { +pub fn get_fs_candidates(dir: &Path) -> Result> { // Ensure the root directory exists fs::create_dir_all(dir)?; @@ -208,7 +207,7 @@ pub(crate) fn get_fs_candidates(dir: &Path) -> Result> { Ok(candidates) } -pub(crate) fn compute_sync_ops( +pub fn compute_sync_ops( db_candidates: Vec, fs_candidates: Vec, ) -> Vec { @@ -297,15 +296,17 @@ pub(crate) fn compute_sync_ops( .collect() } -fn workspace_models( - app_handle: &AppHandle, +fn workspace_models( + db: &DbContext, + version: &str, workspace_id: &str, ) -> Result> { // We want to include private environments here so that we can take them into account during // the sync process. Otherwise, they would be treated as deleted. let include_private_environments = true; let resources = get_workspace_export_resources( - app_handle, + db, + version, vec![workspace_id], include_private_environments, )? @@ -338,8 +339,10 @@ fn workspace_models( Ok(sync_models) } -pub(crate) fn apply_sync_ops( - app_handle: &AppHandle, +/// Apply sync operations to the filesystem and database. +/// Returns a list of SyncStateOps that should be applied afterward. +pub fn apply_sync_ops( + db: &DbContext, workspace_id: &str, sync_dir: &Path, sync_ops: Vec, @@ -436,59 +439,56 @@ pub(crate) fn apply_sync_ops( } } SyncOp::DbDelete { model, state } => { - delete_model(app_handle, &model)?; + delete_model(db, &model)?; SyncStateOp::Delete { state: state.to_owned() } } SyncOp::IgnorePrivate { .. } => SyncStateOp::NoOp, }); } - app_handle.with_tx(|tx| { - let upserted_models = tx.batch_upsert( - workspaces_to_upsert, - environments_to_upsert, - folders_to_upsert, - http_requests_to_upsert, - grpc_requests_to_upsert, - websocket_requests_to_upsert, - &UpdateSource::Sync, - )?; + let upserted_models = db.batch_upsert( + workspaces_to_upsert, + environments_to_upsert, + folders_to_upsert, + http_requests_to_upsert, + grpc_requests_to_upsert, + websocket_requests_to_upsert, + &UpdateSource::Sync, + )?; - // Ensure we create WorkspaceMeta models for each new workspace, with the appropriate sync dir - let sync_dir_string = sync_dir.to_string_lossy().to_string(); - for workspace in upserted_models.workspaces { - match tx.get_workspace_meta(&workspace.id) { - Some(m) => { - if m.setting_sync_dir == Some(sync_dir_string.clone()) { - // We don't need to update if unchanged - continue; - } - tx.upsert_workspace_meta( - &WorkspaceMeta { - setting_sync_dir: Some(sync_dir.to_string_lossy().to_string()), - ..m - }, - &UpdateSource::Sync, - ) + // Ensure we create WorkspaceMeta models for each new workspace, with the appropriate sync dir + let sync_dir_string = sync_dir.to_string_lossy().to_string(); + for workspace in upserted_models.workspaces { + match db.get_workspace_meta(&workspace.id) { + Some(m) => { + if m.setting_sync_dir == Some(sync_dir_string.clone()) { + // We don't need to update if unchanged + continue; } - None => tx.upsert_workspace_meta( + db.upsert_workspace_meta( &WorkspaceMeta { - workspace_id: workspace_id.to_string(), setting_sync_dir: Some(sync_dir.to_string_lossy().to_string()), - ..Default::default() + ..m }, &UpdateSource::Sync, - ), - }?; - } - Ok(()) - })?; + ) + } + None => db.upsert_workspace_meta( + &WorkspaceMeta { + workspace_id: workspace_id.to_string(), + setting_sync_dir: Some(sync_dir.to_string_lossy().to_string()), + ..Default::default() + }, + &UpdateSource::Sync, + ), + }?; + } Ok(sync_state_ops) } #[derive(Debug)] -pub(crate) enum SyncStateOp { +pub enum SyncStateOp { Create { model_id: String, checksum: String, @@ -505,8 +505,8 @@ pub(crate) enum SyncStateOp { NoOp, } -pub(crate) fn apply_sync_state_ops( - app_handle: &AppHandle, +pub fn apply_sync_state_ops( + db: &DbContext, workspace_id: &str, sync_dir: &Path, ops: Vec, @@ -523,7 +523,7 @@ pub(crate) fn apply_sync_state_ops( flushed_at: Utc::now().naive_utc(), ..Default::default() }; - app_handle.db().upsert_sync_state(&sync_state)?; + db.upsert_sync_state(&sync_state)?; } SyncStateOp::Update { state: sync_state, checksum, rel_path } => { let sync_state = SyncState { @@ -533,10 +533,10 @@ pub(crate) fn apply_sync_state_ops( flushed_at: Utc::now().naive_utc(), ..sync_state }; - app_handle.db().upsert_sync_state(&sync_state)?; + db.upsert_sync_state(&sync_state)?; } SyncStateOp::Delete { state } => { - app_handle.db().delete_sync_state(&state)?; + db.delete_sync_state(&state)?; } SyncStateOp::NoOp => { // Nothing @@ -551,8 +551,7 @@ fn derive_model_filename(m: &SyncModel) -> PathBuf { Path::new(&rel).to_path_buf() } -fn delete_model(app_handle: &AppHandle, model: &SyncModel) -> Result<()> { - let db = app_handle.db(); +fn delete_model(db: &DbContext, model: &SyncModel) -> Result<()> { match model { SyncModel::Workspace(m) => { db.delete_workspace(&m, &UpdateSource::Sync)?; diff --git a/src-tauri/yaak-sync/src/watch.rs b/crates/yaak-sync/src/watch.rs similarity index 79% rename from src-tauri/yaak-sync/src/watch.rs rename to crates/yaak-sync/src/watch.rs index e155bc4b..5f87da70 100644 --- a/src-tauri/yaak-sync/src/watch.rs +++ b/crates/yaak-sync/src/watch.rs @@ -4,23 +4,29 @@ use notify::Watcher; use serde::{Deserialize, Serialize}; use std::path::{Path, PathBuf}; use std::sync::mpsc; -use tauri::ipc::Channel; use tokio::select; use ts_rs::TS; #[derive(Debug, Clone, Serialize, Deserialize, TS)] #[serde(rename_all = "camelCase")] #[ts(export, export_to = "gen_watch.ts")] -pub(crate) struct WatchEvent { - paths: Vec, - kind: String, +pub struct WatchEvent { + pub paths: Vec, + pub kind: String, } -pub(crate) async fn watch_directory( +/// Watch a directory for changes and send events through a callback. +/// +/// The callback is invoked for each watch event. The function returns when +/// the cancel receiver receives a signal. +pub async fn watch_directory( dir: &Path, - channel: Channel, + callback: F, mut cancel_rx: tokio::sync::watch::Receiver<()>, -) -> Result<()> { +) -> Result<()> +where + F: Fn(WatchEvent) + Send + 'static, +{ let dir = dir.to_owned(); let (tx, rx) = mpsc::channel::>(); let mut watcher = notify::recommended_watcher(tx)?; @@ -35,7 +41,7 @@ pub(crate) async fn watch_directory( } }); - tauri::async_runtime::spawn(async move { + tokio::spawn(async move { watcher.watch(&dir, notify::RecursiveMode::Recursive).expect("Failed to watch directory"); info!("Watching directory {:?}", dir); @@ -55,12 +61,10 @@ pub(crate) async fn watch_directory( continue; } - channel - .send(WatchEvent { - paths, - kind: format!("{:?}", event.kind), - }) - .expect("Failed to send watch event"); + callback(WatchEvent { + paths, + kind: format!("{:?}", event.kind), + }); } Err(e) => error!("Directory watch error: {:?}", e), } diff --git a/src-tauri/yaak-templates/Cargo.toml b/crates/yaak-templates/Cargo.toml similarity index 100% rename from src-tauri/yaak-templates/Cargo.toml rename to crates/yaak-templates/Cargo.toml diff --git a/src-tauri/yaak-templates/bindings/parser.ts b/crates/yaak-templates/bindings/parser.ts similarity index 100% rename from src-tauri/yaak-templates/bindings/parser.ts rename to crates/yaak-templates/bindings/parser.ts diff --git a/src-tauri/yaak-templates/index.ts b/crates/yaak-templates/index.ts similarity index 100% rename from src-tauri/yaak-templates/index.ts rename to crates/yaak-templates/index.ts diff --git a/src-tauri/yaak-templates/package.json b/crates/yaak-templates/package.json similarity index 100% rename from src-tauri/yaak-templates/package.json rename to crates/yaak-templates/package.json diff --git a/src-tauri/yaak-templates/pkg/package.json b/crates/yaak-templates/pkg/package.json similarity index 100% rename from src-tauri/yaak-templates/pkg/package.json rename to crates/yaak-templates/pkg/package.json diff --git a/src-tauri/yaak-templates/pkg/yaak_templates.d.ts b/crates/yaak-templates/pkg/yaak_templates.d.ts similarity index 100% rename from src-tauri/yaak-templates/pkg/yaak_templates.d.ts rename to crates/yaak-templates/pkg/yaak_templates.d.ts index c881c571..aed6c395 100644 --- a/src-tauri/yaak-templates/pkg/yaak_templates.d.ts +++ b/crates/yaak-templates/pkg/yaak_templates.d.ts @@ -1,5 +1,5 @@ /* tslint:disable */ /* eslint-disable */ +export function unescape_template(template: string): any; export function parse_template(template: string): any; export function escape_template(template: string): any; -export function unescape_template(template: string): any; diff --git a/src-tauri/yaak-templates/pkg/yaak_templates.js b/crates/yaak-templates/pkg/yaak_templates.js similarity index 100% rename from src-tauri/yaak-templates/pkg/yaak_templates.js rename to crates/yaak-templates/pkg/yaak_templates.js diff --git a/src-tauri/yaak-templates/pkg/yaak_templates_bg.js b/crates/yaak-templates/pkg/yaak_templates_bg.js similarity index 100% rename from src-tauri/yaak-templates/pkg/yaak_templates_bg.js rename to crates/yaak-templates/pkg/yaak_templates_bg.js index 75a38648..e7e87861 100644 --- a/src-tauri/yaak-templates/pkg/yaak_templates_bg.js +++ b/crates/yaak-templates/pkg/yaak_templates_bg.js @@ -161,6 +161,20 @@ function takeFromExternrefTable0(idx) { wasm.__externref_table_dealloc(idx); return value; } +/** + * @param {string} template + * @returns {any} + */ +export function unescape_template(template) { + const ptr0 = passStringToWasm0(template, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.unescape_template(ptr0, len0); + if (ret[2]) { + throw takeFromExternrefTable0(ret[1]); + } + return takeFromExternrefTable0(ret[0]); +} + /** * @param {string} template * @returns {any} @@ -189,20 +203,6 @@ export function escape_template(template) { return takeFromExternrefTable0(ret[0]); } -/** - * @param {string} template - * @returns {any} - */ -export function unescape_template(template) { - const ptr0 = passStringToWasm0(template, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); - const len0 = WASM_VECTOR_LEN; - const ret = wasm.unescape_template(ptr0, len0); - if (ret[2]) { - throw takeFromExternrefTable0(ret[1]); - } - return takeFromExternrefTable0(ret[0]); -} - export function __wbg_new_405e22f390576ce2() { const ret = new Object(); return ret; diff --git a/src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm b/crates/yaak-templates/pkg/yaak_templates_bg.wasm similarity index 69% rename from src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm rename to crates/yaak-templates/pkg/yaak_templates_bg.wasm index bc426c25..4d8b65b8 100644 Binary files a/src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm and b/crates/yaak-templates/pkg/yaak_templates_bg.wasm differ diff --git a/src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm.d.ts b/crates/yaak-templates/pkg/yaak_templates_bg.wasm.d.ts similarity index 100% rename from src-tauri/yaak-templates/pkg/yaak_templates_bg.wasm.d.ts rename to crates/yaak-templates/pkg/yaak_templates_bg.wasm.d.ts diff --git a/src-tauri/yaak-templates/src/error.rs b/crates/yaak-templates/src/error.rs similarity index 100% rename from src-tauri/yaak-templates/src/error.rs rename to crates/yaak-templates/src/error.rs diff --git a/src-tauri/yaak-templates/src/escape.rs b/crates/yaak-templates/src/escape.rs similarity index 100% rename from src-tauri/yaak-templates/src/escape.rs rename to crates/yaak-templates/src/escape.rs diff --git a/src-tauri/yaak-templates/src/format_json.rs b/crates/yaak-templates/src/format_json.rs similarity index 100% rename from src-tauri/yaak-templates/src/format_json.rs rename to crates/yaak-templates/src/format_json.rs diff --git a/src-tauri/yaak-templates/src/lib.rs b/crates/yaak-templates/src/lib.rs similarity index 100% rename from src-tauri/yaak-templates/src/lib.rs rename to crates/yaak-templates/src/lib.rs diff --git a/src-tauri/yaak-templates/src/parser.rs b/crates/yaak-templates/src/parser.rs similarity index 100% rename from src-tauri/yaak-templates/src/parser.rs rename to crates/yaak-templates/src/parser.rs diff --git a/src-tauri/yaak-templates/src/renderer.rs b/crates/yaak-templates/src/renderer.rs similarity index 100% rename from src-tauri/yaak-templates/src/renderer.rs rename to crates/yaak-templates/src/renderer.rs diff --git a/src-tauri/yaak-templates/src/wasm.rs b/crates/yaak-templates/src/wasm.rs similarity index 100% rename from src-tauri/yaak-templates/src/wasm.rs rename to crates/yaak-templates/src/wasm.rs diff --git a/src-tauri/yaak-tls/Cargo.toml b/crates/yaak-tls/Cargo.toml similarity index 100% rename from src-tauri/yaak-tls/Cargo.toml rename to crates/yaak-tls/Cargo.toml diff --git a/src-tauri/yaak-tls/src/error.rs b/crates/yaak-tls/src/error.rs similarity index 100% rename from src-tauri/yaak-tls/src/error.rs rename to crates/yaak-tls/src/error.rs diff --git a/src-tauri/yaak-tls/src/lib.rs b/crates/yaak-tls/src/lib.rs similarity index 100% rename from src-tauri/yaak-tls/src/lib.rs rename to crates/yaak-tls/src/lib.rs diff --git a/src-tauri/yaak-ws/Cargo.toml b/crates/yaak-ws/Cargo.toml similarity index 78% rename from src-tauri/yaak-ws/Cargo.toml rename to crates/yaak-ws/Cargo.toml index ddb1b219..ee15c3ac 100644 --- a/src-tauri/yaak-ws/Cargo.toml +++ b/crates/yaak-ws/Cargo.toml @@ -1,26 +1,21 @@ [package] name = "yaak-ws" -links = "yaak-ws" version = "0.1.0" edition = "2024" publish = false [dependencies] futures-util = "0.3.31" +http = "1" log = { workspace = true } md5 = "0.8.0" serde = { workspace = true, features = ["derive"] } url = "2" serde_json = { workspace = true } -tauri = { workspace = true } thiserror = { workspace = true } -tokio = { workspace = true, features = ["macros", "time", "test-util"] } +tokio = { workspace = true, features = ["macros", "time", "test-util", "rt"] } tokio-tungstenite = { version = "0.26.2", default-features = false, features = ["rustls-tls-native-roots", "connect"] } yaak-http = { workspace = true } yaak-tls = { workspace = true } yaak-models = { workspace = true } -yaak-plugins = { workspace = true } yaak-templates = { workspace = true } - -[build-dependencies] -tauri-plugin = { workspace = true, features = ["build"] } diff --git a/src-tauri/yaak-ws/index.ts b/crates/yaak-ws/index.ts similarity index 69% rename from src-tauri/yaak-ws/index.ts rename to crates/yaak-ws/index.ts index f9ca268d..2fec9546 100644 --- a/src-tauri/yaak-ws/index.ts +++ b/crates/yaak-ws/index.ts @@ -4,45 +4,45 @@ import { WebsocketConnection, WebsocketEvent, WebsocketRequest } from '@yaakapp- export function upsertWebsocketRequest( request: WebsocketRequest | Partial>, ) { - return invoke('plugin:yaak-ws|upsert_request', { + return invoke('cmd_ws_upsert_request', { request, }) as Promise; } export function duplicateWebsocketRequest(requestId: string) { - return invoke('plugin:yaak-ws|duplicate_request', { + return invoke('cmd_ws_duplicate_request', { requestId, }) as Promise; } export function deleteWebsocketRequest(requestId: string) { - return invoke('plugin:yaak-ws|delete_request', { + return invoke('cmd_ws_delete_request', { requestId, }); } export function deleteWebsocketConnection(connectionId: string) { - return invoke('plugin:yaak-ws|delete_connection', { + return invoke('cmd_ws_delete_connection', { connectionId, }); } export function deleteWebsocketConnections(requestId: string) { - return invoke('plugin:yaak-ws|delete_connections', { + return invoke('cmd_ws_delete_connections', { requestId, }); } export function listWebsocketRequests({ workspaceId }: { workspaceId: string }) { - return invoke('plugin:yaak-ws|list_requests', { workspaceId }) as Promise; + return invoke('cmd_ws_list_requests', { workspaceId }) as Promise; } export function listWebsocketEvents({ connectionId }: { connectionId: string }) { - return invoke('plugin:yaak-ws|list_events', { connectionId }) as Promise; + return invoke('cmd_ws_list_events', { connectionId }) as Promise; } export function listWebsocketConnections({ workspaceId }: { workspaceId: string }) { - return invoke('plugin:yaak-ws|list_connections', { workspaceId }) as Promise< + return invoke('cmd_ws_list_connections', { workspaceId }) as Promise< WebsocketConnection[] >; } @@ -56,7 +56,7 @@ export function connectWebsocket({ environmentId: string | null; cookieJarId: string | null; }) { - return invoke('plugin:yaak-ws|connect', { + return invoke('cmd_ws_connect', { requestId, environmentId, cookieJarId, @@ -64,7 +64,7 @@ export function connectWebsocket({ } export function closeWebsocket({ connectionId }: { connectionId: string }) { - return invoke('plugin:yaak-ws|close', { + return invoke('cmd_ws_close', { connectionId, }); } @@ -76,7 +76,7 @@ export function sendWebsocket({ connectionId: string; environmentId: string | null; }) { - return invoke('plugin:yaak-ws|send', { + return invoke('cmd_ws_send', { connectionId, environmentId, }); diff --git a/src-tauri/yaak-ws/package.json b/crates/yaak-ws/package.json similarity index 100% rename from src-tauri/yaak-ws/package.json rename to crates/yaak-ws/package.json diff --git a/src-tauri/yaak-ws/src/connect.rs b/crates/yaak-ws/src/connect.rs similarity index 96% rename from src-tauri/yaak-ws/src/connect.rs rename to crates/yaak-ws/src/connect.rs index 9523acd3..84a24109 100644 --- a/src-tauri/yaak-ws/src/connect.rs +++ b/crates/yaak-ws/src/connect.rs @@ -1,7 +1,7 @@ use crate::error::Result; +use http::HeaderMap; use log::info; use std::sync::Arc; -use tauri::http::HeaderMap; use tokio::net::TcpStream; use tokio_tungstenite::tungstenite::client::IntoClientRequest; use tokio_tungstenite::tungstenite::handshake::client::Response; @@ -15,7 +15,7 @@ use yaak_tls::{ClientCertificateConfig, get_tls_config}; // Enabling ALPN breaks websocket requests const WITH_ALPN: bool = false; -pub(crate) async fn ws_connect( +pub async fn ws_connect( url: &str, headers: HeaderMap, validate_certificates: bool, diff --git a/src-tauri/yaak-ws/src/error.rs b/crates/yaak-ws/src/error.rs similarity index 90% rename from src-tauri/yaak-ws/src/error.rs rename to crates/yaak-ws/src/error.rs index 6ee5ed56..571c0cef 100644 --- a/src-tauri/yaak-ws/src/error.rs +++ b/crates/yaak-ws/src/error.rs @@ -10,9 +10,6 @@ pub enum Error { #[error(transparent)] ModelError(#[from] yaak_models::error::Error), - #[error(transparent)] - PluginError(#[from] yaak_plugins::error::Error), - #[error(transparent)] TemplateError(#[from] yaak_templates::error::Error), diff --git a/crates/yaak-ws/src/lib.rs b/crates/yaak-ws/src/lib.rs new file mode 100644 index 00000000..30eade8b --- /dev/null +++ b/crates/yaak-ws/src/lib.rs @@ -0,0 +1,12 @@ +mod connect; +pub mod error; +pub mod manager; +pub mod render; + +pub use connect::ws_connect; +pub use manager::WebsocketManager; +pub use render::render_websocket_request; + +// Re-export http types needed by consumers +pub use http::HeaderMap; +pub use tokio_tungstenite::tungstenite::http::HeaderValue; diff --git a/src-tauri/yaak-ws/src/manager.rs b/crates/yaak-ws/src/manager.rs similarity index 97% rename from src-tauri/yaak-ws/src/manager.rs rename to crates/yaak-ws/src/manager.rs index 175337f9..11c56417 100644 --- a/src-tauri/yaak-ws/src/manager.rs +++ b/crates/yaak-ws/src/manager.rs @@ -10,7 +10,8 @@ use tokio::net::TcpStream; use tokio::sync::{Mutex, mpsc}; use tokio_tungstenite::tungstenite::Message; use tokio_tungstenite::tungstenite::handshake::client::Response; -use tokio_tungstenite::tungstenite::http::{HeaderMap, HeaderValue}; +use http::HeaderMap; +use tokio_tungstenite::tungstenite::http::HeaderValue; use tokio_tungstenite::{MaybeTlsStream, WebSocketStream}; use yaak_tls::ClientCertificateConfig; diff --git a/src-tauri/yaak-ws/src/render.rs b/crates/yaak-ws/src/render.rs similarity index 100% rename from src-tauri/yaak-ws/src/render.rs rename to crates/yaak-ws/src/render.rs diff --git a/package-lock.json b/package-lock.json index 27c5b68f..874dbc0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,18 +48,18 @@ "plugins/template-function-request", "plugins/template-function-response", "plugins/themes-yaak", - "src-tauri", - "src-tauri/yaak-crypto", - "src-tauri/yaak-fonts", - "src-tauri/yaak-git", - "src-tauri/yaak-license", - "src-tauri/yaak-mac-window", - "src-tauri/yaak-models", - "src-tauri/yaak-plugins", - "src-tauri/yaak-sse", - "src-tauri/yaak-sync", - "src-tauri/yaak-templates", - "src-tauri/yaak-ws", + "crates-tauri/yaak-app", + "crates-tauri/yaak-fonts", + "crates-tauri/yaak-license", + "crates-tauri/yaak-mac-window", + "crates/yaak-crypto", + "crates/yaak-git", + "crates/yaak-models", + "crates/yaak-plugins", + "crates/yaak-sse", + "crates/yaak-sync", + "crates/yaak-templates", + "crates/yaak-ws", "src-web" ], "devDependencies": { @@ -75,10 +75,59 @@ "workspaces-run": "^1.0.2" } }, + "crates-tauri/yaak-app": { + "name": "@yaakapp-internal/tauri", + "version": "1.0.0" + }, + "crates-tauri/yaak-fonts": { + "name": "@yaakapp-internal/fonts", + "version": "1.0.0" + }, + "crates-tauri/yaak-license": { + "name": "@yaakapp-internal/license", + "version": "1.0.0" + }, + "crates-tauri/yaak-mac-window": { + "name": "@yaakapp-internal/mac-window", + "version": "1.0.0" + }, + "crates/yaak-crypto": { + "name": "@yaakapp-internal/crypto", + "version": "1.0.0" + }, + "crates/yaak-git": { + "name": "@yaakapp-internal/git", + "version": "1.0.0" + }, + "crates/yaak-models": { + "name": "@yaakapp-internal/models", + "version": "1.0.0" + }, + "crates/yaak-plugins": { + "name": "@yaakapp-internal/plugins", + "version": "1.0.0" + }, + "crates/yaak-sse": { + "name": "@yaakapp-internal/sse", + "version": "1.0.0" + }, + "crates/yaak-sync": { + "name": "@yaakapp-internal/sync", + "version": "1.0.0" + }, + "crates/yaak-templates": { + "name": "@yaakapp-internal/templates", + "version": "1.0.0", + "devDependencies": { + "rimraf": "^6.1.2" + } + }, + "crates/yaak-ws": { + "name": "@yaakapp-internal/ws", + "version": "1.0.0" + }, "node_modules/@1password/sdk": { "version": "0.4.0-beta.2", - "resolved": "https://registry.npmjs.org/@1password/sdk/-/sdk-0.4.0-beta.2.tgz", - "integrity": "sha512-holD+X6kKTe9K6iX5AcHGXfTYdikSJosZVXQa6MPLAP/a5HiELnHAOtJOFoYgXw0oA31d727qO6n9/4MnsQOUg==", "license": "MIT", "dependencies": { "@1password/sdk-core": "0.4.0-beta.2" @@ -86,14 +135,10 @@ }, "node_modules/@1password/sdk-core": { "version": "0.4.0-beta.2", - "resolved": "https://registry.npmjs.org/@1password/sdk-core/-/sdk-core-0.4.0-beta.2.tgz", - "integrity": "sha512-GWz/EJ5NKfiXI9WfL2nTHvTfI1e1X8YaUE2JAGoI/in/Vn4tp/PyuH2sqWt0Vh9P5Edn04lrEBcl+mEHUo0EyQ==", "license": "MIT" }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "dev": true, "license": "MIT", "engines": { @@ -105,8 +150,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -119,14 +162,10 @@ }, "node_modules/@babel/code-frame/node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/@babel/compat-data": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", - "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", "devOptional": true, "license": "MIT", "engines": { @@ -135,8 +174,6 @@ }, "node_modules/@babel/core": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", - "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -166,8 +203,6 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, "license": "ISC", "bin": { @@ -176,8 +211,6 @@ }, "node_modules/@babel/generator": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", - "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -193,8 +226,6 @@ }, "node_modules/@babel/helper-compilation-targets": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", - "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -210,8 +241,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, "license": "ISC", "bin": { @@ -220,8 +249,6 @@ }, "node_modules/@babel/helper-globals": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "devOptional": true, "license": "MIT", "engines": { @@ -230,8 +257,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", - "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "devOptional": true, "license": "MIT", "dependencies": { @@ -244,8 +269,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.28.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", - "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -262,8 +285,6 @@ }, "node_modules/@babel/helper-plugin-utils": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", - "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, "license": "MIT", "engines": { @@ -272,8 +293,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "devOptional": true, "license": "MIT", "engines": { @@ -282,8 +301,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -291,8 +308,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "devOptional": true, "license": "MIT", "engines": { @@ -301,8 +316,6 @@ }, "node_modules/@babel/helpers": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", - "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", "devOptional": true, "license": "MIT", "dependencies": { @@ -315,8 +328,6 @@ }, "node_modules/@babel/parser": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", - "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -331,8 +342,6 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", - "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, "license": "MIT", "dependencies": { @@ -347,8 +356,6 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", - "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -363,8 +370,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-self": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, "license": "MIT", "dependencies": { @@ -379,8 +384,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-source": { "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, "license": "MIT", "dependencies": { @@ -395,8 +398,6 @@ }, "node_modules/@babel/runtime": { "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", - "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -404,8 +405,6 @@ }, "node_modules/@babel/template": { "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", - "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -419,8 +418,6 @@ }, "node_modules/@babel/traverse": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", - "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -438,8 +435,6 @@ }, "node_modules/@babel/types": { "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", - "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -452,8 +447,6 @@ }, "node_modules/@biomejs/biome": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.11.tgz", - "integrity": "sha512-/zt+6qazBWguPG6+eWmiELqO+9jRsMZ/DBU3lfuU2ngtIQYzymocHhKiZRyrbra4aCOoyTg/BmY+6WH5mv9xmQ==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -479,8 +472,6 @@ }, "node_modules/@biomejs/cli-darwin-arm64": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.11.tgz", - "integrity": "sha512-/uXXkBcPKVQY7rc9Ys2CrlirBJYbpESEDme7RKiBD6MmqR2w3j0+ZZXRIL2xiaNPsIMMNhP1YnA+jRRxoOAFrA==", "cpu": [ "arm64" ], @@ -494,129 +485,8 @@ "node": ">=14.21.3" } }, - "node_modules/@biomejs/cli-darwin-x64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.11.tgz", - "integrity": "sha512-fh7nnvbweDPm2xEmFjfmq7zSUiox88plgdHF9OIW4i99WnXrAC3o2P3ag9judoUMv8FCSUnlwJCM1B64nO5Fbg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-linux-arm64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.11.tgz", - "integrity": "sha512-l4xkGa9E7Uc0/05qU2lMYfN1H+fzzkHgaJoy98wO+b/7Gl78srbCRRgwYSW+BTLixTBrM6Ede5NSBwt7rd/i6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-linux-arm64-musl": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.11.tgz", - "integrity": "sha512-XPSQ+XIPZMLaZ6zveQdwNjbX+QdROEd1zPgMwD47zvHV+tCGB88VH+aynyGxAHdzL+Tm/+DtKST5SECs4iwCLg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.11.tgz", - "integrity": "sha512-/1s9V/H3cSe0r0Mv/Z8JryF5x9ywRxywomqZVLHAoa/uN0eY7F8gEngWKNS5vbbN/BsfpCG5yeBT5ENh50Frxg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.11.tgz", - "integrity": "sha512-vU7a8wLs5C9yJ4CB8a44r12aXYb8yYgBn+WeyzbMjaCMklzCv1oXr8x+VEyWodgJt9bDmhiaW/I0RHbn7rsNmw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-win32-arm64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.11.tgz", - "integrity": "sha512-PZQ6ElCOnkYapSsysiTy0+fYX+agXPlWugh6+eQ6uPKI3vKAqNp6TnMhoM3oY2NltSB89hz59o8xIfOdyhi9Iw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@biomejs/cli-win32-x64": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.11.tgz", - "integrity": "sha512-43VrG813EW+b5+YbDbz31uUsheX+qFKCpXeY9kfdAx+ww3naKxeVkTD9zLIWxUPfJquANMHrmW3wbe/037G0Qg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=14.21.3" - } - }, "node_modules/@changesets/changelog-github": { "version": "0.4.8", - "resolved": "https://registry.npmjs.org/@changesets/changelog-github/-/changelog-github-0.4.8.tgz", - "integrity": "sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==", "license": "MIT", "dependencies": { "@changesets/get-github-info": "^0.5.2", @@ -626,14 +496,10 @@ }, "node_modules/@changesets/changelog-github/node_modules/@changesets/types": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-5.2.1.tgz", - "integrity": "sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==", "license": "MIT" }, "node_modules/@changesets/changelog-github/node_modules/dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "license": "BSD-2-Clause", "engines": { "node": ">=10" @@ -641,8 +507,6 @@ }, "node_modules/@changesets/get-github-info": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@changesets/get-github-info/-/get-github-info-0.5.2.tgz", - "integrity": "sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==", "license": "MIT", "dependencies": { "dataloader": "^1.4.0", @@ -651,15 +515,11 @@ }, "node_modules/@changesets/types": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-0.4.0.tgz", - "integrity": "sha512-TclHHKDVYQ8rJGZgVeWiF7c91yWzTTWdPagltgutelGu/Psup5PQlUq6svx7S8suj+jXcaE34yEEsfIvzXXB2Q==", "dev": true, "license": "MIT" }, "node_modules/@codemirror/autocomplete": { "version": "6.20.0", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.0.tgz", - "integrity": "sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -670,8 +530,6 @@ }, "node_modules/@codemirror/commands": { "version": "6.10.1", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.1.tgz", - "integrity": "sha512-uWDWFypNdQmz2y1LaNJzK7fL7TYKLeUAU0npEC685OKTF3KcQ2Vu3klIM78D7I6wGhktme0lh3CuQLv0ZCrD9Q==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -682,8 +540,6 @@ }, "node_modules/@codemirror/lang-css": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", - "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -695,8 +551,6 @@ }, "node_modules/@codemirror/lang-html": { "version": "6.4.11", - "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz", - "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -712,8 +566,6 @@ }, "node_modules/@codemirror/lang-javascript": { "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.4.tgz", - "integrity": "sha512-0WVmhp1QOqZ4Rt6GlVGwKJN3KW7Xh4H2q8ZZNGZaP6lRdxXJzmjm4FqvmOojVj6khWJHIb9sp7U/72W7xQgqAA==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -727,8 +579,6 @@ }, "node_modules/@codemirror/lang-json": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", - "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", @@ -737,8 +587,6 @@ }, "node_modules/@codemirror/lang-markdown": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-markdown/-/lang-markdown-6.5.0.tgz", - "integrity": "sha512-0K40bZ35jpHya6FriukbgaleaqzBLZfOh7HuzqbMxBXkbYMJDxfF39c23xOgxFezR+3G+tR2/Mup+Xk865OMvw==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.7.1", @@ -752,8 +600,6 @@ }, "node_modules/@codemirror/lang-xml": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@codemirror/lang-xml/-/lang-xml-6.1.0.tgz", - "integrity": "sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==", "license": "MIT", "dependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -766,8 +612,6 @@ }, "node_modules/@codemirror/language": { "version": "6.12.1", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.1.tgz", - "integrity": "sha512-Fa6xkSiuGKc8XC8Cn96T+TQHYj4ZZ7RdFmXA3i9xe/3hLHfwPZdM+dqfX0Cp0zQklBKhVD8Yzc8LS45rkqcwpQ==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -780,8 +624,6 @@ }, "node_modules/@codemirror/lint": { "version": "6.9.2", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.2.tgz", - "integrity": "sha512-sv3DylBiIyi+xKwRCJAAsBZZZWo82shJ/RTMymLabAdtbkV5cSKwWDeCgtUq3v8flTaXS2y1kKkICuRYtUswyQ==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -791,8 +633,6 @@ }, "node_modules/@codemirror/search": { "version": "6.5.11", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.11.tgz", - "integrity": "sha512-KmWepDE6jUdL6n8cAAqIpRmLPBZ5ZKnicE8oGU/s3QrAVID+0VhLFrzUucVKHG5035/BSykhExDL/Xm7dHthiA==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", @@ -802,8 +642,6 @@ }, "node_modules/@codemirror/state": { "version": "6.5.3", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.5.3.tgz", - "integrity": "sha512-MerMzJzlXogk2fxWFU1nKp36bY5orBG59HnPiz0G9nLRebWa0zXuv2siH6PLIHBvv5TH8CkQRqjBs0MlxCZu+A==", "license": "MIT", "dependencies": { "@marijn/find-cluster-break": "^1.0.0" @@ -811,8 +649,6 @@ }, "node_modules/@codemirror/view": { "version": "6.39.8", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.39.8.tgz", - "integrity": "sha512-1rASYd9Z/mE3tkbC9wInRlCNyCkSn+nLsiQKZhEDUUJiUfs/5FHDpCUDaQpoTIaNGeDc6/bhaEAyLmeEucEFPw==", "license": "MIT", "dependencies": { "@codemirror/state": "^6.5.0", @@ -823,14 +659,10 @@ }, "node_modules/@date-fns/tz": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", - "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", "license": "MIT" }, "node_modules/@dnd-kit/accessibility": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", - "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -841,8 +673,6 @@ }, "node_modules/@dnd-kit/core": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", - "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", "license": "MIT", "dependencies": { "@dnd-kit/accessibility": "^3.1.1", @@ -856,8 +686,6 @@ }, "node_modules/@dnd-kit/utilities": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", - "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -866,78 +694,8 @@ "react": ">=16.8.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", - "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", - "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", - "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", - "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", - "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -951,386 +709,20 @@ "node": ">=18" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", - "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", - "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", - "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", - "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", - "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", - "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", - "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", - "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", - "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", - "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", - "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", - "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", - "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", - "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", - "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", - "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", - "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", - "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", - "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", - "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.27.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", - "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, "node_modules/@exodus/schemasafe": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@exodus/schemasafe/-/schemasafe-1.3.0.tgz", - "integrity": "sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==", "license": "MIT" }, "node_modules/@faker-js/faker": { "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-5.5.3.tgz", - "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==", - "deprecated": "Please update to a newer version.", "license": "MIT" }, "node_modules/@gilbarbara/deep-equal": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@gilbarbara/deep-equal/-/deep-equal-0.3.1.tgz", - "integrity": "sha512-I7xWjLs2YSVMc5gGx1Z3ZG1lgFpITPndpi8Ku55GeEIKpACCPQNS/OTqQbxgTCfq0Ncvcc+CrFov96itVh6Qvw==", "license": "MIT" }, "node_modules/@hono/mcp": { "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@hono/mcp/-/mcp-0.2.3.tgz", - "integrity": "sha512-wrYKVQSjnBg4/ZinnnP/1t3jlvP3Z9fqZv8OzuhLXV4gVTLOHOHDhnXsIwD0nFVKk2pMOvA+sDfrKyRzw4yUPg==", "license": "MIT", "dependencies": { "pkce-challenge": "^5.0.0" @@ -1344,8 +736,6 @@ }, "node_modules/@hono/node-server": { "version": "1.19.7", - "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.7.tgz", - "integrity": "sha512-vUcD0uauS7EU2caukW8z5lJKtoGMokxNbJtBiwHgpqxEXokaHCBkQUmCHhjFB1VUTWdqj25QoMkMKzgjq+uhrw==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -1356,8 +746,6 @@ }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "dev": true, "license": "MIT", "engines": { @@ -1366,8 +754,6 @@ }, "node_modules/@isaacs/brace-expansion": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "dev": true, "license": "MIT", "dependencies": { @@ -1379,8 +765,6 @@ }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1390,8 +774,6 @@ }, "node_modules/@jridgewell/remapping": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1401,8 +783,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "devOptional": true, "license": "MIT", "engines": { @@ -1411,14 +791,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1428,8 +804,6 @@ }, "node_modules/@jsep-plugin/assignment": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsep-plugin/assignment/-/assignment-1.3.0.tgz", - "integrity": "sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==", "license": "MIT", "engines": { "node": ">= 10.16.0" @@ -1440,8 +814,6 @@ }, "node_modules/@jsep-plugin/regex": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@jsep-plugin/regex/-/regex-1.0.4.tgz", - "integrity": "sha512-q7qL4Mgjs1vByCaTnDFcBnV9HS7GVPJX5vyVoCgZHNSC9rjwIlmbXG5sUuorR5ndfHAIlJ8pVStxvjXHbNvtUg==", "license": "MIT", "engines": { "node": ">= 10.16.0" @@ -1452,14 +824,10 @@ }, "node_modules/@lezer/common": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.0.tgz", - "integrity": "sha512-PNGcolp9hr4PJdXR4ix7XtixDrClScvtSCYW3rQG106oVMOOI+jFb+0+J3mbeL/53g1Zd6s0kJzaw6Ri68GmAA==", "license": "MIT" }, "node_modules/@lezer/css": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.0.tgz", - "integrity": "sha512-pBL7hup88KbI7hXnZV3PQsn43DHy6TWyzuyk2AO9UyoXcDltvIdqWKE1dLL/45JVZ+YZkHe1WVHqO6wugZZWcw==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1469,8 +837,6 @@ }, "node_modules/@lezer/generator": { "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@lezer/generator/-/generator-1.8.0.tgz", - "integrity": "sha512-/SF4EDWowPqV1jOgoGSGTIFsE7Ezdr7ZYxyihl5eMKVO5tlnpIhFcDavgm1hHY5GEonoOAEnJ0CU0x+tvuAuUg==", "dev": true, "license": "MIT", "dependencies": { @@ -1483,8 +849,6 @@ }, "node_modules/@lezer/highlight": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", - "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", "license": "MIT", "dependencies": { "@lezer/common": "^1.3.0" @@ -1492,8 +856,6 @@ }, "node_modules/@lezer/html": { "version": "1.3.13", - "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz", - "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1503,8 +865,6 @@ }, "node_modules/@lezer/javascript": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz", - "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1514,8 +874,6 @@ }, "node_modules/@lezer/json": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", - "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1525,8 +883,6 @@ }, "node_modules/@lezer/lr": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.5.tgz", - "integrity": "sha512-/YTRKP5yPPSo1xImYQk7AZZMAgap0kegzqCSYHjAL9x1AZ0ZQW+IpcEzMKagCsbTsLnVeWkxYrCNeXG8xEPrjg==", "license": "MIT", "dependencies": { "@lezer/common": "^1.0.0" @@ -1534,8 +890,6 @@ }, "node_modules/@lezer/markdown": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@lezer/markdown/-/markdown-1.6.2.tgz", - "integrity": "sha512-iNSdKrIK0FfOjVPVpV0fu7OykdncYpEzf4vkG9szFf60ql/ObZShoVbM9u1tgkogDOmubms1CyoNS2/unOXWNw==", "license": "MIT", "dependencies": { "@lezer/common": "^1.5.0", @@ -1544,8 +898,6 @@ }, "node_modules/@lezer/xml": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@lezer/xml/-/xml-1.0.6.tgz", - "integrity": "sha512-CdDwirL0OEaStFue/66ZmFSeppuL6Dwjlk8qk153mSQwiSH/Dlri4GNymrNWnUmPl2Um7QfV1FO9KFUyX3Twww==", "license": "MIT", "dependencies": { "@lezer/common": "^1.2.0", @@ -1555,20 +907,14 @@ }, "node_modules/@marijn/find-cluster-break": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", - "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==", "license": "MIT" }, "node_modules/@mjackson/headers": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@mjackson/headers/-/headers-0.11.1.tgz", - "integrity": "sha512-uXXhd4rtDdDwkqAuGef1nuafkCa1NlTmEc1Jzc0NL4YiA1yON1NFXuqJ3hOuKvNKQwkiDwdD+JJlKVyz4dunFA==", "license": "MIT" }, "node_modules/@mjackson/multipart-parser": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@mjackson/multipart-parser/-/multipart-parser-0.10.1.tgz", - "integrity": "sha512-cHMD6+ErH/DrEfC0N6Ru/+1eAdavxdV0C35PzSb5/SD7z3XoaDMc16xPJcb8CahWjSpqHY+Too9sAb6/UNuq7A==", "license": "MIT", "dependencies": { "@mjackson/headers": "^0.11.1" @@ -1615,8 +961,6 @@ }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "license": "MIT", "dependencies": { @@ -1629,8 +973,6 @@ }, "node_modules/@napi-rs/canvas": { "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.88.tgz", - "integrity": "sha512-/p08f93LEbsL5mDZFQ3DBxcPv/I4QG9EDYRRq1WNlCOXVfAHBTHMSVMwxlqG/AtnSfUr9+vgfN7MKiyDo0+Weg==", "license": "MIT", "optional": true, "workspaces": [ @@ -1657,30 +999,8 @@ "@napi-rs/canvas-win32-x64-msvc": "0.1.88" } }, - "node_modules/@napi-rs/canvas-android-arm64": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.88.tgz", - "integrity": "sha512-KEaClPnZuVxJ8smUWjV1wWFkByBO/D+vy4lN+Dm5DFH514oqwukxKGeck9xcKJhaWJGjfruGmYGiwRe//+/zQQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, "node_modules/@napi-rs/canvas-darwin-arm64": { "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.88.tgz", - "integrity": "sha512-Xgywz0dDxOKSgx3eZnK85WgGMmGrQEW7ZLA/E7raZdlEE+xXCozobgqz2ZvYigpB6DJFYkqnwHjqCOTSDGlFdg==", "cpu": [ "arm64" ], @@ -1697,190 +1017,8 @@ "url": "https://github.com/sponsors/Brooooooklyn" } }, - "node_modules/@napi-rs/canvas-darwin-x64": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.88.tgz", - "integrity": "sha512-Yz4wSCIQOUgNucgk+8NFtQxQxZV5NO8VKRl9ePKE6XoNyNVC8JDqtvhh3b3TPqKK8W5p2EQpAr1rjjm0mfBxdg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.88.tgz", - "integrity": "sha512-9gQM2SlTo76hYhxHi2XxWTAqpTOb+JtxMPEIr+H5nAhHhyEtNmTSDRtz93SP7mGd2G3Ojf2oF5tP9OdgtgXyKg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-arm64-gnu": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.88.tgz", - "integrity": "sha512-7qgaOBMXuVRk9Fzztzr3BchQKXDxGbY+nwsovD3I/Sx81e+sX0ReEDYHTItNb0Je4NHbAl7D0MKyd4SvUc04sg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-arm64-musl": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.88.tgz", - "integrity": "sha512-kYyNrUsHLkoGHBc77u4Unh067GrfiCUMbGHC2+OTxbeWfZkPt2o32UOQkhnSswKd9Fko/wSqqGkY956bIUzruA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.88.tgz", - "integrity": "sha512-HVuH7QgzB0yavYdNZDRyAsn/ejoXB0hn8twwFnOqUbCCdkV+REna7RXjSR7+PdfW0qMQ2YYWsLvVBT5iL/mGpw==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-x64-gnu": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.88.tgz", - "integrity": "sha512-hvcvKIcPEQrvvJtJnwD35B3qk6umFJ8dFIr8bSymfrSMem0EQsfn1ztys8ETIFndTwdNWJKWluvxztA41ivsEw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-linux-x64-musl": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.88.tgz", - "integrity": "sha512-eSMpGYY2xnZSQ6UxYJ6plDboxq4KeJ4zT5HaVkUnbObNN6DlbJe0Mclh3wifAmquXfrlgTZt6zhHsUgz++AK6g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-win32-arm64-msvc": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.88.tgz", - "integrity": "sha512-qcIFfEgHrchyYqRrxsCeTQgpJZ/GqHiqPcU/Fvw/ARVlQeDX1VyFH+X+0gCR2tca6UJrq96vnW+5o7buCq+erA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, - "node_modules/@napi-rs/canvas-win32-x64-msvc": { - "version": "0.1.88", - "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.88.tgz", - "integrity": "sha512-ROVqbfS4QyZxYkqmaIBBpbz/BQvAR+05FXM5PAtTYVc0uyY8Y4BHJSMdGAaMf6TdIVRsQsiq+FG/dH9XhvWCFQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -1892,8 +1030,6 @@ }, "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { "node": ">= 8" @@ -1901,8 +1037,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", "dev": true, "license": "MIT", "engines": { @@ -1911,8 +1045,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -1924,8 +1056,6 @@ }, "node_modules/@prantlf/jsonlint": { "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@prantlf/jsonlint/-/jsonlint-16.0.0.tgz", - "integrity": "sha512-L0jFtcsBRJZOr4T6sbePb1R6XYF6Nofj6kmEAxqTKCHEr50uvyxBFnB1UKaehWaMhHnvtyqWfTR5Go25RywXIQ==", "license": "MIT", "dependencies": { "ajv": "8.17.1", @@ -1943,8 +1073,6 @@ }, "node_modules/@prantlf/jsonlint/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { "node": ">= 8" @@ -1952,8 +1080,6 @@ }, "node_modules/@prantlf/jsonlint/node_modules/fast-glob": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -1968,8 +1094,6 @@ }, "node_modules/@prantlf/jsonlint/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -1980,8 +1104,6 @@ }, "node_modules/@replit/codemirror-emacs": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@replit/codemirror-emacs/-/codemirror-emacs-6.1.0.tgz", - "integrity": "sha512-74DITnht6Cs6sHg02PQ169IKb1XgtyhI9sLD0JeOFco6Ds18PT+dkD8+DgXBDokne9UIFKsBbKPnpFRAz60/Lw==", "license": "MIT", "peerDependencies": { "@codemirror/autocomplete": "^6.0.2", @@ -1993,8 +1115,6 @@ }, "node_modules/@replit/codemirror-vim": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@replit/codemirror-vim/-/codemirror-vim-6.3.0.tgz", - "integrity": "sha512-aTx931ULAMuJx6xLf7KQDOL7CxD+Sa05FktTDrtLaSy53uj01ll3Zf17JdKsriER248oS55GBzg0CfCTjEneAQ==", "license": "MIT", "peerDependencies": { "@codemirror/commands": "6.x.x", @@ -2006,8 +1126,6 @@ }, "node_modules/@replit/codemirror-vscode-keymap": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@replit/codemirror-vscode-keymap/-/codemirror-vscode-keymap-6.0.2.tgz", - "integrity": "sha512-j45qTwGxzpsv82lMD/NreGDORFKSctMDVkGRopaP+OrzSzv+pXDQuU3LnFvKpasyjVT0lf+PKG1v2DSCn/vxxg==", "license": "MIT", "peerDependencies": { "@codemirror/autocomplete": "^6.0.0", @@ -2021,15 +1139,11 @@ }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", "dev": true, "license": "MIT" }, "node_modules/@rollup/plugin-virtual": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-3.0.2.tgz", - "integrity": "sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==", "dev": true, "license": "MIT", "engines": { @@ -2046,8 +1160,6 @@ }, "node_modules/@rollup/pluginutils": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2069,43 +1181,11 @@ }, "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT" }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz", - "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz", - "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz", - "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==", "cpu": [ "arm64" ], @@ -2116,282 +1196,12 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz", - "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz", - "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz", - "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz", - "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz", - "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz", - "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz", - "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz", - "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz", - "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz", - "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz", - "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz", - "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz", - "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz", - "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz", - "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz", - "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz", - "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz", - "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.54.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz", - "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@sagold/json-pointer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@sagold/json-pointer/-/json-pointer-5.1.2.tgz", - "integrity": "sha512-+wAhJZBXa6MNxRScg6tkqEbChEHMgVZAhTHVJ60Y7sbtXtu9XA49KfUkdWlS2x78D6H9nryiKePiYozumauPfA==", "license": "MIT" }, "node_modules/@sagold/json-query": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/@sagold/json-query/-/json-query-6.2.0.tgz", - "integrity": "sha512-7bOIdUE6eHeoWtFm8TvHQHfTVSZuCs+3RpOKmZCDBIOrxpvF/rNFTeuvIyjHva/RR0yVS3kQtr+9TW72LQEZjA==", "license": "MIT", "dependencies": { "@sagold/json-pointer": "^5.1.2", @@ -2400,8 +1210,6 @@ }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", "dev": true, "license": "MIT", "engines": { @@ -2417,8 +1225,6 @@ }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "dev": true, "license": "MIT", "engines": { @@ -2434,8 +1240,6 @@ }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "dev": true, "license": "MIT", "engines": { @@ -2451,8 +1255,6 @@ }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", "dev": true, "license": "MIT", "engines": { @@ -2468,8 +1270,6 @@ }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", "dev": true, "license": "MIT", "engines": { @@ -2485,8 +1285,6 @@ }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", "dev": true, "license": "MIT", "engines": { @@ -2502,8 +1300,6 @@ }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", "dev": true, "license": "MIT", "engines": { @@ -2519,8 +1315,6 @@ }, "node_modules/@svgr/babel-plugin-transform-svg-component": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", "dev": true, "license": "MIT", "engines": { @@ -2536,8 +1330,6 @@ }, "node_modules/@svgr/babel-preset": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", "dev": true, "license": "MIT", "dependencies": { @@ -2563,8 +1355,6 @@ }, "node_modules/@svgr/core": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "dev": true, "license": "MIT", "dependencies": { @@ -2584,8 +1374,6 @@ }, "node_modules/@svgr/core/node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, "license": "MIT", "engines": { @@ -2597,8 +1385,6 @@ }, "node_modules/@svgr/core/node_modules/cosmiconfig": { "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "license": "MIT", "dependencies": { @@ -2624,8 +1410,6 @@ }, "node_modules/@svgr/core/node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -2643,8 +1427,6 @@ }, "node_modules/@svgr/core/node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -2653,8 +1435,6 @@ }, "node_modules/@svgr/hast-util-to-babel-ast": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -2671,8 +1451,6 @@ }, "node_modules/@svgr/plugin-jsx": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", "dev": true, "license": "MIT", "dependencies": { @@ -2694,8 +1472,6 @@ }, "node_modules/@swc/core": { "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.8.tgz", - "integrity": "sha512-T8keoJjXaSUoVBCIjgL6wAnhADIb09GOELzKg10CjNg+vLX48P93SME6jTfte9MZIm5m+Il57H3rTSk/0kzDUw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -2733,8 +1509,6 @@ }, "node_modules/@swc/core-darwin-arm64": { "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.8.tgz", - "integrity": "sha512-M9cK5GwyWWRkRGwwCbREuj6r8jKdES/haCZ3Xckgkl8MUQJZA3XB7IXXK1IXRNeLjg6m7cnoMICpXv1v1hlJOg==", "cpu": [ "arm64" ], @@ -2748,170 +1522,13 @@ "node": ">=10" } }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.8.tgz", - "integrity": "sha512-j47DasuOvXl80sKJHSi2X25l44CMc3VDhlJwA7oewC1nV1VsSzwX+KOwE5tLnfORvVJJyeiXgJORNYg4jeIjYQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.8.tgz", - "integrity": "sha512-siAzDENu2rUbwr9+fayWa26r5A9fol1iORG53HWxQL1J8ym4k7xt9eME0dMPXlYZDytK5r9sW8zEA10F2U3Xwg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.8.tgz", - "integrity": "sha512-o+1y5u6k2FfPYbTRUPvurwzNt5qd0NTumCTFscCNuBksycloXY16J8L+SMW5QRX59n4Hp9EmFa3vpvNHRVv1+Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.8.tgz", - "integrity": "sha512-koiCqL09EwOP1S2RShCI7NbsQuG6r2brTqUYE7pV7kZm9O17wZ0LSz22m6gVibpwEnw8jI3IE1yYsQTVpluALw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.8.tgz", - "integrity": "sha512-4p6lOMU3bC+Vd5ARtKJ/FxpIC5G8v3XLoPEZ5s7mLR8h7411HWC/LmTXDHcrSXRC55zvAVia1eldy6zDLz8iFQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.8.tgz", - "integrity": "sha512-z3XBnbrZAL+6xDGAhJoN4lOueIxC/8rGrJ9tg+fEaeqLEuAtHSW2QHDHxDwkxZMjuF/pZ6MUTjHjbp8wLbuRLA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.8.tgz", - "integrity": "sha512-djQPJ9Rh9vP8GTS/Df3hcc6XP6xnG5c8qsngWId/BLA9oX6C7UzCPAn74BG/wGb9a6j4w3RINuoaieJB3t+7iQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.8.tgz", - "integrity": "sha512-/wfAgxORg2VBaUoFdytcVBVCgf1isWZIEXB9MZEUty4wwK93M/PxAkjifOho9RN3WrM3inPLabICRCEgdHpKKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.8.tgz", - "integrity": "sha512-GpMePrh9Sl4d61o4KAHOOv5is5+zt6BEXCOCgs/H0FLGeii7j9bWDE8ExvKFy2GRRZVNR1ugsnzaGWHKM6kuzA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/counter": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@swc/types": { "version": "0.1.25", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", - "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2920,15 +1537,11 @@ }, "node_modules/@swc/wasm": { "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@swc/wasm/-/wasm-1.15.8.tgz", - "integrity": "sha512-RG2BxGbbsjtddFCo1ghKH6A/BMXbY1eMBfpysV0lJMCpI4DZOjW1BNBnxvBt7YsYmlJtmy5UXIg9/4ekBTFFaQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/@tailwindcss/container-queries": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/container-queries/-/container-queries-0.1.1.tgz", - "integrity": "sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2937,8 +1550,6 @@ }, "node_modules/@tailwindcss/nesting": { "version": "0.0.0-insiders.565cd3e", - "resolved": "https://registry.npmjs.org/@tailwindcss/nesting/-/nesting-0.0.0-insiders.565cd3e.tgz", - "integrity": "sha512-WhHoFBx19TnH/c+xLwT/sxei6+4RpdfiyG3MYXfmLaMsADmVqBkF7B6lDalgZD9YdM459MF7DtxVbWkOrV7IaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2950,8 +1561,6 @@ }, "node_modules/@tanstack/history": { "version": "1.141.0", - "resolved": "https://registry.npmjs.org/@tanstack/history/-/history-1.141.0.tgz", - "integrity": "sha512-LS54XNyxyTs5m/pl1lkwlg7uZM3lvsv2FIIV1rsJgnfwVCnI+n4ZGZ2CcjNT13BPu/3hPP+iHmliBSscJxW5FQ==", "license": "MIT", "engines": { "node": ">=12" @@ -2963,8 +1572,6 @@ }, "node_modules/@tanstack/query-core": { "version": "5.90.16", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.90.16.tgz", - "integrity": "sha512-MvtWckSVufs/ja463/K4PyJeqT+HMlJWtw6PrCpywznd2NSgO3m4KwO9RqbFqGg6iDE8vVMFWMeQI4Io3eEYww==", "license": "MIT", "funding": { "type": "github", @@ -2973,8 +1580,6 @@ }, "node_modules/@tanstack/react-query": { "version": "5.90.16", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.16.tgz", - "integrity": "sha512-bpMGOmV4OPmif7TNMteU/Ehf/hoC0Kf98PDc0F4BZkFrEapRMEqI/V6YS0lyzwSV6PQpY1y4xxArUIfBW5LVxQ==", "license": "MIT", "dependencies": { "@tanstack/query-core": "5.90.16" @@ -2989,8 +1594,6 @@ }, "node_modules/@tanstack/react-router": { "version": "1.144.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.144.0.tgz", - "integrity": "sha512-GmRyIGmHtGj3VLTHXepIwXAxTcHyL5W7Vw7O1CnVEtFxQQWKMVOnWgI7tPY6FhlNwMKVb3n0mPFWz9KMYyd2GA==", "license": "MIT", "dependencies": { "@tanstack/history": "1.141.0", @@ -3014,8 +1617,6 @@ }, "node_modules/@tanstack/react-store": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-store/-/react-store-0.8.0.tgz", - "integrity": "sha512-1vG9beLIuB7q69skxK9r5xiLN3ztzIPfSQSs0GfeqWGO2tGIyInZx0x1COhpx97RKaONSoAb8C3dxacWksm1ow==", "license": "MIT", "dependencies": { "@tanstack/store": "0.8.0", @@ -3032,8 +1633,6 @@ }, "node_modules/@tanstack/react-virtual": { "version": "3.13.16", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.16.tgz", - "integrity": "sha512-y4xLKvLu6UZWiGdNcgk3yYlzCznYIV0m8dSyUzr3eAC0dHLos5V74qhUHxutYddFGgGU8sWLkp6H5c2RCrsrXw==", "license": "MIT", "dependencies": { "@tanstack/virtual-core": "3.13.16" @@ -3049,8 +1648,6 @@ }, "node_modules/@tanstack/router-core": { "version": "1.144.0", - "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.144.0.tgz", - "integrity": "sha512-6oVERtK9XDHCP4XojgHsdHO56ZSj11YaWjF5g/zw39LhyA6Lx+/X86AEIHO4y0BUrMQaJfcjdAQMVSAs6Vjtdg==", "license": "MIT", "dependencies": { "@tanstack/history": "1.141.0", @@ -3071,8 +1668,6 @@ }, "node_modules/@tanstack/router-generator": { "version": "1.145.4", - "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.145.4.tgz", - "integrity": "sha512-TQN96VBJVwXg7VmA9ePocjhSZN53w0+lekT4ca3lBhDSnwkTOrPJffBadISZJugWNRkbIuxcsbii010a0uie3w==", "dev": true, "license": "MIT", "dependencies": { @@ -3095,8 +1690,6 @@ }, "node_modules/@tanstack/router-generator/node_modules/source-map": { "version": "0.7.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", - "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3105,8 +1698,6 @@ }, "node_modules/@tanstack/router-plugin": { "version": "1.145.4", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.145.4.tgz", - "integrity": "sha512-F2QhlQzbsLHC7BTFFsSML0C/q+HfRqcRc9dC+gPZkSzEE/zcotiRXgRudbDYHa/vYf8zAP97L5OZrhR4JMCGwQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3159,8 +1750,6 @@ }, "node_modules/@tanstack/router-utils": { "version": "1.143.11", - "resolved": "https://registry.npmjs.org/@tanstack/router-utils/-/router-utils-1.143.11.tgz", - "integrity": "sha512-N24G4LpfyK8dOlnP8BvNdkuxg1xQljkyl6PcrdiPSA301pOjatRT1y8wuCCJZKVVD8gkd0MpCZ0VEjRMGILOtA==", "dev": true, "license": "MIT", "dependencies": { @@ -3182,8 +1771,6 @@ }, "node_modules/@tanstack/router-utils/node_modules/diff": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.2.tgz", - "integrity": "sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -3192,8 +1779,6 @@ }, "node_modules/@tanstack/store": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.8.0.tgz", - "integrity": "sha512-Om+BO0YfMZe//X2z0uLF2j+75nQga6TpTJgLJQBiq85aOyZNIhkCgleNcud2KQg4k4v9Y9l+Uhru3qWMPGTOzQ==", "license": "MIT", "funding": { "type": "github", @@ -3202,8 +1787,6 @@ }, "node_modules/@tanstack/virtual-core": { "version": "3.13.16", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.16.tgz", - "integrity": "sha512-njazUC8mDkrxWmyZmn/3eXrDcP8Msb3chSr4q6a65RmwdSbMlMCdnOphv6/8mLO7O3Fuza5s4M4DclmvAO5w0w==", "license": "MIT", "funding": { "type": "github", @@ -3212,8 +1795,6 @@ }, "node_modules/@tanstack/virtual-file-routes": { "version": "1.145.4", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-file-routes/-/virtual-file-routes-1.145.4.tgz", - "integrity": "sha512-CI75JrfqSluhdGwLssgVeQBaCphgfkMQpi8MCY3UJX1hoGzXa8kHYJcUuIFMOLs1q7zqHy++EVVtMK03osR5wQ==", "dev": true, "license": "MIT", "engines": { @@ -3226,8 +1807,6 @@ }, "node_modules/@tauri-apps/api": { "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.9.1.tgz", - "integrity": "sha512-IGlhP6EivjXHepbBic618GOmiWe4URJiIeZFlB7x3czM0yDHHYviH1Xvoiv4FefdkQtn6v7TuwWCRfOGdnVUGw==", "license": "Apache-2.0 OR MIT", "funding": { "type": "opencollective", @@ -3236,8 +1815,6 @@ }, "node_modules/@tauri-apps/cli": { "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.9.6.tgz", - "integrity": "sha512-3xDdXL5omQ3sPfBfdC8fCtDKcnyV7OqyzQgfyT5P3+zY6lcPqIYKQBvUasNvppi21RSdfhy44ttvJmftb0PCDw==", "dev": true, "license": "Apache-2.0 OR MIT", "bin": { @@ -3266,8 +1843,6 @@ }, "node_modules/@tauri-apps/cli-darwin-arm64": { "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.9.6.tgz", - "integrity": "sha512-gf5no6N9FCk1qMrti4lfwP77JHP5haASZgVbBgpZG7BUepB3fhiLCXGUK8LvuOjP36HivXewjg72LTnPDScnQQ==", "cpu": [ "arm64" ], @@ -3281,180 +1856,8 @@ "node": ">= 10" } }, - "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.9.6.tgz", - "integrity": "sha512-oWh74WmqbERwwrwcueJyY6HYhgCksUc6NT7WKeXyrlY/FPmNgdyQAgcLuTSkhRFuQ6zh4Np1HZpOqCTpeZBDcw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.9.6.tgz", - "integrity": "sha512-/zde3bFroFsNXOHN204DC2qUxAcAanUjVXXSdEGmhwMUZeAQalNj5cz2Qli2elsRjKN/hVbZOJj0gQ5zaYUjSg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.9.6.tgz", - "integrity": "sha512-pvbljdhp9VOo4RnID5ywSxgBs7qiylTPlK56cTk7InR3kYSTJKYMqv/4Q/4rGo/mG8cVppesKIeBMH42fw6wjg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.9.6.tgz", - "integrity": "sha512-02TKUndpodXBCR0oP//6dZWGYcc22Upf2eP27NvC6z0DIqvkBBFziQUcvi2n6SrwTRL0yGgQjkm9K5NIn8s6jw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-riscv64-gnu": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.9.6.tgz", - "integrity": "sha512-fmp1hnulbqzl1GkXl4aTX9fV+ubHw2LqlLH1PE3BxZ11EQk+l/TmiEongjnxF0ie4kV8DQfDNJ1KGiIdWe1GvQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.9.6.tgz", - "integrity": "sha512-vY0le8ad2KaV1PJr+jCd8fUF9VOjwwQP/uBuTJvhvKTloEwxYA/kAjKK9OpIslGA9m/zcnSo74czI6bBrm2sYA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.9.6.tgz", - "integrity": "sha512-TOEuB8YCFZTWVDzsO2yW0+zGcoMiPPwcUgdnW1ODnmgfwccpnihDRoks+ABT1e3fHb1ol8QQWsHSCovb3o2ENQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.9.6.tgz", - "integrity": "sha512-ujmDGMRc4qRLAnj8nNG26Rlz9klJ0I0jmZs2BPpmNNf0gM/rcVHhqbEkAaHPTBVIrtUdf7bGvQAD2pyIiUrBHQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.9.6.tgz", - "integrity": "sha512-S4pT0yAJgFX8QRCyKA1iKjZ9Q/oPjCZf66A/VlG5Yw54Nnr88J1uBpmenINbXxzyhduWrIXBaUbEY1K80ZbpMg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.9.6.tgz", - "integrity": "sha512-ldWuWSSkWbKOPjQMJoYVj9wLHcOniv7diyI5UAJ4XsBdtaFB0pKHQsqw/ItUma0VXGC7vB4E9fZjivmxur60aw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "Apache-2.0 OR MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@tauri-apps/plugin-clipboard-manager": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-clipboard-manager/-/plugin-clipboard-manager-2.3.2.tgz", - "integrity": "sha512-CUlb5Hqi2oZbcZf4VUyUH53XWPPdtpw43EUpCza5HWZJwxEoDowFzNUDt1tRUXA8Uq+XPn17Ysfptip33sG4eQ==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3462,8 +1865,6 @@ }, "node_modules/@tauri-apps/plugin-dialog": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.4.2.tgz", - "integrity": "sha512-lNIn5CZuw8WZOn8zHzmFmDSzg5zfohWoa3mdULP0YFh/VogVdMVWZPcWSHlydsiJhRQYaTNSYKN7RmZKE2lCYQ==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3471,8 +1872,6 @@ }, "node_modules/@tauri-apps/plugin-fs": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-fs/-/plugin-fs-2.4.4.tgz", - "integrity": "sha512-MTorXxIRmOnOPT1jZ3w96vjSuScER38ryXY88vl5F0uiKdnvTKKTtaEjTEo8uPbl4e3gnUtfsDVwC7h77GQLvQ==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3480,8 +1879,6 @@ }, "node_modules/@tauri-apps/plugin-log": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-log/-/plugin-log-2.7.1.tgz", - "integrity": "sha512-jdb+o0wxQc8PjnLktgGpOs9Dh1YupaOGDXzO+Y8peA1UZ1ep3eXv4E1oiJ7nIQVN0XUFDDhnn3aBszl8ijhR+A==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3489,8 +1886,6 @@ }, "node_modules/@tauri-apps/plugin-opener": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-opener/-/plugin-opener-2.5.2.tgz", - "integrity": "sha512-ei/yRRoCklWHImwpCcDK3VhNXx+QXM9793aQ64YxpqVF0BDuuIlXhZgiAkc15wnPVav+IbkYhmDJIv5R326Mew==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3498,8 +1893,6 @@ }, "node_modules/@tauri-apps/plugin-os": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-os/-/plugin-os-2.3.2.tgz", - "integrity": "sha512-n+nXWeuSeF9wcEsSPmRnBEGrRgOy6jjkSU+UVCOV8YUGKb2erhDOxis7IqRXiRVHhY8XMKks00BJ0OAdkpf6+A==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3507,8 +1900,6 @@ }, "node_modules/@tauri-apps/plugin-shell": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.3.3.tgz", - "integrity": "sha512-Xod+pRcFxmOWFWEnqH5yZcA7qwAMuaaDkMR1Sply+F8VfBj++CGnj2xf5UoialmjZ2Cvd8qrvSCbU+7GgNVsKQ==", "license": "MIT OR Apache-2.0", "dependencies": { "@tauri-apps/api": "^2.8.0" @@ -3516,8 +1907,6 @@ }, "node_modules/@types/aws4": { "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@types/aws4/-/aws4-1.11.6.tgz", - "integrity": "sha512-5CnVUkHNyLGpD9AnOcK66YyP0qvIh6nhJJoeK8zSl5YKikUcUbdB7SlHevUYVqicgeh6j5AJa1qa/h08dSZHoA==", "dev": true, "license": "MIT", "dependencies": { @@ -3526,8 +1915,6 @@ }, "node_modules/@types/babel__core": { "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, "license": "MIT", "dependencies": { @@ -3540,8 +1927,6 @@ }, "node_modules/@types/babel__generator": { "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", "dev": true, "license": "MIT", "dependencies": { @@ -3550,8 +1935,6 @@ }, "node_modules/@types/babel__template": { "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, "license": "MIT", "dependencies": { @@ -3561,8 +1944,6 @@ }, "node_modules/@types/babel__traverse": { "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -3571,8 +1952,6 @@ }, "node_modules/@types/chai": { "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "dependencies": { @@ -3582,8 +1961,6 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "license": "MIT", "dependencies": { "@types/ms": "*" @@ -3591,21 +1968,15 @@ }, "node_modules/@types/deep-eql": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "license": "MIT", "dependencies": { "@types/estree": "*" @@ -3613,8 +1984,6 @@ }, "node_modules/@types/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "license": "MIT", "dependencies": { @@ -3624,8 +1993,6 @@ }, "node_modules/@types/hast": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -3633,27 +2000,19 @@ }, "node_modules/@types/js-cookie": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/@types/js-cookie/-/js-cookie-2.2.7.tgz", - "integrity": "sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==", "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, "node_modules/@types/jsonpath": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@types/jsonpath/-/jsonpath-0.2.4.tgz", - "integrity": "sha512-K3hxB8Blw0qgW6ExKgMbXQv2UPZBoE2GqLpVY+yr7nMD2Pq86lsuIzyAaiQ7eMqFL5B6di6pxSkogLJEyEHoGA==", "dev": true, "license": "MIT" }, "node_modules/@types/jsonwebtoken": { "version": "9.0.10", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", - "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", "dev": true, "license": "MIT", "dependencies": { @@ -3663,8 +2022,6 @@ }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -3672,28 +2029,20 @@ }, "node_modules/@types/minimatch": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", - "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "license": "MIT" }, "node_modules/@types/node": { "version": "25.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", - "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", "dependencies": { @@ -3702,15 +2051,11 @@ }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/openapi-to-postmanv2": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/openapi-to-postmanv2/-/openapi-to-postmanv2-5.0.0.tgz", - "integrity": "sha512-77mXBtgWH5a/gaN3qZtEumDZRxGtCMOhfizWC4DwkDrlfPW+mzyMRkxa17mNm2v0F1Z1+N3rCcOcH6Q4n6XKGQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3719,8 +2064,6 @@ }, "node_modules/@types/papaparse": { "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.5.2.tgz", - "integrity": "sha512-gFnFp/JMzLHCwRf7tQHrNnfhN4eYBVYYI897CGX4MY1tzY9l2aLkVyx2IlKZ/SAqDbB3I1AOZW5gTMGGsqWliA==", "dev": true, "license": "MIT", "dependencies": { @@ -3729,15 +2072,11 @@ }, "node_modules/@types/parse-color": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/parse-color/-/parse-color-1.0.3.tgz", - "integrity": "sha512-1zpnjrXCl0KklQOtMDDXhqQN9ouePkt4NBoAJ/dRjyMqWMkegyIqeZUOf3Xq4yaUPPdY8wmR8cye/D9v1kcrsQ==", "dev": true, "license": "MIT" }, "node_modules/@types/postman-collection": { "version": "3.5.11", - "resolved": "https://registry.npmjs.org/@types/postman-collection/-/postman-collection-3.5.11.tgz", - "integrity": "sha512-BZgBJDdX6jyy9hzSTIMRhCsxhF0IlzPr1i98q2wdkDo8rZrbNoBvs+3/Vw+LOIIAFH1G+FyXo5Fjf8qbawGeHg==", "dev": true, "license": "MIT", "dependencies": { @@ -3746,8 +2085,6 @@ }, "node_modules/@types/react": { "version": "19.2.7", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", - "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "license": "MIT", "dependencies": { "csstype": "^3.2.2" @@ -3755,8 +2092,6 @@ }, "node_modules/@types/react-dom": { "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "license": "MIT", "peerDependencies": { "@types/react": "^19.2.0" @@ -3764,8 +2099,6 @@ }, "node_modules/@types/react-syntax-highlighter": { "version": "15.5.13", - "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz", - "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==", "dev": true, "license": "MIT", "dependencies": { @@ -3774,35 +2107,25 @@ }, "node_modules/@types/shell-quote": { "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@types/shell-quote/-/shell-quote-1.7.5.tgz", - "integrity": "sha512-+UE8GAGRPbJVQDdxi16dgadcBfQ+KG2vgZhV1+3A1XmHbmwcdwhCUwIdy+d3pAGrbvgRoVSjeI9vOWyq376Yzw==", "dev": true, "license": "MIT" }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, "node_modules/@types/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==", "dev": true, "license": "MIT" }, "node_modules/@types/whatwg-mimetype": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz", - "integrity": "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==", "dev": true, "license": "MIT" }, "node_modules/@types/ws": { "version": "8.18.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", - "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", "dev": true, "license": "MIT", "dependencies": { @@ -3811,14 +2134,10 @@ }, "node_modules/@ungap/structured-clone": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", "dev": true, "license": "MIT", "dependencies": { @@ -3838,8 +2157,6 @@ }, "node_modules/@vitest/expect": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", - "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", "dev": true, "license": "MIT", "dependencies": { @@ -3855,8 +2172,6 @@ }, "node_modules/@vitest/mocker": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", - "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3882,8 +2197,6 @@ }, "node_modules/@vitest/pretty-format": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", - "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", "dev": true, "license": "MIT", "dependencies": { @@ -3895,8 +2208,6 @@ }, "node_modules/@vitest/runner": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", - "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3910,8 +2221,6 @@ }, "node_modules/@vitest/snapshot": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", - "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3925,8 +2234,6 @@ }, "node_modules/@vitest/spy": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", - "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", "dev": true, "license": "MIT", "dependencies": { @@ -3938,8 +2245,6 @@ }, "node_modules/@vitest/utils": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", - "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", "dev": true, "license": "MIT", "dependencies": { @@ -3953,8 +2258,6 @@ }, "node_modules/@xmldom/xmldom": { "version": "0.9.8", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.9.8.tgz", - "integrity": "sha512-p96FSY54r+WJ50FIOsCOjyj/wavs8921hG5+kVMmZgKcvIKxMXHTrjNJvRgWa/zuX3B6t2lijLNFaOyuxUH+2A==", "license": "MIT", "engines": { "node": ">=14.6" @@ -3962,8 +2265,6 @@ }, "node_modules/@xobotyi/scrollbar-width": { "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz", - "integrity": "sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ==", "license": "MIT" }, "node_modules/@yaak/action-copy-curl": { @@ -4111,15 +2412,15 @@ "link": true }, "node_modules/@yaakapp-internal/crypto": { - "resolved": "src-tauri/yaak-crypto", + "resolved": "crates/yaak-crypto", "link": true }, "node_modules/@yaakapp-internal/fonts": { - "resolved": "src-tauri/yaak-fonts", + "resolved": "crates-tauri/yaak-fonts", "link": true }, "node_modules/@yaakapp-internal/git": { - "resolved": "src-tauri/yaak-git", + "resolved": "crates/yaak-git", "link": true }, "node_modules/@yaakapp-internal/lib": { @@ -4127,15 +2428,15 @@ "link": true }, "node_modules/@yaakapp-internal/license": { - "resolved": "src-tauri/yaak-license", + "resolved": "crates-tauri/yaak-license", "link": true }, "node_modules/@yaakapp-internal/mac-window": { - "resolved": "src-tauri/yaak-mac-window", + "resolved": "crates-tauri/yaak-mac-window", "link": true }, "node_modules/@yaakapp-internal/models": { - "resolved": "src-tauri/yaak-models", + "resolved": "crates/yaak-models", "link": true }, "node_modules/@yaakapp-internal/plugin-runtime": { @@ -4143,27 +2444,27 @@ "link": true }, "node_modules/@yaakapp-internal/plugins": { - "resolved": "src-tauri/yaak-plugins", + "resolved": "crates/yaak-plugins", "link": true }, "node_modules/@yaakapp-internal/sse": { - "resolved": "src-tauri/yaak-sse", + "resolved": "crates/yaak-sse", "link": true }, "node_modules/@yaakapp-internal/sync": { - "resolved": "src-tauri/yaak-sync", + "resolved": "crates/yaak-sync", "link": true }, "node_modules/@yaakapp-internal/tauri": { - "resolved": "src-tauri", + "resolved": "crates-tauri/yaak-app", "link": true }, "node_modules/@yaakapp-internal/templates": { - "resolved": "src-tauri/yaak-templates", + "resolved": "crates/yaak-templates", "link": true }, "node_modules/@yaakapp-internal/ws": { - "resolved": "src-tauri/yaak-ws", + "resolved": "crates/yaak-ws", "link": true }, "node_modules/@yaakapp/api": { @@ -4176,8 +2477,6 @@ }, "node_modules/@yaakapp/cli": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli/-/cli-0.3.4.tgz", - "integrity": "sha512-bSSL3noEfyoPC0M+bj34jbBZbB+gwYLCHL9cf6BYHgkRQKlHFpvN6z8M2jQZljb+CTQdHK0NzosmwHLpjMmAVA==", "dev": true, "hasInstallScript": true, "bin": { @@ -4194,8 +2493,6 @@ }, "node_modules/@yaakapp/cli-darwin-arm64": { "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli-darwin-arm64/-/cli-darwin-arm64-0.3.4.tgz", - "integrity": "sha512-iTohEO7XSVZwSvTgEQE9my3wGyWtTl1q8yfol7hHwVFTX7G8Geh8X2j2vVokHhj7J9OZL9jtYQWIsM1ekOHSEQ==", "cpu": [ "arm64" ], @@ -4205,75 +2502,8 @@ "darwin" ] }, - "node_modules/@yaakapp/cli-darwin-x64": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli-darwin-x64/-/cli-darwin-x64-0.3.4.tgz", - "integrity": "sha512-gz7IcjFGKA0cCAum1Aq8kmVg7erYYSrZ9pliDw0NZyObjrBysJcsDXLodEU437u0pihtdCfoLsq3rsYYs8uwCA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@yaakapp/cli-linux-arm64": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli-linux-arm64/-/cli-linux-arm64-0.3.4.tgz", - "integrity": "sha512-Yiwz8PBkXngmr0lTMW1pgy+F/kUISkzvqofdoBseXTrS/GDxoW3ILnG3If30LuIyWWPgqpuU+qKMtbVDzuncPQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yaakapp/cli-linux-x64": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli-linux-x64/-/cli-linux-x64-0.3.4.tgz", - "integrity": "sha512-j7/r18UYNlFChDVU5N5ye3mmL+OR9Uu3LY72JxW+s/SyV69Bo8Griii75Wt19z/jj2ES8pxD+4IJq56VF3wJ7w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@yaakapp/cli-win32-arm64": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli-win32-arm64/-/cli-win32-arm64-0.3.4.tgz", - "integrity": "sha512-OUSKOKrSnzrTAGW0c+2ZCwA4yhgw/bA+gyeTvpf7cELVuB0qooGkEcJ3lM7fPMKmUbFU0r+K/Ggq1QMUr7cJLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@yaakapp/cli-win32-x64": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@yaakapp/cli-win32-x64/-/cli-win32-x64-0.3.4.tgz", - "integrity": "sha512-sVYnW1rROLbzFUCyeZ++ibN+8gJS7FdPnBRHIE0KORfeI4e7Gw/aMUji2qpSZ1gt3DrAU95DDNjBkDvGBAgqag==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -4285,8 +2515,6 @@ }, "node_modules/accepts/node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -4294,8 +2522,6 @@ }, "node_modules/accepts/node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -4310,8 +2536,6 @@ }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, "license": "MIT", "bin": { @@ -4323,8 +2547,6 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4336,8 +2558,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -4350,8 +2570,6 @@ }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -4366,8 +2584,6 @@ }, "node_modules/ajv-draft-04": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz", - "integrity": "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==", "license": "MIT", "peerDependencies": { "ajv": "^8.5.0" @@ -4380,8 +2596,6 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -4397,8 +2611,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -4406,8 +2618,6 @@ }, "node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "license": "MIT", "dependencies": { @@ -4419,8 +2629,6 @@ }, "node_modules/ansis": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz", - "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==", "dev": true, "license": "ISC", "engines": { @@ -4429,15 +2637,11 @@ }, "node_modules/any-promise": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", "dev": true, "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -4450,8 +2654,6 @@ }, "node_modules/anymatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -4463,21 +2665,15 @@ }, "node_modules/arg": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true, "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, "license": "MIT", "engines": { @@ -4486,8 +2682,6 @@ }, "node_modules/arr-flatten": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "license": "MIT", "engines": { @@ -4496,8 +2690,6 @@ }, "node_modules/arr-union": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, "license": "MIT", "engines": { @@ -4506,8 +2698,6 @@ }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -4522,8 +2712,6 @@ }, "node_modules/array-includes": { "version": "3.1.9", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", - "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4545,8 +2733,6 @@ }, "node_modules/array-union": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", "dev": true, "license": "MIT", "dependencies": { @@ -4558,8 +2744,6 @@ }, "node_modules/array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true, "license": "MIT", "engines": { @@ -4568,8 +2752,6 @@ }, "node_modules/array-unique": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, "license": "MIT", "engines": { @@ -4578,8 +2760,6 @@ }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4600,8 +2780,6 @@ }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -4610,8 +2788,6 @@ }, "node_modules/assertion-error": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "license": "MIT", "engines": { @@ -4620,8 +2796,6 @@ }, "node_modules/assign-symbols": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, "license": "MIT", "engines": { @@ -4630,8 +2804,6 @@ }, "node_modules/ast-types": { "version": "0.16.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", - "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, "license": "MIT", "dependencies": { @@ -4643,14 +2815,10 @@ }, "node_modules/async": { "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, "node_modules/async-each": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", "dev": true, "funding": [ { @@ -4662,8 +2830,6 @@ }, "node_modules/async-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, "license": "MIT", "engines": { @@ -4672,8 +2838,6 @@ }, "node_modules/atob": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, "license": "(MIT OR Apache-2.0)", "bin": { @@ -4685,8 +2849,6 @@ }, "node_modules/autoprefixer": { "version": "10.4.23", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.23.tgz", - "integrity": "sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==", "dev": true, "funding": [ { @@ -4722,8 +2884,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -4737,14 +2897,10 @@ }, "node_modules/aws4": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", - "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", "license": "MIT" }, "node_modules/babel-dead-code-elimination": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/babel-dead-code-elimination/-/babel-dead-code-elimination-1.0.11.tgz", - "integrity": "sha512-mwq3W3e/pKSI6TG8lXMiDWvEi1VXYlSBlJlB3l+I0bAb5u1RNUl88udos85eOPNK3m5EXK9uO7d2g08pesTySQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4756,8 +2912,6 @@ }, "node_modules/babel-runtime": { "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", "dev": true, "license": "MIT", "dependencies": { @@ -4767,8 +2921,6 @@ }, "node_modules/bail": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", "funding": { "type": "github", @@ -4777,15 +2929,11 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, "license": "MIT" }, "node_modules/base": { "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "license": "MIT", "dependencies": { @@ -4803,8 +2951,6 @@ }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "license": "MIT", "dependencies": { @@ -4816,8 +2962,6 @@ }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -4836,8 +2980,6 @@ }, "node_modules/baseline-browser-mapping": { "version": "2.9.11", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", - "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -4846,8 +2988,6 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { @@ -4859,8 +2999,6 @@ }, "node_modules/bindings": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "license": "MIT", "optional": true, @@ -4870,8 +3008,6 @@ }, "node_modules/bl": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, "license": "MIT", "dependencies": { @@ -4881,15 +3017,11 @@ }, "node_modules/bl/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/bl/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -4904,15 +3036,11 @@ }, "node_modules/bl/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/bl/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -4921,8 +3049,6 @@ }, "node_modules/body-parser": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", - "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -4945,8 +3071,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, "license": "MIT", "dependencies": { @@ -4956,8 +3080,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -4968,8 +3090,6 @@ }, "node_modules/browserslist": { "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "devOptional": true, "funding": [ { @@ -5002,8 +3122,6 @@ }, "node_modules/buffer": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "funding": [ { "type": "github", @@ -5026,8 +3144,6 @@ }, "node_modules/buffer-alloc": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "license": "MIT", "dependencies": { @@ -5037,15 +3153,11 @@ }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true, "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, "license": "MIT", "engines": { @@ -5054,21 +3166,15 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "license": "BSD-3-Clause" }, "node_modules/buffer-fill": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true, "license": "MIT" }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -5076,8 +3182,6 @@ }, "node_modules/cac": { "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, "license": "MIT", "engines": { @@ -5086,8 +3190,6 @@ }, "node_modules/cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5107,8 +3209,6 @@ }, "node_modules/call-bind": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", @@ -5125,8 +3225,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5138,8 +3236,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -5154,14 +3250,10 @@ }, "node_modules/call-me-maybe": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", - "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "license": "MIT", "engines": { "node": ">=6" @@ -5169,8 +3261,6 @@ }, "node_modules/camelcase": { "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "license": "MIT", "engines": { "node": ">=6" @@ -5178,8 +3268,6 @@ }, "node_modules/camelcase-css": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, "license": "MIT", "engines": { @@ -5188,8 +3276,6 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -5206,8 +3292,6 @@ }, "node_modules/caniuse-lite": { "version": "1.0.30001762", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", - "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", "devOptional": true, "funding": [ { @@ -5227,8 +3311,6 @@ }, "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "license": "MIT", "funding": { "type": "github", @@ -5237,8 +3319,6 @@ }, "node_modules/chai": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz", - "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==", "dev": true, "license": "MIT", "dependencies": { @@ -5254,8 +3334,6 @@ }, "node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5269,8 +3347,6 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "license": "MIT", "funding": { "type": "github", @@ -5279,8 +3355,6 @@ }, "node_modules/character-entities-html4": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "license": "MIT", "funding": { "type": "github", @@ -5289,8 +3363,6 @@ }, "node_modules/character-entities-legacy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "license": "MIT", "funding": { "type": "github", @@ -5299,8 +3371,6 @@ }, "node_modules/character-reference-invalid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "license": "MIT", "funding": { "type": "github", @@ -5309,8 +3379,6 @@ }, "node_modules/charset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", "license": "MIT", "engines": { "node": ">=4.0.0" @@ -5318,8 +3386,6 @@ }, "node_modules/check-error": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz", - "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==", "dev": true, "license": "MIT", "engines": { @@ -5328,8 +3394,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -5353,8 +3417,6 @@ }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -5366,15 +3428,11 @@ }, "node_modules/chunkd": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", - "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", "dev": true, "license": "MIT" }, "node_modules/cidr-regex": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.0.3.tgz", - "integrity": "sha512-HOwDIy/rhKeMf6uOzxtv7FAbrz8zPjmVKfSpM+U7/bNBXC5rtOyr758jxcptiSx6ZZn5LOhPJT5WWxPAGDV8dw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5386,8 +3444,6 @@ }, "node_modules/cidr-tools": { "version": "6.4.2", - "resolved": "https://registry.npmjs.org/cidr-tools/-/cidr-tools-6.4.2.tgz", - "integrity": "sha512-KZC8t2ipCqU2M+ISmTxRDGu9bku5MRU3V1cWyGEFJTZEzRhGvBJvVsbpZO5UAu12fExRFihtYGXAlgFFpmK9jw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -5402,8 +3458,6 @@ }, "node_modules/class-utils": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "license": "MIT", "dependencies": { @@ -5418,8 +3472,6 @@ }, "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "license": "MIT", "dependencies": { @@ -5431,8 +3483,6 @@ }, "node_modules/class-utils/node_modules/is-descriptor": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -5445,14 +3495,10 @@ }, "node_modules/classnames": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -5461,8 +3507,6 @@ }, "node_modules/cliui": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -5472,8 +3516,6 @@ }, "node_modules/clone-regexp": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", - "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", "dev": true, "license": "MIT", "dependencies": { @@ -5488,8 +3530,6 @@ }, "node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { "node": ">=6" @@ -5497,8 +3537,6 @@ }, "node_modules/cm6-graphql": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cm6-graphql/-/cm6-graphql-0.2.1.tgz", - "integrity": "sha512-FIAFHn6qyiXChTz3Pml0NgTM8LyyXs8QfP2iPG7MLA8Xi83WuVlkGG5PDs+DDeEVabHkLIZmcyNngQlxLXKk6A==", "license": "MIT", "dependencies": { "graphql-language-service": "^5.3.0" @@ -5515,8 +3553,6 @@ }, "node_modules/codemirror-json-schema": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/codemirror-json-schema/-/codemirror-json-schema-0.6.1.tgz", - "integrity": "sha512-QG12Jy917eStZzxurpAE9QUQxF8SS/AYJ9DDteyJZcRGH8ePaBCfQ4KLCNtY6cUKjFeNBgcd5+c6FPAri6pPQg==", "license": "MIT", "dependencies": { "@changesets/changelog-github": "^0.4.8", @@ -5541,8 +3577,6 @@ }, "node_modules/codemirror-json-schema/node_modules/@types/node": { "version": "20.19.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", - "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -5550,14 +3584,10 @@ }, "node_modules/codemirror-json-schema/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/codemirror-json5": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/codemirror-json5/-/codemirror-json5-1.0.3.tgz", - "integrity": "sha512-HmmoYO2huQxoaoG5ARKjqQc9mz7/qmNPvMbISVfIE2Gk1+4vZQg9X3G6g49MYM5IK00Ol3aijd7OKrySuOkA7Q==", "license": "MIT", "optional": true, "dependencies": { @@ -5572,8 +3602,6 @@ }, "node_modules/collection-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, "license": "MIT", "dependencies": { @@ -5586,8 +3614,6 @@ }, "node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5596,15 +3622,11 @@ }, "node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true, "license": "MIT" }, "node_modules/comma-separated-tokens": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "license": "MIT", "funding": { "type": "github", @@ -5613,14 +3635,10 @@ }, "node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, "node_modules/component-emitter": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", "dev": true, "license": "MIT", "funding": { @@ -5629,8 +3647,6 @@ }, "node_modules/compute-gcd": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", - "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", "dependencies": { "validate.io-array": "^1.0.3", "validate.io-function": "^1.0.2", @@ -5639,8 +3655,6 @@ }, "node_modules/compute-lcm": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", - "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", "dependencies": { "compute-gcd": "^1.2.1", "validate.io-array": "^1.0.3", @@ -5650,15 +3664,11 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, "license": "MIT" }, "node_modules/content-disposition": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", "engines": { "node": ">=18" @@ -5670,8 +3680,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5679,8 +3687,6 @@ }, "node_modules/convert-hrtime": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", - "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", "dev": true, "license": "MIT", "engines": { @@ -5692,15 +3698,11 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "devOptional": true, "license": "MIT" }, "node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -5708,14 +3710,10 @@ }, "node_modules/cookie-es": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-2.0.0.tgz", - "integrity": "sha512-RAj4E421UYRgqokKUmotqAwuplYw15qtdXfY+hGzgCJ/MBjCVZcSoHK/kH9kocfjRjcDME7IiDWR/1WX1TM2Pg==", "license": "MIT" }, "node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { "node": ">=6.6.0" @@ -5723,8 +3721,6 @@ }, "node_modules/copy-descriptor": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, "license": "MIT", "engines": { @@ -5733,8 +3729,6 @@ }, "node_modules/copy-to-clipboard": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", - "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", "license": "MIT", "dependencies": { "toggle-selection": "^1.0.6" @@ -5742,24 +3736,17 @@ }, "node_modules/core-js": { "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", "dev": true, "hasInstallScript": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -5771,8 +3758,6 @@ }, "node_modules/cosmiconfig": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "license": "MIT", "dependencies": { "env-paths": "^2.2.1", @@ -5797,8 +3782,6 @@ }, "node_modules/cosmiconfig/node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -5815,8 +3798,6 @@ }, "node_modules/cp-file": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-10.0.0.tgz", - "integrity": "sha512-vy2Vi1r2epK5WqxOLnskeKeZkdZvTKfFZQCplE3XWsP+SUJyd5XAUFC9lFgTjjXJF2GMne/UML14iEmkAaDfFg==", "dev": true, "license": "MIT", "dependencies": { @@ -5833,8 +3814,6 @@ }, "node_modules/cpx": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cpx/-/cpx-1.5.0.tgz", - "integrity": "sha512-jHTjZhsbg9xWgsP2vuNW2jnnzBX+p4T+vNI9Lbjzs1n4KhOfa22bQppiFYLsWQKd8TzmL5aSP/Me3yfsCwXbDA==", "dev": true, "license": "MIT", "dependencies": { @@ -5856,8 +3835,6 @@ }, "node_modules/cpx/node_modules/anymatch": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "license": "ISC", "dependencies": { @@ -5867,8 +3844,6 @@ }, "node_modules/cpx/node_modules/arr-diff": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", "dev": true, "license": "MIT", "dependencies": { @@ -5880,8 +3855,6 @@ }, "node_modules/cpx/node_modules/array-unique": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", "dev": true, "license": "MIT", "engines": { @@ -5890,8 +3863,6 @@ }, "node_modules/cpx/node_modules/binary-extensions": { "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, "license": "MIT", "engines": { @@ -5900,8 +3871,6 @@ }, "node_modules/cpx/node_modules/braces": { "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", "dev": true, "license": "MIT", "dependencies": { @@ -5915,8 +3884,6 @@ }, "node_modules/cpx/node_modules/chokidar": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", "dev": true, "license": "MIT", "dependencies": { @@ -5935,8 +3902,6 @@ }, "node_modules/cpx/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -5945,8 +3910,6 @@ }, "node_modules/cpx/node_modules/expand-brackets": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", "dev": true, "license": "MIT", "dependencies": { @@ -5958,8 +3921,6 @@ }, "node_modules/cpx/node_modules/extglob": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", "dev": true, "license": "MIT", "dependencies": { @@ -5971,8 +3932,6 @@ }, "node_modules/cpx/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -5987,8 +3946,6 @@ }, "node_modules/cpx/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -6000,9 +3957,6 @@ }, "node_modules/cpx/node_modules/fsevents": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -6020,8 +3974,6 @@ }, "node_modules/cpx/node_modules/glob-parent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "dev": true, "license": "ISC", "dependencies": { @@ -6030,8 +3982,6 @@ }, "node_modules/cpx/node_modules/is-binary-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -6043,8 +3993,6 @@ }, "node_modules/cpx/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -6053,8 +4001,6 @@ }, "node_modules/cpx/node_modules/is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, "license": "MIT", "engines": { @@ -6063,8 +4009,6 @@ }, "node_modules/cpx/node_modules/is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -6076,8 +4020,6 @@ }, "node_modules/cpx/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "license": "MIT", "dependencies": { @@ -6089,15 +4031,11 @@ }, "node_modules/cpx/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/cpx/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6109,8 +4047,6 @@ }, "node_modules/cpx/node_modules/micromatch": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "dev": true, "license": "MIT", "dependencies": { @@ -6134,15 +4070,11 @@ }, "node_modules/cpx/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/cpx/node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -6154,8 +4086,6 @@ }, "node_modules/cpx/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -6170,8 +4100,6 @@ }, "node_modules/cpx/node_modules/readdirp": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6185,8 +4113,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/arr-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, "license": "MIT", "engines": { @@ -6195,8 +4121,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/array-unique": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, "license": "MIT", "engines": { @@ -6205,8 +4129,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "license": "MIT", "dependencies": { @@ -6227,8 +4149,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -6240,8 +4160,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, "license": "MIT", "dependencies": { @@ -6259,8 +4177,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "license": "MIT", "dependencies": { @@ -6272,8 +4188,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -6285,8 +4199,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -6299,8 +4211,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "license": "MIT", "dependencies": { @@ -6319,8 +4229,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/extglob/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "license": "MIT", "dependencies": { @@ -6332,8 +4240,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -6345,8 +4251,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -6355,8 +4259,6 @@ }, "node_modules/cpx/node_modules/readdirp/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "license": "MIT", "dependencies": { @@ -6380,15 +4282,11 @@ }, "node_modules/cpx/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/cpx/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -6397,8 +4295,6 @@ }, "node_modules/cpx/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "license": "MIT", "dependencies": { @@ -6411,8 +4307,6 @@ }, "node_modules/cpy": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/cpy/-/cpy-10.1.0.tgz", - "integrity": "sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6434,8 +4328,6 @@ }, "node_modules/cpy-cli": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cpy-cli/-/cpy-cli-5.0.0.tgz", - "integrity": "sha512-fb+DZYbL9KHc0BC4NYqGRrDIJZPXUmjjtqdw4XRRg8iV8dIfghUX/WiL+q4/B/KFTy3sK6jsbUhBaz0/Hxg7IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6454,8 +4346,6 @@ }, "node_modules/cpy-cli/node_modules/meow": { "version": "12.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz", - "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true, "license": "MIT", "engines": { @@ -6467,8 +4357,6 @@ }, "node_modules/cpy/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -6477,8 +4365,6 @@ }, "node_modules/cpy/node_modules/arrify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", "dev": true, "license": "MIT", "engines": { @@ -6490,8 +4376,6 @@ }, "node_modules/cpy/node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", "dependencies": { @@ -6503,8 +4387,6 @@ }, "node_modules/cpy/node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -6520,8 +4402,6 @@ }, "node_modules/cpy/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -6533,8 +4413,6 @@ }, "node_modules/cpy/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "dev": true, "license": "MIT", "dependencies": { @@ -6553,8 +4431,6 @@ }, "node_modules/cpy/node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -6563,8 +4439,6 @@ }, "node_modules/cpy/node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", "engines": { @@ -6573,8 +4447,6 @@ }, "node_modules/cpy/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, "license": "MIT", "engines": { @@ -6586,14 +4458,10 @@ }, "node_modules/crelt": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -6606,8 +4474,6 @@ }, "node_modules/css-in-js-utils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-in-js-utils/-/css-in-js-utils-3.1.0.tgz", - "integrity": "sha512-fJAcud6B3rRu+KHYk+Bwf+WFL2MDCJJ1XG9x137tJQ0xYxor7XziQtuGFbWNdqrvF4Tk26O3H73nfVqXt/fW1A==", "license": "MIT", "dependencies": { "hyphenate-style-name": "^1.0.3" @@ -6615,8 +4481,6 @@ }, "node_modules/css-tree": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "license": "MIT", "dependencies": { "mdn-data": "2.0.14", @@ -6628,8 +4492,6 @@ }, "node_modules/css-tree/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -6637,8 +4499,6 @@ }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", "bin": { @@ -6650,14 +4510,10 @@ }, "node_modules/csstype": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6674,8 +4530,6 @@ }, "node_modules/data-view-byte-length": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6692,8 +4546,6 @@ }, "node_modules/data-view-byte-offset": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6710,14 +4562,10 @@ }, "node_modules/dataloader": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", - "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==", "license": "BSD-3-Clause" }, "node_modules/date-fns": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", - "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", "license": "MIT", "funding": { "type": "github", @@ -6726,14 +4574,10 @@ }, "node_modules/debounce-promise": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz", - "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==", "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -6749,8 +4593,6 @@ }, "node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6758,8 +4600,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -6775,8 +4615,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -6785,8 +4623,6 @@ }, "node_modules/decode-named-character-reference": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz", - "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -6798,8 +4634,6 @@ }, "node_modules/decode-uri-component": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, "license": "MIT", "engines": { @@ -6808,8 +4642,6 @@ }, "node_modules/decompress": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6828,8 +4660,6 @@ }, "node_modules/decompress-tar": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6843,8 +4673,6 @@ }, "node_modules/decompress-tarbz2": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "license": "MIT", "dependencies": { @@ -6860,8 +4688,6 @@ }, "node_modules/decompress-tarbz2/node_modules/file-type": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true, "license": "MIT", "engines": { @@ -6870,8 +4696,6 @@ }, "node_modules/decompress-targz": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "license": "MIT", "dependencies": { @@ -6885,8 +4709,6 @@ }, "node_modules/decompress-unzip": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, "license": "MIT", "dependencies": { @@ -6901,8 +4723,6 @@ }, "node_modules/decompress-unzip/node_modules/file-type": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, "license": "MIT", "engines": { @@ -6911,8 +4731,6 @@ }, "node_modules/decompress-unzip/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -6921,8 +4739,6 @@ }, "node_modules/decompress/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -6931,8 +4747,6 @@ }, "node_modules/deep-eql": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, "license": "MIT", "engines": { @@ -6941,8 +4755,6 @@ }, "node_modules/deep-equal": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", - "integrity": "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.0", @@ -6973,8 +4785,6 @@ }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6982,8 +4792,6 @@ }, "node_modules/default-gateway": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-7.2.2.tgz", - "integrity": "sha512-AD7TrdNNPXRZIGw63dw+lnGmT4v7ggZC5NHNJgAYWm5njrwoze1q5JSAW9YuLy2tjnoLUG/r8FEB93MCh9QJPg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -6995,8 +4803,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -7012,8 +4818,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -7029,8 +4833,6 @@ }, "node_modules/define-property": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7043,8 +4845,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7052,8 +4852,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { "node": ">=6" @@ -7061,8 +4859,6 @@ }, "node_modules/des.js": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -7071,8 +4867,6 @@ }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "license": "MIT", "dependencies": { "dequal": "^2.0.0" @@ -7084,15 +4878,11 @@ }, "node_modules/didyoumean": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true, "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -7100,8 +4890,6 @@ }, "node_modules/dir-glob": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "license": "MIT", "dependencies": { @@ -7113,21 +4901,15 @@ }, "node_modules/discontinuous-range": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", "license": "MIT" }, "node_modules/dlv": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true, "license": "MIT" }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "license": "MIT", "dependencies": { @@ -7137,8 +4919,6 @@ }, "node_modules/dotenv": { "version": "17.2.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", - "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7150,8 +4930,6 @@ }, "node_modules/dotenv-cli": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-11.0.0.tgz", - "integrity": "sha512-r5pA8idbk7GFWuHEU7trSTflWcdBpQEK+Aw17UrSHjS6CReuhrrPcyC3zcQBPQvhArRHnBo/h6eLH1fkCvNlww==", "dev": true, "license": "MIT", "dependencies": { @@ -7166,8 +4944,6 @@ }, "node_modules/dotenv-expand": { "version": "12.0.3", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.3.tgz", - "integrity": "sha512-uc47g4b+4k/M/SeaW1y4OApx+mtLWl92l5LMPP0GNXctZqELk+YGgOPIIC5elYmUH4OuoK3JLhuRUYegeySiFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -7182,8 +4958,6 @@ }, "node_modules/dotenv-expand/node_modules/dotenv": { "version": "16.6.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", - "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7195,8 +4969,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -7209,15 +4981,11 @@ }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true, "license": "MIT" }, "node_modules/duplexer2": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "license": "BSD", "dependencies": { @@ -7226,8 +4994,6 @@ }, "node_modules/ebnf": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ebnf/-/ebnf-1.9.1.tgz", - "integrity": "sha512-uW2UKSsuty9ANJ3YByIQE4ANkD8nqUPO7r6Fwcc1ADKPe9FRdcPpMl3VEput4JSvKBJ4J86npIC2MLP0pYkCuw==", "license": "MIT", "bin": { "ebnf": "dist/bin.js" @@ -7235,8 +5001,6 @@ }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" @@ -7244,27 +5008,19 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/electron-to-chromium": { "version": "1.5.267", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", - "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "devOptional": true, "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7272,8 +5028,6 @@ }, "node_modules/end-of-stream": { "version": "1.4.5", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", - "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, "license": "MIT", "dependencies": { @@ -7282,8 +5036,6 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -7295,8 +5047,6 @@ }, "node_modules/env-paths": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "license": "MIT", "engines": { "node": ">=6" @@ -7304,8 +5054,6 @@ }, "node_modules/error-ex": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" @@ -7313,8 +5061,6 @@ }, "node_modules/error-stack-parser": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", "license": "MIT", "dependencies": { "stackframe": "^1.3.4" @@ -7322,8 +5068,6 @@ }, "node_modules/es-abstract": { "version": "1.24.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", - "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "dev": true, "license": "MIT", "dependencies": { @@ -7391,8 +5135,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7400,8 +5142,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -7409,8 +5149,6 @@ }, "node_modules/es-get-iterator": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -7429,15 +5167,11 @@ }, "node_modules/es-module-lexer": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", - "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -7448,8 +5182,6 @@ }, "node_modules/es-set-tostringtag": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, "license": "MIT", "dependencies": { @@ -7464,8 +5196,6 @@ }, "node_modules/es-to-primitive": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { @@ -7482,14 +5212,10 @@ }, "node_modules/es6-promise": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", "license": "MIT" }, "node_modules/esbuild": { "version": "0.27.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", - "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -7530,8 +5256,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -7539,14 +5263,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -7555,8 +5275,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", "bin": { @@ -7569,8 +5287,6 @@ }, "node_modules/estree-util-is-identifier-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", "license": "MIT", "funding": { "type": "opencollective", @@ -7579,8 +5295,6 @@ }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { @@ -7589,8 +5303,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7598,14 +5310,10 @@ }, "node_modules/eventemitter3": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, "node_modules/eventsource": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -7616,8 +5324,6 @@ }, "node_modules/eventsource-parser": { "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -7625,8 +5331,6 @@ }, "node_modules/execa": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", "dev": true, "license": "MIT", "dependencies": { @@ -7649,8 +5353,6 @@ }, "node_modules/execa/node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "license": "MIT", "engines": { @@ -7662,8 +5364,6 @@ }, "node_modules/execa/node_modules/is-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, "license": "MIT", "engines": { @@ -7675,8 +5375,6 @@ }, "node_modules/expand-brackets": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, "license": "MIT", "dependencies": { @@ -7694,8 +5392,6 @@ }, "node_modules/expand-brackets/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -7704,8 +5400,6 @@ }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "license": "MIT", "dependencies": { @@ -7717,8 +5411,6 @@ }, "node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -7730,8 +5422,6 @@ }, "node_modules/expand-brackets/node_modules/is-descriptor": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -7744,8 +5434,6 @@ }, "node_modules/expand-brackets/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -7754,15 +5442,11 @@ }, "node_modules/expand-brackets/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/expand-range": { "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", "dev": true, "license": "MIT", "dependencies": { @@ -7774,8 +5458,6 @@ }, "node_modules/expand-range/node_modules/fill-range": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7791,8 +5473,6 @@ }, "node_modules/expand-range/node_modules/is-number": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", "dev": true, "license": "MIT", "dependencies": { @@ -7804,15 +5484,11 @@ }, "node_modules/expand-range/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/expand-range/node_modules/isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, "license": "MIT", "dependencies": { @@ -7824,8 +5500,6 @@ }, "node_modules/expand-range/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7837,8 +5511,6 @@ }, "node_modules/expect-type": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -7847,8 +5519,6 @@ }, "node_modules/express": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -7890,8 +5560,6 @@ }, "node_modules/express-rate-limit": { "version": "7.5.1", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "license": "MIT", "engines": { "node": ">= 16" @@ -7905,8 +5573,6 @@ }, "node_modules/express/node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7914,8 +5580,6 @@ }, "node_modules/express/node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -7930,14 +5594,10 @@ }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, "node_modules/extend-shallow": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -7950,8 +5610,6 @@ }, "node_modules/extglob": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "license": "MIT", "dependencies": { @@ -7970,8 +5628,6 @@ }, "node_modules/extglob/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "license": "MIT", "dependencies": { @@ -7983,8 +5639,6 @@ }, "node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -7996,8 +5650,6 @@ }, "node_modules/extglob/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -8006,20 +5658,14 @@ }, "node_modules/fast-copy": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-glob": { "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "license": "MIT", "dependencies": { @@ -8036,8 +5682,6 @@ }, "node_modules/fast-glob/node_modules/braces": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "license": "MIT", "dependencies": { @@ -8058,8 +5702,6 @@ }, "node_modules/fast-glob/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -8071,8 +5713,6 @@ }, "node_modules/fast-glob/node_modules/fill-range": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8087,8 +5727,6 @@ }, "node_modules/fast-glob/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -8100,8 +5738,6 @@ }, "node_modules/fast-glob/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -8110,8 +5746,6 @@ }, "node_modules/fast-glob/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "license": "MIT", "dependencies": { @@ -8123,8 +5757,6 @@ }, "node_modules/fast-glob/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8136,8 +5768,6 @@ }, "node_modules/fast-glob/node_modules/micromatch": { "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "license": "MIT", "dependencies": { @@ -8161,8 +5791,6 @@ }, "node_modules/fast-glob/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, "license": "MIT", "dependencies": { @@ -8175,19 +5803,13 @@ }, "node_modules/fast-safe-stringify": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", "license": "MIT" }, "node_modules/fast-shallow-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz", - "integrity": "sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==" + "version": "1.0.0" }, "node_modules/fast-uri": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -8202,14 +5824,10 @@ }, "node_modules/fastest-stable-stringify": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz", - "integrity": "sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q==", "license": "MIT" }, "node_modules/fastq": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", - "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -8217,8 +5835,6 @@ }, "node_modules/fault": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", - "integrity": "sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==", "license": "MIT", "dependencies": { "format": "^0.2.0" @@ -8230,8 +5846,6 @@ }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, "license": "MIT", "dependencies": { @@ -8240,8 +5854,6 @@ }, "node_modules/fdir": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", "engines": { @@ -8258,8 +5870,6 @@ }, "node_modules/file-type": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, "license": "MIT", "engines": { @@ -8268,16 +5878,12 @@ }, "node_modules/file-uri-to-path": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, "license": "MIT", "optional": true }, "node_modules/filename-regex": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", "dev": true, "license": "MIT", "engines": { @@ -8286,8 +5892,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -8298,8 +5902,6 @@ }, "node_modules/finalhandler": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -8319,15 +5921,11 @@ }, "node_modules/find-index": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==", "dev": true, "license": "MIT" }, "node_modules/find-up": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "license": "MIT", "dependencies": { "locate-path": "^5.0.0", @@ -8339,8 +5937,6 @@ }, "node_modules/focus-trap": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.7.1.tgz", - "integrity": "sha512-Pkp8m55GjxBLnhBoT6OXdMvfRr4TjMAKLvFM566zlIryq5plbhaTmLAJWTGR0EkRwLjEte1lCOG9MxF1ipJrOg==", "license": "MIT", "dependencies": { "tabbable": "^6.4.0" @@ -8348,8 +5944,6 @@ }, "node_modules/focus-trap-react": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/focus-trap-react/-/focus-trap-react-11.0.4.tgz", - "integrity": "sha512-tC7jC/yqeAqhe4irNIzdyDf9XCtGSeECHiBSYJBO/vIN0asizbKZCt8TarB6/XqIceu42ajQ/U4lQJ9pZlWjrg==", "license": "MIT", "dependencies": { "focus-trap": "^7.6.5", @@ -8364,8 +5958,6 @@ }, "node_modules/follow-redirects": { "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", "dev": true, "funding": [ { @@ -8385,8 +5977,6 @@ }, "node_modules/for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", - "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "license": "MIT", "dependencies": { "is-callable": "^1.2.7" @@ -8400,8 +5990,6 @@ }, "node_modules/for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, "license": "MIT", "engines": { @@ -8410,8 +5998,6 @@ }, "node_modules/for-own": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", "dev": true, "license": "MIT", "dependencies": { @@ -8423,22 +6009,16 @@ }, "node_modules/foreach": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", - "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", "license": "MIT" }, "node_modules/format": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "engines": { "node": ">=0.4.x" } }, "node_modules/format-graphql": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/format-graphql/-/format-graphql-1.5.0.tgz", - "integrity": "sha512-ZZWcjwJ1IMdnW9l3CeYccC/J7skqOB18tY3autO5OUQuGVZpQu6Es3SThRm25SfiMeZO1+UbzIqnGbjAURu/UA==", "dependencies": { "graphql": "^15.1.0", "yargs": "^15.3.1" @@ -8452,8 +6032,6 @@ }, "node_modules/format-graphql/node_modules/graphql": { "version": "15.10.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-15.10.1.tgz", - "integrity": "sha512-BL/Xd/T9baO6NFzoMpiMD7YUZ62R6viR5tp/MULVEnbYJXZA//kRNW7J0j1w/wXArgL0sCxhDfK5dczSKn3+cg==", "license": "MIT", "engines": { "node": ">= 10.x" @@ -8461,8 +6039,6 @@ }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -8470,8 +6046,6 @@ }, "node_modules/fraction.js": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", - "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, "license": "MIT", "engines": { @@ -8484,8 +6058,6 @@ }, "node_modules/fragment-cache": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, "license": "MIT", "dependencies": { @@ -8497,8 +6069,6 @@ }, "node_modules/framer-motion": { "version": "12.23.26", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.23.26.tgz", - "integrity": "sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA==", "license": "MIT", "dependencies": { "motion-dom": "^12.23.23", @@ -8524,8 +6094,6 @@ }, "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8533,15 +6101,11 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true, "license": "MIT" }, "node_modules/fs-extra": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "license": "MIT", "dependencies": { @@ -8555,17 +6119,12 @@ }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true, "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ @@ -8577,8 +6136,6 @@ }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8586,8 +6143,6 @@ }, "node_modules/function-timeout": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", - "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", "dev": true, "license": "MIT", "engines": { @@ -8599,8 +6154,6 @@ }, "node_modules/function.prototype.name": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "license": "MIT", "dependencies": { @@ -8620,8 +6173,6 @@ }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8629,14 +6180,10 @@ }, "node_modules/fuzzbunny": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fuzzbunny/-/fuzzbunny-1.0.1.tgz", - "integrity": "sha512-afCIda+Ox6xw3I+b4nhbdXBRZJQQhJAH2kKlxVcybuJTFe1LUn2V7jD0+AGB/ssgyDSOrs8y+CIycv+PsTfVkA==", "license": "MIT" }, "node_modules/generator-function": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", "dev": true, "license": "MIT", "engines": { @@ -8645,8 +6192,6 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "devOptional": true, "license": "MIT", "engines": { @@ -8655,8 +6200,6 @@ }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -8664,8 +6207,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -8688,8 +6229,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -8701,8 +6240,6 @@ }, "node_modules/get-stream": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, "license": "MIT", "dependencies": { @@ -8715,8 +6252,6 @@ }, "node_modules/get-symbol-description": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "license": "MIT", "dependencies": { @@ -8733,8 +6268,6 @@ }, "node_modules/get-tsconfig": { "version": "4.13.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", - "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8746,8 +6279,6 @@ }, "node_modules/get-value": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, "license": "MIT", "engines": { @@ -8756,8 +6287,6 @@ }, "node_modules/get-workspaces": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/get-workspaces/-/get-workspaces-0.5.2.tgz", - "integrity": "sha512-99x72taQ9OUHhCmBS0B2WI/zwOtBOBPoyVNGs9+B0ag2GGhCjl/EaU9VQ8Zorx64TyVj1Am7bO+0J1KwDqo7OA==", "dev": true, "license": "MIT", "dependencies": { @@ -8768,9 +6297,6 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", "dependencies": { @@ -8790,8 +6316,6 @@ }, "node_modules/glob-base": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", "dev": true, "license": "MIT", "dependencies": { @@ -8804,8 +6328,6 @@ }, "node_modules/glob-base/node_modules/glob-parent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", "dev": true, "license": "ISC", "dependencies": { @@ -8814,8 +6336,6 @@ }, "node_modules/glob-base/node_modules/is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, "license": "MIT", "engines": { @@ -8824,8 +6344,6 @@ }, "node_modules/glob-base/node_modules/is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -8837,8 +6355,6 @@ }, "node_modules/glob-parent": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "license": "ISC", "dependencies": { @@ -8848,8 +6364,6 @@ }, "node_modules/glob-parent/node_modules/is-glob": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, "license": "MIT", "dependencies": { @@ -8861,15 +6375,11 @@ }, "node_modules/glob-to-regexp": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", "dev": true, "license": "BSD" }, "node_modules/glob2base": { "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==", "dev": true, "dependencies": { "find-index": "^0.1.1" @@ -8880,8 +6390,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -8897,8 +6405,6 @@ }, "node_modules/globby": { "version": "9.2.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", - "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "license": "MIT", "dependencies": { @@ -8917,8 +6423,6 @@ }, "node_modules/globby/node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", "engines": { @@ -8927,8 +6431,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -8939,15 +6441,11 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, "license": "ISC" }, "node_modules/graphlib": { "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", "license": "MIT", "dependencies": { "lodash": "^4.17.15" @@ -8955,8 +6453,6 @@ }, "node_modules/graphql": { "version": "16.12.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", - "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", "license": "MIT", "peer": true, "engines": { @@ -8965,8 +6461,6 @@ }, "node_modules/graphql-language-service": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.5.0.tgz", - "integrity": "sha512-9EvWrLLkF6Y5e29/2cmFoAO6hBPPAZlCyjznmpR11iFtRydfkss+9m6x+htA8h7YznGam+TtJwS6JuwoWWgb2Q==", "license": "MIT", "dependencies": { "debounce-promise": "^3.1.2", @@ -8982,8 +6476,6 @@ }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -8992,8 +6484,6 @@ }, "node_modules/has-bigints": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9004,8 +6494,6 @@ }, "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "license": "MIT", "engines": { @@ -9014,8 +6502,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -9026,8 +6512,6 @@ }, "node_modules/has-proto": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9042,8 +6526,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9054,8 +6536,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -9069,8 +6549,6 @@ }, "node_modules/has-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, "license": "MIT", "dependencies": { @@ -9084,8 +6562,6 @@ }, "node_modules/has-values": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9098,8 +6574,6 @@ }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, "license": "MIT", "dependencies": { @@ -9111,8 +6585,6 @@ }, "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9124,8 +6596,6 @@ }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, "license": "MIT", "dependencies": { @@ -9137,8 +6607,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -9149,8 +6617,6 @@ }, "node_modules/hast-util-parse-selector": { "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -9159,8 +6625,6 @@ }, "node_modules/hast-util-to-html": { "version": "9.0.5", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz", - "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -9182,8 +6646,6 @@ }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", - "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -9209,8 +6671,6 @@ }, "node_modules/hast-util-whitespace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -9222,8 +6682,6 @@ }, "node_modules/hastscript": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", "license": "MIT", "dependencies": { "@types/hast": "^2.0.0", @@ -9239,8 +6697,6 @@ }, "node_modules/hastscript/node_modules/@types/hast": { "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", "license": "MIT", "dependencies": { "@types/unist": "^2" @@ -9248,14 +6704,10 @@ }, "node_modules/hastscript/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, "node_modules/hastscript/node_modules/comma-separated-tokens": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", "license": "MIT", "funding": { "type": "github", @@ -9264,8 +6716,6 @@ }, "node_modules/hastscript/node_modules/property-information": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", "license": "MIT", "dependencies": { "xtend": "^4.0.0" @@ -9277,8 +6727,6 @@ }, "node_modules/hastscript/node_modules/space-separated-tokens": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", "license": "MIT", "funding": { "type": "github", @@ -9287,8 +6735,6 @@ }, "node_modules/hastscript/node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "license": "MIT", "engines": { "node": ">=0.4" @@ -9296,8 +6742,6 @@ }, "node_modules/hexy": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/hexy/-/hexy-0.3.5.tgz", - "integrity": "sha512-UCP7TIZPXz5kxYJnNOym+9xaenxCLor/JyhKieo8y8/bJWunGh9xbhy3YrgYJUQ87WwfXGm05X330DszOfINZw==", "license": "MIT", "bin": { "hexy": "bin/hexy_cmd.js" @@ -9308,8 +6752,6 @@ }, "node_modules/highlight.js": { "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", "license": "BSD-3-Clause", "engines": { "node": "*" @@ -9317,14 +6759,10 @@ }, "node_modules/highlightjs-vue": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/highlightjs-vue/-/highlightjs-vue-1.0.0.tgz", - "integrity": "sha512-PDEfEF102G23vHmPhLyPboFCD+BkMGu+GuJe2d9/eH4FsCwvgBpnc9n0pGE+ffKdph38s6foEZiEjdgHdzp+IA==", "license": "CC0-1.0" }, "node_modules/history": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz", - "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.7.6" @@ -9332,8 +6770,6 @@ }, "node_modules/hono": { "version": "4.11.3", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.11.3.tgz", - "integrity": "sha512-PmQi306+M/ct/m5s66Hrg+adPnkD5jiO6IjA7WhWw0gSBSo1EcRegwuI1deZ+wd5pzCGynCcn2DprnE4/yEV4w==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -9341,8 +6777,6 @@ }, "node_modules/hono-rate-limiter": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/hono-rate-limiter/-/hono-rate-limiter-0.4.2.tgz", - "integrity": "sha512-AAtFqgADyrmbDijcRTT/HJfwqfvhalya2Zo+MgfdrMPas3zSMD8SU03cv+ZsYwRU1swv7zgVt0shwN059yzhjw==", "license": "MIT", "peer": true, "peerDependencies": { @@ -9351,15 +6785,11 @@ }, "node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/html-url-attributes": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", - "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", "license": "MIT", "funding": { "type": "opencollective", @@ -9368,8 +6798,6 @@ }, "node_modules/html-void-elements": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "license": "MIT", "funding": { "type": "github", @@ -9378,8 +6806,6 @@ }, "node_modules/http-errors": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -9398,20 +6824,14 @@ }, "node_modules/http-reasons": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/http-reasons/-/http-reasons-0.1.0.tgz", - "integrity": "sha512-P6kYh0lKZ+y29T2Gqz+RlC9WBLhKe8kDmcJ+A+611jFfxdPsbMRQ5aNmFRM3lENqFkK+HTTL+tlQviAiv0AbLQ==", "license": "Apache-2.0" }, "node_modules/http2-client": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/http2-client/-/http2-client-1.3.5.tgz", - "integrity": "sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==", "license": "MIT" }, "node_modules/httpntlm": { "version": "1.8.13", - "resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.8.13.tgz", - "integrity": "sha512-2F2FDPiWT4rewPzNMg3uPhNkP3NExENlUGADRUDPQvuftuUTGW98nLZtGemCIW3G40VhWZYgkIDcQFAwZ3mf2Q==", "funding": [ { "type": "paypal", @@ -9434,8 +6854,6 @@ }, "node_modules/httpreq": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/httpreq/-/httpreq-1.1.1.tgz", - "integrity": "sha512-uhSZLPPD2VXXOSN8Cni3kIsoFHaU2pT/nySEU/fHr/ePbqHYr0jeiQRmUKLEirC09SFPsdMoA7LU7UXMd/w0Kw==", "license": "MIT", "engines": { "node": ">= 6.15.1" @@ -9443,8 +6861,6 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "license": "MIT", "dependencies": { @@ -9457,8 +6873,6 @@ }, "node_modules/human-signals": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -9467,8 +6881,6 @@ }, "node_modules/husky": { "version": "9.1.7", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", - "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", "bin": { @@ -9483,14 +6895,10 @@ }, "node_modules/hyphenate-style-name": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.1.0.tgz", - "integrity": "sha512-WDC/ui2VVRrz3jOVi+XtjqkDjiVjTtFaAGiW37k6b+ohyQ5wYDOGkvCZa8+H0nx3gyvv0+BST9xuOgIyGQ00gw==", "license": "BSD-3-Clause" }, "node_modules/iconv-lite": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", - "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -9505,8 +6913,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -9525,8 +6931,6 @@ }, "node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "license": "MIT", "engines": { @@ -9535,8 +6939,6 @@ }, "node_modules/import-fresh": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -9551,8 +6953,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { @@ -9561,9 +6961,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, "license": "ISC", "dependencies": { @@ -9573,20 +6970,14 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/inline-style-parser": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", - "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", "license": "MIT" }, "node_modules/inline-style-prefixer": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/inline-style-prefixer/-/inline-style-prefixer-7.0.1.tgz", - "integrity": "sha512-lhYo5qNTQp3EvSSp3sRvXMbVQTLrvGV6DycRMJ5dm2BLMiJ30wpXKdDdgX+GmJZ5uQMucwRKHamXSst3Sj/Giw==", "license": "MIT", "dependencies": { "css-in-js-utils": "^3.1.0" @@ -9594,8 +6985,6 @@ }, "node_modules/internal-ip": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-8.0.1.tgz", - "integrity": "sha512-UBBMBk8f1PrIHUXOPI/6vW0eFWhZl/UGHpNaqLAAOANNZxkGuqq/IDfk2goQ902E9hy1mtM7iXhdgZCpCceeew==", "dev": true, "license": "MIT", "dependencies": { @@ -9613,8 +7002,6 @@ }, "node_modules/internal-slot": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -9627,8 +7014,6 @@ }, "node_modules/ip-bigint": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/ip-bigint/-/ip-bigint-7.3.0.tgz", - "integrity": "sha512-2qVAe0Q9+Y+5nGvmogwK9y4kefD5Ks5l/IG0Jo1lhU9gIF34jifhqrwXwzkIl+LC594Q6SyAlngs4p890xsXVw==", "dev": true, "license": "BSD-2-Clause", "engines": { @@ -9637,8 +7022,6 @@ }, "node_modules/ip-regex": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", - "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", "dev": true, "license": "MIT", "engines": { @@ -9650,8 +7033,6 @@ }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -9659,8 +7040,6 @@ }, "node_modules/is-accessor-descriptor": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, "license": "MIT", "dependencies": { @@ -9672,8 +7051,6 @@ }, "node_modules/is-alphabetical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", "funding": { "type": "github", @@ -9682,8 +7059,6 @@ }, "node_modules/is-alphanumerical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", @@ -9696,8 +7071,6 @@ }, "node_modules/is-arguments": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -9712,8 +7085,6 @@ }, "node_modules/is-array-buffer": { "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -9729,14 +7100,10 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9755,8 +7122,6 @@ }, "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" @@ -9770,8 +7135,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { @@ -9783,8 +7146,6 @@ }, "node_modules/is-boolean-object": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", - "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -9799,15 +7160,11 @@ }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true, "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -9818,8 +7175,6 @@ }, "node_modules/is-core-module": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, "license": "MIT", "dependencies": { @@ -9834,8 +7189,6 @@ }, "node_modules/is-data-descriptor": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, "license": "MIT", "dependencies": { @@ -9847,8 +7200,6 @@ }, "node_modules/is-data-view": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { @@ -9865,8 +7216,6 @@ }, "node_modules/is-date-object": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -9881,8 +7230,6 @@ }, "node_modules/is-decimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", "funding": { "type": "github", @@ -9891,8 +7238,6 @@ }, "node_modules/is-descriptor": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, "license": "MIT", "dependencies": { @@ -9905,8 +7250,6 @@ }, "node_modules/is-dotfile": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", "dev": true, "license": "MIT", "engines": { @@ -9915,8 +7258,6 @@ }, "node_modules/is-equal-shallow": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", "dev": true, "license": "MIT", "dependencies": { @@ -9928,8 +7269,6 @@ }, "node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "license": "MIT", "dependencies": { @@ -9941,8 +7280,6 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -9950,8 +7287,6 @@ }, "node_modules/is-finalizationregistry": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { @@ -9966,8 +7301,6 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" @@ -9975,8 +7308,6 @@ }, "node_modules/is-generator-function": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", - "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", "dev": true, "license": "MIT", "dependencies": { @@ -9995,8 +7326,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -10007,8 +7336,6 @@ }, "node_modules/is-hexadecimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", "funding": { "type": "github", @@ -10017,8 +7344,6 @@ }, "node_modules/is-ip": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", - "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", "dev": true, "license": "MIT", "dependencies": { @@ -10034,8 +7359,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10046,15 +7369,11 @@ }, "node_modules/is-natural-number": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", "dev": true, "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -10066,8 +7385,6 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" @@ -10075,8 +7392,6 @@ }, "node_modules/is-number-object": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -10091,8 +7406,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -10101,8 +7414,6 @@ }, "node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "license": "MIT", "dependencies": { @@ -10114,8 +7425,6 @@ }, "node_modules/is-posix-bracket": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", "dev": true, "license": "MIT", "engines": { @@ -10124,8 +7433,6 @@ }, "node_modules/is-primitive": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", "dev": true, "license": "MIT", "engines": { @@ -10134,14 +7441,10 @@ }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/is-regex": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -10158,8 +7461,6 @@ }, "node_modules/is-regexp": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", - "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", "dev": true, "license": "MIT", "engines": { @@ -10171,8 +7472,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10183,8 +7482,6 @@ }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3" @@ -10198,8 +7495,6 @@ }, "node_modules/is-stream": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, "license": "MIT", "engines": { @@ -10208,8 +7503,6 @@ }, "node_modules/is-string": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -10224,8 +7517,6 @@ }, "node_modules/is-symbol": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -10241,8 +7532,6 @@ }, "node_modules/is-typed-array": { "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10257,8 +7546,6 @@ }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10269,8 +7556,6 @@ }, "node_modules/is-weakref": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, "license": "MIT", "dependencies": { @@ -10285,8 +7570,6 @@ }, "node_modules/is-weakset": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "license": "MIT", "dependencies": { "call-bound": "^1.0.3", @@ -10301,8 +7584,6 @@ }, "node_modules/is-windows": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "license": "MIT", "engines": { @@ -10311,14 +7592,10 @@ }, "node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "license": "MIT" }, "node_modules/isbot": { "version": "5.1.32", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.32.tgz", - "integrity": "sha512-VNfjM73zz2IBZmdShMfAUg10prm6t7HFUQmNAEOAVS4YH92ZrZcvkMcGX6cIgBJAzWDzPent/EeAtYEHNPNPBQ==", "license": "Unlicense", "engines": { "node": ">=18" @@ -10326,14 +7603,10 @@ }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "license": "MIT", "engines": { @@ -10342,8 +7615,6 @@ }, "node_modules/jiti": { "version": "1.21.7", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", - "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, "license": "MIT", "bin": { @@ -10352,8 +7623,6 @@ }, "node_modules/jose": { "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -10361,8 +7630,6 @@ }, "node_modules/jotai": { "version": "2.16.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.16.1.tgz", - "integrity": "sha512-vrHcAbo3P7Br37C8Bv6JshMtlKMPqqmx0DDREtTjT4nf3QChDrYdbH+4ik/9V0cXA57dK28RkJ5dctYvavcIlg==", "license": "MIT", "engines": { "node": ">=12.20.0" @@ -10390,33 +7657,23 @@ }, "node_modules/js-cookie": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.1.tgz", - "integrity": "sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ==", "license": "MIT" }, "node_modules/js-md4": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", "license": "MIT" }, "node_modules/js-md5": { "version": "0.8.3", - "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz", - "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==", "license": "MIT" }, "node_modules/js-tokens": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", "dev": true, "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -10427,8 +7684,6 @@ }, "node_modules/jsep": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jsep/-/jsep-1.4.0.tgz", - "integrity": "sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==", "license": "MIT", "engines": { "node": ">= 10.16.0" @@ -10436,8 +7691,6 @@ }, "node_modules/jsesc": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "devOptional": true, "license": "MIT", "bin": { @@ -10449,21 +7702,15 @@ }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true, "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "license": "MIT" }, "node_modules/json-pointer": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", - "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", "license": "MIT", "dependencies": { "foreach": "^2.0.4" @@ -10471,14 +7718,10 @@ }, "node_modules/json-schema": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-compare": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", - "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", "license": "MIT", "dependencies": { "lodash": "^4.17.4" @@ -10486,8 +7729,6 @@ }, "node_modules/json-schema-library": { "version": "9.3.5", - "resolved": "https://registry.npmjs.org/json-schema-library/-/json-schema-library-9.3.5.tgz", - "integrity": "sha512-5eBDx7cbfs+RjylsVO+N36b0GOPtv78rfqgf2uON+uaHUIC62h63Y8pkV2ovKbaL4ZpQcHp21968x5nx/dFwqQ==", "license": "MIT", "dependencies": { "@sagold/json-pointer": "^5.1.2", @@ -10501,8 +7742,6 @@ }, "node_modules/json-schema-merge-allof": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", - "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", "license": "MIT", "dependencies": { "compute-lcm": "^1.1.2", @@ -10515,20 +7754,14 @@ }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-schema-typed": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", "license": "BSD-2-Clause" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "devOptional": true, "license": "MIT", "bin": { @@ -10540,8 +7773,6 @@ }, "node_modules/jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, "license": "MIT", "optionalDependencies": { @@ -10550,8 +7781,6 @@ }, "node_modules/jsonpath-plus": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-10.3.0.tgz", - "integrity": "sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==", "license": "MIT", "dependencies": { "@jsep-plugin/assignment": "^1.3.0", @@ -10568,8 +7797,6 @@ }, "node_modules/jsonwebtoken": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { "jws": "^4.0.1", @@ -10590,8 +7817,6 @@ }, "node_modules/jsonwebtoken/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -10602,8 +7827,6 @@ }, "node_modules/junk": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/junk/-/junk-4.0.1.tgz", - "integrity": "sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==", "dev": true, "license": "MIT", "engines": { @@ -10615,8 +7838,6 @@ }, "node_modules/jwa": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -10626,8 +7847,6 @@ }, "node_modules/jws": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", - "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { "jwa": "^2.0.1", @@ -10636,8 +7855,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "license": "MIT", "engines": { @@ -10646,8 +7863,6 @@ }, "node_modules/lezer-json5": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lezer-json5/-/lezer-json5-2.0.2.tgz", - "integrity": "sha512-NRmtBlKW/f8mA7xatKq8IUOq045t8GVHI4kZXrUtYYUdiVeGiO6zKGAV7/nUAnf5q+rYTY+SWX/gvQdFXMjNxQ==", "license": "MIT", "optional": true, "dependencies": { @@ -10656,8 +7871,6 @@ }, "node_modules/lilconfig": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "license": "MIT", "engines": { @@ -10669,14 +7882,10 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, "node_modules/liquid-json": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/liquid-json/-/liquid-json-0.3.1.tgz", - "integrity": "sha512-wUayTU8MS827Dam6MxgD72Ui+KOSF+u/eIqpatOtjnvgJ0+mnDq33uC2M7J0tPK+upe/DpUAuK4JUU89iBoNKQ==", "license": "Apache-2.0", "engines": { "node": ">=4" @@ -10684,8 +7893,6 @@ }, "node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, "license": "MIT", "dependencies": { @@ -10700,8 +7907,6 @@ }, "node_modules/locate-path": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "license": "MIT", "dependencies": { "p-locate": "^4.1.0" @@ -10712,56 +7917,38 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "license": "MIT" }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "license": "MIT", "funding": { "type": "github", @@ -10770,8 +7957,6 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -10782,21 +7967,15 @@ }, "node_modules/loose-envify/node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/loupe": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", - "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", "dev": true, "license": "MIT" }, "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "license": "MIT", "dependencies": { @@ -10805,8 +7984,6 @@ }, "node_modules/lowlight": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-1.20.0.tgz", - "integrity": "sha512-8Ktj+prEb1RoCPkEOrPMYUN/nCggB7qAWe3a7OpMjWQkh3l2RD5wKRQ+o8Q8YuI9RG/xs95waaI/E6ym/7NsTw==", "license": "MIT", "dependencies": { "fault": "^1.0.0", @@ -10819,8 +7996,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "devOptional": true, "license": "ISC", "dependencies": { @@ -10829,8 +8004,6 @@ }, "node_modules/lucide-react": { "version": "0.525.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.525.0.tgz", - "integrity": "sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==", "license": "ISC", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -10838,8 +8011,6 @@ }, "node_modules/magic-string": { "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10848,8 +8019,6 @@ }, "node_modules/make-cancellable-promise": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-2.0.0.tgz", - "integrity": "sha512-3SEQqTpV9oqVsIWqAcmDuaNeo7yBO3tqPtqGRcKkEo0lrzD3wqbKG9mkxO65KoOgXqj+zH2phJ2LiAsdzlogSw==", "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" @@ -10857,8 +8026,6 @@ }, "node_modules/make-dir": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10870,8 +8037,6 @@ }, "node_modules/make-event-props": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-2.0.0.tgz", - "integrity": "sha512-G/hncXrl4Qt7mauJEXSg3AcdYzmpkIITTNl5I+rH9sog5Yw0kK6vseJjCaPfOXqOqQuPUP89Rkhfz5kPS8ijtw==", "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" @@ -10879,8 +8044,6 @@ }, "node_modules/map-cache": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, "license": "MIT", "engines": { @@ -10889,8 +8052,6 @@ }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -10902,8 +8063,6 @@ }, "node_modules/map-visit": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, "license": "MIT", "dependencies": { @@ -10915,8 +8074,6 @@ }, "node_modules/markdown-table": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "license": "MIT", "funding": { "type": "github", @@ -10925,8 +8082,6 @@ }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10934,15 +8089,11 @@ }, "node_modules/math-random": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true, "license": "MIT" }, "node_modules/mdast-util-find-and-replace": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -10957,8 +8108,6 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", "engines": { "node": ">=12" @@ -10969,8 +8118,6 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -10993,8 +8140,6 @@ }, "node_modules/mdast-util-frontmatter": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11011,8 +8156,6 @@ }, "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", "engines": { "node": ">=12" @@ -11023,8 +8166,6 @@ }, "node_modules/mdast-util-gfm": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -11042,8 +8183,6 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11059,8 +8198,6 @@ }, "node_modules/mdast-util-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11076,8 +8213,6 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11091,8 +8226,6 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11108,8 +8241,6 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11124,8 +8255,6 @@ }, "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -11142,8 +8271,6 @@ }, "node_modules/mdast-util-mdx-jsx": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", - "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -11166,8 +8293,6 @@ }, "node_modules/mdast-util-mdxjs-esm": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -11184,8 +8309,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11198,8 +8321,6 @@ }, "node_modules/mdast-util-to-hast": { "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -11219,8 +8340,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -11240,8 +8359,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" @@ -11253,14 +8370,10 @@ }, "node_modules/mdn-data": { "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -11268,8 +8381,6 @@ }, "node_modules/memorystream": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", "dev": true, "engines": { "node": ">= 0.10.0" @@ -11277,8 +8388,6 @@ }, "node_modules/meow": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-6.1.1.tgz", - "integrity": "sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==", "dev": true, "license": "MIT", "dependencies": { @@ -11303,8 +8412,6 @@ }, "node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { "node": ">=18" @@ -11315,8 +8422,6 @@ }, "node_modules/merge-refs": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-2.0.0.tgz", - "integrity": "sha512-3+B21mYK2IqUWnd2EivABLT7ueDhb0b8/dGK8LoFQPrU61YITeCMn14F7y7qZafWNZhUEKb24cJdiT5Wxs3prg==", "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" @@ -11332,15 +8437,11 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true, "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", "engines": { "node": ">= 8" @@ -11348,8 +8449,6 @@ }, "node_modules/micromark": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", - "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", "funding": [ { "type": "GitHub Sponsors", @@ -11383,8 +8482,6 @@ }, "node_modules/micromark-core-commonmark": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", - "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", "funding": [ { "type": "GitHub Sponsors", @@ -11417,8 +8514,6 @@ }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "license": "MIT", "dependencies": { "fault": "^2.0.0", @@ -11433,8 +8528,6 @@ }, "node_modules/micromark-extension-frontmatter/node_modules/fault": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "license": "MIT", "dependencies": { "format": "^0.2.0" @@ -11446,8 +8539,6 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "license": "MIT", "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", @@ -11466,8 +8557,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", @@ -11482,8 +8571,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -11502,8 +8589,6 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -11520,8 +8605,6 @@ }, "node_modules/micromark-extension-gfm-table": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -11537,8 +8620,6 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" @@ -11550,8 +8631,6 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -11567,8 +8646,6 @@ }, "node_modules/micromark-factory-destination": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", - "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", "funding": [ { "type": "GitHub Sponsors", @@ -11588,8 +8665,6 @@ }, "node_modules/micromark-factory-label": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", - "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", "funding": [ { "type": "GitHub Sponsors", @@ -11610,8 +8685,6 @@ }, "node_modules/micromark-factory-space": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", "funding": [ { "type": "GitHub Sponsors", @@ -11630,8 +8703,6 @@ }, "node_modules/micromark-factory-title": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", - "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", "funding": [ { "type": "GitHub Sponsors", @@ -11652,8 +8723,6 @@ }, "node_modules/micromark-factory-whitespace": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", - "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "funding": [ { "type": "GitHub Sponsors", @@ -11674,8 +8743,6 @@ }, "node_modules/micromark-util-character": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "funding": [ { "type": "GitHub Sponsors", @@ -11694,8 +8761,6 @@ }, "node_modules/micromark-util-chunked": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", - "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "funding": [ { "type": "GitHub Sponsors", @@ -11713,8 +8778,6 @@ }, "node_modules/micromark-util-classify-character": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", - "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "funding": [ { "type": "GitHub Sponsors", @@ -11734,8 +8797,6 @@ }, "node_modules/micromark-util-combine-extensions": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", - "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "funding": [ { "type": "GitHub Sponsors", @@ -11754,8 +8815,6 @@ }, "node_modules/micromark-util-decode-numeric-character-reference": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", - "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", "funding": [ { "type": "GitHub Sponsors", @@ -11773,8 +8832,6 @@ }, "node_modules/micromark-util-decode-string": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", - "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "funding": [ { "type": "GitHub Sponsors", @@ -11795,8 +8852,6 @@ }, "node_modules/micromark-util-encode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "funding": [ { "type": "GitHub Sponsors", @@ -11811,8 +8866,6 @@ }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", - "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "funding": [ { "type": "GitHub Sponsors", @@ -11827,8 +8880,6 @@ }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", - "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "funding": [ { "type": "GitHub Sponsors", @@ -11846,8 +8897,6 @@ }, "node_modules/micromark-util-resolve-all": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", - "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "funding": [ { "type": "GitHub Sponsors", @@ -11865,8 +8914,6 @@ }, "node_modules/micromark-util-sanitize-uri": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "funding": [ { "type": "GitHub Sponsors", @@ -11886,8 +8933,6 @@ }, "node_modules/micromark-util-subtokenize": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", - "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", "funding": [ { "type": "GitHub Sponsors", @@ -11908,8 +8953,6 @@ }, "node_modules/micromark-util-symbol": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "funding": [ { "type": "GitHub Sponsors", @@ -11924,8 +8967,6 @@ }, "node_modules/micromark-util-types": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", - "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", "funding": [ { "type": "GitHub Sponsors", @@ -11940,8 +8981,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -11953,8 +8992,6 @@ }, "node_modules/micromatch/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -11965,8 +9002,6 @@ }, "node_modules/mime": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz", - "integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==", "funding": [ "https://github.com/sponsors/broofa" ], @@ -11980,8 +9015,6 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "license": "MIT", "engines": { @@ -11990,8 +9023,6 @@ }, "node_modules/mime-format": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mime-format/-/mime-format-2.0.2.tgz", - "integrity": "sha512-Y5ERWVcyh3sby9Fx2U5F1yatiTFjNsqF5NltihTWI9QgNtr5o3dbCZdcKa1l2wyfhnwwoP9HGNxga7LqZLA6gw==", "license": "Apache-2.0", "dependencies": { "charset": "^1.0.0" @@ -11999,8 +9030,6 @@ }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "license": "MIT", "dependencies": { @@ -12012,8 +9041,6 @@ }, "node_modules/mimic-fn": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "dev": true, "license": "MIT", "engines": { @@ -12025,8 +9052,6 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -12035,14 +9060,10 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "license": "ISC" }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "license": "ISC", "dependencies": { @@ -12054,8 +9075,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "license": "MIT", "funding": { @@ -12064,8 +9083,6 @@ }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -12079,8 +9096,6 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, "license": "ISC", "engines": { @@ -12089,8 +9104,6 @@ }, "node_modules/mixin-deep": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "license": "MIT", "dependencies": { @@ -12103,8 +9116,6 @@ }, "node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "license": "MIT", "dependencies": { @@ -12116,14 +9127,10 @@ }, "node_modules/moo": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", "license": "BSD-3-Clause" }, "node_modules/motion": { "version": "12.23.26", - "resolved": "https://registry.npmjs.org/motion/-/motion-12.23.26.tgz", - "integrity": "sha512-Ll8XhVxY8LXMVYTCfme27WH2GjBrCIzY4+ndr5QKxsK+YwCtOi2B/oBi5jcIbik5doXuWT/4KKDOVAZJkeY5VQ==", "license": "MIT", "dependencies": { "framer-motion": "^12.23.26", @@ -12148,8 +9155,6 @@ }, "node_modules/motion-dom": { "version": "12.23.23", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.23.23.tgz", - "integrity": "sha512-n5yolOs0TQQBRUFImrRfs/+6X4p3Q4n1dUEqt/H58Vx7OW6RF+foWEgmTVDhIWJIMXOuNNL0apKH2S16en9eiA==", "license": "MIT", "dependencies": { "motion-utils": "^12.23.6" @@ -12157,20 +9162,14 @@ }, "node_modules/motion-utils": { "version": "12.23.6", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.23.6.tgz", - "integrity": "sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==", "license": "MIT" }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/mz": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "license": "MIT", "dependencies": { @@ -12181,16 +9180,12 @@ }, "node_modules/nan": { "version": "2.24.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.24.0.tgz", - "integrity": "sha512-Vpf9qnVW1RaDkoNKFUvfxqAbtI8ncb8OJlqZ9wwpXzWPEsvsB1nvdUi6oYrHIkQ1Y/tMDnr1h4nczS0VB9Xykg==", "dev": true, "license": "MIT", "optional": true }, "node_modules/nano-css": { "version": "5.6.2", - "resolved": "https://registry.npmjs.org/nano-css/-/nano-css-5.6.2.tgz", - "integrity": "sha512-+6bHaC8dSDGALM1HJjOHVXpuastdu2xFoZlC77Jh4cg+33Zcgm+Gxd+1xsnpZK14eyHObSp82+ll5y3SX75liw==", "license": "Unlicense", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", @@ -12209,8 +9204,6 @@ }, "node_modules/nanoid": { "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -12228,8 +9221,6 @@ }, "node_modules/nanomatch": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "license": "MIT", "dependencies": { @@ -12251,8 +9242,6 @@ }, "node_modules/nearley": { "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", "license": "MIT", "dependencies": { "commander": "^2.19.0", @@ -12273,8 +9262,6 @@ }, "node_modules/negotiator": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -12282,8 +9269,6 @@ }, "node_modules/neotraverse": { "version": "0.6.15", - "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.15.tgz", - "integrity": "sha512-HZpdkco+JeXq0G+WWpMJ4NsX3pqb5O7eR9uGz3FfoFt+LYzU8iRWp49nJtud6hsDoywM8tIrDo3gjgmOqJA8LA==", "license": "MIT", "engines": { "node": ">= 10" @@ -12291,22 +9276,16 @@ }, "node_modules/nested-error-stacks": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz", - "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==", "dev": true, "license": "MIT" }, "node_modules/nice-try": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true, "license": "MIT" }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "license": "MIT", "dependencies": { @@ -12316,8 +9295,6 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -12336,8 +9313,6 @@ }, "node_modules/node-fetch-h2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz", - "integrity": "sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==", "license": "MIT", "dependencies": { "http2-client": "^1.2.5" @@ -12348,8 +9323,6 @@ }, "node_modules/node-readfiles": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/node-readfiles/-/node-readfiles-0.2.0.tgz", - "integrity": "sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==", "license": "MIT", "dependencies": { "es6-promise": "^3.2.1" @@ -12357,15 +9330,11 @@ }, "node_modules/node-releases": { "version": "2.0.27", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", - "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "devOptional": true, "license": "MIT" }, "node_modules/nodejs-file-downloader": { "version": "4.13.0", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", - "integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -12377,8 +9346,6 @@ }, "node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -12390,8 +9357,6 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "license": "MIT", "engines": { @@ -12400,8 +9365,6 @@ }, "node_modules/npm-run-all": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12426,8 +9389,6 @@ }, "node_modules/npm-run-all/node_modules/cross-spawn": { "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "license": "MIT", "dependencies": { @@ -12443,8 +9404,6 @@ }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "license": "MIT", "engines": { @@ -12453,8 +9412,6 @@ }, "node_modules/npm-run-all/node_modules/shebang-command": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "license": "MIT", "dependencies": { @@ -12466,8 +9423,6 @@ }, "node_modules/npm-run-all/node_modules/shebang-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "license": "MIT", "engines": { @@ -12476,8 +9431,6 @@ }, "node_modules/npm-run-all/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "license": "ISC", "dependencies": { @@ -12489,8 +9442,6 @@ }, "node_modules/npm-run-path": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12505,8 +9456,6 @@ }, "node_modules/npm-run-path/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", "dev": true, "license": "MIT", "engines": { @@ -12518,14 +9467,10 @@ }, "node_modules/nullthrows": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", - "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", "license": "MIT" }, "node_modules/oas-kit-common": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/oas-kit-common/-/oas-kit-common-1.0.8.tgz", - "integrity": "sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==", "license": "BSD-3-Clause", "dependencies": { "fast-safe-stringify": "^2.0.7" @@ -12533,8 +9478,6 @@ }, "node_modules/oas-linter": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/oas-linter/-/oas-linter-3.2.2.tgz", - "integrity": "sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==", "license": "BSD-3-Clause", "dependencies": { "@exodus/schemasafe": "^1.0.0-rc.2", @@ -12547,8 +9490,6 @@ }, "node_modules/oas-linter/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -12556,8 +9497,6 @@ }, "node_modules/oas-resolver": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver/-/oas-resolver-2.5.6.tgz", - "integrity": "sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-h2": "^2.3.0", @@ -12575,8 +9514,6 @@ }, "node_modules/oas-resolver-browser": { "version": "2.5.6", - "resolved": "https://registry.npmjs.org/oas-resolver-browser/-/oas-resolver-browser-2.5.6.tgz", - "integrity": "sha512-Jw5elT/kwUJrnGaVuRWe1D7hmnYWB8rfDDjBnpQ+RYY/dzAewGXeTexXzt4fGEo6PUE4eqKqPWF79MZxxvMppA==", "license": "BSD-3-Clause", "dependencies": { "node-fetch-h2": "^2.3.0", @@ -12595,8 +9532,6 @@ }, "node_modules/oas-resolver-browser/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -12610,8 +9545,6 @@ }, "node_modules/oas-resolver-browser/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -12624,8 +9557,6 @@ }, "node_modules/oas-resolver-browser/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -12636,14 +9567,10 @@ }, "node_modules/oas-resolver-browser/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/oas-resolver-browser/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -12659,8 +9586,6 @@ }, "node_modules/oas-resolver-browser/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" @@ -12668,8 +9593,6 @@ }, "node_modules/oas-resolver-browser/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -12677,8 +9600,6 @@ }, "node_modules/oas-resolver-browser/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -12695,8 +9616,6 @@ }, "node_modules/oas-resolver-browser/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -12704,8 +9623,6 @@ }, "node_modules/oas-resolver/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -12719,8 +9636,6 @@ }, "node_modules/oas-resolver/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -12733,8 +9648,6 @@ }, "node_modules/oas-resolver/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -12745,14 +9658,10 @@ }, "node_modules/oas-resolver/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/oas-resolver/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -12768,8 +9677,6 @@ }, "node_modules/oas-resolver/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" @@ -12777,8 +9684,6 @@ }, "node_modules/oas-resolver/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -12786,8 +9691,6 @@ }, "node_modules/oas-resolver/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -12804,8 +9707,6 @@ }, "node_modules/oas-resolver/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -12813,8 +9714,6 @@ }, "node_modules/oas-schema-walker": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz", - "integrity": "sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==", "license": "BSD-3-Clause", "funding": { "url": "https://github.com/Mermade/oas-kit?sponsor=1" @@ -12822,8 +9721,6 @@ }, "node_modules/oas-validator": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/oas-validator/-/oas-validator-5.0.8.tgz", - "integrity": "sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==", "license": "BSD-3-Clause", "dependencies": { "call-me-maybe": "^1.0.1", @@ -12841,8 +9738,6 @@ }, "node_modules/oas-validator/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -12850,14 +9745,10 @@ }, "node_modules/oauth-1.0a": { "version": "2.2.6", - "resolved": "https://registry.npmjs.org/oauth-1.0a/-/oauth-1.0a-2.2.6.tgz", - "integrity": "sha512-6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ==", "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12865,8 +9756,6 @@ }, "node_modules/object-copy": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12880,8 +9769,6 @@ }, "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "license": "MIT", "dependencies": { @@ -12893,8 +9780,6 @@ }, "node_modules/object-copy/node_modules/is-descriptor": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -12907,8 +9792,6 @@ }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12920,8 +9803,6 @@ }, "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "license": "MIT", "engines": { "node": ">= 6" @@ -12929,8 +9810,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12941,8 +9820,6 @@ }, "node_modules/object-is": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", - "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -12957,8 +9834,6 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -12966,8 +9841,6 @@ }, "node_modules/object-visit": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, "license": "MIT", "dependencies": { @@ -12979,8 +9852,6 @@ }, "node_modules/object.assign": { "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -12999,8 +9870,6 @@ }, "node_modules/object.omit": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", "dev": true, "license": "MIT", "dependencies": { @@ -13013,8 +9882,6 @@ }, "node_modules/object.omit/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -13023,8 +9890,6 @@ }, "node_modules/object.pick": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13036,8 +9901,6 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -13048,8 +9911,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -13057,8 +9918,6 @@ }, "node_modules/onetime": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13073,8 +9932,6 @@ }, "node_modules/openapi-to-postmanv2": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/openapi-to-postmanv2/-/openapi-to-postmanv2-5.7.0.tgz", - "integrity": "sha512-fhwjpL+CF1kOKX5G1m5E/tnZWc9KuSXZA4oOGZv9c4NzKtC3ecUHxtp4KTvwzFh8/b+ssSZo+blC/3OK4/9ySA==", "license": "Apache-2.0", "dependencies": { "ajv": "^8.11.0", @@ -13104,8 +9961,6 @@ }, "node_modules/openapi-to-postmanv2/node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -13121,8 +9976,6 @@ }, "node_modules/openapi-to-postmanv2/node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -13133,8 +9986,6 @@ }, "node_modules/openapi-to-postmanv2/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -13142,8 +9993,6 @@ }, "node_modules/own-keys": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "license": "MIT", "dependencies": { @@ -13160,8 +10009,6 @@ }, "node_modules/p-event": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13176,8 +10023,6 @@ }, "node_modules/p-filter": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-3.0.0.tgz", - "integrity": "sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==", "dev": true, "license": "MIT", "dependencies": { @@ -13192,8 +10037,6 @@ }, "node_modules/p-filter/node_modules/aggregate-error": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", "dev": true, "license": "MIT", "dependencies": { @@ -13209,8 +10052,6 @@ }, "node_modules/p-filter/node_modules/clean-stack": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", "dev": true, "license": "MIT", "dependencies": { @@ -13225,8 +10066,6 @@ }, "node_modules/p-filter/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "dev": true, "license": "MIT", "engines": { @@ -13238,8 +10077,6 @@ }, "node_modules/p-filter/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -13251,8 +10088,6 @@ }, "node_modules/p-filter/node_modules/p-map": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", "dev": true, "license": "MIT", "dependencies": { @@ -13267,8 +10102,6 @@ }, "node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -13282,8 +10115,6 @@ }, "node_modules/p-locate": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "license": "MIT", "dependencies": { "p-limit": "^2.2.0" @@ -13294,8 +10125,6 @@ }, "node_modules/p-map": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-6.0.0.tgz", - "integrity": "sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==", "dev": true, "license": "MIT", "engines": { @@ -13307,8 +10136,6 @@ }, "node_modules/p-timeout": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", "dev": true, "license": "MIT", "engines": { @@ -13320,8 +10147,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", "engines": { "node": ">=6" @@ -13329,21 +10154,15 @@ }, "node_modules/package-json-from-dist": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/papaparse": { "version": "5.5.3", - "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.3.tgz", - "integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==", "license": "MIT" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -13354,22 +10173,16 @@ }, "node_modules/parse-color": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz", - "integrity": "sha512-fuDHYgFHJGbpGMgw9skY/bj3HL/Jrn4l/5rSspy00DoT4RyLnDcRvPxdZ+r6OFwIsgAuhDh4I09tAId4mI12bw==", "license": "MIT", "dependencies": { "color-convert": "~0.5.0" } }, "node_modules/parse-color/node_modules/color-convert": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", - "integrity": "sha512-RwBeO/B/vZR3dfKL1ye/vx8MHZ40ugzpyfeVG5GsiuGnrlMWe2o8wxBbLCpw9CsxV+wHuzYlCiWnybrIA0ling==" + "version": "0.5.3" }, "node_modules/parse-entities": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", - "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", @@ -13387,14 +10200,10 @@ }, "node_modules/parse-entities/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, "node_modules/parse-glob": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", "dev": true, "license": "MIT", "dependencies": { @@ -13409,8 +10218,6 @@ }, "node_modules/parse-glob/node_modules/is-extglob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true, "license": "MIT", "engines": { @@ -13419,8 +10226,6 @@ }, "node_modules/parse-glob/node_modules/is-glob": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -13432,8 +10237,6 @@ }, "node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, "license": "MIT", "dependencies": { @@ -13446,8 +10249,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -13455,8 +10256,6 @@ }, "node_modules/pascalcase": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true, "license": "MIT", "engines": { @@ -13465,21 +10264,15 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", "license": "MIT" }, "node_modules/path-dirname": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true, "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "license": "MIT", "engines": { "node": ">=8" @@ -13487,8 +10280,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "license": "MIT", "engines": { @@ -13497,8 +10288,6 @@ }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -13506,15 +10295,11 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true, "license": "MIT" }, "node_modules/path-scurry": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -13530,8 +10315,6 @@ }, "node_modules/path-scurry/node_modules/lru-cache": { "version": "11.2.4", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -13540,8 +10323,6 @@ }, "node_modules/path-to-regexp": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", "funding": { "type": "opencollective", @@ -13550,8 +10331,6 @@ }, "node_modules/path-type": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "license": "MIT", "dependencies": { @@ -13563,15 +10342,11 @@ }, "node_modules/pathe": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, "node_modules/pathval": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", - "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", "dev": true, "license": "MIT", "engines": { @@ -13580,8 +10355,6 @@ }, "node_modules/pdfjs-dist": { "version": "5.4.296", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.4.296.tgz", - "integrity": "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q==", "license": "Apache-2.0", "engines": { "node": ">=20.16.0 || >=22.3.0" @@ -13592,28 +10365,20 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", "dev": true, "license": "MIT" }, "node_modules/physical-cpu-count": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", - "integrity": "sha512-rxJOljMuWtYlvREBmd6TZYanfcPhNUKtGDZBjBBS8WG1dpN2iwPsRJZgQqN/OtJuiQckdRFOfzogqJClTrsi7g==", "dev": true, "license": "ISC" }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -13625,8 +10390,6 @@ }, "node_modules/pidtree": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, "license": "MIT", "bin": { @@ -13638,8 +10401,6 @@ }, "node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, "license": "MIT", "engines": { @@ -13648,8 +10409,6 @@ }, "node_modules/pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "license": "MIT", "engines": { @@ -13658,8 +10417,6 @@ }, "node_modules/pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "license": "MIT", "dependencies": { @@ -13671,8 +10428,6 @@ }, "node_modules/pirates": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "dev": true, "license": "MIT", "engines": { @@ -13681,8 +10436,6 @@ }, "node_modules/pkce-challenge": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", "engines": { "node": ">=16.20.0" @@ -13690,8 +10443,6 @@ }, "node_modules/posix-character-classes": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, "license": "MIT", "engines": { @@ -13700,8 +10451,6 @@ }, "node_modules/possible-typed-array-names": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", - "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -13709,8 +10458,6 @@ }, "node_modules/postcss": { "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", "dev": true, "funding": [ { @@ -13738,8 +10485,6 @@ }, "node_modules/postcss-import": { "version": "15.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", - "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, "license": "MIT", "dependencies": { @@ -13756,8 +10501,6 @@ }, "node_modules/postcss-js": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", - "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", "dev": true, "funding": [ { @@ -13782,8 +10525,6 @@ }, "node_modules/postcss-load-config": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", - "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", "dev": true, "funding": [ { @@ -13825,8 +10566,6 @@ }, "node_modules/postcss-nested": { "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, "license": "MIT", "dependencies": { @@ -13845,8 +10584,6 @@ }, "node_modules/postcss-nesting": { "version": "13.0.2", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz", - "integrity": "sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ==", "dev": true, "funding": [ { @@ -13873,8 +10610,6 @@ }, "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz", - "integrity": "sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g==", "dev": true, "funding": [ { @@ -13896,8 +10631,6 @@ }, "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", - "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", "dev": true, "funding": [ { @@ -13919,8 +10652,6 @@ }, "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -13933,8 +10664,6 @@ }, "node_modules/postcss-selector-parser": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "license": "MIT", "dependencies": { @@ -13947,15 +10676,11 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true, "license": "MIT" }, "node_modules/postman-collection": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postman-collection/-/postman-collection-5.2.0.tgz", - "integrity": "sha512-ktjlchtpoCw+FZRg+WwnGWH1w9oQDNUBLSRh+9ETPqFAz3SupqHqRuMh74xjQ+PvTWY/WH2JR4ZW+1sH58Ul1g==", "license": "Apache-2.0", "dependencies": { "@faker-js/faker": "5.5.3", @@ -13976,8 +10701,6 @@ }, "node_modules/postman-collection/node_modules/file-type": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -13985,8 +10708,6 @@ }, "node_modules/postman-collection/node_modules/iconv-lite": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -13997,8 +10718,6 @@ }, "node_modules/postman-collection/node_modules/mime": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", "license": "MIT", "bin": { "mime": "cli.js" @@ -14009,8 +10728,6 @@ }, "node_modules/postman-collection/node_modules/semver": { "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -14021,8 +10738,6 @@ }, "node_modules/postman-url-encoder": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/postman-url-encoder/-/postman-url-encoder-3.0.8.tgz", - "integrity": "sha512-EOgUMBazo7JNP4TDrd64TsooCiWzzo4143Ws8E8WYGEpn2PKpq+S4XRTDhuRTYHm3VKOpUZs7ZYZq7zSDuesqA==", "license": "Apache-2.0", "dependencies": { "punycode": "^2.3.1" @@ -14033,8 +10748,6 @@ }, "node_modules/preserve": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", "dev": true, "license": "MIT", "engines": { @@ -14043,8 +10756,6 @@ }, "node_modules/prettier": { "version": "3.7.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", - "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", "bin": { @@ -14059,8 +10770,6 @@ }, "node_modules/prismjs": { "version": "1.30.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", "engines": { "node": ">=6" @@ -14068,15 +10777,11 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, "license": "MIT" }, "node_modules/property-information": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", - "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", "license": "MIT", "funding": { "type": "github", @@ -14085,8 +10790,6 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -14098,8 +10801,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" @@ -14107,8 +10808,6 @@ }, "node_modules/qs": { "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -14122,8 +10821,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -14142,8 +10839,6 @@ }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -14152,14 +10847,10 @@ }, "node_modules/railroad-diagrams": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", "license": "CC0-1.0" }, "node_modules/randexp": { "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", "license": "MIT", "dependencies": { "discontinuous-range": "1.0.0", @@ -14171,8 +10862,6 @@ }, "node_modules/randomatic": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "license": "MIT", "dependencies": { @@ -14186,8 +10875,6 @@ }, "node_modules/randomatic/node_modules/is-number": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, "license": "MIT", "engines": { @@ -14196,8 +10883,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -14205,8 +10890,6 @@ }, "node_modules/raw-body": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -14220,8 +10903,6 @@ }, "node_modules/react": { "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14229,8 +10910,6 @@ }, "node_modules/react-colorful": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", "license": "MIT", "peerDependencies": { "react": ">=16.8.0", @@ -14239,8 +10918,6 @@ }, "node_modules/react-dom": { "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" @@ -14251,8 +10928,6 @@ }, "node_modules/react-markdown": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", - "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -14278,8 +10953,6 @@ }, "node_modules/react-pdf": { "version": "10.3.0", - "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-10.3.0.tgz", - "integrity": "sha512-2LQzC9IgNVAX8gM+6F+1t/70a9/5RWThYxc+CWAmT2LW/BRmnj+35x1os5j/nR2oldyf8L+hCAMBmVKU8wrYFA==", "license": "MIT", "dependencies": { "clsx": "^2.0.0", @@ -14307,8 +10980,6 @@ }, "node_modules/react-refresh": { "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, "license": "MIT", "engines": { @@ -14317,8 +10988,6 @@ }, "node_modules/react-syntax-highlighter": { "version": "15.6.6", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz", - "integrity": "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.3.1", @@ -14334,8 +11003,6 @@ }, "node_modules/react-universal-interface": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/react-universal-interface/-/react-universal-interface-0.6.2.tgz", - "integrity": "sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw==", "peerDependencies": { "react": "*", "tslib": "*" @@ -14343,8 +11010,6 @@ }, "node_modules/react-use": { "version": "17.6.0", - "resolved": "https://registry.npmjs.org/react-use/-/react-use-17.6.0.tgz", - "integrity": "sha512-OmedEScUMKFfzn1Ir8dBxiLLSOzhKe/dPZwVxcujweSj45aNM7BEGPb9BEVIgVEqEXx6f3/TsXzwIktNgUR02g==", "license": "Unlicense", "dependencies": { "@types/js-cookie": "^2.2.6", @@ -14369,8 +11034,6 @@ }, "node_modules/read-cache": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, "license": "MIT", "dependencies": { @@ -14379,8 +11042,6 @@ }, "node_modules/read-cache/node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -14389,8 +11050,6 @@ }, "node_modules/read-pkg": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, "license": "MIT", "dependencies": { @@ -14404,8 +11063,6 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -14422,8 +11079,6 @@ }, "node_modules/read-pkg-up/node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -14441,8 +11096,6 @@ }, "node_modules/read-pkg-up/node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -14457,8 +11110,6 @@ }, "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -14467,8 +11118,6 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -14477,8 +11126,6 @@ }, "node_modules/readable-stream": { "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14490,15 +11137,11 @@ }, "node_modules/readable-stream/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "license": "MIT", "dependencies": { @@ -14510,8 +11153,6 @@ }, "node_modules/readdirp/node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "license": "MIT", "engines": { @@ -14523,8 +11164,6 @@ }, "node_modules/recast": { "version": "0.23.11", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", - "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", "dev": true, "license": "MIT", "dependencies": { @@ -14540,8 +11179,6 @@ }, "node_modules/recast/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -14550,8 +11187,6 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -14564,8 +11199,6 @@ }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, "license": "MIT", "dependencies": { @@ -14587,8 +11220,6 @@ }, "node_modules/refractor": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", - "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", "license": "MIT", "dependencies": { "hastscript": "^6.0.0", @@ -14602,8 +11233,6 @@ }, "node_modules/refractor/node_modules/character-entities": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", "license": "MIT", "funding": { "type": "github", @@ -14612,8 +11241,6 @@ }, "node_modules/refractor/node_modules/character-entities-legacy": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", "license": "MIT", "funding": { "type": "github", @@ -14622,8 +11249,6 @@ }, "node_modules/refractor/node_modules/character-reference-invalid": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", "license": "MIT", "funding": { "type": "github", @@ -14632,8 +11257,6 @@ }, "node_modules/refractor/node_modules/is-alphabetical": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", "license": "MIT", "funding": { "type": "github", @@ -14642,8 +11265,6 @@ }, "node_modules/refractor/node_modules/is-alphanumerical": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", "license": "MIT", "dependencies": { "is-alphabetical": "^1.0.0", @@ -14656,8 +11277,6 @@ }, "node_modules/refractor/node_modules/is-decimal": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", "license": "MIT", "funding": { "type": "github", @@ -14666,8 +11285,6 @@ }, "node_modules/refractor/node_modules/is-hexadecimal": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", "license": "MIT", "funding": { "type": "github", @@ -14676,8 +11293,6 @@ }, "node_modules/refractor/node_modules/parse-entities": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", "license": "MIT", "dependencies": { "character-entities": "^1.0.0", @@ -14694,8 +11309,6 @@ }, "node_modules/refractor/node_modules/prismjs": { "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", "license": "MIT", "engines": { "node": ">=6" @@ -14703,8 +11316,6 @@ }, "node_modules/reftools": { "version": "1.1.9", - "resolved": "https://registry.npmjs.org/reftools/-/reftools-1.1.9.tgz", - "integrity": "sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==", "license": "BSD-3-Clause", "funding": { "url": "https://github.com/Mermade/oas-kit?sponsor=1" @@ -14712,15 +11323,11 @@ }, "node_modules/regenerator-runtime": { "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true, "license": "MIT" }, "node_modules/regex-cache": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14732,8 +11339,6 @@ }, "node_modules/regex-not": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "license": "MIT", "dependencies": { @@ -14746,8 +11351,6 @@ }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "license": "MIT", "dependencies": { "call-bind": "^1.0.8", @@ -14766,8 +11369,6 @@ }, "node_modules/rehype-stringify": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz", - "integrity": "sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -14781,8 +11382,6 @@ }, "node_modules/remark-frontmatter": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -14797,8 +11396,6 @@ }, "node_modules/remark-gfm": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -14815,8 +11412,6 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -14831,8 +11426,6 @@ }, "node_modules/remark-rehype": { "version": "11.1.2", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", - "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -14848,8 +11441,6 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -14863,15 +11454,11 @@ }, "node_modules/remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", "dev": true, "license": "ISC" }, "node_modules/repeat-element": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, "license": "MIT", "engines": { @@ -14880,8 +11467,6 @@ }, "node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, "license": "MIT", "engines": { @@ -14890,8 +11475,6 @@ }, "node_modules/require-directory": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14899,8 +11482,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -14908,20 +11489,14 @@ }, "node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, "node_modules/resize-observer-polyfill": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", "license": "MIT" }, "node_modules/resolve": { "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14941,8 +11516,6 @@ }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", "engines": { "node": ">=4" @@ -14950,8 +11523,6 @@ }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, "license": "MIT", "funding": { @@ -14960,16 +11531,11 @@ }, "node_modules/resolve-url": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true, "license": "MIT" }, "node_modules/ret": { "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "license": "MIT", "engines": { "node": ">=0.12" @@ -14977,8 +11543,6 @@ }, "node_modules/reusify": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", - "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -14987,8 +11551,6 @@ }, "node_modules/rimraf": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.2.tgz", - "integrity": "sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -15007,8 +11569,6 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "13.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -15025,8 +11585,6 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { @@ -15041,8 +11599,6 @@ }, "node_modules/rollup": { "version": "4.54.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz", - "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", "dev": true, "license": "MIT", "dependencies": { @@ -15083,8 +11639,6 @@ }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -15099,8 +11653,6 @@ }, "node_modules/rtl-css-js": { "version": "1.16.1", - "resolved": "https://registry.npmjs.org/rtl-css-js/-/rtl-css-js-1.16.1.tgz", - "integrity": "sha512-lRQgou1mu19e+Ya0LsTvKrVJ5TYUbqCVPAiImX3UfLTenarvPUl1QFdvu5Z3PYmHT9RCcwIfbjRQBntExyj3Zg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2" @@ -15108,8 +11660,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -15131,8 +11681,6 @@ }, "node_modules/safe-array-concat": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15151,8 +11699,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -15171,8 +11717,6 @@ }, "node_modules/safe-push-apply": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "license": "MIT", "dependencies": { @@ -15188,8 +11732,6 @@ }, "node_modules/safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, "license": "MIT", "dependencies": { @@ -15198,8 +11740,6 @@ }, "node_modules/safe-regex-test": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -15215,14 +11755,10 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sanitize-filename": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, "license": "WTFPL OR ISC", "dependencies": { @@ -15231,14 +11767,10 @@ }, "node_modules/scheduler": { "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "license": "MIT" }, "node_modules/screenfull": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-5.2.0.tgz", - "integrity": "sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15249,8 +11781,6 @@ }, "node_modules/seek-bzip": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15263,8 +11793,6 @@ }, "node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -15273,8 +11801,6 @@ }, "node_modules/send": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { "debug": "^4.4.3", @@ -15299,8 +11825,6 @@ }, "node_modules/send/node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -15308,8 +11832,6 @@ }, "node_modules/send/node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -15324,8 +11846,6 @@ }, "node_modules/seroval": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.2.tgz", - "integrity": "sha512-N3HEHRCZYn3cQbsC4B5ldj9j+tHdf4JZoYPlcI4rRYu0Xy4qN8MQf1Z08EibzB0WpgRG5BGK08FTrmM66eSzKQ==", "license": "MIT", "engines": { "node": ">=10" @@ -15333,8 +11853,6 @@ }, "node_modules/seroval-plugins": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.4.2.tgz", - "integrity": "sha512-X7p4MEDTi+60o2sXZ4bnDBhgsUYDSkQEvzYZuJyFqWg9jcoPsHts5nrg5O956py2wyt28lUrBxk0M0/wU8URpA==", "license": "MIT", "engines": { "node": ">=10" @@ -15345,8 +11863,6 @@ }, "node_modules/serve-static": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -15364,14 +11880,10 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -15387,8 +11899,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -15402,8 +11912,6 @@ }, "node_modules/set-harmonic-interval": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz", - "integrity": "sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g==", "license": "Unlicense", "engines": { "node": ">=6.9" @@ -15411,8 +11919,6 @@ }, "node_modules/set-proto": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, "license": "MIT", "dependencies": { @@ -15426,8 +11932,6 @@ }, "node_modules/set-value": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "license": "MIT", "dependencies": { @@ -15442,8 +11946,6 @@ }, "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -15455,8 +11957,6 @@ }, "node_modules/set-value/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -15465,14 +11965,10 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -15483,8 +11979,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -15492,8 +11986,6 @@ }, "node_modules/shell-quote": { "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15504,8 +11996,6 @@ }, "node_modules/should": { "version": "13.2.3", - "resolved": "https://registry.npmjs.org/should/-/should-13.2.3.tgz", - "integrity": "sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==", "license": "MIT", "dependencies": { "should-equal": "^2.0.0", @@ -15517,8 +12007,6 @@ }, "node_modules/should-equal": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/should-equal/-/should-equal-2.0.0.tgz", - "integrity": "sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==", "license": "MIT", "dependencies": { "should-type": "^1.4.0" @@ -15526,8 +12014,6 @@ }, "node_modules/should-format": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/should-format/-/should-format-3.0.3.tgz", - "integrity": "sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==", "license": "MIT", "dependencies": { "should-type": "^1.3.0", @@ -15536,14 +12022,10 @@ }, "node_modules/should-type": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/should-type/-/should-type-1.4.0.tgz", - "integrity": "sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==", "license": "MIT" }, "node_modules/should-type-adaptors": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz", - "integrity": "sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==", "license": "MIT", "dependencies": { "should-type": "^1.3.0", @@ -15552,14 +12034,10 @@ }, "node_modules/should-util": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/should-util/-/should-util-1.0.1.tgz", - "integrity": "sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==", "license": "MIT" }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -15577,8 +12055,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -15593,8 +12069,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -15611,8 +12085,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -15630,22 +12102,16 @@ }, "node_modules/siginfo": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, "license": "ISC" }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, "license": "ISC" }, "node_modules/slash": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", "dev": true, "license": "MIT", "engines": { @@ -15654,8 +12120,6 @@ }, "node_modules/slugify": { "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", "license": "MIT", "engines": { "node": ">=8.0.0" @@ -15663,8 +12127,6 @@ }, "node_modules/smtp-address-parser": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/smtp-address-parser/-/smtp-address-parser-1.0.10.tgz", - "integrity": "sha512-Osg9LmvGeAG/hyao4mldbflLOkkr3a+h4m1lwKCK5U8M6ZAr7tdXEz/+/vr752TSGE4MNUlUl9cIK2cB8cgzXg==", "license": "MIT", "dependencies": { "nearley": "^2.20.1" @@ -15675,8 +12137,6 @@ }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "dev": true, "license": "MIT", "dependencies": { @@ -15686,8 +12146,6 @@ }, "node_modules/snapdragon": { "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "license": "MIT", "dependencies": { @@ -15706,8 +12164,6 @@ }, "node_modules/snapdragon-node": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "license": "MIT", "dependencies": { @@ -15721,8 +12177,6 @@ }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, "license": "MIT", "dependencies": { @@ -15734,8 +12188,6 @@ }, "node_modules/snapdragon-util": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15747,8 +12199,6 @@ }, "node_modules/snapdragon-util/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15760,8 +12210,6 @@ }, "node_modules/snapdragon/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { @@ -15770,8 +12218,6 @@ }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "license": "MIT", "dependencies": { @@ -15783,8 +12229,6 @@ }, "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, "license": "MIT", "dependencies": { @@ -15796,8 +12240,6 @@ }, "node_modules/snapdragon/node_modules/is-descriptor": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -15810,8 +12252,6 @@ }, "node_modules/snapdragon/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -15820,15 +12260,11 @@ }, "node_modules/snapdragon/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, "node_modules/source-map": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -15837,8 +12273,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -15847,9 +12281,6 @@ }, "node_modules/source-map-resolve": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "license": "MIT", "dependencies": { @@ -15862,16 +12293,11 @@ }, "node_modules/source-map-url": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true, "license": "MIT" }, "node_modules/space-separated-tokens": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "license": "MIT", "funding": { "type": "github", @@ -15880,8 +12306,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -15891,15 +12315,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -15909,15 +12329,11 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/split-string": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "license": "MIT", "dependencies": { @@ -15929,8 +12345,6 @@ }, "node_modules/split2": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-0.1.2.tgz", - "integrity": "sha512-t6JTeWbon5yYazpiZN1Fn0ehh5h/FBH9iuoQBAaEHUp+uFxLKFrmMQF3ElmzoScD9OQn+gb8Ut+NOuQYZ1aBfA==", "dev": true, "license": "ISC", "dependencies": { @@ -15939,22 +12353,16 @@ }, "node_modules/split2/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/split2/node_modules/object-keys": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", "dev": true, "license": "MIT" }, "node_modules/split2/node_modules/readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { @@ -15966,8 +12374,6 @@ }, "node_modules/split2/node_modules/through2": { "version": "0.4.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz", - "integrity": "sha512-45Llu+EwHKtAZYTPPVn3XZHBgakWMN3rokhEv5hu596XP+cNgplMg+Gj+1nmAvj+L0K7+N49zBKx5rah5u0QIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15977,8 +12383,6 @@ }, "node_modules/split2/node_modules/xtend": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", "dev": true, "dependencies": { "object-keys": "~0.4.0" @@ -15989,8 +12393,6 @@ }, "node_modules/stack-generator": { "version": "2.0.10", - "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.10.tgz", - "integrity": "sha512-mwnua/hkqM6pF4k8SnmZ2zfETsRUpWXREfA/goT8SLCV4iOFa4bzOX2nDipWAZFPTjLvQB82f5yaodMVhK0yJQ==", "license": "MIT", "dependencies": { "stackframe": "^1.3.4" @@ -15998,21 +12400,15 @@ }, "node_modules/stackback": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true, "license": "MIT" }, "node_modules/stackframe": { "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", "license": "MIT" }, "node_modules/stacktrace-gps": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.1.2.tgz", - "integrity": "sha512-GcUgbO4Jsqqg6RxfyTHFiPxdPqF+3LFmQhm7MgCuYQOYuWyqxo5pwRPz5d/u6/WYJdEnWfK4r+jGbyD8TSggXQ==", "license": "MIT", "dependencies": { "source-map": "0.5.6", @@ -16021,8 +12417,6 @@ }, "node_modules/stacktrace-gps/node_modules/source-map": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha512-MjZkVp0NHr5+TPihLcadqnlVoGIoWo4IBHptutGh9wI3ttUYvCG26HkSuDi+K6lsZ25syXJXcctwgyVCt//xqA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -16030,8 +12424,6 @@ }, "node_modules/stacktrace-js": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.2.tgz", - "integrity": "sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg==", "license": "MIT", "dependencies": { "error-stack-parser": "^2.0.6", @@ -16041,8 +12433,6 @@ }, "node_modules/static-extend": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, "license": "MIT", "dependencies": { @@ -16055,8 +12445,6 @@ }, "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, "license": "MIT", "dependencies": { @@ -16068,8 +12456,6 @@ }, "node_modules/static-extend/node_modules/is-descriptor": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, "license": "MIT", "dependencies": { @@ -16082,8 +12468,6 @@ }, "node_modules/statuses": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -16091,15 +12475,11 @@ }, "node_modules/std-env": { "version": "3.10.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", - "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", "dev": true, "license": "MIT" }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", - "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -16111,22 +12491,16 @@ }, "node_modules/string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true, "license": "MIT" }, "node_modules/string-natural-compare": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==", "dev": true, "license": "MIT" }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -16139,8 +12513,6 @@ }, "node_modules/string.prototype.padend": { "version": "3.1.6", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", - "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -16158,8 +12530,6 @@ }, "node_modules/string.prototype.trim": { "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { @@ -16180,8 +12550,6 @@ }, "node_modules/string.prototype.trimend": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16199,8 +12567,6 @@ }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -16217,8 +12583,6 @@ }, "node_modules/stringify-entities": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "license": "MIT", "dependencies": { "character-entities-html4": "^2.0.0", @@ -16231,8 +12595,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -16243,8 +12605,6 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -16253,8 +12613,6 @@ }, "node_modules/strip-dirs": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "license": "MIT", "dependencies": { @@ -16263,8 +12621,6 @@ }, "node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, "license": "MIT", "engines": { @@ -16276,8 +12632,6 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16289,8 +12643,6 @@ }, "node_modules/strip-literal": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.1.0.tgz", - "integrity": "sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==", "dev": true, "license": "MIT", "dependencies": { @@ -16302,14 +12654,10 @@ }, "node_modules/style-mod": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz", - "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==", "license": "MIT" }, "node_modules/style-to-js": { "version": "1.1.21", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", - "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", "license": "MIT", "dependencies": { "style-to-object": "1.0.14" @@ -16317,8 +12665,6 @@ }, "node_modules/style-to-object": { "version": "1.0.14", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", - "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", "license": "MIT", "dependencies": { "inline-style-parser": "0.2.7" @@ -16326,14 +12672,10 @@ }, "node_modules/stylis": { "version": "4.3.6", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", - "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", "license": "MIT" }, "node_modules/subarg": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, "license": "MIT", "dependencies": { @@ -16342,8 +12684,6 @@ }, "node_modules/sucrase": { "version": "3.35.1", - "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", - "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, "license": "MIT", "dependencies": { @@ -16365,8 +12705,6 @@ }, "node_modules/sucrase/node_modules/commander": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, "license": "MIT", "engines": { @@ -16375,8 +12713,6 @@ }, "node_modules/super-regex": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", - "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", "dev": true, "license": "MIT", "dependencies": { @@ -16393,8 +12729,6 @@ }, "node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "license": "MIT", "dependencies": { @@ -16406,8 +12740,6 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, "license": "MIT", "engines": { @@ -16419,15 +12751,11 @@ }, "node_modules/svg-parser": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", "dev": true, "license": "MIT" }, "node_modules/swagger2openapi": { "version": "7.0.8", - "resolved": "https://registry.npmjs.org/swagger2openapi/-/swagger2openapi-7.0.8.tgz", - "integrity": "sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==", "license": "BSD-3-Clause", "dependencies": { "call-me-maybe": "^1.0.1", @@ -16453,8 +12781,6 @@ }, "node_modules/swagger2openapi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -16468,8 +12794,6 @@ }, "node_modules/swagger2openapi/node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -16482,8 +12806,6 @@ }, "node_modules/swagger2openapi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -16494,14 +12816,10 @@ }, "node_modules/swagger2openapi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/swagger2openapi/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -16517,8 +12835,6 @@ }, "node_modules/swagger2openapi/node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "license": "ISC", "engines": { "node": ">=10" @@ -16526,8 +12842,6 @@ }, "node_modules/swagger2openapi/node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -16535,8 +12849,6 @@ }, "node_modules/swagger2openapi/node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -16553,8 +12865,6 @@ }, "node_modules/swagger2openapi/node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "license": "ISC", "engines": { "node": ">=12" @@ -16562,14 +12872,10 @@ }, "node_modules/tabbable": { "version": "6.4.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", - "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", "license": "MIT" }, "node_modules/tailwindcss": { "version": "3.4.19", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", - "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16606,8 +12912,6 @@ }, "node_modules/tailwindcss/node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", "engines": { @@ -16616,8 +12920,6 @@ }, "node_modules/tailwindcss/node_modules/fast-glob": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -16633,8 +12935,6 @@ }, "node_modules/tailwindcss/node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -16646,8 +12946,6 @@ }, "node_modules/tailwindcss/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { @@ -16659,8 +12957,6 @@ }, "node_modules/tailwindcss/node_modules/postcss-nested": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", - "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", "dev": true, "funding": [ { @@ -16685,8 +12981,6 @@ }, "node_modules/tar-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "license": "MIT", "dependencies": { @@ -16704,15 +12998,11 @@ }, "node_modules/tar-stream/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "license": "MIT", "dependencies": { @@ -16727,15 +13017,11 @@ }, "node_modules/tar-stream/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "license": "MIT" }, "node_modules/tar-stream/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "license": "MIT", "dependencies": { @@ -16744,8 +13030,6 @@ }, "node_modules/tar-stream/node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, "license": "MIT", "engines": { @@ -16754,8 +13038,6 @@ }, "node_modules/task-graph-runner": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/task-graph-runner/-/task-graph-runner-1.0.3.tgz", - "integrity": "sha512-aC70bepv1j9jXX70nzolNvnHJvD4A3WtU4lQ1HEjgTS8rgnRXoUUq+xl9hZ1hKYXxVwElZXmUUMxpzDC6R0mRg==", "dev": true, "license": "MIT", "dependencies": { @@ -16764,8 +13046,6 @@ }, "node_modules/thenify": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "license": "MIT", "dependencies": { @@ -16774,8 +13054,6 @@ }, "node_modules/thenify-all": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "dev": true, "license": "MIT", "dependencies": { @@ -16787,8 +13065,6 @@ }, "node_modules/throttle-debounce": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", "license": "MIT", "engines": { "node": ">=10" @@ -16796,15 +13072,11 @@ }, "node_modules/through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, "node_modules/through2": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.5.1.tgz", - "integrity": "sha512-zexCrAOTbjkBCXGyozn7hhS3aEaqdrc59mAD2E3dKYzV1vFuEGQ1hEDJN2oQMQFwy4he2zyLqPZV+AlfS8ZWJA==", "dev": true, "license": "MIT", "dependencies": { @@ -16814,15 +13086,11 @@ }, "node_modules/through2/node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true, "license": "MIT" }, "node_modules/through2/node_modules/readable-stream": { "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "license": "MIT", "dependencies": { @@ -16834,8 +13102,6 @@ }, "node_modules/time-span": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", "dev": true, "license": "MIT", "dependencies": { @@ -16850,34 +13116,24 @@ }, "node_modules/tiny-invariant": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, "node_modules/tiny-warning": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, "node_modules/tinybench": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, "license": "MIT" }, "node_modules/tinyexec": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", "dev": true, "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16893,8 +13149,6 @@ }, "node_modules/tinypool": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", - "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", "dev": true, "license": "MIT", "engines": { @@ -16903,8 +13157,6 @@ }, "node_modules/tinyrainbow": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", - "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", "engines": { @@ -16913,8 +13165,6 @@ }, "node_modules/tinyspy": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz", - "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==", "dev": true, "license": "MIT", "engines": { @@ -16923,8 +13173,6 @@ }, "node_modules/to-buffer": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", - "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, "license": "MIT", "dependencies": { @@ -16938,8 +13186,6 @@ }, "node_modules/to-object-path": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, "license": "MIT", "dependencies": { @@ -16951,8 +13197,6 @@ }, "node_modules/to-object-path/node_modules/kind-of": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "license": "MIT", "dependencies": { @@ -16964,8 +13208,6 @@ }, "node_modules/to-regex": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "license": "MIT", "dependencies": { @@ -16980,8 +13222,6 @@ }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -16992,14 +13232,10 @@ }, "node_modules/toggle-selection": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", - "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==", "license": "MIT" }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -17007,14 +13243,10 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", "license": "MIT" }, "node_modules/trim-lines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "license": "MIT", "funding": { "type": "github", @@ -17023,8 +13255,6 @@ }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", "engines": { @@ -17033,8 +13263,6 @@ }, "node_modules/trough": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "license": "MIT", "funding": { "type": "github", @@ -17043,8 +13271,6 @@ }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, "license": "WTFPL", "dependencies": { @@ -17053,27 +13279,19 @@ }, "node_modules/ts-easing": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ts-easing/-/ts-easing-0.2.0.tgz", - "integrity": "sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ==", "license": "Unlicense" }, "node_modules/ts-interface-checker": { "version": "0.1.13", - "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", - "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true, "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/tsx": { "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, "license": "MIT", "dependencies": { @@ -17092,8 +13310,6 @@ }, "node_modules/type-fest": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -17105,8 +13321,6 @@ }, "node_modules/type-is": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -17119,8 +13333,6 @@ }, "node_modules/type-is/node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -17128,8 +13340,6 @@ }, "node_modules/type-is/node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -17144,8 +13354,6 @@ }, "node_modules/typed-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "license": "MIT", "dependencies": { @@ -17159,8 +13367,6 @@ }, "node_modules/typed-array-byte-length": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "license": "MIT", "dependencies": { @@ -17179,8 +13385,6 @@ }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17201,8 +13405,6 @@ }, "node_modules/typed-array-length": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { @@ -17222,8 +13424,6 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", "bin": { @@ -17236,8 +13436,6 @@ }, "node_modules/unbox-primitive": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { @@ -17255,8 +13453,6 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "license": "MIT", "dependencies": { @@ -17266,8 +13462,6 @@ }, "node_modules/unbzip2-stream/node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "funding": [ { @@ -17291,20 +13485,14 @@ }, "node_modules/underscore": { "version": "1.12.1", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", - "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", "license": "MIT" }, "node_modules/undici-types": { "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, "node_modules/unified": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17322,8 +13510,6 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", "engines": { "node": ">=12" @@ -17334,8 +13520,6 @@ }, "node_modules/union-value": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -17350,8 +13534,6 @@ }, "node_modules/union-value/node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, "license": "MIT", "engines": { @@ -17360,8 +13542,6 @@ }, "node_modules/unist-util-is": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", - "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -17373,8 +13553,6 @@ }, "node_modules/unist-util-position": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -17386,8 +13564,6 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -17399,8 +13575,6 @@ }, "node_modules/unist-util-visit": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17414,8 +13588,6 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", - "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17428,8 +13600,6 @@ }, "node_modules/universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, "license": "MIT", "engines": { @@ -17438,8 +13608,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -17447,8 +13615,6 @@ }, "node_modules/unplugin": { "version": "2.3.11", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.11.tgz", - "integrity": "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==", "dev": true, "license": "MIT", "dependencies": { @@ -17463,8 +13629,6 @@ }, "node_modules/unset-value": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17477,8 +13641,6 @@ }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, "license": "MIT", "dependencies": { @@ -17492,8 +13654,6 @@ }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, "license": "MIT", "dependencies": { @@ -17505,8 +13665,6 @@ }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, "license": "MIT", "engines": { @@ -17515,15 +13673,11 @@ }, "node_modules/unset-value/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, "license": "MIT" }, "node_modules/update-browserslist-db": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "devOptional": true, "funding": [ { @@ -17553,16 +13707,11 @@ }, "node_modules/urix": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true, "license": "MIT" }, "node_modules/use": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, "license": "MIT", "engines": { @@ -17571,8 +13720,6 @@ }, "node_modules/use-sync-external-store": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" @@ -17580,36 +13727,26 @@ }, "node_modules/utf8-byte-length": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", "dev": true, "license": "(WTFPL OR MIT)" }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, "license": "MIT" }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/valid-url": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz", - "integrity": "sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==" + "version": "1.0.9" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -17619,41 +13756,29 @@ }, "node_modules/validate.io-array": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", - "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==", "license": "MIT" }, "node_modules/validate.io-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", - "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" + "version": "1.0.2" }, "node_modules/validate.io-integer": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", - "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", "dependencies": { "validate.io-number": "^1.0.3" } }, "node_modules/validate.io-integer-array": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", - "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", "dependencies": { "validate.io-array": "^1.0.3", "validate.io-integer": "^1.0.4" } }, "node_modules/validate.io-number": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", - "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + "version": "1.0.3" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -17661,8 +13786,6 @@ }, "node_modules/vfile": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17675,8 +13798,6 @@ }, "node_modules/vfile-message": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", - "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -17689,8 +13810,6 @@ }, "node_modules/vite": { "version": "7.3.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", - "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "dev": true, "license": "MIT", "dependencies": { @@ -17764,8 +13883,6 @@ }, "node_modules/vite-node": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", - "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", "dev": true, "license": "MIT", "dependencies": { @@ -17787,8 +13904,6 @@ }, "node_modules/vite-plugin-static-copy": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-3.1.4.tgz", - "integrity": "sha512-iCmr4GSw4eSnaB+G8zc2f4dxSuDjbkjwpuBLLGvQYR9IW7rnDzftnUjOH5p4RYR+d4GsiBqXRvzuFhs5bnzVyw==", "dev": true, "license": "MIT", "dependencies": { @@ -17806,8 +13921,6 @@ }, "node_modules/vite-plugin-static-copy/node_modules/p-map": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", - "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { @@ -17819,8 +13932,6 @@ }, "node_modules/vite-plugin-svgr": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.5.0.tgz", - "integrity": "sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==", "dev": true, "license": "MIT", "dependencies": { @@ -17834,8 +13945,6 @@ }, "node_modules/vite-plugin-top-level-await": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vite-plugin-top-level-await/-/vite-plugin-top-level-await-1.6.0.tgz", - "integrity": "sha512-bNhUreLamTIkoulCR9aDXbTbhLk6n1YE8NJUTTxl5RYskNRtzOR0ASzSjBVRtNdjIfngDXo11qOsybGLNsrdww==", "dev": true, "license": "MIT", "dependencies": { @@ -17850,8 +13959,6 @@ }, "node_modules/vite-plugin-top-level-await/node_modules/uuid": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", @@ -17864,8 +13971,6 @@ }, "node_modules/vite-plugin-wasm": { "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.5.0.tgz", - "integrity": "sha512-X5VWgCnqiQEGb+omhlBVsvTfxikKtoOgAzQ95+BZ8gQ+VfMHIjSHr0wyvXFQCa0eKQ0fKyaL0kWcEnYqBac4lQ==", "dev": true, "license": "MIT", "peerDependencies": { @@ -17874,8 +13979,6 @@ }, "node_modules/vitest": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", - "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", "dev": true, "license": "MIT", "dependencies": { @@ -17947,26 +14050,18 @@ }, "node_modules/vkbeautify": { "version": "0.99.3", - "resolved": "https://registry.npmjs.org/vkbeautify/-/vkbeautify-0.99.3.tgz", - "integrity": "sha512-2ozZEFfmVvQcHWoHLNuiKlUfDKlhh4KGsy54U0UrlLMR1SO+XKAIDqBxtBwHgNrekurlJwE8A9K6L49T78ZQ9Q==", "license": "MIT" }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", "license": "MIT" }, "node_modules/w3c-keyname": { "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", "license": "MIT" }, "node_modules/warning": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" @@ -17974,21 +14069,15 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, "node_modules/webpack-virtual-modules": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true, "license": "MIT" }, "node_modules/whatwg-mimetype": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "license": "MIT", "engines": { "node": ">=18" @@ -17996,8 +14085,6 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -18006,8 +14093,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -18021,8 +14106,6 @@ }, "node_modules/which-boxed-primitive": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", @@ -18040,8 +14123,6 @@ }, "node_modules/which-builtin-type": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -18068,8 +14149,6 @@ }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "license": "MIT", "dependencies": { "is-map": "^2.0.3", @@ -18086,14 +14165,10 @@ }, "node_modules/which-module": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -18113,8 +14188,6 @@ }, "node_modules/why-is-node-running": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", - "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "license": "MIT", "dependencies": { @@ -18130,8 +14203,6 @@ }, "node_modules/workspaces-run": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/workspaces-run/-/workspaces-run-1.0.2.tgz", - "integrity": "sha512-VJO+ZcefRGjH81hxGOpS/bpelW+l6PfjUlA8cqtSq/hbIlTC+oG9TWUJTo1xKIyRSg/W+Snu2g9V0lyWGbpCgw==", "dev": true, "license": "MIT", "dependencies": { @@ -18157,8 +14228,6 @@ }, "node_modules/workspaces-run/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { @@ -18173,8 +14242,6 @@ }, "node_modules/workspaces-run/node_modules/chalk": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "license": "MIT", "dependencies": { @@ -18187,8 +14254,6 @@ }, "node_modules/workspaces-run/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18200,15 +14265,11 @@ }, "node_modules/workspaces-run/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, "license": "MIT" }, "node_modules/workspaces-run/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { @@ -18217,8 +14278,6 @@ }, "node_modules/workspaces-run/node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -18230,8 +14289,6 @@ }, "node_modules/workspaces-run/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", "dependencies": { @@ -18243,8 +14300,6 @@ }, "node_modules/wrap-ansi": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -18257,8 +14312,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -18272,8 +14325,6 @@ }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -18284,14 +14335,10 @@ }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/wrapline": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wrapline/-/wrapline-2.0.1.tgz", - "integrity": "sha512-WmC0Dk43usmD+shMS8dr06Znblx3nAWHWR+BMecQEClNq/NTBPKIA6JHSX+cv8TRG7w4H6/nLGUmFt56rHkFow==", "dev": true, "license": "MIT", "dependencies": { @@ -18302,14 +14349,10 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/ws": { "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -18329,8 +14372,6 @@ }, "node_modules/xpath": { "version": "0.0.34", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.34.tgz", - "integrity": "sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==", "license": "MIT", "engines": { "node": ">=0.6.0" @@ -18338,8 +14379,6 @@ }, "node_modules/xtend": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", - "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", "dev": true, "engines": { "node": ">=0.4" @@ -18347,21 +14386,15 @@ }, "node_modules/y18n": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "license": "ISC" }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "devOptional": true, "license": "ISC" }, "node_modules/yaml": { "version": "2.8.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", - "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -18375,8 +14408,6 @@ }, "node_modules/yargs": { "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "license": "MIT", "dependencies": { "cliui": "^6.0.0", @@ -18397,8 +14428,6 @@ }, "node_modules/yargs-parser": { "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "license": "ISC", "dependencies": { "camelcase": "^5.0.0", @@ -18410,8 +14439,6 @@ }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, "license": "MIT", "dependencies": { @@ -18421,8 +14448,6 @@ }, "node_modules/zod": { "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -18430,8 +14455,6 @@ }, "node_modules/zod-to-json-schema": { "version": "3.25.1", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", "license": "ISC", "peerDependencies": { "zod": "^3.25 || ^4" @@ -18439,8 +14462,6 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "license": "MIT", "funding": { "type": "github", @@ -18716,57 +14737,6 @@ "name": "@yaak/themes-yaak", "version": "0.1.0" }, - "src-tauri": { - "name": "@yaakapp-internal/tauri", - "version": "1.0.0" - }, - "src-tauri/yaak-crypto": { - "name": "@yaakapp-internal/crypto", - "version": "1.0.0" - }, - "src-tauri/yaak-fonts": { - "name": "@yaakapp-internal/fonts", - "version": "1.0.0" - }, - "src-tauri/yaak-git": { - "name": "@yaakapp-internal/git", - "version": "1.0.0" - }, - "src-tauri/yaak-license": { - "name": "@yaakapp-internal/license", - "version": "1.0.0" - }, - "src-tauri/yaak-mac-window": { - "name": "@yaakapp-internal/mac-window", - "version": "1.0.0" - }, - "src-tauri/yaak-models": { - "name": "@yaakapp-internal/models", - "version": "1.0.0" - }, - "src-tauri/yaak-plugins": { - "name": "@yaakapp-internal/plugins", - "version": "1.0.0" - }, - "src-tauri/yaak-sse": { - "name": "@yaakapp-internal/sse", - "version": "1.0.0" - }, - "src-tauri/yaak-sync": { - "name": "@yaakapp-internal/sync", - "version": "1.0.0" - }, - "src-tauri/yaak-templates": { - "name": "@yaakapp-internal/templates", - "version": "1.0.0", - "devDependencies": { - "rimraf": "^6.1.2" - } - }, - "src-tauri/yaak-ws": { - "name": "@yaakapp-internal/ws", - "version": "1.0.0" - }, "src-web": { "name": "@yaakapp/app", "version": "1.0.0", diff --git a/package.json b/package.json index 3815c4f4..e55fd37d 100644 --- a/package.json +++ b/package.json @@ -47,18 +47,18 @@ "plugins/template-function-request", "plugins/template-function-response", "plugins/themes-yaak", - "src-tauri", - "src-tauri/yaak-crypto", - "src-tauri/yaak-fonts", - "src-tauri/yaak-git", - "src-tauri/yaak-license", - "src-tauri/yaak-mac-window", - "src-tauri/yaak-models", - "src-tauri/yaak-plugins", - "src-tauri/yaak-sse", - "src-tauri/yaak-sync", - "src-tauri/yaak-templates", - "src-tauri/yaak-ws", + "crates-tauri/yaak-app", + "crates-tauri/yaak-fonts", + "crates-tauri/yaak-license", + "crates-tauri/yaak-mac-window", + "crates/yaak-crypto", + "crates/yaak-git", + "crates/yaak-models", + "crates/yaak-plugins", + "crates/yaak-sse", + "crates/yaak-sync", + "crates/yaak-templates", + "crates/yaak-ws", "src-web" ], "scripts": { @@ -72,8 +72,8 @@ "build-plugins": "npm run --workspaces --if-present build", "test": "npm run --workspaces --if-present test", "icons": "run-p icons:*", - "icons:dev": "tauri icon src-tauri/icons/icon-dev.png --output src-tauri/icons/dev", - "icons:release": "tauri icon src-tauri/icons/icon.png --output src-tauri/icons/release", + "icons:dev": "tauri icon crates-tauri/yaak-app/icons/icon-dev.png --output crates-tauri/yaak-app/icons/dev", + "icons:release": "tauri icon crates-tauri/yaak-app/icons/icon.png --output crates-tauri/yaak-app/icons/release", "bootstrap": "run-s bootstrap:*", "bootstrap:install-wasm-pack": "node scripts/install-wasm-pack.cjs", "bootstrap:build": "npm run build", diff --git a/packages/plugin-runtime-types/package.json b/packages/plugin-runtime-types/package.json index ad8230dd..48a2de03 100644 --- a/packages/plugin-runtime-types/package.json +++ b/packages/plugin-runtime-types/package.json @@ -25,8 +25,8 @@ "build": "run-s build:copy-types build:tsc", "build:tsc": "tsc", "build:copy-types": "run-p build:copy-types:*", - "build:copy-types:root": "cpy --flat ../../src-tauri/yaak-plugins/bindings/*.ts ./src/bindings", - "build:copy-types:next": "cpy --flat ../../src-tauri/yaak-plugins/bindings/serde_json/*.ts ./src/bindings/serde_json", + "build:copy-types:root": "cpy --flat ../../crates/yaak-plugins/bindings/*.ts ./src/bindings", + "build:copy-types:next": "cpy --flat ../../crates/yaak-plugins/bindings/serde_json/*.ts ./src/bindings/serde_json", "publish": "npm publish", "prepublishOnly": "npm run build" }, diff --git a/packages/plugin-runtime-types/src/bindings/gen_events.ts b/packages/plugin-runtime-types/src/bindings/gen_events.ts index 2b7b9b3f..f10515d6 100644 --- a/packages/plugin-runtime-types/src/bindings/gen_events.ts +++ b/packages/plugin-runtime-types/src/bindings/gen_events.ts @@ -437,7 +437,7 @@ export type ListWorkspacesResponse = { workspaces: Array, }; export type OpenExternalUrlRequest = { url: string, }; -export type OpenWindowRequest = { url: string, +export type OpenWindowRequest = { url: string, /** * Label for the window. If not provided, a random one will be generated. */ diff --git a/packages/plugin-runtime-types/src/bindings/gen_models.ts b/packages/plugin-runtime-types/src/bindings/gen_models.ts index ba67aba3..61f6c54d 100644 --- a/packages/plugin-runtime-types/src/bindings/gen_models.ts +++ b/packages/plugin-runtime-types/src/bindings/gen_models.ts @@ -63,7 +63,7 @@ export type ProxySetting = { "type": "enabled", http: string, https: string, aut export type ProxySettingAuth = { user: string, password: string, }; -export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, clientCertificates: Array, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, useNativeTitlebar: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, }; +export type Settings = { model: "settings", id: string, createdAt: string, updatedAt: string, appearance: string, clientCertificates: Array, coloredMethods: boolean, editorFont: string | null, editorFontSize: number, editorKeymap: EditorKeymap, editorSoftWrap: boolean, hideWindowControls: boolean, useNativeTitlebar: boolean, interfaceFont: string | null, interfaceFontSize: number, interfaceScale: number, openWorkspaceNewWindow: boolean | null, proxy: ProxySetting | null, themeDark: string, themeLight: string, updateChannel: string, hideLicenseBadge: boolean, autoupdate: boolean, autoDownloadUpdates: boolean, checkNotifications: boolean, hotkeys: { [key in string]?: Array }, }; export type SyncState = { model: "sync_state", id: string, workspaceId: string, createdAt: string, updatedAt: string, flushedAt: string, modelId: string, checksum: string, relPath: string, syncDir: string, }; diff --git a/packages/plugin-runtime/package.json b/packages/plugin-runtime/package.json index 39e8aa89..fc634785 100644 --- a/packages/plugin-runtime/package.json +++ b/packages/plugin-runtime/package.json @@ -3,7 +3,7 @@ "scripts": { "bootstrap": "npm run build", "build": "run-p build:*", - "build:main": "esbuild src/index.ts --bundle --platform=node --outfile=../../src-tauri/vendored/plugin-runtime/index.cjs" + "build:main": "esbuild src/index.ts --bundle --platform=node --outfile=../../crates-tauri/yaak-app/vendored/plugin-runtime/index.cjs" }, "dependencies": { "ws": "^8.18.0" diff --git a/scripts/create-migration.cjs b/scripts/create-migration.cjs index 00877888..30e6d782 100644 --- a/scripts/create-migration.cjs +++ b/scripts/create-migration.cjs @@ -27,7 +27,7 @@ async function createMigration() { const timestamp = generateTimestamp(); const fileName = `${timestamp}_${slugify(String(migrationName), { lower: true })}.sql`; - const migrationsDir = path.join(__dirname, '../src-tauri/yaak-models/migrations'); + const migrationsDir = path.join(__dirname, '../crates/yaak-models/migrations'); const filePath = path.join(migrationsDir, fileName); if (!fs.existsSync(migrationsDir)) { diff --git a/scripts/git-hooks/post-checkout.mjs b/scripts/git-hooks/post-checkout.mjs index 459c10ad..55700776 100644 --- a/scripts/git-hooks/post-checkout.mjs +++ b/scripts/git-hooks/post-checkout.mjs @@ -110,7 +110,7 @@ const tauriWorktreeConfig = { productName: `Daak (${worktreeName})` }; -const tauriConfigPath = path.join(process.cwd(), 'src-tauri', 'tauri.worktree.conf.json'); +const tauriConfigPath = path.join(process.cwd(), 'crates-tauri', 'yaak-app', 'tauri.worktree.conf.json'); fs.writeFileSync(tauriConfigPath, JSON.stringify(tauriWorktreeConfig, null, 2) + '\n', 'utf8'); console.log(`Created tauri.worktree.conf.json with identifier: ${tauriWorktreeConfig.identifier}`); diff --git a/scripts/replace-version.cjs b/scripts/replace-version.cjs index f10fb21e..f5bc6edc 100644 --- a/scripts/replace-version.cjs +++ b/scripts/replace-version.cjs @@ -6,7 +6,7 @@ if (!version) { throw new Error('YAAK_VERSION environment variable not set') } -const tauriConfigPath = path.join(__dirname, '../src-tauri/tauri.conf.json'); +const tauriConfigPath = path.join(__dirname, '../crates-tauri/yaak-app/tauri.conf.json'); const tauriConfig = JSON.parse(fs.readFileSync(tauriConfigPath, 'utf8')); tauriConfig.version = version; diff --git a/scripts/run-dev.mjs b/scripts/run-dev.mjs index f4170181..97ee875d 100644 --- a/scripts/run-dev.mjs +++ b/scripts/run-dev.mjs @@ -11,9 +11,10 @@ import path from 'path'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const rootDir = path.join(__dirname, '..'); // Load .env.local if it exists -const envLocalPath = path.join(__dirname, '..', '.env.local'); +const envLocalPath = path.join(rootDir, '.env.local'); if (fs.existsSync(envLocalPath)) { const envContent = fs.readFileSync(envLocalPath, 'utf8'); const envVars = envContent @@ -39,7 +40,7 @@ const additionalArgs = process.argv.slice(2); const args = [ 'dev', '--no-watch', - '--config', './src-tauri/tauri.development.conf.json', + '--config', 'crates-tauri/yaak-app/tauri.development.conf.json', '--config', config, ...additionalArgs ]; diff --git a/scripts/vendor-node.cjs b/scripts/vendor-node.cjs index 05a33571..1dd29cf0 100644 --- a/scripts/vendor-node.cjs +++ b/scripts/vendor-node.cjs @@ -33,17 +33,17 @@ const SRC_BIN_MAP = { }; const DST_BIN_MAP = { - [MAC_ARM]: 'yaaknode-aarch64-apple-darwin', - [MAC_X64]: 'yaaknode-x86_64-apple-darwin', - [LNX_ARM]: 'yaaknode-aarch64-unknown-linux-gnu', - [LNX_X64]: 'yaaknode-x86_64-unknown-linux-gnu', - [WIN_X64]: 'yaaknode-x86_64-pc-windows-msvc.exe', - [WIN_ARM]: 'yaaknode-aarch64-pc-windows-msvc.exe', + [MAC_ARM]: 'yaaknode', + [MAC_X64]: 'yaaknode', + [LNX_ARM]: 'yaaknode', + [LNX_X64]: 'yaaknode', + [WIN_X64]: 'yaaknode.exe', + [WIN_ARM]: 'yaaknode.exe', }; const key = `${process.platform}_${process.env.YAAK_TARGET_ARCH ?? process.arch}`; -const destDir = path.join(__dirname, `..`, 'src-tauri', 'vendored', 'node'); +const destDir = path.join(__dirname, `..`, 'crates-tauri', 'yaak-app', 'vendored', 'node'); const binDest = path.join(destDir, DST_BIN_MAP[key]); console.log(`Vendoring NodeJS ${NODE_VERSION} for ${key}`); diff --git a/scripts/vendor-plugins.cjs b/scripts/vendor-plugins.cjs index c461a54f..10c10eaf 100644 --- a/scripts/vendor-plugins.cjs +++ b/scripts/vendor-plugins.cjs @@ -23,7 +23,7 @@ for (const name of readdirSync(pluginsDir)) { console.log(`Skipping ${name} (external plugin)`); continue; } - const destDir = path.join(__dirname, '../src-tauri/vendored/plugins/', name); + const destDir = path.join(__dirname, '../crates-tauri/yaak-app/vendored/plugins/', name); console.log(`Copying ${name} to ${destDir}`); cpSync(path.join(dir, 'package.json'), path.join(destDir, 'package.json')); cpSync(path.join(dir, 'build'), path.join(destDir, 'build'), { recursive: true }); diff --git a/scripts/vendor-protoc.cjs b/scripts/vendor-protoc.cjs index a3c5db60..48a867ee 100644 --- a/scripts/vendor-protoc.cjs +++ b/scripts/vendor-protoc.cjs @@ -33,15 +33,15 @@ const SRC_BIN_MAP = { }; const DST_BIN_MAP = { - [MAC_ARM]: 'yaakprotoc-aarch64-apple-darwin', - [MAC_X64]: 'yaakprotoc-x86_64-apple-darwin', - [LNX_ARM]: 'yaakprotoc-aarch64-unknown-linux-gnu', - [LNX_X64]: 'yaakprotoc-x86_64-unknown-linux-gnu', - [WIN_X64]: 'yaakprotoc-x86_64-pc-windows-msvc.exe', - [WIN_ARM]: 'yaakprotoc-aarch64-pc-windows-msvc.exe', + [MAC_ARM]: 'yaakprotoc', + [MAC_X64]: 'yaakprotoc', + [LNX_ARM]: 'yaakprotoc', + [LNX_X64]: 'yaakprotoc', + [WIN_X64]: 'yaakprotoc.exe', + [WIN_ARM]: 'yaakprotoc.exe', }; -const dstDir = path.join(__dirname, `..`, 'src-tauri', 'vendored', 'protoc'); +const dstDir = path.join(__dirname, `..`, 'crates-tauri', 'yaak-app', 'vendored', 'protoc'); const key = `${process.platform}_${process.env.YAAK_TARGET_ARCH ?? process.arch}`; console.log(`Vendoring protoc ${VERSION} for ${key}`); diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs deleted file mode 100644 index fb765922..00000000 --- a/src-tauri/src/commands.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::error::Result; -use tauri::{AppHandle, Manager, Runtime, State, WebviewWindow, command}; -use tauri_plugin_dialog::{DialogExt, MessageDialogKind}; -use yaak_crypto::manager::EncryptionManagerExt; -use yaak_plugins::events::{GetThemesResponse, PluginContext}; -use yaak_plugins::manager::PluginManager; -use yaak_plugins::native_template_functions::{ - decrypt_secure_template_function, encrypt_secure_template_function, -}; - -#[command] -pub(crate) async fn cmd_show_workspace_key( - window: WebviewWindow, - workspace_id: &str, -) -> Result<()> { - let key = window.crypto().reveal_workspace_key(workspace_id)?; - window - .dialog() - .message(format!("Your workspace key is \n\n{}", key)) - .kind(MessageDialogKind::Info) - .show(|_v| {}); - Ok(()) -} - -#[command] -pub(crate) async fn cmd_decrypt_template( - window: WebviewWindow, - template: &str, -) -> Result { - let app_handle = window.app_handle(); - let plugin_context = &PluginContext::new(&window); - Ok(decrypt_secure_template_function(&app_handle, plugin_context, template)?) -} - -#[command] -pub(crate) async fn cmd_secure_template( - app_handle: AppHandle, - window: WebviewWindow, - template: &str, -) -> Result { - let plugin_context = &PluginContext::new(&window); - Ok(encrypt_secure_template_function(&app_handle, plugin_context, template)?) -} - -#[command] -pub(crate) async fn cmd_get_themes( - window: WebviewWindow, - plugin_manager: State<'_, PluginManager>, -) -> Result> { - Ok(plugin_manager.get_themes(&window).await?) -} diff --git a/src-tauri/yaak-crypto/build.rs b/src-tauri/yaak-crypto/build.rs deleted file mode 100644 index 0d7c900f..00000000 --- a/src-tauri/yaak-crypto/build.rs +++ /dev/null @@ -1,9 +0,0 @@ -const COMMANDS: &[&str] = &[ - "enable_encryption", - "reveal_workspace_key", - "set_workspace_key", -]; - -fn main() { - tauri_plugin::Builder::new(COMMANDS).build(); -} diff --git a/src-tauri/yaak-crypto/permissions/default.toml b/src-tauri/yaak-crypto/permissions/default.toml deleted file mode 100644 index 1e82f243..00000000 --- a/src-tauri/yaak-crypto/permissions/default.toml +++ /dev/null @@ -1,7 +0,0 @@ -[default] -description = "Default permissions for the plugin" -permissions = [ - "allow-enable-encryption", - "allow-reveal-workspace-key", - "allow-set-workspace-key", -] diff --git a/src-tauri/yaak-crypto/src/commands.rs b/src-tauri/yaak-crypto/src/commands.rs deleted file mode 100644 index 7e8f6a02..00000000 --- a/src-tauri/yaak-crypto/src/commands.rs +++ /dev/null @@ -1,31 +0,0 @@ -use crate::error::Result; -use crate::manager::EncryptionManagerExt; -use tauri::{command, Runtime, WebviewWindow}; - -#[command] -pub(crate) async fn enable_encryption( - window: WebviewWindow, - workspace_id: &str, -) -> Result<()> { - window.crypto().ensure_workspace_key(workspace_id)?; - window.crypto().reveal_workspace_key(workspace_id)?; - Ok(()) -} - -#[command] -pub(crate) async fn reveal_workspace_key( - window: WebviewWindow, - workspace_id: &str, -) -> Result { - Ok(window.crypto().reveal_workspace_key(workspace_id)?) -} - -#[command] -pub(crate) async fn set_workspace_key( - window: WebviewWindow, - workspace_id: &str, - key: &str, -) -> Result<()> { - window.crypto().set_human_key(workspace_id, key)?; - Ok(()) -} diff --git a/src-tauri/yaak-crypto/src/lib.rs b/src-tauri/yaak-crypto/src/lib.rs deleted file mode 100644 index 39a86b1e..00000000 --- a/src-tauri/yaak-crypto/src/lib.rs +++ /dev/null @@ -1,27 +0,0 @@ -extern crate core; - -use crate::commands::*; -use crate::manager::EncryptionManager; -use tauri::plugin::{Builder, TauriPlugin}; -use tauri::{generate_handler, Manager, Runtime}; - -mod commands; -pub mod encryption; -pub mod error; -pub mod manager; -mod master_key; -mod workspace_key; - -pub fn init() -> TauriPlugin { - Builder::new("yaak-crypto") - .invoke_handler(generate_handler![ - enable_encryption, - reveal_workspace_key, - set_workspace_key - ]) - .setup(|app, _api| { - app.manage(EncryptionManager::new(app.app_handle())); - Ok(()) - }) - .build() -} diff --git a/src-tauri/yaak-git/build.rs b/src-tauri/yaak-git/build.rs deleted file mode 100644 index 7811ebd2..00000000 --- a/src-tauri/yaak-git/build.rs +++ /dev/null @@ -1,23 +0,0 @@ -const COMMANDS: &[&str] = &[ - "add", - "add_credential", - "add_remote", - "branch", - "checkout", - "commit", - "delete_branch", - "fetch_all", - "initialize", - "log", - "merge_branch", - "pull", - "push", - "remotes", - "rm_remote", - "status", - "unstage", -]; - -fn main() { - tauri_plugin::Builder::new(COMMANDS).build(); -} diff --git a/src-tauri/yaak-git/permissions/default.toml b/src-tauri/yaak-git/permissions/default.toml deleted file mode 100644 index 89230531..00000000 --- a/src-tauri/yaak-git/permissions/default.toml +++ /dev/null @@ -1,21 +0,0 @@ -[default] -description = "Default permissions for the plugin" -permissions = [ - "allow-add", - "allow-add-credential", - "allow-add-remote", - "allow-branch", - "allow-checkout", - "allow-commit", - "allow-delete-branch", - "allow-fetch-all", - "allow-initialize", - "allow-log", - "allow-merge-branch", - "allow-pull", - "allow-push", - "allow-remotes", - "allow-rm-remote", - "allow-status", - "allow-unstage", -] diff --git a/src-tauri/yaak-git/src/commands.rs b/src-tauri/yaak-git/src/commands.rs deleted file mode 100644 index f2e1cf5b..00000000 --- a/src-tauri/yaak-git/src/commands.rs +++ /dev/null @@ -1,113 +0,0 @@ -use crate::add::git_add; -use crate::branch::{git_checkout_branch, git_create_branch, git_delete_branch, git_merge_branch}; -use crate::commit::git_commit; -use crate::credential::git_add_credential; -use crate::error::Result; -use crate::fetch::git_fetch_all; -use crate::init::git_init; -use crate::log::{GitCommit, git_log}; -use crate::pull::{PullResult, git_pull}; -use crate::push::{PushResult, git_push}; -use crate::remotes::{GitRemote, git_add_remote, git_remotes, git_rm_remote}; -use crate::status::{GitStatusSummary, git_status}; -use crate::unstage::git_unstage; -use std::path::{Path, PathBuf}; -use tauri::command; - -// NOTE: All of these commands are async to prevent blocking work from locking up the UI - -#[command] -pub async fn checkout(dir: &Path, branch: &str, force: bool) -> Result { - git_checkout_branch(dir, branch, force) -} - -#[command] -pub async fn branch(dir: &Path, branch: &str) -> Result<()> { - git_create_branch(dir, branch) -} - -#[command] -pub async fn delete_branch(dir: &Path, branch: &str) -> Result<()> { - git_delete_branch(dir, branch) -} - -#[command] -pub async fn merge_branch(dir: &Path, branch: &str, force: bool) -> Result<()> { - git_merge_branch(dir, branch, force) -} - -#[command] -pub async fn status(dir: &Path) -> Result { - git_status(dir) -} - -#[command] -pub async fn log(dir: &Path) -> Result> { - git_log(dir) -} - -#[command] -pub async fn initialize(dir: &Path) -> Result<()> { - git_init(dir) -} - -#[command] -pub async fn commit(dir: &Path, message: &str) -> Result<()> { - git_commit(dir, message) -} - -#[command] -pub async fn fetch_all(dir: &Path) -> Result<()> { - git_fetch_all(dir) -} - -#[command] -pub async fn push(dir: &Path) -> Result { - git_push(dir) -} - -#[command] -pub async fn pull(dir: &Path) -> Result { - git_pull(dir) -} - -#[command] -pub async fn add(dir: &Path, rela_paths: Vec) -> Result<()> { - for path in rela_paths { - git_add(dir, &path)?; - } - Ok(()) -} - -#[command] -pub async fn unstage(dir: &Path, rela_paths: Vec) -> Result<()> { - for path in rela_paths { - git_unstage(dir, &path)?; - } - Ok(()) -} - -#[command] -pub async fn add_credential( - dir: &Path, - remote_url: &str, - username: &str, - password: &str, -) -> Result<()> { - git_add_credential(dir, remote_url, username, password).await -} - -#[command] -pub async fn remotes(dir: &Path) -> Result> { - git_remotes(dir) -} - -#[command] -pub async fn add_remote(dir: &Path, name: &str, url: &str) -> Result { - git_add_remote(dir, name, url) -} - -#[command] -pub async fn rm_remote(dir: &Path, name: &str) -> Result<()> { - git_rm_remote(dir, name) -} diff --git a/src-tauri/yaak-git/src/lib.rs b/src-tauri/yaak-git/src/lib.rs deleted file mode 100644 index c13005c6..00000000 --- a/src-tauri/yaak-git/src/lib.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::commands::{ - add, add_credential, add_remote, branch, checkout, commit, delete_branch, fetch_all, - initialize, log, merge_branch, pull, push, remotes, rm_remote, status, unstage, -}; -use tauri::{ - Runtime, generate_handler, - plugin::{Builder, TauriPlugin}, -}; - -mod add; -mod binary; -mod branch; -mod commands; -mod commit; -mod credential; -pub mod error; -mod fetch; -mod init; -mod log; -mod merge; -mod pull; -mod push; -mod remotes; -mod repository; -mod status; -mod unstage; -mod util; - -pub fn init() -> TauriPlugin { - Builder::new("yaak-git") - .invoke_handler(generate_handler![ - add, - add_credential, - add_remote, - branch, - checkout, - commit, - delete_branch, - fetch_all, - initialize, - log, - merge_branch, - pull, - push, - remotes, - rm_remote, - status, - unstage, - ]) - .build() -} diff --git a/src-tauri/yaak-http/src/lib.rs b/src-tauri/yaak-http/src/lib.rs deleted file mode 100644 index d8b45a5b..00000000 --- a/src-tauri/yaak-http/src/lib.rs +++ /dev/null @@ -1,27 +0,0 @@ -use crate::manager::HttpConnectionManager; -use tauri::plugin::{Builder, TauriPlugin}; -use tauri::{Manager, Runtime}; - -mod chained_reader; -pub mod client; -pub mod cookies; -pub mod decompress; -pub mod dns; -pub mod error; -pub mod manager; -pub mod path_placeholders; -mod proto; -pub mod sender; -pub mod tee_reader; -pub mod transaction; -pub mod types; - -pub fn init() -> TauriPlugin { - Builder::new("yaak-http") - .setup(|app, _api| { - let manager = HttpConnectionManager::new(); - app.manage(manager); - Ok(()) - }) - .build() -} diff --git a/src-tauri/yaak-models/build.rs b/src-tauri/yaak-models/build.rs deleted file mode 100644 index 5c2ccf25..00000000 --- a/src-tauri/yaak-models/build.rs +++ /dev/null @@ -1,15 +0,0 @@ -const COMMANDS: &[&str] = &[ - "delete", - "duplicate", - "get_graphql_introspection", - "get_settings", - "grpc_events", - "upsert", - "upsert_graphql_introspection", - "websocket_events", - "workspace_models", -]; - -fn main() { - tauri_plugin::Builder::new(COMMANDS).build(); -} diff --git a/src-tauri/yaak-models/permissions/default.toml b/src-tauri/yaak-models/permissions/default.toml deleted file mode 100644 index 59aa9564..00000000 --- a/src-tauri/yaak-models/permissions/default.toml +++ /dev/null @@ -1,13 +0,0 @@ -[default] -description = "Default permissions for the plugin" -permissions = [ - "allow-delete", - "allow-duplicate", - "allow-get-settings", - "allow-get-graphql-introspection", - "allow-grpc-events", - "allow-upsert", - "allow-upsert-graphql-introspection", - "allow-websocket-events", - "allow-workspace-models", -] diff --git a/src-tauri/yaak-models/src/lib.rs b/src-tauri/yaak-models/src/lib.rs deleted file mode 100644 index 7af9be14..00000000 --- a/src-tauri/yaak-models/src/lib.rs +++ /dev/null @@ -1,110 +0,0 @@ -use crate::blob_manager::{BlobManager, migrate_blob_db}; -use crate::commands::*; -use crate::migrate::migrate_db; -use crate::query_manager::QueryManager; -use log::error; -use r2d2::Pool; -use r2d2_sqlite::SqliteConnectionManager; -use std::fs::create_dir_all; -use std::sync::mpsc; -use std::time::Duration; -use tauri::async_runtime::Mutex; -use tauri::plugin::TauriPlugin; -use tauri::{Emitter, Manager, Runtime, generate_handler}; -use tauri_plugin_dialog::{DialogExt, MessageDialogKind}; - -mod commands; - -pub mod blob_manager; -mod connection_or_tx; -pub mod db_context; -pub mod error; -mod migrate; -pub mod models; -pub mod queries; -pub mod query_manager; -pub mod render; -pub mod util; - -pub struct SqliteConnection(pub Mutex>); - -impl SqliteConnection { - pub(crate) fn new(pool: Pool) -> Self { - Self(Mutex::new(pool)) - } -} - -pub fn init() -> TauriPlugin { - tauri::plugin::Builder::new("yaak-models") - .invoke_handler(generate_handler![ - delete, - duplicate, - get_graphql_introspection, - get_settings, - grpc_events, - upsert, - upsert_graphql_introspection, - websocket_events, - workspace_models, - ]) - .setup(|app_handle, _api| { - let app_path = app_handle.path().app_data_dir().unwrap(); - create_dir_all(app_path.clone()).expect("Problem creating App directory!"); - - let db_file_path = app_path.join("db.sqlite"); - let blob_db_file_path = app_path.join("blobs.sqlite"); - - // Main database pool - let manager = SqliteConnectionManager::file(db_file_path); - let pool = Pool::builder() - .max_size(100) // Up from 10 (just in case) - .connection_timeout(Duration::from_secs(10)) // Down from 30 - .build(manager) - .unwrap(); - - if let Err(e) = migrate_db(&pool) { - error!("Failed to run database migration {e:?}"); - app_handle - .dialog() - .message(e.to_string()) - .kind(MessageDialogKind::Error) - .blocking_show(); - return Err(Box::from(e.to_string())); - }; - - // Blob database pool - let blob_manager = SqliteConnectionManager::file(blob_db_file_path); - let blob_pool = Pool::builder() - .max_size(50) - .connection_timeout(Duration::from_secs(10)) - .build(blob_manager) - .unwrap(); - - if let Err(e) = migrate_blob_db(&blob_pool) { - error!("Failed to run blob database migration {e:?}"); - app_handle - .dialog() - .message(e.to_string()) - .kind(MessageDialogKind::Error) - .blocking_show(); - return Err(Box::from(e.to_string())); - }; - - app_handle.manage(SqliteConnection::new(pool.clone())); - app_handle.manage(BlobManager::new(blob_pool)); - - { - let (tx, rx) = mpsc::channel(); - app_handle.manage(QueryManager::new(pool, tx)); - let app_handle = app_handle.clone(); - tauri::async_runtime::spawn(async move { - for p in rx { - app_handle.emit("model_write", p).unwrap(); - } - }); - } - - Ok(()) - }) - .build() -} diff --git a/src-tauri/yaak-plugins/build.rs b/src-tauri/yaak-plugins/build.rs deleted file mode 100644 index 9c0f9403..00000000 --- a/src-tauri/yaak-plugins/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -const COMMANDS: &[&str] = &["search", "install", "updates", "uninstall", "update_all"]; - -fn main() { - tauri_plugin::Builder::new(COMMANDS).build(); -} diff --git a/src-tauri/yaak-plugins/permissions/default.toml b/src-tauri/yaak-plugins/permissions/default.toml deleted file mode 100644 index b03a74a6..00000000 --- a/src-tauri/yaak-plugins/permissions/default.toml +++ /dev/null @@ -1,3 +0,0 @@ -[default] -description = "Default permissions for the plugin" -permissions = ["allow-search", "allow-install", "allow-uninstall", "allow-updates", "allow-update-all"] diff --git a/src-tauri/yaak-plugins/src/commands.rs b/src-tauri/yaak-plugins/src/commands.rs deleted file mode 100644 index b7e6efeb..00000000 --- a/src-tauri/yaak-plugins/src/commands.rs +++ /dev/null @@ -1,70 +0,0 @@ -use crate::api::{ - PluginNameVersion, PluginSearchResponse, PluginUpdatesResponse, check_plugin_updates, - search_plugins, -}; -use crate::error::Result; -use crate::install::{delete_and_uninstall, download_and_install}; -use tauri::{AppHandle, Manager, Runtime, WebviewWindow, command}; -use yaak_models::models::Plugin; - -#[command] -pub(crate) async fn search( - app_handle: AppHandle, - query: &str, -) -> Result { - search_plugins(&app_handle, query).await -} - -#[command] -pub(crate) async fn install( - window: WebviewWindow, - name: &str, - version: Option, -) -> Result<()> { - download_and_install(&window, name, version).await?; - Ok(()) -} - -#[command] -pub(crate) async fn uninstall( - plugin_id: &str, - window: WebviewWindow, -) -> Result { - delete_and_uninstall(&window, plugin_id).await -} - -#[command] -pub(crate) async fn updates(app_handle: AppHandle) -> Result { - check_plugin_updates(&app_handle).await -} - -#[command] -pub(crate) async fn update_all( - window: WebviewWindow, -) -> Result> { - use log::info; - - // Get list of available updates (already filtered to only registry plugins) - let updates = check_plugin_updates(&window.app_handle()).await?; - - if updates.plugins.is_empty() { - return Ok(Vec::new()); - } - - let mut updated = Vec::new(); - - for update in updates.plugins { - info!("Updating plugin: {} to version {}", update.name, update.version); - match download_and_install(&window, &update.name, Some(update.version.clone())).await { - Ok(_) => { - info!("Successfully updated plugin: {}", update.name); - updated.push(update.clone()); - } - Err(e) => { - log::error!("Failed to update plugin {}: {:?}", update.name, e); - } - } - } - - Ok(updated) -} diff --git a/src-tauri/yaak-plugins/src/install.rs b/src-tauri/yaak-plugins/src/install.rs deleted file mode 100644 index 6d3f461d..00000000 --- a/src-tauri/yaak-plugins/src/install.rs +++ /dev/null @@ -1,75 +0,0 @@ -use crate::api::{PluginVersion, download_plugin_archive, get_plugin}; -use crate::checksum::compute_checksum; -use crate::error::Error::PluginErr; -use crate::error::Result; -use crate::events::PluginContext; -use crate::manager::PluginManager; -use chrono::Utc; -use log::info; -use std::fs::{create_dir_all, remove_dir_all}; -use std::io::Cursor; -use tauri::{Manager, Runtime, WebviewWindow}; -use yaak_models::models::Plugin; -use yaak_models::query_manager::QueryManagerExt; -use yaak_models::util::UpdateSource; - -pub async fn delete_and_uninstall( - window: &WebviewWindow, - plugin_id: &str, -) -> Result { - let plugin_manager = window.state::(); - let plugin = window.db().delete_plugin_by_id(plugin_id, &UpdateSource::from_window(&window))?; - plugin_manager.uninstall(&PluginContext::new(&window), plugin.directory.as_str()).await?; - Ok(plugin) -} - -pub async fn download_and_install( - window: &WebviewWindow, - name: &str, - version: Option, -) -> Result { - info!("Installing plugin {} {}", name, version.clone().unwrap_or_default()); - let plugin_manager = window.state::(); - let plugin_version = get_plugin(window.app_handle(), name, version).await?; - let resp = download_plugin_archive(window.app_handle(), &plugin_version).await?; - let bytes = resp.bytes().await?; - - let checksum = compute_checksum(&bytes); - if checksum != plugin_version.checksum { - return Err(PluginErr(format!( - "Checksum mismatch {}b {checksum} != {}", - bytes.len(), - plugin_version.checksum - ))); - } - - info!("Checksum matched {}", checksum); - - let plugin_dir = plugin_manager.installed_plugin_dir.join(name); - let plugin_dir_str = plugin_dir.to_str().unwrap().to_string(); - - // Re-create the plugin directory - let _ = remove_dir_all(&plugin_dir); - create_dir_all(&plugin_dir)?; - - zip_extract::extract(Cursor::new(&bytes), &plugin_dir, true)?; - info!("Extracted plugin {} to {}", plugin_version.id, plugin_dir_str); - - let plugin = window.db().upsert_plugin( - &Plugin { - id: plugin_version.id.clone(), - checked_at: Some(Utc::now().naive_utc()), - directory: plugin_dir_str.clone(), - enabled: true, - url: Some(plugin_version.url.clone()), - ..Default::default() - }, - &UpdateSource::Background, - )?; - - plugin_manager.add_plugin(&PluginContext::new(&window), &plugin).await?; - - info!("Installed plugin {} to {}", plugin_version.id, plugin_dir_str); - - Ok(plugin_version) -} diff --git a/src-tauri/yaak-plugins/src/lib.rs b/src-tauri/yaak-plugins/src/lib.rs deleted file mode 100644 index 2865a23f..00000000 --- a/src-tauri/yaak-plugins/src/lib.rs +++ /dev/null @@ -1,70 +0,0 @@ -use crate::commands::{install, search, uninstall, update_all, updates}; -use crate::manager::PluginManager; -use crate::plugin_updater::PluginUpdater; -use log::{info, warn}; -use std::sync::atomic::{AtomicBool, Ordering}; -use std::time::Duration; -use tauri::plugin::{Builder, TauriPlugin}; -use tauri::{Manager, RunEvent, Runtime, State, WindowEvent, generate_handler}; -use tokio::sync::Mutex; - -pub mod api; -mod checksum; -mod commands; -pub mod error; -pub mod events; -pub mod install; -pub mod manager; -pub mod native_template_functions; -mod nodejs; -pub mod plugin_handle; -pub mod plugin_meta; -pub mod plugin_updater; -mod server_ws; -pub mod template_callback; -mod util; - -static EXITING: AtomicBool = AtomicBool::new(false); - -pub fn init() -> TauriPlugin { - Builder::new("yaak-plugins") - .invoke_handler(generate_handler![search, install, uninstall, updates, update_all]) - .setup(|app_handle, _| { - let manager = PluginManager::new(app_handle.clone()); - app_handle.manage(manager.clone()); - - let plugin_updater = PluginUpdater::new(); - app_handle.manage(Mutex::new(plugin_updater)); - - Ok(()) - }) - .on_event(|app, e| match e { - // TODO: Also exit when app is force-quit (eg. cmd+r in IntelliJ runner) - RunEvent::ExitRequested { api, .. } => { - if EXITING.swap(true, Ordering::SeqCst) { - return; // Only exit once to prevent infinite recursion - } - api.prevent_exit(); - tauri::async_runtime::block_on(async move { - info!("Exiting plugin runtime due to app exit"); - let manager: State = app.state(); - manager.terminate().await; - app.exit(0); - }); - } - RunEvent::WindowEvent { event: WindowEvent::Focused(true), label, .. } => { - // Check for plugin updates on window focus - let w = app.get_webview_window(&label).unwrap(); - let h = app.clone(); - tauri::async_runtime::spawn(async move { - tokio::time::sleep(Duration::from_secs(3)).await; // Wait a bit so it's not so jarring - let val: State<'_, Mutex> = h.state(); - if let Err(e) = val.lock().await.maybe_check(&w).await { - warn!("Failed to check for plugin updates {e:?}"); - } - }); - } - _ => {} - }) - .build() -} diff --git a/src-tauri/yaak-plugins/src/nodejs.rs b/src-tauri/yaak-plugins/src/nodejs.rs deleted file mode 100644 index a1f2bb1c..00000000 --- a/src-tauri/yaak-plugins/src/nodejs.rs +++ /dev/null @@ -1,59 +0,0 @@ -use crate::error::Result; -use log::{info, warn}; -use std::net::SocketAddr; -use tauri::path::BaseDirectory; -use tauri::{AppHandle, Manager, Runtime}; -use tauri_plugin_shell::ShellExt; -use tauri_plugin_shell::process::CommandEvent; -use tokio::sync::watch::Receiver; - -pub async fn start_nodejs_plugin_runtime( - app: &AppHandle, - addr: SocketAddr, - kill_rx: &Receiver, -) -> Result<()> { - let plugin_runtime_main = - app.path().resolve("vendored/plugin-runtime", BaseDirectory::Resource)?.join("index.cjs"); - - // HACK: Remove UNC prefix for Windows paths to pass to sidecar - let plugin_runtime_main = - dunce::simplified(plugin_runtime_main.as_path()).to_string_lossy().to_string(); - - info!("Starting plugin runtime main={}", plugin_runtime_main); - - let cmd = app - .shell() - .sidecar("yaaknode")? - .env("HOST", addr.ip().to_string()) - .env("PORT", addr.port().to_string()) - .args(&[&plugin_runtime_main]); - - let (mut child_rx, child) = cmd.spawn()?; - info!("Spawned plugin runtime"); - - let mut kill_rx = kill_rx.clone(); - - tokio::spawn(async move { - while let Some(event) = child_rx.recv().await { - match event { - CommandEvent::Stderr(line) => { - warn!("{}", String::from_utf8_lossy(&line).trim_end_matches(&['\n', '\r'][..])); - } - CommandEvent::Stdout(line) => { - info!("{}", String::from_utf8_lossy(&line).trim_end_matches(&['\n', '\r'][..])); - } - _ => {} - } - } - }); - - // Check on child - tokio::spawn(async move { - kill_rx.wait_for(|b| *b == true).await.expect("Kill channel errored"); - info!("Killing plugin runtime"); - child.kill().expect("Failed to kill plugin runtime"); - info!("Killed plugin runtime"); - }); - - Ok(()) -} diff --git a/src-tauri/yaak-plugins/src/plugin_updater.rs b/src-tauri/yaak-plugins/src/plugin_updater.rs deleted file mode 100644 index b958e10b..00000000 --- a/src-tauri/yaak-plugins/src/plugin_updater.rs +++ /dev/null @@ -1,101 +0,0 @@ -use std::time::Instant; - -use log::{error, info}; -use serde::Serialize; -use tauri::{Emitter, Manager, Runtime, WebviewWindow}; -use ts_rs::TS; -use yaak_models::query_manager::QueryManagerExt; - -use crate::api::check_plugin_updates; -use crate::error::Result; - -const MAX_UPDATE_CHECK_HOURS: u64 = 12; - -pub struct PluginUpdater { - last_check: Option, -} - -#[derive(Debug, Clone, PartialEq, Serialize, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export, export_to = "index.ts")] -pub struct PluginUpdateNotification { - pub update_count: usize, - pub plugins: Vec, -} - -#[derive(Debug, Clone, PartialEq, Serialize, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export, export_to = "index.ts")] -pub struct PluginUpdateInfo { - pub name: String, - pub current_version: String, - pub latest_version: String, -} - -impl PluginUpdater { - pub fn new() -> Self { - Self { last_check: None } - } - - pub async fn check_now(&mut self, window: &WebviewWindow) -> Result { - self.last_check = Some(Instant::now()); - - info!("Checking for plugin updates"); - - let updates = check_plugin_updates(&window.app_handle()).await?; - - if updates.plugins.is_empty() { - info!("No plugin updates available"); - return Ok(false); - } - - // Get current plugin versions to build notification - let plugins = window.app_handle().db().list_plugins()?; - let mut update_infos = Vec::new(); - - for update in &updates.plugins { - if let Some(plugin) = plugins.iter().find(|p| { - if let Ok(meta) = - crate::plugin_meta::get_plugin_meta(&std::path::Path::new(&p.directory)) - { - meta.name == update.name - } else { - false - } - }) { - if let Ok(meta) = - crate::plugin_meta::get_plugin_meta(&std::path::Path::new(&plugin.directory)) - { - update_infos.push(PluginUpdateInfo { - name: update.name.clone(), - current_version: meta.version, - latest_version: update.version.clone(), - }); - } - } - } - - let notification = - PluginUpdateNotification { update_count: update_infos.len(), plugins: update_infos }; - - info!("Found {} plugin update(s)", notification.update_count); - - if let Err(e) = window.emit_to(window.label(), "plugin_updates_available", ¬ification) { - error!("Failed to emit plugin_updates_available event: {}", e); - } - - Ok(true) - } - - pub async fn maybe_check(&mut self, window: &WebviewWindow) -> Result { - let update_period_seconds = MAX_UPDATE_CHECK_HOURS * 60 * 60; - - if let Some(i) = self.last_check - && i.elapsed().as_secs() < update_period_seconds - { - return Ok(false); - } - - self.check_now(window).await - } -} diff --git a/src-tauri/yaak-sync/build.rs b/src-tauri/yaak-sync/build.rs deleted file mode 100644 index def28def..00000000 --- a/src-tauri/yaak-sync/build.rs +++ /dev/null @@ -1,5 +0,0 @@ -const COMMANDS: &[&str] = &["calculate", "calculate_fs", "apply", "watch"]; - -fn main() { - tauri_plugin::Builder::new(COMMANDS).build(); -} diff --git a/src-tauri/yaak-sync/permissions/default.toml b/src-tauri/yaak-sync/permissions/default.toml deleted file mode 100644 index 83c26e85..00000000 --- a/src-tauri/yaak-sync/permissions/default.toml +++ /dev/null @@ -1,8 +0,0 @@ -[default] -description = "Default permissions for the plugin" -permissions = [ - "allow-calculate", - "allow-calculate-fs", - "allow-apply", - "allow-watch", -] diff --git a/src-tauri/yaak-sync/src/lib.rs b/src-tauri/yaak-sync/src/lib.rs deleted file mode 100644 index 12007775..00000000 --- a/src-tauri/yaak-sync/src/lib.rs +++ /dev/null @@ -1,17 +0,0 @@ -use crate::commands::{apply, calculate, calculate_fs, watch}; -use tauri::{ - Runtime, generate_handler, - plugin::{Builder, TauriPlugin}, -}; - -mod commands; -pub mod error; -pub mod models; -mod sync; -mod watch; - -pub fn init() -> TauriPlugin { - Builder::new("yaak-sync") - .invoke_handler(generate_handler![calculate, calculate_fs, apply, watch]) - .build() -} diff --git a/src-tauri/yaak-ws/build.rs b/src-tauri/yaak-ws/build.rs deleted file mode 100644 index 0758fbae..00000000 --- a/src-tauri/yaak-ws/build.rs +++ /dev/null @@ -1,18 +0,0 @@ -use tauri_plugin; -const COMMANDS: &[&str] = &[ - "connect", - "close", - "delete_connection", - "delete_connections", - "delete_request", - "duplicate_request", - "list_connections", - "list_events", - "list_requests", - "send", - "upsert_request", -]; - -fn main() { - tauri_plugin::Builder::new(COMMANDS).build(); -} diff --git a/src-tauri/yaak-ws/permissions/default.toml b/src-tauri/yaak-ws/permissions/default.toml deleted file mode 100644 index fd3759fb..00000000 --- a/src-tauri/yaak-ws/permissions/default.toml +++ /dev/null @@ -1,15 +0,0 @@ -[default] -description = "Default permissions for the plugin" -permissions = [ - "allow-close", - "allow-connect", - "allow-delete-connection", - "allow-delete-connections", - "allow-delete-request", - "allow-duplicate-request", - "allow-list-connections", - "allow-list-events", - "allow-list-requests", - "allow-send", - "allow-upsert-request", -] diff --git a/src-tauri/yaak-ws/src/lib.rs b/src-tauri/yaak-ws/src/lib.rs deleted file mode 100644 index 0f2c280a..00000000 --- a/src-tauri/yaak-ws/src/lib.rs +++ /dev/null @@ -1,38 +0,0 @@ -mod commands; -mod connect; -pub mod error; -mod manager; -mod render; -mod resolve; - -use crate::commands::{ - close, connect, delete_connection, delete_connections, delete_request, duplicate_request, - list_connections, list_events, list_requests, send, upsert_request, -}; -use crate::manager::WebsocketManager; -use tauri::plugin::{Builder, TauriPlugin}; -use tauri::{Manager, Runtime, generate_handler}; -use tokio::sync::Mutex; - -pub fn init() -> TauriPlugin { - Builder::new("yaak-ws") - .invoke_handler(generate_handler![ - connect, - close, - delete_connection, - delete_connections, - delete_request, - duplicate_request, - list_connections, - list_events, - list_requests, - send, - upsert_request, - ]) - .setup(|app, _api| { - let manager = WebsocketManager::new(); - app.manage(Mutex::new(manager)); - Ok(()) - }) - .build() -} diff --git a/src-tauri/yaak-ws/src/resolve.rs b/src-tauri/yaak-ws/src/resolve.rs deleted file mode 100644 index 99b90b46..00000000 --- a/src-tauri/yaak-ws/src/resolve.rs +++ /dev/null @@ -1,21 +0,0 @@ -use crate::error::Result; -use tauri::{Runtime, WebviewWindow}; -use yaak_models::models::WebsocketRequest; -use yaak_models::query_manager::QueryManagerExt; - -pub(crate) fn resolve_websocket_request( - window: &WebviewWindow, - request: &WebsocketRequest, -) -> Result<(WebsocketRequest, String)> { - let mut new_request = request.clone(); - - let (authentication_type, authentication, authentication_context_id) = - window.db().resolve_auth_for_websocket_request(request)?; - new_request.authentication_type = authentication_type; - new_request.authentication = authentication; - - let headers = window.db().resolve_headers_for_websocket_request(request)?; - new_request.headers = headers; - - Ok((new_request, authentication_context_id)) -} diff --git a/src-web/hooks/useIntrospectGraphQL.ts b/src-web/hooks/useIntrospectGraphQL.ts index dae3496d..34f6d4bd 100644 --- a/src-web/hooks/useIntrospectGraphQL.ts +++ b/src-web/hooks/useIntrospectGraphQL.ts @@ -33,7 +33,7 @@ export function useIntrospectGraphQL( const upsertIntrospection = useCallback( async (content: string | null) => { const v = await invoke( - 'plugin:yaak-models|upsert_graphql_introspection', + 'models_upsert_graphql_introspection', { requestId: baseRequest.id, workspaceId: baseRequest.workspaceId, @@ -122,7 +122,7 @@ function useIntrospectionResult(request: HttpRequest) { return useQuery({ queryKey: ['introspection', request.id], queryFn: async () => - invoke('plugin:yaak-models|get_graphql_introspection', { + invoke('models_get_graphql_introspection', { requestId: request.id, }), }); diff --git a/src-web/hooks/usePinnedGrpcConnection.ts b/src-web/hooks/usePinnedGrpcConnection.ts index e1ec32bc..f000b6e5 100644 --- a/src-web/hooks/usePinnedGrpcConnection.ts +++ b/src-web/hooks/usePinnedGrpcConnection.ts @@ -67,7 +67,7 @@ export function useGrpcEvents(connectionId: string | null) { return; } - invoke('plugin:yaak-models|grpc_events', { connectionId }).then((events) => { + invoke('models_grpc_events', { connectionId }).then((events) => { replaceModelsInStore('grpc_event', events); }); }, [connectionId]); diff --git a/src-web/hooks/usePinnedWebsocketConnection.ts b/src-web/hooks/usePinnedWebsocketConnection.ts index f1927d0e..ee44cc68 100644 --- a/src-web/hooks/usePinnedWebsocketConnection.ts +++ b/src-web/hooks/usePinnedWebsocketConnection.ts @@ -54,7 +54,7 @@ export function useWebsocketEvents(connectionId: string | null) { return; } - invoke('plugin:yaak-models|websocket_events', { connectionId }).then( + invoke('models_websocket_events', { connectionId }).then( (events) => replaceModelsInStore('websocket_event', events), ); }, [connectionId]); diff --git a/src-web/lib/settings.ts b/src-web/lib/settings.ts index 2e3da1a0..c4e2692c 100644 --- a/src-web/lib/settings.ts +++ b/src-web/lib/settings.ts @@ -2,5 +2,5 @@ import { invoke } from '@tauri-apps/api/core'; import type { Settings } from '@yaakapp-internal/models'; export function getSettings(): Promise { - return invoke('plugin:yaak-models|get_settings'); + return invoke('models_get_settings'); }