From b3f44a9a5f4bca22aa68cd25c0903d2e20448259 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 02:22:04 +0100 Subject: [PATCH 001/255] comment out tauri specta for the upgrade --- backend/Cargo.lock | 105 ---------------------- backend/Cargo.toml | 4 +- backend/src/macros/serializable_enum.rs | 2 +- backend/src/macros/serializable_struct.rs | 2 +- backend/src/macros/set_up_api.rs | 9 +- backend/src/main.rs | 94 +++++++++---------- backend/src/providers/provider_command.rs | 4 +- 7 files changed, 59 insertions(+), 161 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 659736f6..3aebb473 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2,12 +2,6 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "Inflector" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" - [[package]] name = "addr2line" version = "0.21.0" @@ -856,15 +850,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" -[[package]] -name = "document-features" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef5282ad69563b5fc40319526ba27e0e7363d552a896f0297d54f767717f9b95" -dependencies = [ - "litrs", -] - [[package]] name = "dtoa" version = "1.0.9" @@ -886,12 +871,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - [[package]] name = "embed-resource" version = "2.4.0" @@ -1748,18 +1727,6 @@ dependencies = [ "serde", ] -[[package]] -name = "indoc" -version = "1.0.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa799dd5ed20a7e349f3b4639aa80d74549c81716d9ec4f994c9b5815598306" - -[[package]] -name = "indoc" -version = "2.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e186cfbae8084e513daff4240b4797e342f988cecda4fb6c939150f96315fd8" - [[package]] name = "infer" version = "0.13.0" @@ -1823,15 +1790,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "0.4.8" @@ -2027,12 +1985,6 @@ version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" -[[package]] -name = "litrs" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" - [[package]] name = "lock_api" version = "0.4.11" @@ -2916,14 +2868,12 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", - "specta", "steamlocate", "tauri", "tauri-build", "tauri-plugin-log", "tauri-plugin-window-state", "tauri-runtime", - "tauri-specta", "thiserror", "tokio", "uuid", @@ -3597,37 +3547,6 @@ dependencies = [ "system-deps 5.0.0", ] -[[package]] -name = "specta" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2240c3aa020aa61d2c569087d213baafbb212f4ceb9de9dd162376ea6aa0fe3" -dependencies = [ - "document-features", - "indoc 1.0.9", - "once_cell", - "paste", - "serde", - "serde_json", - "specta-macros", - "tauri", - "thiserror", -] - -[[package]] -name = "specta-macros" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4605306321c356e03873b8ee71d7592a5e7c508add325c3ed0677c16fdf1bcfb" -dependencies = [ - "Inflector", - "itertools", - "proc-macro2", - "quote", - "syn 1.0.109", - "termcolor", -] - [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -4036,21 +3955,6 @@ dependencies = [ "wry", ] -[[package]] -name = "tauri-specta" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa034c38b7bdfeccc606eca0b030a1e67a20b78e7642edef09816b7e1ff9a9de" -dependencies = [ - "heck 0.4.1", - "indoc 2.0.4", - "serde", - "serde_json", - "specta", - "tauri", - "thiserror", -] - [[package]] name = "tauri-utils" version = "1.5.2" @@ -4115,15 +4019,6 @@ dependencies = [ "utf-8", ] -[[package]] -name = "termcolor" -version = "1.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" -dependencies = [ - "winapi-util", -] - [[package]] name = "thin-slice" version = "0.1.1" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 8975347b..3c4ed0b3 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -20,8 +20,8 @@ glob = { git = "https://github.com/rust-lang/glob", version = "0.3.1" } # Also I made my own fork to remove some annoying prints. steamlocate = { git = "https://github.com/Raicuparta/steamlocate-rs", branch = "dev-v2.0" } -specta = "1.0.5" -tauri-specta = { version = "1.0.2", features = ["typescript"] } +# specta = "1.0.5" +# tauri-specta = { version = "1.0.2", features = ["typescript"] } serde = { version = "1.0", features = ["derive"] } byteorder = "1.5.0" tauri = { version = "1.5.2", features = [ "dialog-ask", "dialog-confirm", "dialog-open", "updater", "shell-open", "dialog"] } diff --git a/backend/src/macros/serializable_enum.rs b/backend/src/macros/serializable_enum.rs index c6c92e25..f3d81e74 100644 --- a/backend/src/macros/serializable_enum.rs +++ b/backend/src/macros/serializable_enum.rs @@ -1,7 +1,7 @@ #[macro_export] macro_rules! serializable_enum { ($enum_name:ident { $($variant:ident),* $(,)? }) => { - #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug, Copy)] + #[derive(serde::Serialize, serde::Deserialize, /*specta::Type, */Clone, PartialEq, Eq, Hash, Debug, Copy)] pub enum $enum_name { $($variant,)* } diff --git a/backend/src/macros/serializable_struct.rs b/backend/src/macros/serializable_struct.rs index a9396df6..cce6cf20 100644 --- a/backend/src/macros/serializable_struct.rs +++ b/backend/src/macros/serializable_struct.rs @@ -1,7 +1,7 @@ #[macro_export] macro_rules! serializable_struct { ($struct_name:ident { $($field:tt)* }) => { - #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, Debug)] + #[derive(serde::Serialize, serde::Deserialize, /*specta::Type, */Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct $struct_name { $($field)* diff --git a/backend/src/macros/set_up_api.rs b/backend/src/macros/set_up_api.rs index ed86bf76..810f5e4a 100644 --- a/backend/src/macros/set_up_api.rs +++ b/backend/src/macros/set_up_api.rs @@ -1,9 +1,10 @@ #[macro_export] macro_rules! set_up_api { ( $builder:expr, [ $($func:ident),* $(,)? ] ) => { - ( - $builder.invoke_handler(tauri::generate_handler![$($func),*]), - specta::collect_types![$($func),*] - ) + // ( + $builder.invoke_handler(tauri::generate_handler![$($func),*]) + // , + // specta::collect_types![$($func),*] + // ) }; } diff --git a/backend/src/main.rs b/backend/src/main.rs index c39b924b..ee794267 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -77,37 +77,37 @@ mod steam; mod windows; #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn get_installed_games(handle: AppHandle) -> Result { handle.app_state().installed_games.get_data() } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn get_owned_games(handle: AppHandle) -> Result { handle.app_state().owned_games.get_data() } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn get_mod_loaders(handle: AppHandle) -> Result { mod_loader::get_data_map(&handle.app_state().mod_loaders.get_data()?) } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn get_local_mods(handle: AppHandle) -> Result { handle.app_state().local_mods.get_data() } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn get_remote_mods(handle: AppHandle) -> Result { handle.app_state().remote_mods.get_data() } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn get_remote_games(handle: AppHandle) -> Result { handle.app_state().remote_games.get_data() } @@ -129,7 +129,7 @@ fn update_state( } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_game_folder(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -139,7 +139,7 @@ async fn open_game_folder(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_game_mods_folder(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -149,19 +149,19 @@ async fn open_game_mods_folder(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_mods_folder() -> Result { Ok(open::that_detached(paths::installed_mods_path()?)?) } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_mod_folder(mod_id: &str, handle: AppHandle) -> Result { handle.app_state().local_mods.try_get(mod_id)?.open_folder() } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_mod_loader_folder(mod_loader_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -171,7 +171,7 @@ async fn open_mod_loader_folder(mod_loader_id: &str, handle: AppHandle) -> Resul } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn download_mod(mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let remote_mod = state.remote_mods.try_get(mod_id)?; @@ -188,7 +188,7 @@ async fn download_mod(mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn delete_mod(mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let local_mod = state.local_mods.try_get(mod_id)?; @@ -204,7 +204,7 @@ async fn delete_mod(mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn start_game(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -218,7 +218,7 @@ async fn start_game(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn start_game_exe(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -228,7 +228,7 @@ async fn start_game_exe(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn install_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -253,7 +253,7 @@ async fn install_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn run_runnable_without_game(mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -269,7 +269,7 @@ async fn run_runnable_without_game(mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn configure_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -286,7 +286,7 @@ async fn configure_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_installed_mod_folder(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -323,13 +323,13 @@ fn refresh_game_mods_and_exe(game_id: &str, handle: &AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn refresh_game(game_id: &str, handle: AppHandle) -> Result { refresh_game_mods_and_exe(game_id, &handle) } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn uninstall_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let mut installed_games = state.installed_games.get_data()?; @@ -350,7 +350,7 @@ async fn uninstall_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn uninstall_all_mods(game_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let game = state.installed_games.try_get(game_id)?; @@ -531,7 +531,7 @@ async fn update_mods(handle: AppHandle, resources_path: PathBuf) { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn update_data(handle: AppHandle) -> Result { let resources_path = paths::resources_path(&handle)?; @@ -555,7 +555,7 @@ async fn update_data(handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn add_game(path: PathBuf, handle: AppHandle) -> Result { let state = handle.app_state(); let normalized_path = normalize_path(&path); @@ -586,7 +586,7 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn remove_game(game_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let game = state.installed_games.try_get(game_id)?; @@ -608,7 +608,7 @@ async fn remove_game(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn run_provider_command( owned_game_id: &str, command_action: &str, @@ -628,14 +628,14 @@ async fn run_provider_command( } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn delete_steam_appinfo_cache() -> Result { let steam_dir = SteamDir::locate()?; steam::appinfo::delete(steam_dir.path()) } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn frontend_ready() -> Result { analytics::send_event(analytics::Event::StartApp, "").await; @@ -643,7 +643,7 @@ async fn frontend_ready() -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn open_logs_folder() -> Result { paths::open_logs_folder()?; @@ -651,7 +651,7 @@ async fn open_logs_folder() -> Result { } #[tauri::command] -#[specta::specta] +// #[specta::specta] async fn dummy_command() -> Result<(InstalledGame, AppEvent, ProviderCommandAction)> { // This command is here just so tauri_specta exports these types. // This should stop being needed once tauri_specta starts supporting events. @@ -709,7 +709,7 @@ fn main() { Ok(()) }); - let (tauri_builder, types_result) = set_up_api!( + let (tauri_builder/*, types_result*/) = set_up_api!( tauri_builder, [ dummy_command, @@ -745,22 +745,22 @@ fn main() { ] ); - match types_result { - Ok(types) => { - #[cfg(debug_assertions)] - if let Err(err) = tauri_specta::ts::export_with_cfg( - types, - specta::ts::ExportConfiguration::default() - .bigint(specta::ts::BigIntExportBehavior::BigInt), - "../frontend/api/bindings.ts", - ) { - error!("Failed to generate TypeScript bindings: {err}"); - } - } - Err(err) => { - error!("Failed to generate api bindings: {err}"); - } - } + // match types_result { + // Ok(types) => { + // #[cfg(debug_assertions)] + // if let Err(err) = tauri_specta::ts::export_with_cfg( + // types, + // specta::ts::ExportConfiguration::default() + // .bigint(specta::ts::BigIntExportBehavior::BigInt), + // "../frontend/api/bindings.ts", + // ) { + // error!("Failed to generate TypeScript bindings: {err}"); + // } + // } + // Err(err) => { + // error!("Failed to generate api bindings: {err}"); + // } + // } tauri_builder .run(tauri::generate_context!()) diff --git a/backend/src/providers/provider_command.rs b/backend/src/providers/provider_command.rs index 1d0320b3..8f935fce 100644 --- a/backend/src/providers/provider_command.rs +++ b/backend/src/providers/provider_command.rs @@ -8,7 +8,9 @@ use crate::{ Result, }; -#[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug)] +#[derive( + serde::Serialize, serde::Deserialize, /*specta::Type,*/ Clone, PartialEq, Eq, Hash, Debug, +)] pub enum ProviderCommand { String(String), Path(PathBuf, Vec), From 0497dc2c3e3a4f84b75c07606d42a20fbafab203 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 02:28:21 +0100 Subject: [PATCH 002/255] update tauri cli --- package.json | 2 +- pnpm-lock.yaml | 68 +++++++++++++++++++++++++------------------------- 2 files changed, 35 insertions(+), 35 deletions(-) diff --git a/package.json b/package.json index d6541be7..bcbe9c70 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@mantine/notifications": "^7.4.2", "@tabler/icons-react": "^2.46.0", "@tauri-apps/api": "^1.5.3", - "@tauri-apps/cli": "^1.5.9", + "@tauri-apps/cli": "2.0.0-beta.20", "@types/react": "^18.2.48", "@types/react-dom": "^18.2.18", "@typescript-eslint/eslint-plugin": "^6.19.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 320e9b1d..70c5f5f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ devDependencies: specifier: ^1.5.3 version: 1.5.3 '@tauri-apps/cli': - specifier: ^1.5.9 - version: 1.5.9 + specifier: 2.0.0-beta.20 + version: 2.0.0-beta.20 '@types/react': specifier: ^18.2.48 version: 18.2.48 @@ -759,8 +759,8 @@ packages: engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} dev: true - /@tauri-apps/cli-darwin-arm64@1.5.9: - resolution: {integrity: sha512-7C2Jf8f0gzv778mLYb7Eszqqv1bm9Wzews81MRTqKrUIcC+eZEtDXLex+JaEkEzFEUrgIafdOvMBVEavF030IA==} + /@tauri-apps/cli-darwin-arm64@2.0.0-beta.20: + resolution: {integrity: sha512-oCJOCib7GuYkwkBXx+ekamR8NZZU+2i3MLP+DHpDxK5gS2uhCE+CBkamJkNt6y1x6xdVnwyqZOm5RvN4SRtyIA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -768,8 +768,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-darwin-x64@1.5.9: - resolution: {integrity: sha512-LHKytpkofPYgH8RShWvwDa3hD1ws131x7g7zNasJPfOiCWLqYVQFUuQVmjEUt8+dpHe/P/err5h4z+YZru2d0A==} + /@tauri-apps/cli-darwin-x64@2.0.0-beta.20: + resolution: {integrity: sha512-lC5QSnRExedYN4Ds6ZlSvC2PxP8qfIYBJQ5ktf+PJI5gQALdNeVtd6YnTG1ODCEklfLq9WKkGwp7JdALTU5wDA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -777,8 +777,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm-gnueabihf@1.5.9: - resolution: {integrity: sha512-teGK20IYKx+dVn8wFq/Lg57Q9ce7foq1KHSfyHi464LVt1T0V1rsmULSgZpQPPj/NYPF5BG78PcWYv64yH86jw==} + /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.20: + resolution: {integrity: sha512-nZCeBMHHye5DLOJV5k2w658hnCS+LYaOZ8y/G9l3ei+g0L/HBjlSy6r4simsAT5TG8+l3oCZzLBngfTMdDS/YA==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -786,8 +786,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-gnu@1.5.9: - resolution: {integrity: sha512-onJ/DW5Crw38qVx+wquY4uBbfCxVhzhdJmlCYqnYyXsZZmSiPUfSyhV58y+5TYB0q1hG8eYdB5x8VAwzByhGzw==} + /@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.20: + resolution: {integrity: sha512-B79ISVLPVBgwnCchVqwTKU+vxnFYqxKomcR4rmsvxfs0NVtT5QuNzE1k4NUQnw3966yjwhYR3mnHsSJQSB4Eyw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -795,8 +795,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-arm64-musl@1.5.9: - resolution: {integrity: sha512-23AYoLD3acakLp9NtheKQDJl8F66eTOflxoPzdJNRy13hUSxb+W9qpz4rRA+CIzkjICFvO2i3UWjeV9QwDVpsQ==} + /@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.20: + resolution: {integrity: sha512-ojIkv/1uZHhcrgfIN8xgn4BBeo/Xg+bnV0wer6lD78zyxkUMWeEZ+u3mae1ejCJNhhaZOxNaUQ67MvDOiGyr5Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -804,8 +804,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-gnu@1.5.9: - resolution: {integrity: sha512-9PQA1rE7gh41W2ylyKd5qOGOds55ymaYPml9KOpM0g+cxmCXa+8Wf9K5NKvACnJldJJ6cekWzIyB4eN6o5T+yQ==} + /@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.20: + resolution: {integrity: sha512-xBy1FNbHKlc7T6pOmFQQPECxJaI5A9QWX7Kb9N64cNVusoOGlvc3xHYkXMS4PTr7xXOT0yiE1Ww2OwDRJ3lYsg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -813,8 +813,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-linux-x64-musl@1.5.9: - resolution: {integrity: sha512-5hdbNFeDsrJ/pXZ4cSQV4bJwUXPPxXxN3/pAtNUqIph7q+vLcBXOXIMoS64iuyaluJC59lhEwlWZFz+EPv0Hqg==} + /@tauri-apps/cli-linux-x64-musl@2.0.0-beta.20: + resolution: {integrity: sha512-+O6zq5jmtUxA1FUAAwF2ywPysy4NRo2Y6G+ESZDkY9XosRwdt5OUjqAsYktZA3AxDMZVei8r9buwTqUwi9ny/g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -822,8 +822,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-arm64-msvc@1.5.9: - resolution: {integrity: sha512-O18JufjSB3hSJYu5WWByONouGeX7DraLAtXLErsG1r/VS3zHd/zyuzycrVUaObNXk5bfGlIP0Ypt+RvZJILN2w==} + /@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.20: + resolution: {integrity: sha512-RswgMbWyOQcv53CHvIuiuhAh4kKDqaGyZfWD4VlxqX/XhkoF5gsNgr0MxzrY7pmoL+89oVI+fiGVJz4nOQE5vA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -831,8 +831,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-ia32-msvc@1.5.9: - resolution: {integrity: sha512-FQxtxTZu0JVBihfd/lmpxo7jyMOesjWQehfyVUqtgMfm5+Pvvw0Y+ZioeDi1TZkFVrT3QDYy8R4LqDLSZVMQRA==} + /@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.20: + resolution: {integrity: sha512-5lgWmDVXhX3SBGbiv5SduM1yajiRnUEJClWhSdRrEEJeXdsxpCsBEhxYnUnDCEzPKxLLn5fdBv3VrVctJ03csQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -840,8 +840,8 @@ packages: dev: true optional: true - /@tauri-apps/cli-win32-x64-msvc@1.5.9: - resolution: {integrity: sha512-EeI1+L518cIBLKw0qUFwnLIySBeSmPQjPLIlNwSukHSro4tAQPHycEVGgKrdToiCWgaZJBA0e5aRSds0Du2TWg==} + /@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.20: + resolution: {integrity: sha512-SuSiiVQTQPSzWlsxQp/NMzWbzDS9TdVDOw7CCfgiG5wnT2GsxzrcIAVN6i7ILsVFLxrjr0bIgPldSJcdcH84Yw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -849,21 +849,21 @@ packages: dev: true optional: true - /@tauri-apps/cli@1.5.9: - resolution: {integrity: sha512-knSt/9AvCTeyfC6wkyeouF9hBW/0Mzuw+5vBKEvzaGPQsfFJo1ZCp5FkdiZpGBBfnm09BhugasGRTGofzatfqQ==} + /@tauri-apps/cli@2.0.0-beta.20: + resolution: {integrity: sha512-707q9uIc2oNrYHd2dtMvxTrpZXVpart5EIktnRymNOpphkLlB6WUBjHD+ga45WqTU6cNGKbYvkKqTNfshNul9Q==} engines: {node: '>= 10'} hasBin: true optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.5.9 - '@tauri-apps/cli-darwin-x64': 1.5.9 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.9 - '@tauri-apps/cli-linux-arm64-gnu': 1.5.9 - '@tauri-apps/cli-linux-arm64-musl': 1.5.9 - '@tauri-apps/cli-linux-x64-gnu': 1.5.9 - '@tauri-apps/cli-linux-x64-musl': 1.5.9 - '@tauri-apps/cli-win32-arm64-msvc': 1.5.9 - '@tauri-apps/cli-win32-ia32-msvc': 1.5.9 - '@tauri-apps/cli-win32-x64-msvc': 1.5.9 + '@tauri-apps/cli-darwin-arm64': 2.0.0-beta.20 + '@tauri-apps/cli-darwin-x64': 2.0.0-beta.20 + '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-beta.20 + '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-beta.20 + '@tauri-apps/cli-linux-arm64-musl': 2.0.0-beta.20 + '@tauri-apps/cli-linux-x64-gnu': 2.0.0-beta.20 + '@tauri-apps/cli-linux-x64-musl': 2.0.0-beta.20 + '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-beta.20 + '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-beta.20 + '@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.20 dev: true /@types/babel__core@7.20.5: From 65d97b1c75b0a9f16f24939e4fb663cad29d350c Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 03:25:18 +0100 Subject: [PATCH 003/255] window at least opens, but ipc broken --- backend/Cargo.lock | 1973 ++++++++++++------- backend/Cargo.toml | 46 +- backend/capabilities/migrated.json | 17 + backend/gen/schemas/acl-manifests.json | 1 + backend/gen/schemas/capabilities.json | 1 + backend/gen/schemas/desktop-schema.json | 2333 +++++++++++++++++++++++ backend/gen/schemas/linux-schema.json | 2333 +++++++++++++++++++++++ backend/src/analytics.rs | 3 +- backend/src/events.rs | 9 +- backend/src/main.rs | 34 +- backend/src/paths.rs | 11 +- backend/src/result.rs | 3 - backend/tauri.conf.json | 82 +- frontend/api/bindings.ts | 216 ++- frontend/app.tsx | 2 +- frontend/hooks/use-app-updater.ts | 4 +- package.json | 6 +- pnpm-lock.yaml | 25 + 18 files changed, 6215 insertions(+), 884 deletions(-) create mode 100644 backend/capabilities/migrated.json create mode 100644 backend/gen/schemas/acl-manifests.json create mode 100644 backend/gen/schemas/capabilities.json create mode 100644 backend/gen/schemas/desktop-schema.json create mode 100644 backend/gen/schemas/linux-schema.json diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 3aebb473..10930491 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -87,6 +87,24 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +dependencies = [ + "android_log-sys", + "env_logger", + "log", + "once_cell", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -102,6 +120,15 @@ version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + [[package]] name = "arrayvec" version = "0.7.4" @@ -121,28 +148,33 @@ dependencies = [ [[package]] name = "atk" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3d816ce6f0e2909a96830d6911c2aff044370b1ef92d7f267b43bae5addedd" +checksum = "b4af014b17dd80e8af9fa689b2d4a211ddba6eb583c1622f35d0cb543f6b17e4" dependencies = [ "atk-sys", - "bitflags 1.3.2", "glib", "libc", ] [[package]] name = "atk-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58aeb089fb698e06db8089971c7ee317ab9644bade33383f63631437b03aafb6" +checksum = "251e0b7d90e33e0ba930891a505a9a35ece37b2dd37a14f3ffc306c13b980009" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + [[package]] name = "autocfg" version = "1.1.0" @@ -166,15 +198,15 @@ dependencies = [ [[package]] name = "base64" -version = "0.13.1" +version = "0.21.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" [[package]] name = "base64" -version = "0.21.5" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" @@ -182,15 +214,6 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - [[package]] name = "bitflags" version = "1.3.2" @@ -199,9 +222,12 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" +dependencies = [ + "serde", +] [[package]] name = "bitvec" @@ -230,6 +256,15 @@ dependencies = [ "generic-array", ] +[[package]] +name = "block2" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" +dependencies = [ + "objc2", +] + [[package]] name = "borsh" version = "1.3.0" @@ -237,7 +272,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" dependencies = [ "borsh-derive", - "cfg_aliases", + "cfg_aliases 0.1.1", ] [[package]] @@ -275,16 +310,6 @@ dependencies = [ "alloc-stdlib", ] -[[package]] -name = "bstr" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc" -dependencies = [ - "memchr", - "serde", -] - [[package]] name = "bumpalo" version = "3.14.0" @@ -368,36 +393,69 @@ dependencies = [ [[package]] name = "cairo-rs" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76ee391b03d35510d9fa917357c7f1855bd9a6659c95a1b392e33f49b3369bc" +checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "cairo-sys-rs", "glib", "libc", + "once_cell", "thiserror", ] [[package]] name = "cairo-sys-rs" -version = "0.15.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c55d429bef56ac9172d25fecb85dc8068307d17acd74b377866b7a1ef25d3c8" +checksum = "685c9fa8e590b8b3d678873528d83411db17242a73fccaed827770ea0fedda51" dependencies = [ "glib-sys", "libc", - "system-deps 6.2.0", + "system-deps", +] + +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24b1f0365a6c6bb4020cd05806fd0d33c44d38046b8bd7f0e40814b9763cabfc" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", ] [[package]] name = "cargo_toml" -version = "0.15.3" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "599aa35200ffff8f04c1925aa1acc92fa2e08874379ef42e210a80e527e60838" +checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.7.8", + "toml 0.8.8", ] [[package]] @@ -427,15 +485,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "cfg-expr" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3431df59f28accaf4cb4eed4a9acc66bea3f3c3753aa6cdc2f024174ef232af7" -dependencies = [ - "smallvec", -] - [[package]] name = "cfg-expr" version = "0.15.6" @@ -458,6 +507,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.31" @@ -485,16 +540,16 @@ dependencies = [ [[package]] name = "cocoa" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f425db7937052c684daec3bd6375c8abe2d146dca4b8b143d6db777c39138f3a" +checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", "block", "cocoa-foundation", "core-foundation", "core-graphics", - "foreign-types", + "foreign-types 0.5.0", "libc", "objc", ] @@ -513,23 +568,6 @@ dependencies = [ "objc", ] -[[package]] -name = "color_quant" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" - -[[package]] -name = "colored" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f741c91823341bebf717d4c71bda820630ce065443b58bd1b7451af008355" -dependencies = [ - "is-terminal", - "lazy_static", - "winapi", -] - [[package]] name = "combine" version = "4.6.6" @@ -570,14 +608,14 @@ checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "core-graphics" -version = "0.22.3" +version = "0.23.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2581bbab3b8ffc6fcbd550bf46c355135d16e9ff2a6ea032ad6b9bf1d7efe4fb" +checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", "core-foundation", "core-graphics-types", - "foreign-types", + "foreign-types 0.5.0", "libc", ] @@ -603,9 +641,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.2" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ "cfg-if", ] @@ -620,36 +658,11 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" -version = "0.8.18" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" -dependencies = [ - "cfg-if", -] +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crypto-common" @@ -752,6 +765,17 @@ dependencies = [ "serde", ] +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", +] + [[package]] name = "derive_more" version = "0.99.17" @@ -800,6 +824,15 @@ dependencies = [ "dirs-sys 0.3.7", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys 0.4.1", +] + [[package]] name = "dirs-next" version = "2.0.0" @@ -850,6 +883,49 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", +] + +[[package]] +name = "dlopen2" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" +dependencies = [ + "dlopen2_derive", + "libc", + "once_cell", + "winapi", +] + +[[package]] +name = "dlopen2_derive" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", +] + +[[package]] +name = "dpi" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53" +dependencies = [ + "serde", +] + [[package]] name = "dtoa" version = "1.0.9" @@ -871,6 +947,12 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +[[package]] +name = "dyn-clone" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" + [[package]] name = "embed-resource" version = "2.4.0" @@ -911,6 +993,16 @@ dependencies = [ "syn 2.0.46", ] +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "log", + "regex", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -960,7 +1052,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9f0c14694cbd524c8720dd69b0e3179344f04ebb5f90f2e4a440c6ea3b2f1ee" dependencies = [ - "colored", "log", ] @@ -982,7 +1073,7 @@ checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "windows-sys 0.52.0", ] @@ -1008,7 +1099,28 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "foreign-types-shared", + "foreign-types-shared 0.1.1", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared 0.3.1", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", ] [[package]] @@ -1017,6 +1129,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + [[package]] name = "form_urlencoded" version = "1.2.1" @@ -1142,11 +1260,10 @@ dependencies = [ [[package]] name = "gdk" -version = "0.15.4" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6e05c1f572ab0e1f15be94217f0dc29088c248b14f792a5ff0af0d84bcda9e8" +checksum = "f5ba081bdef3b75ebcdbfc953699ed2d7417d6bd853347a42a37d76406a33646" dependencies = [ - "bitflags 1.3.2", "cairo-rs", "gdk-pixbuf", "gdk-sys", @@ -1158,35 +1275,35 @@ dependencies = [ [[package]] name = "gdk-pixbuf" -version = "0.15.11" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad38dd9cc8b099cceecdf41375bb6d481b1b5a7cd5cd603e10a69a9383f8619a" +checksum = "50e1f5f1b0bfb830d6ccc8066d18db35c487b1b2b1e8589b5dfe9f07e8defaec" dependencies = [ - "bitflags 1.3.2", "gdk-pixbuf-sys", "gio", "glib", "libc", + "once_cell", ] [[package]] name = "gdk-pixbuf-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "140b2f5378256527150350a8346dbdb08fadc13453a7a2d73aecd5fab3c402a7" +checksum = "3f9839ea644ed9c97a34d129ad56d38a25e6756f99f3a88e15cd39c20629caf7" dependencies = [ "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gdk-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32e7a08c1e8f06f4177fb7e51a777b8c1689f743a7bc11ea91d44d2226073a88" +checksum = "31ff856cb3386dae1703a920f803abafcc580e9b5f711ca62ed1620c25b51ff2" dependencies = [ "cairo-sys-rs", "gdk-pixbuf-sys", @@ -1196,33 +1313,47 @@ dependencies = [ "libc", "pango-sys", "pkg-config", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gdkwayland-sys" -version = "0.15.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cca49a59ad8cfdf36ef7330fe7bdfbe1d34323220cc16a0de2679ee773aee2c2" +checksum = "a90fbf5c033c65d93792192a49a8efb5bb1e640c419682a58bb96f5ae77f3d4a" dependencies = [ "gdk-sys", "glib-sys", "gobject-sys", "libc", "pkg-config", - "system-deps 6.2.0", + "system-deps", +] + +[[package]] +name = "gdkx11" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2ea8a4909d530f79921290389cbd7c34cb9d623bfe970eaae65ca5f9cd9cce" +dependencies = [ + "gdk", + "gdkx11-sys", + "gio", + "glib", + "libc", + "x11", ] [[package]] name = "gdkx11-sys" -version = "0.15.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7f8c7a84b407aa9b143877e267e848ff34106578b64d1e0a24bf550716178" +checksum = "fee8f00f4ee46cad2939b8990f5c70c94ff882c3028f3cc5abf950fa4ab53043" dependencies = [ "gdk-sys", "glib-sys", "libc", - "system-deps 6.2.0", + "system-deps", "x11", ] @@ -1279,49 +1410,54 @@ checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gio" -version = "0.15.12" +version = "0.18.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68fdbc90312d462781a395f7a16d96a2b379bb6ef8cd6310a2df272771c4283b" +checksum = "d4fc8f532f87b79cbc51a79748f16a6828fb784be93145a322fa14d06d354c73" dependencies = [ - "bitflags 1.3.2", "futures-channel", "futures-core", "futures-io", + "futures-util", "gio-sys", "glib", "libc", "once_cell", + "pin-project-lite", + "smallvec", "thiserror", ] [[package]] name = "gio-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32157a475271e2c4a023382e9cab31c4584ee30a97da41d3c4e9fdd605abcf8d" +checksum = "37566df850baf5e4cb0dfb78af2e4b9898d817ed9263d1090a2df958c64737d2" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", "winapi", ] [[package]] name = "glib" -version = "0.15.12" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb0306fbad0ab5428b0ca674a23893db909a98582969c9b537be4ced78c505d" +checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "futures-channel", "futures-core", "futures-executor", "futures-task", + "futures-util", + "gio-sys", "glib-macros", "glib-sys", "gobject-sys", "libc", + "memchr", "once_cell", "smallvec", "thiserror", @@ -1329,27 +1465,26 @@ dependencies = [ [[package]] name = "glib-macros" -version = "0.15.13" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a" +checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ - "anyhow", "heck 0.4.1", - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.0", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.46", ] [[package]] name = "glib-sys" -version = "0.15.10" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef4b192f8e65e9cf76cbf4ea71fa8e3be4a0e18ffe3d68b8da6836974cc5bad4" +checksum = "063ce2eb6a8d0ea93d2bf8ba1957e78dbab6be1c2220dd3daca57d5a9d869898" dependencies = [ "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] @@ -1363,28 +1498,15 @@ name = "glob" version = "0.3.1" source = "git+https://github.com/rust-lang/glob#7b29204bb108a83300b0ce877072fcb62b83316a" -[[package]] -name = "globset" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", -] - [[package]] name = "gobject-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d57ce44246becd17153bd035ab4d32cfee096a657fc01f2231c9278378d1e0a" +checksum = "0850127b514d1c4a4654ead6dedadb18198999985908e6ffe4436f53c785ce44" dependencies = [ "glib-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] @@ -1400,12 +1522,11 @@ dependencies = [ [[package]] name = "gtk" -version = "0.15.5" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e3004a2d5d6d8b5057d2b57b3712c9529b62e82c77f25c1fecde1fd5c23bd0" +checksum = "93c4f5e0e20b60e10631a5f06da7fe3dda744b05ad0ea71fee2f47adf865890c" dependencies = [ "atk", - "bitflags 1.3.2", "cairo-rs", "field-offset", "futures-channel", @@ -1416,16 +1537,15 @@ dependencies = [ "gtk-sys", "gtk3-macros", "libc", - "once_cell", "pango", "pkg-config", ] [[package]] name = "gtk-sys" -version = "0.15.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5bc2f0587cba247f60246a0ca11fe25fb733eabc3de12d1965fc07efab87c84" +checksum = "771437bf1de2c1c0b496c11505bdf748e26066bbe942dfc8f614c9460f6d7722" dependencies = [ "atk-sys", "cairo-sys-rs", @@ -1436,34 +1556,33 @@ dependencies = [ "gobject-sys", "libc", "pango-sys", - "system-deps 6.2.0", + "system-deps", ] [[package]] name = "gtk3-macros" -version = "0.15.6" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d" +checksum = "c6063efb63db582968fb7df72e1ae68aa6360dcfb0a75143f34fc7d616bad75e" dependencies = [ - "anyhow", "proc-macro-crate 1.3.1", "proc-macro-error", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.46", ] [[package]] name = "h2" -version = "0.3.22" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178" +checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" dependencies = [ + "atomic-waker", "bytes", "fnv", "futures-core", "futures-sink", - "futures-util", "http", "indexmap 2.1.0", "slab", @@ -1502,18 +1621,15 @@ dependencies = [ [[package]] name = "heck" -version = "0.3.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "heck" -version = "0.4.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" @@ -1552,9 +1668,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.11" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", @@ -1563,20 +1679,26 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.6" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", "http", - "pin-project-lite", ] [[package]] -name = "http-range" -version = "0.1.5" +name = "http-body-util" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http", + "http-body", + "pin-project-lite", +] [[package]] name = "httparse" @@ -1584,47 +1706,78 @@ version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" -[[package]] -name = "httpdate" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" - [[package]] name = "hyper" -version = "0.14.28" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" +checksum = "fe575dd17d0862a9a33781c8c4696a55c320909004a67a00fb286ba8b1bc496d" dependencies = [ "bytes", "futures-channel", - "futures-core", "futures-util", "h2", "http", "http-body", "httparse", - "httpdate", "itoa 1.0.10", "pin-project-lite", - "socket2", + "smallvec", "tokio", - "tower-service", - "tracing", "want", ] +[[package]] +name = "hyper-rustls" +version = "0.27.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +dependencies = [ + "futures-util", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", + "webpki-roots", +] + [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", + "http-body-util", "hyper", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b875924a60b96e5d7b9ae7b066540b1dd1cbd90d1828f54c92e02a283351c56" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] @@ -1676,35 +1829,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "747ad1b4ae841a78e8aba0d63adbfbeaea26b517b63705d47856b73015d27060" -dependencies = [ - "crossbeam-deque", - "globset", - "log", - "memchr", - "regex-automata 0.4.3", - "same-file", - "walkdir", - "winapi-util", -] - -[[package]] -name = "image" -version = "0.24.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" -dependencies = [ - "bytemuck", - "byteorder", - "color_quant", - "num-rational", - "num-traits", -] - [[package]] name = "indexmap" version = "1.9.3" @@ -1729,9 +1853,9 @@ dependencies = [ [[package]] name = "infer" -version = "0.13.0" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f551f8c3a39f68f986517db0d1759de85881894fdc7db798bd2a9df9cb04b7fc" +checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" dependencies = [ "cfb", ] @@ -1769,17 +1893,6 @@ dependencies = [ "once_cell", ] -[[package]] -name = "is-terminal" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" -dependencies = [ - "hermit-abi", - "rustix", - "windows-sys 0.48.0", -] - [[package]] name = "is-wsl" version = "0.4.0" @@ -1804,9 +1917,9 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "javascriptcore-rs" -version = "0.16.0" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf053e7843f2812ff03ef5afe34bb9c06ffee120385caad4f6b9967fcd37d41c" +checksum = "ca5671e9ffce8ffba57afc24070e906da7fc4b1ba66f2cabebf61bf2ea257fcc" dependencies = [ "bitflags 1.3.2", "glib", @@ -1815,28 +1928,30 @@ dependencies = [ [[package]] name = "javascriptcore-rs-sys" -version = "0.4.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "905fbb87419c5cde6e3269537e4ea7d46431f3008c5d057e915ef3f115e7793c" +checksum = "af1be78d14ffa4b75b66df31840478fef72b51f8c2465d4ca7c194da9f7a5124" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] [[package]] name = "jni" -version = "0.20.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" dependencies = [ "cesu8", + "cfg-if", "combine", "jni-sys", "log", "thiserror", "walkdir", + "windows-sys 0.45.0", ] [[package]] @@ -1875,6 +1990,17 @@ dependencies = [ "treediff", ] +[[package]] +name = "keyboard-types" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" +dependencies = [ + "bitflags 2.5.0", + "serde", + "unicode-segmentation", +] + [[package]] name = "keyvalues-parser" version = "0.1.0" @@ -1942,21 +2068,55 @@ version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +[[package]] +name = "libappindicator" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03589b9607c868cc7ae54c0b2a22c8dc03dd41692d48f2d7df73615c6a95dc0a" +dependencies = [ + "glib", + "gtk", + "gtk-sys", + "libappindicator-sys", + "log", +] + +[[package]] +name = "libappindicator-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e9ec52138abedcc58dc17a7c6c0c00a2bdb4f3427c7f63fa97fd0d859155caf" +dependencies = [ + "gtk-sys", + "libloading", + "once_cell", +] + [[package]] name = "libc" version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + [[package]] name = "libredox" version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "libc", - "redox_syscall", + "redox_syscall 0.4.1", ] [[package]] @@ -1997,9 +2157,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.20" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" dependencies = [ "value-bag", ] @@ -2065,9 +2225,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" [[package]] name = "memchr" -version = "2.7.1" +version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" @@ -2111,6 +2271,25 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "muda" +version = "0.13.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b959f97c97044e4c96e32e1db292a7d594449546a3c6b77ae613dc3a5b5145" +dependencies = [ + "cocoa", + "crossbeam-channel", + "dpi", + "gtk", + "keyboard-types", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + [[package]] name = "native-tls" version = "0.2.11" @@ -2131,14 +2310,15 @@ dependencies = [ [[package]] name = "ndk" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2032c77e030ddee34a6787a64166008da93f6a352b629261d0fee232b8742dd4" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys", "num_enum", + "raw-window-handle 0.5.2", "thiserror", ] @@ -2150,9 +2330,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.3.0" +version = "0.4.1+23.1.7779620" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e5a6ae77c8ee183dcbbba6150e2e6b9f3f4196a7666c02a715a95692ec1fa97" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" dependencies = [ "jni-sys", ] @@ -2185,27 +2365,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "num-integer" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" -dependencies = [ - "autocfg", - "num-traits", -] - -[[package]] -name = "num-rational" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" -dependencies = [ - "autocfg", - "num-integer", - "num-traits", -] - [[package]] name = "num-traits" version = "0.2.17" @@ -2266,14 +2425,103 @@ dependencies = [ ] [[package]] -name = "objc-foundation" -version = "0.1.1" +name = "objc-sys" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb91bdd390c7ce1a8607f35f3ca7151b65afc0ff5ff3b34fa350f7d7c7e4310" + +[[package]] +name = "objc2" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +checksum = "46a785d4eeff09c14c487497c162e92766fbb3e4059a71840cecc03d9a50b804" dependencies = [ - "block", - "objc", - "objc_id", + "objc-sys", + "objc2-encode", +] + +[[package]] +name = "objc2-app-kit" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff" +dependencies = [ + "bitflags 2.5.0", + "block2", + "libc", + "objc2", + "objc2-core-data", + "objc2-core-image", + "objc2-foundation", + "objc2-quartz-core", +] + +[[package]] +name = "objc2-core-data" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" +dependencies = [ + "bitflags 2.5.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-core-image" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" +dependencies = [ + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", +] + +[[package]] +name = "objc2-encode" +version = "4.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7891e71393cd1f227313c9379a26a584ff3d7e6e7159e988851f0934c993f0f8" + +[[package]] +name = "objc2-foundation" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" +dependencies = [ + "bitflags 2.5.0", + "block2", + "dispatch", + "libc", + "objc2", +] + +[[package]] +name = "objc2-metal" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" +dependencies = [ + "bitflags 2.5.0", + "block2", + "objc2", + "objc2-foundation", +] + +[[package]] +name = "objc2-quartz-core" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" +dependencies = [ + "bitflags 2.5.0", + "block2", + "objc2", + "objc2-foundation", + "objc2-metal", ] [[package]] @@ -2309,16 +2557,6 @@ version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" -[[package]] -name = "open" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2078c0039e6a54a0c42c28faa984e115fb4c2d5bf2208f77d1961002df8576f8" -dependencies = [ - "pathdiff", - "windows-sys 0.42.0", -] - [[package]] name = "open" version = "5.0.1" @@ -2336,9 +2574,9 @@ version = "0.10.62" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "cfg-if", - "foreign-types", + "foreign-types 0.3.2", "libc", "once_cell", "openssl-macros", @@ -2388,11 +2626,11 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "pango" -version = "0.15.10" +version = "0.18.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e4045548659aee5313bde6c582b0d83a627b7904dd20dc2d9ef0895d414e4f" +checksum = "7ca27ec1eb0457ab26f3036ea52229edbdb74dee1edd29063f5b9b010e7ebee4" dependencies = [ - "bitflags 1.3.2", + "gio", "glib", "libc", "once_cell", @@ -2401,14 +2639,14 @@ dependencies = [ [[package]] name = "pango-sys" -version = "0.15.10" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2a00081cde4661982ed91d80ef437c20eacaf6aa1a5962c0279ae194662c3aa" +checksum = "436737e391a843e5933d6d9aa102cb126d501e815b83601365a948a518555dc5" dependencies = [ "glib-sys", "gobject-sys", "libc", - "system-deps 6.2.0", + "system-deps", ] [[package]] @@ -2429,7 +2667,7 @@ checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.4.1", "smallvec", "windows-targets 0.48.5", ] @@ -2673,6 +2911,26 @@ dependencies = [ "siphasher", ] +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", +] + [[package]] name = "pin-project-lite" version = "0.2.13" @@ -2830,27 +3088,74 @@ dependencies = [ ] [[package]] -name = "quote" -version = "1.0.35" +name = "quinn" +version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" dependencies = [ - "proc-macro2", + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash", + "rustls", + "thiserror", + "tokio", + "tracing", ] [[package]] -name = "radium" -version = "0.7.0" +name = "quinn-proto" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "rai-pal" -version = "0.12.0" +checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" dependencies = [ - "async-trait", - "base64 0.21.5", - "byteorder", + "bytes", + "rand 0.8.5", + "ring", + "rustc-hash", + "rustls", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9096629c45860fc7fb143e125eb826b5e721e10be3263160c7d60ca832cf8c46" +dependencies = [ + "libc", + "once_cell", + "socket2", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rai-pal" +version = "0.12.0" +dependencies = [ + "async-trait", + "base64 0.21.5", + "byteorder", "chrono", "directories", "enum_dispatch", @@ -2860,7 +3165,7 @@ dependencies = [ "lazy-regex", "lazy_static", "log", - "open 5.0.1", + "open", "pelite", "rand 0.8.5", "reqwest", @@ -2872,16 +3177,18 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-log", + "tauri-plugin-process", + "tauri-plugin-updater", "tauri-plugin-window-state", "tauri-runtime", "thiserror", "tokio", "uuid", "webkit2gtk", - "webview2-com 0.27.0", + "webview2-com 0.31.0", "winapi", "winreg 0.52.0", - "zip", + "zip 0.6.6", ] [[package]] @@ -2971,6 +3278,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" +[[package]] +name = "raw-window-handle" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" + [[package]] name = "redox_syscall" version = "0.4.1" @@ -2980,6 +3293,15 @@ dependencies = [ "bitflags 1.3.2", ] +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.5.0", +] + [[package]] name = "redox_users" version = "0.4.4" @@ -3046,11 +3368,11 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.23" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41" +checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "bytes", "encoding_rs", "futures-core", @@ -3058,8 +3380,11 @@ dependencies = [ "h2", "http", "http-body", + "http-body-util", "hyper", + "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -3068,12 +3393,18 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "quinn", + "rustls", + "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", "system-configuration", "tokio", "tokio-native-tls", + "tokio-rustls", "tokio-util", "tower-service", "url", @@ -3081,31 +3412,23 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "winreg 0.50.0", + "webpki-roots", + "winreg 0.52.0", ] [[package]] -name = "rfd" -version = "0.10.0" +name = "ring" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0149778bd99b6959285b0933288206090c50e2327f47a9c463bfdbf45c8823ea" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ - "block", - "dispatch", - "glib-sys", - "gobject-sys", - "gtk-sys", - "js-sys", - "lazy_static", - "log", - "objc", - "objc-foundation", - "objc_id", - "raw-window-handle", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "windows 0.37.0", + "cc", + "cfg-if", + "getrandom 0.2.11", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", ] [[package]] @@ -3143,7 +3466,7 @@ version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "fallible-iterator", "fallible-streaming-iterator", "hashlink", @@ -3173,6 +3496,12 @@ version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + [[package]] name = "rustc_version" version = "0.4.0" @@ -3188,13 +3517,54 @@ version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.5.0", "errno", "libc", "linux-raw-sys", "windows-sys 0.52.0", ] +[[package]] +name = "rustls" +version = "0.23.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05cff451f60db80f490f3c182b77c35260baace73209e9cdbbe526bfe3a4d402" +dependencies = [ + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" + +[[package]] +name = "rustls-webpki" +version = "0.102.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff448f7e92e913c4b7d4c6d8e4540a1724b319b4152b8aef6d4cf8339712b33e" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + [[package]] name = "rustversion" version = "1.0.14" @@ -3231,6 +3601,32 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "dyn-clone", + "indexmap 1.9.3", + "schemars_derive", + "serde", + "serde_json", + "url", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.46", +] + [[package]] name = "scoped-tls" version = "1.0.1" @@ -3341,6 +3737,17 @@ dependencies = [ "syn 2.0.46", ] +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", +] + [[package]] name = "serde_json" version = "1.0.110" @@ -3505,9 +3912,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" @@ -3520,33 +3927,60 @@ dependencies = [ ] [[package]] -name = "soup2" -version = "0.2.1" +name = "softbuffer" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b4d76501d8ba387cf0fefbe055c3e0a59891d09f0f995ae4e4b16f6b60f3c0" +checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" dependencies = [ - "bitflags 1.3.2", + "bytemuck", + "cfg_aliases 0.2.1", + "core-graphics", + "foreign-types 0.5.0", + "js-sys", + "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", + "objc2-quartz-core", + "raw-window-handle 0.6.2", + "redox_syscall 0.5.2", + "wasm-bindgen", + "web-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "soup3" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "471f924a40f31251afc77450e781cb26d55c0b650842efafc9c6cbd2f7cc4f9f" +dependencies = [ + "futures-channel", "gio", "glib", "libc", - "once_cell", - "soup2-sys", + "soup3-sys", ] [[package]] -name = "soup2-sys" -version = "0.2.0" +name = "soup3-sys" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "009ef427103fcb17f802871647a7fa6c60cbb654b4c4e4c0ac60a31c5f6dc9cf" +checksum = "7ebe8950a680a12f24f15ebe1bf70db7af98ad242d9db43596ad3108aab86c27" dependencies = [ - "bitflags 1.3.2", "gio-sys", "glib-sys", "gobject-sys", "libc", - "system-deps 5.0.0", + "system-deps", ] +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" + [[package]] name = "stable_deref_trait" version = "1.2.0" @@ -3555,9 +3989,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "state" -version = "0.5.3" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbe866e1e51e8260c9eed836a042a5e7f6726bb2b411dffeaa712e19c388f23b" +checksum = "2b8c4a4445d81357df8b1a650d0d0d6fbbbfe99d064aa5e02f3e4022061476d8" dependencies = [ "loom", ] @@ -3567,7 +4001,7 @@ name = "steamlocate" version = "2.0.0-alpha.0" source = "git+https://github.com/Raicuparta/steamlocate-rs?branch=dev-v2.0#200b5f31c299cc37223653c70e4a9edac3aead06" dependencies = [ - "dirs", + "dirs 3.0.2", "keyvalues-parser", "keyvalues-serde", "serde", @@ -3612,6 +4046,17 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +[[package]] +name = "swift-rs" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +dependencies = [ + "base64 0.21.5", + "serde", + "serde_json", +] + [[package]] name = "syn" version = "1.0.109" @@ -3646,6 +4091,12 @@ dependencies = [ "syn 2.0.46", ] +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" + [[package]] name = "system-configuration" version = "0.5.1" @@ -3667,56 +4118,36 @@ dependencies = [ "libc", ] -[[package]] -name = "system-deps" -version = "5.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18db855554db7bd0e73e06cf7ba3df39f97812cb11d3f75e71c39bf45171797e" -dependencies = [ - "cfg-expr 0.9.1", - "heck 0.3.3", - "pkg-config", - "toml 0.5.11", - "version-compare 0.0.11", -] - [[package]] name = "system-deps" version = "6.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" dependencies = [ - "cfg-expr 0.15.6", + "cfg-expr", "heck 0.4.1", "pkg-config", "toml 0.8.8", - "version-compare 0.1.1", + "version-compare", ] [[package]] name = "tao" -version = "0.16.5" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75f5aefd6be4cd3ad3f047442242fd9f57cbfb3e565379f66b5e14749364fa4f" +checksum = "ea538df05fbc2dcbbd740ba0cfe8607688535f4798d213cbbfa13ce494f3451f" dependencies = [ - "bitflags 1.3.2", - "cairo-rs", - "cc", + "bitflags 2.5.0", "cocoa", "core-foundation", "core-graphics", "crossbeam-channel", "dispatch", - "gdk", - "gdk-pixbuf", - "gdk-sys", + "dlopen2", + "dpi", "gdkwayland-sys", "gdkx11-sys", - "gio", - "glib", - "glib-sys", "gtk", - "image", "instant", "jni", "lazy_static", @@ -3728,15 +4159,14 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "png", - "raw-window-handle", + "raw-window-handle 0.6.2", "scopeguard", - "serde", "tao-macros", "unicode-segmentation", - "uuid", - "windows 0.39.0", - "windows-implement 0.39.0", + "url", + "windows 0.57.0", + "windows-core 0.57.0", + "windows-version", "x11-dl", ] @@ -3776,84 +4206,82 @@ checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" [[package]] name = "tauri" -version = "1.5.4" +version = "2.0.0-beta.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd27c04b9543776a972c86ccf70660b517ecabbeced9fb58d8b961a13ad129af" +checksum = "5a258ecc5ac7ddade525f512c4962fd01cd0f5265e917b4572579c32c027bb31" dependencies = [ "anyhow", - "base64 0.21.5", "bytes", "cocoa", "dirs-next", + "dunce", "embed_plist", - "encoding_rs", - "flate2", "futures-util", - "glib", + "getrandom 0.2.11", "glob 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "gtk", - "heck 0.4.1", + "heck 0.5.0", "http", - "ignore", - "minisign-verify", + "jni", + "libc", + "log", + "mime", + "muda", "objc", - "once_cell", - "open 3.2.0", "percent-encoding", - "rand 0.8.5", - "raw-window-handle", - "regex", + "raw-window-handle 0.6.2", "reqwest", - "rfd", - "semver", "serde", "serde_json", "serde_repr", "serialize-to-javascript", "state", - "tar", + "swift-rs", + "tauri-build", "tauri-macros", "tauri-runtime", "tauri-runtime-wry", "tauri-utils", - "tempfile", "thiserror", - "time", "tokio", + "tray-icon", "url", - "uuid", + "urlpattern", "webkit2gtk", - "webview2-com 0.19.1", - "windows 0.39.0", - "zip", + "webview2-com 0.30.0", + "window-vibrancy", + "windows 0.56.0", ] [[package]] name = "tauri-build" -version = "1.5.1" +version = "2.0.0-beta.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9914a4715e0b75d9f387a285c7e26b5bbfeb1249ad9f842675a82481565c532" +checksum = "82b964bb6d03d97e24e12f896aab463b02a3c2ff76a60f728cc37b5548eb470e" dependencies = [ "anyhow", "cargo_toml", "dirs-next", - "heck 0.4.1", + "glob 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "heck 0.5.0", "json-patch", + "schemars", "semver", "serde", "serde_json", "tauri-utils", "tauri-winres", + "toml 0.8.8", "walkdir", ] [[package]] name = "tauri-codegen" -version = "1.4.2" +version = "2.0.0-beta.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1554c5857f65dbc377cefb6b97c8ac77b1cb2a90d30d3448114d5d6b48a77fc" +checksum = "3529cfa977ed7c097f2a5e8da19ecffbe61982450a6c819e6165b6d0cfd3dd3a" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "brotli", "ico", "json-patch", @@ -3861,111 +4289,179 @@ dependencies = [ "png", "proc-macro2", "quote", - "regex", "semver", "serde", "serde_json", "sha2", + "syn 2.0.46", "tauri-utils", "thiserror", "time", + "url", "uuid", "walkdir", ] [[package]] name = "tauri-macros" -version = "1.4.3" +version = "2.0.0-beta.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "277abf361a3a6993ec16bcbb179de0d6518009b851090a01adfea12ac89fa875" +checksum = "36f97dd80334f29314aa5f40b5fad10cb9feffd08e5a5324fd728613841e5d33" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.46", "tauri-codegen", "tauri-utils", ] +[[package]] +name = "tauri-plugin" +version = "2.0.0-beta.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c8385fd0a4f661f5652b0d9e2d7256187d553bb174f88564d10ebcfa6a3af53" +dependencies = [ + "anyhow", + "glob 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", + "plist", + "schemars", + "serde", + "serde_json", + "tauri-utils", + "toml 0.8.8", + "walkdir", +] + [[package]] name = "tauri-plugin-log" -version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#539b566fade8381ba0704984acd4f67aa8a72958" +version = "2.0.0-beta.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28be50bb36ac6b5181a360cee0606a4364d9e0bdcdd8974c40710d7af12e60ec" dependencies = [ + "android_logger", "byte-unit", + "cocoa", "fern", "log", + "objc", "serde", "serde_json", "serde_repr", + "swift-rs", "tauri", + "tauri-plugin", "time", ] [[package]] -name = "tauri-plugin-window-state" -version = "0.1.0" +name = "tauri-plugin-process" +version = "2.0.0-beta.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f15dab0be2ce3ce8a57d0d2de17d201d0c2f3230d68981ff3f0942684de03eb" +checksum = "e63250e666101a12b206e15d9c3c1f061e2be94a1659ee13fa3fda8fceba28e5" dependencies = [ - "bincode", - "serde", "tauri", - "thiserror", + "tauri-plugin", ] [[package]] -name = "tauri-runtime" -version = "0.14.2" +name = "tauri-plugin-updater" +version = "2.0.0-beta.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf2d0652aa2891ff3e9caa2401405257ea29ab8372cce01f186a5825f1bd0e76" +checksum = "d94c93d9aaf83b0589bbec467a1f591ed1991478d5150da48b6c42cb778a88d5" dependencies = [ - "gtk", + "base64 0.22.1", + "dirs-next", + "flate2", + "futures-util", "http", - "http-range", - "rand 0.8.5", - "raw-window-handle", + "infer", + "minisign-verify", + "reqwest", + "semver", "serde", "serde_json", - "tauri-utils", + "tar", + "tauri", + "tauri-plugin", + "tempfile", "thiserror", + "time", + "tokio", "url", - "uuid", - "webview2-com 0.19.1", - "windows 0.39.0", + "windows-sys 0.52.0", + "zip 2.1.3", ] [[package]] -name = "tauri-runtime-wry" -version = "0.14.3" +name = "tauri-plugin-window-state" +version = "2.0.0-beta.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cae61fbc731f690a4899681c9052dde6d05b159b44563ace8186fc1bfb7d158" +checksum = "74b5596f41b90668ea37562d512e1dead687d9ae5eadb49f9faa8b875a2740a3" dependencies = [ - "cocoa", + "bitflags 2.5.0", + "log", + "serde", + "serde_json", + "tauri", + "tauri-plugin", + "thiserror", +] + +[[package]] +name = "tauri-runtime" +version = "2.0.0-beta.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7dc96172a43536236ab55b7da7b8461bf75810985e668589e2395cb476937cb" +dependencies = [ + "dpi", "gtk", + "http", + "jni", + "raw-window-handle 0.6.2", + "serde", + "serde_json", + "tauri-utils", + "thiserror", + "url", + "windows 0.56.0", +] + +[[package]] +name = "tauri-runtime-wry" +version = "2.0.0-beta.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4fd913b1f14a9b618c7f3ae35656d3aa759767fcb95b72006357c12b9d0b09" +dependencies = [ + "cocoa", + "gtk", + "http", + "jni", + "log", "percent-encoding", - "rand 0.8.5", - "raw-window-handle", + "raw-window-handle 0.6.2", + "softbuffer", + "tao", "tauri-runtime", "tauri-utils", - "uuid", + "url", "webkit2gtk", - "webview2-com 0.19.1", - "windows 0.39.0", + "webview2-com 0.30.0", + "windows 0.56.0", "wry", ] [[package]] name = "tauri-utils" -version = "1.5.2" +version = "2.0.0-beta.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ece74810b1d3d44f29f732a7ae09a63183d63949bbdd59c61f8ed2a1b70150db" +checksum = "4f24a9c20d676a3f025331cc1c3841256ba88c9f25fb7fae709d2b3089c50d90" dependencies = [ "brotli", + "cargo_metadata", "ctor", "dunce", "glob 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", - "heck 0.4.1", "html5ever", "infer", "json-patch", @@ -3975,14 +4471,18 @@ dependencies = [ "phf 0.11.2", "proc-macro2", "quote", + "regex", + "schemars", "semver", "serde", "serde_json", "serde_with", + "swift-rs", "thiserror", + "toml 0.8.8", "url", + "urlpattern", "walkdir", - "windows-version", ] [[package]] @@ -4003,7 +4503,7 @@ checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", - "redox_syscall", + "redox_syscall 0.4.1", "rustix", "windows-sys 0.52.0", ] @@ -4027,18 +4527,18 @@ checksum = "8eaa81235c7058867fa8c0e7314f33dcce9c215f535d1913822a2b3f5e289f3c" [[package]] name = "thiserror" -version = "1.0.56" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.56" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", @@ -4127,6 +4627,17 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + [[package]] name = "tokio-util" version = "0.7.10" @@ -4141,15 +4652,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - [[package]] name = "toml" version = "0.7.8" @@ -4220,6 +4722,27 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" + [[package]] name = "tower-service" version = "0.3.2" @@ -4287,6 +4810,26 @@ dependencies = [ "tracing-log", ] +[[package]] +name = "tray-icon" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad8319cca93189ea9ab1b290de0595960529750b6b8b501a399ed1ec3775d60" +dependencies = [ + "cocoa", + "core-graphics", + "crossbeam-channel", + "dirs 5.0.1", + "libappindicator", + "muda", + "objc", + "once_cell", + "png", + "serde", + "thiserror", + "windows-sys 0.52.0", +] + [[package]] name = "treediff" version = "4.0.2" @@ -4314,6 +4857,47 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + [[package]] name = "unicode-bidi" version = "0.3.14" @@ -4337,9 +4921,15 @@ dependencies = [ [[package]] name = "unicode-segmentation" -version = "1.10.1" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" + +[[package]] +name = "untrusted" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" @@ -4353,6 +4943,19 @@ dependencies = [ "serde", ] +[[package]] +name = "urlpattern" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609" +dependencies = [ + "derive_more", + "regex", + "serde", + "unic-ucd-ident", + "url", +] + [[package]] name = "utf-8" version = "0.7.6" @@ -4367,9 +4970,9 @@ checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" [[package]] name = "uuid" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "getrandom 0.2.11", ] @@ -4382,9 +4985,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.4.2" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a72e1902dde2bd6441347de2b70b7f5d59bf157c6c62f0c44572607a1d55bbe" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" [[package]] name = "vcpkg" @@ -4392,12 +4995,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "version-compare" -version = "0.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b" - [[package]] name = "version-compare" version = "0.1.1" @@ -4529,9 +5126,9 @@ checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" [[package]] name = "wasm-streams" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7" +checksum = "b65dc4c90b63b118468cf747d8bf3566c1913ef60be765b5730ead9e0a3ba129" dependencies = [ "futures-util", "js-sys", @@ -4552,9 +5149,9 @@ dependencies = [ [[package]] name = "webkit2gtk" -version = "0.18.2" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8f859735e4a452aeb28c6c56a852967a8a76c8eb1cc32dbf931ad28a13d6370" +checksum = "76b1bc1e54c581da1e9f179d0b38512ba358fb1af2d634a1affe42e37172361a" dependencies = [ "bitflags 1.3.2", "cairo-rs", @@ -4570,20 +5167,18 @@ dependencies = [ "javascriptcore-rs", "libc", "once_cell", - "soup2", + "soup3", "webkit2gtk-sys", ] [[package]] name = "webkit2gtk-sys" -version = "0.18.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d76ca6ecc47aeba01ec61e480139dda143796abcae6f83bcddf50d6b5b1dcf3" +checksum = "62daa38afc514d1f8f12b8693d30d5993ff77ced33ce30cd04deebc267a6d57c" dependencies = [ - "atk-sys", "bitflags 1.3.2", "cairo-sys-rs", - "gdk-pixbuf-sys", "gdk-sys", "gio-sys", "glib-sys", @@ -4591,47 +5186,46 @@ dependencies = [ "gtk-sys", "javascriptcore-rs-sys", "libc", - "pango-sys", "pkg-config", - "soup2-sys", - "system-deps 6.2.0", + "soup3-sys", + "system-deps", ] [[package]] -name = "webview2-com" -version = "0.19.1" +name = "webpki-roots" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4a769c9f1a64a8734bde70caafac2b96cada12cd4aefa49196b3a386b8b4178" +checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" dependencies = [ - "webview2-com-macros 0.6.0", - "webview2-com-sys 0.19.0", - "windows 0.39.0", - "windows-implement 0.39.0", + "rustls-pki-types", ] [[package]] name = "webview2-com" -version = "0.27.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd15556ff1d1d6bc850dbb362762bae86069773dd30177c90d3bfa917080dc73" +checksum = "5c914dd492a52f0377bef56fd1b6e74a79090f9ee631d625d5b505a00e4538b6" dependencies = [ - "webview2-com-macros 0.7.0", - "webview2-com-sys 0.27.0", - "windows 0.51.1", - "windows-core 0.51.1", - "windows-implement 0.51.1", - "windows-interface", + "webview2-com-macros", + "webview2-com-sys 0.30.0", + "windows 0.56.0", + "windows-core 0.56.0", + "windows-implement 0.56.0", + "windows-interface 0.56.0", ] [[package]] -name = "webview2-com-macros" -version = "0.6.0" +name = "webview2-com" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaebe196c01691db62e9e4ca52c5ef1e4fd837dcae27dae3ada599b5a8fd05ac" +checksum = "6516cfa64c6b3212686080eeec378e662c2af54bb2a5b2a22749673f5cb2226f" dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", + "webview2-com-macros", + "webview2-com-sys 0.31.0", + "windows 0.57.0", + "windows-core 0.57.0", + "windows-implement 0.57.0", + "windows-interface 0.57.0", ] [[package]] @@ -4647,28 +5241,24 @@ dependencies = [ [[package]] name = "webview2-com-sys" -version = "0.19.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac48ef20ddf657755fdcda8dfed2a7b4fc7e4581acce6fe9b88c3d64f29dee7" +checksum = "2a46bcf03482ec28eeb764ca788f67998cde4213adfbbfa90462622058530f5e" dependencies = [ - "regex", - "serde", - "serde_json", "thiserror", - "windows 0.39.0", - "windows-bindgen", - "windows-metadata", + "windows 0.56.0", + "windows-core 0.56.0", ] [[package]] name = "webview2-com-sys" -version = "0.27.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3775bb005c3170497ec411b36005708b57ad486bfa3d23864c92f5973858ce8d" +checksum = "c76d5b77320ff155660be1df3e6588bc85c75f1a9feef938cc4dc4dd60d1d7cf" dependencies = [ "thiserror", - "windows 0.51.1", - "windows-core 0.51.1", + "windows 0.57.0", + "windows-core 0.57.0", ] [[package]] @@ -4703,96 +5293,107 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.37.0" +name = "window-vibrancy" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57b543186b344cc61c85b5aab0d2e3adf4e0f99bc076eff9aa5927bcc0b8a647" +checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" dependencies = [ - "windows_aarch64_msvc 0.37.0", - "windows_i686_gnu 0.37.0", - "windows_i686_msvc 0.37.0", - "windows_x86_64_gnu 0.37.0", - "windows_x86_64_msvc 0.37.0", + "cocoa", + "objc", + "raw-window-handle 0.6.2", + "windows-sys 0.52.0", + "windows-version", ] [[package]] name = "windows" -version = "0.39.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1c4bd0a50ac6020f65184721f758dba47bb9fbc2133df715ec74a237b26794a" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" dependencies = [ - "windows-implement 0.39.0", - "windows_aarch64_msvc 0.39.0", - "windows_i686_gnu 0.39.0", - "windows_i686_msvc 0.39.0", - "windows_x86_64_gnu 0.39.0", - "windows_x86_64_msvc 0.39.0", + "windows-targets 0.48.5", ] [[package]] name = "windows" -version = "0.48.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +checksum = "1de69df01bdf1ead2f4ac895dc77c9351aefff65b2f3db429a343f9cbf05e132" dependencies = [ - "windows-targets 0.48.5", + "windows-core 0.56.0", + "windows-targets 0.52.5", ] [[package]] name = "windows" -version = "0.51.1" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" dependencies = [ - "windows-core 0.51.1", - "windows-implement 0.51.1", - "windows-interface", - "windows-targets 0.48.5", + "windows-core 0.57.0", + "windows-targets 0.52.5", ] [[package]] -name = "windows-bindgen" -version = "0.39.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68003dbd0e38abc0fb85b939240f4bce37c43a5981d3df37ccbaaa981b47cb41" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-metadata", - "windows-tokens", + "windows-targets 0.52.5", ] [[package]] name = "windows-core" -version = "0.51.1" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "4698e52ed2d08f8658ab0c39512a7c00ee5fe2688c65f8c0a4f06750d729f2a6" dependencies = [ - "windows-targets 0.48.5", + "windows-implement 0.56.0", + "windows-interface 0.56.0", + "windows-result", + "windows-targets 0.52.5", ] [[package]] name = "windows-core" -version = "0.52.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" dependencies = [ - "windows-targets 0.52.0", + "windows-implement 0.57.0", + "windows-interface 0.57.0", + "windows-result", + "windows-targets 0.52.5", ] [[package]] name = "windows-implement" -version = "0.39.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba01f98f509cb5dc05f4e5fc95e535f78260f15fea8fe1a8abdd08f774f1cee7" +checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ - "syn 1.0.109", - "windows-tokens", + "proc-macro2", + "quote", + "syn 2.0.46", ] [[package]] name = "windows-implement" -version = "0.51.1" +version = "0.57.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.46", +] + +[[package]] +name = "windows-interface" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb2b158efec5af20d8846836622f50a87e6556b9153a42772fa047f773c0e555" +checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", @@ -4801,9 +5402,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.51.1" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0546e63e1ce64c04403d2311fa0e3ab5ae3a367bd524b4a38d8d8d18c70cfa76" +checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", @@ -4811,24 +5412,21 @@ dependencies = [ ] [[package]] -name = "windows-metadata" -version = "0.39.0" +name = "windows-result" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ee5e275231f07c6e240d14f34e1b635bf1faa1c76c57cfd59a5cdb9848e4278" +checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +dependencies = [ + "windows-targets 0.52.5", +] [[package]] name = "windows-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.42.2", ] [[package]] @@ -4846,7 +5444,22 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.5", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -4866,32 +5479,27 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" dependencies = [ - "windows_aarch64_gnullvm 0.52.0", - "windows_aarch64_msvc 0.52.0", - "windows_i686_gnu 0.52.0", - "windows_i686_msvc 0.52.0", - "windows_x86_64_gnu 0.52.0", - "windows_x86_64_gnullvm 0.52.0", - "windows_x86_64_msvc 0.52.0", + "windows_aarch64_gnullvm 0.52.5", + "windows_aarch64_msvc 0.52.5", + "windows_i686_gnu 0.52.5", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.5", + "windows_x86_64_gnu 0.52.5", + "windows_x86_64_gnullvm 0.52.5", + "windows_x86_64_msvc 0.52.5", ] -[[package]] -name = "windows-tokens" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f838de2fe15fe6bac988e74b798f26499a8b21a9d97edec321e79b28d1d7f597" - [[package]] name = "windows-version" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" dependencies = [ - "windows-targets 0.52.0", + "windows-targets 0.52.5", ] [[package]] @@ -4908,21 +5516,9 @@ checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2623277cb2d1c216ba3b578c0f3cf9cdebeddb6e66b1b218bb33596ea7769c3a" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.39.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec7711666096bd4096ffa835238905bb33fb87267910e154b18b44eaabb340f2" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" [[package]] name = "windows_aarch64_msvc" @@ -4938,21 +5534,9 @@ checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" - -[[package]] -name = "windows_i686_gnu" -version = "0.37.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3925fd0b0b804730d44d4b6278c50f9699703ec49bcd628020f46f4ba07d9e1" - -[[package]] -name = "windows_i686_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "763fc57100a5f7042e3057e7e8d9bdd7860d330070251a73d003563a3bb49e1b" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" [[package]] name = "windows_i686_gnu" @@ -4968,21 +5552,15 @@ checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" [[package]] -name = "windows_i686_msvc" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce907ac74fe331b524c1298683efbf598bb031bc84d5e274db2083696d07c57c" - -[[package]] -name = "windows_i686_msvc" -version = "0.39.0" +name = "windows_i686_gnullvm" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc7cbfe58828921e10a9f446fcaaf649204dcfe6c1ddd712c5eebae6bda1106" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" [[package]] name = "windows_i686_msvc" @@ -4998,21 +5576,9 @@ checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.37.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2babfba0828f2e6b32457d5341427dcbb577ceef556273229959ac23a10af33d" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6868c165637d653ae1e8dc4d82c25d4f97dd6605eaa8d784b5c6e0ab2a252b65" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" [[package]] name = "windows_x86_64_gnu" @@ -5028,9 +5594,9 @@ checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" [[package]] name = "windows_x86_64_gnullvm" @@ -5046,21 +5612,9 @@ checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.37.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4dd6dc7df2d84cf7b33822ed5b86318fb1781948e9663bacd047fc9dd52259d" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4d40883ae9cae962787ca76ba76390ffa29214667a111db9e0a1ad8377e809" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" [[package]] name = "windows_x86_64_msvc" @@ -5076,9 +5630,9 @@ checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.52.0" +version = "0.52.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" @@ -5098,16 +5652,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winreg" version = "0.51.0" @@ -5130,40 +5674,44 @@ dependencies = [ [[package]] name = "wry" -version = "0.24.7" +version = "0.40.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ad85d0e067359e409fcb88903c3eac817c392e5d638258abfb3da5ad8ba6fc4" +checksum = "1fa597526af53f310a8e6218630c5024fdde8271f229e70d7d2fc70b52b8fb1e" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", "block", "cocoa", "core-graphics", "crossbeam-channel", + "dpi", "dunce", - "gdk", - "gio", - "glib", + "gdkx11", "gtk", "html5ever", "http", + "javascriptcore-rs", + "jni", "kuchikiki", "libc", - "log", + "ndk", + "ndk-context", + "ndk-sys", "objc", "objc_id", "once_cell", - "serde", - "serde_json", + "percent-encoding", + "raw-window-handle 0.6.2", "sha2", - "soup2", - "tao", + "soup3", + "tao-macros", "thiserror", - "url", "webkit2gtk", "webkit2gtk-sys", - "webview2-com 0.19.1", - "windows 0.39.0", - "windows-implement 0.39.0", + "webview2-com 0.30.0", + "windows 0.56.0", + "windows-core 0.56.0", + "windows-version", + "x11-dl", ] [[package]] @@ -5227,6 +5775,12 @@ dependencies = [ "syn 2.0.46", ] +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + [[package]] name = "zip" version = "0.6.6" @@ -5247,6 +5801,21 @@ dependencies = [ "zstd", ] +[[package]] +name = "zip" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "775a2b471036342aa69bc5a602bc889cb0a06cda00477d0c69566757d5553d39" +dependencies = [ + "arbitrary", + "crc32fast", + "crossbeam-utils", + "displaydoc", + "indexmap 2.1.0", + "memchr", + "thiserror", +] + [[package]] name = "zstd" version = "0.11.2+zstd.1.5.2" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 3c4ed0b3..09eb71d6 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -7,7 +7,7 @@ repository = "https://github.com/Raicuparta/rai-pal" edition = "2021" [build-dependencies] -tauri-build = { version = "1.5.0", features = [] } +tauri-build = { version = "2.0.0-beta", features = [] } [dependencies] # Using the git version because I need a fix that isn't on the normal version, @@ -22,37 +22,39 @@ steamlocate = { git = "https://github.com/Raicuparta/steamlocate-rs", branch = " # specta = "1.0.5" # tauri-specta = { version = "1.0.2", features = ["typescript"] } -serde = { version = "1.0", features = ["derive"] } +async-trait = "0.1.74" +base64 = "0.21.5" byteorder = "1.5.0" -tauri = { version = "1.5.2", features = [ "dialog-ask", "dialog-confirm", "dialog-open", "updater", "shell-open", "dialog"] } -reqwest = "0.11.22" -goblin = "0.7.1" -open = "5.0.0" +chrono = "0.4.31" directories = "5.0.1" -lazy-regex = "3.0.2" enum_dispatch = "0.3.12" -thiserror = "1.0.50" -zip = "0.6.6" -pelite = "0.10.0" -tauri-plugin-window-state = "0.1.0" -async-trait = "0.1.74" futures = "0.3.29" -serde_json = "1.0.108" +goblin = "0.7.1" lazy_static = "1.4.0" -uuid = "1.6.1" -rand = "0.8.5" -tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1", features = ["colored"] } +lazy-regex = "3.0.2" log = "0.4.20" -tauri-runtime = "0.14.1" -base64 = "0.21.5" -chrono = "0.4.31" +open = "5.0.0" +pelite = "0.10.0" +rand = "0.8.5" +reqwest = { version = "0.12.5", features = ["json"] } rusqlite = { version = "0.30.0", features = ["bundled"] } -tokio = "1.35.1" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0.108" serde_urlencoded = "0.7.1" +tauri = { version = "2.0.0-beta", features = [] } +tauri-plugin-log = "2.0.0-beta.6" +tauri-plugin-process = "2.0.0-beta.6" +tauri-plugin-updater = "2.0.0-beta.8" +tauri-plugin-window-state = "2.0.0-beta.9" +tauri-runtime = "2.0.0-beta.18" +thiserror = "1.0.50" +tokio = "1.35.1" +uuid = { version = "1.8.0", features = ["v4"] } +zip = "0.6.6" [target.'cfg(target_os = "linux")'.dependencies] -webkit2gtk = "0.18.2" -webview2-com = "0.27.0" # Needed for getting the webview window on linux +webkit2gtk = "2.0.1" +webview2-com = "0.31.0" # Needed for getting the webview window on linux [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3.9", features = ["shellapi", "winuser"] } diff --git a/backend/capabilities/migrated.json b/backend/capabilities/migrated.json new file mode 100644 index 00000000..03fd3578 --- /dev/null +++ b/backend/capabilities/migrated.json @@ -0,0 +1,17 @@ +{ + "identifier": "migrated", + "description": "permissions that were migrated from v1", + "local": true, + "windows": [ + "main" + ], + "permissions": [ + "path:default", + "event:default", + "window:default", + "app:default", + "resources:default", + "menu:default", + "tray:default" + ] +} \ No newline at end of file diff --git a/backend/gen/schemas/acl-manifests.json b/backend/gen/schemas/acl-manifests.json new file mode 100644 index 00000000..edae8e62 --- /dev/null +++ b/backend/gen/schemas/acl-manifests.json @@ -0,0 +1 @@ +{"app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":[]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"process":{"default_permission":null,"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":[]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"Allows checking for new updates and installing them","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":null,"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/backend/gen/schemas/capabilities.json b/backend/gen/schemas/capabilities.json new file mode 100644 index 00000000..06f54dad --- /dev/null +++ b/backend/gen/schemas/capabilities.json @@ -0,0 +1 @@ +{"migrated":{"identifier":"migrated","description":"permissions that were migrated from v1","local":true,"windows":["main"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default"]}} \ No newline at end of file diff --git a/backend/gen/schemas/desktop-schema.json b/backend/gen/schemas/desktop-schema.json new file mode 100644 index 00000000..bc7e2c7d --- /dev/null +++ b/backend/gen/schemas/desktop-schema.json @@ -0,0 +1,2333 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "a grouping and boundary mechanism developers can use to separate windows or plugins functionality from each other at runtime.\n\nIf a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create trust groups and reduce impact of vulnerabilities in certain plugins or windows. Windows can be added to a capability by exact name or glob patterns like *, admin-* or main-window.", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.", + "type": "string" + }, + "description": { + "description": "Description of the capability.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that uses this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that uses this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability. Must include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`.", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + } + }, + "platforms": { + "description": "Target platforms this capability applies. By default all platforms are affected by this capability.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n# Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ] + }, + "Identifier": { + "oneOf": [ + { + "description": "app:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "app:default" + ] + }, + { + "description": "app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-app-hide" + ] + }, + { + "description": "app:allow-app-show -> Enables the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-app-show" + ] + }, + { + "description": "app:allow-name -> Enables the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-name" + ] + }, + { + "description": "app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-tauri-version" + ] + }, + { + "description": "app:allow-version -> Enables the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-version" + ] + }, + { + "description": "app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-app-hide" + ] + }, + { + "description": "app:deny-app-show -> Denies the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-app-show" + ] + }, + { + "description": "app:deny-name -> Denies the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-name" + ] + }, + { + "description": "app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-tauri-version" + ] + }, + { + "description": "app:deny-version -> Denies the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-version" + ] + }, + { + "description": "event:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "event:default" + ] + }, + { + "description": "event:allow-emit -> Enables the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-emit" + ] + }, + { + "description": "event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-emit-to" + ] + }, + { + "description": "event:allow-listen -> Enables the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-listen" + ] + }, + { + "description": "event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-unlisten" + ] + }, + { + "description": "event:deny-emit -> Denies the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-emit" + ] + }, + { + "description": "event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-emit-to" + ] + }, + { + "description": "event:deny-listen -> Denies the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-listen" + ] + }, + { + "description": "event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-unlisten" + ] + }, + { + "description": "image:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "image:default" + ] + }, + { + "description": "image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-from-bytes" + ] + }, + { + "description": "image:allow-from-path -> Enables the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-from-path" + ] + }, + { + "description": "image:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-new" + ] + }, + { + "description": "image:allow-rgba -> Enables the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-rgba" + ] + }, + { + "description": "image:allow-size -> Enables the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-size" + ] + }, + { + "description": "image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-from-bytes" + ] + }, + { + "description": "image:deny-from-path -> Denies the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-from-path" + ] + }, + { + "description": "image:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-new" + ] + }, + { + "description": "image:deny-rgba -> Denies the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-rgba" + ] + }, + { + "description": "image:deny-size -> Denies the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-size" + ] + }, + { + "description": "log:default -> Allows the log command", + "type": "string", + "enum": [ + "log:default" + ] + }, + { + "description": "log:allow-log -> Enables the log command without any pre-configured scope.", + "type": "string", + "enum": [ + "log:allow-log" + ] + }, + { + "description": "log:deny-log -> Denies the log command without any pre-configured scope.", + "type": "string", + "enum": [ + "log:deny-log" + ] + }, + { + "description": "menu:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "menu:default" + ] + }, + { + "description": "menu:allow-append -> Enables the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-append" + ] + }, + { + "description": "menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-create-default" + ] + }, + { + "description": "menu:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-get" + ] + }, + { + "description": "menu:allow-insert -> Enables the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-insert" + ] + }, + { + "description": "menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-is-checked" + ] + }, + { + "description": "menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-is-enabled" + ] + }, + { + "description": "menu:allow-items -> Enables the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-items" + ] + }, + { + "description": "menu:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-new" + ] + }, + { + "description": "menu:allow-popup -> Enables the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-popup" + ] + }, + { + "description": "menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-prepend" + ] + }, + { + "description": "menu:allow-remove -> Enables the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-remove" + ] + }, + { + "description": "menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-remove-at" + ] + }, + { + "description": "menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-accelerator" + ] + }, + { + "description": "menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-app-menu" + ] + }, + { + "description": "menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-window-menu" + ] + }, + { + "description": "menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-checked" + ] + }, + { + "description": "menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-enabled" + ] + }, + { + "description": "menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-icon" + ] + }, + { + "description": "menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-text" + ] + }, + { + "description": "menu:allow-text -> Enables the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-text" + ] + }, + { + "description": "menu:deny-append -> Denies the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-append" + ] + }, + { + "description": "menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-create-default" + ] + }, + { + "description": "menu:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-get" + ] + }, + { + "description": "menu:deny-insert -> Denies the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-insert" + ] + }, + { + "description": "menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-is-checked" + ] + }, + { + "description": "menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-is-enabled" + ] + }, + { + "description": "menu:deny-items -> Denies the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-items" + ] + }, + { + "description": "menu:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-new" + ] + }, + { + "description": "menu:deny-popup -> Denies the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-popup" + ] + }, + { + "description": "menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-prepend" + ] + }, + { + "description": "menu:deny-remove -> Denies the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-remove" + ] + }, + { + "description": "menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-remove-at" + ] + }, + { + "description": "menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-accelerator" + ] + }, + { + "description": "menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-app-menu" + ] + }, + { + "description": "menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-window-menu" + ] + }, + { + "description": "menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-checked" + ] + }, + { + "description": "menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-enabled" + ] + }, + { + "description": "menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-icon" + ] + }, + { + "description": "menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-text" + ] + }, + { + "description": "menu:deny-text -> Denies the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-text" + ] + }, + { + "description": "path:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "path:default" + ] + }, + { + "description": "path:allow-basename -> Enables the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-basename" + ] + }, + { + "description": "path:allow-dirname -> Enables the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-dirname" + ] + }, + { + "description": "path:allow-extname -> Enables the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-extname" + ] + }, + { + "description": "path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-is-absolute" + ] + }, + { + "description": "path:allow-join -> Enables the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-join" + ] + }, + { + "description": "path:allow-normalize -> Enables the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-normalize" + ] + }, + { + "description": "path:allow-resolve -> Enables the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-resolve" + ] + }, + { + "description": "path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-resolve-directory" + ] + }, + { + "description": "path:deny-basename -> Denies the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-basename" + ] + }, + { + "description": "path:deny-dirname -> Denies the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-dirname" + ] + }, + { + "description": "path:deny-extname -> Denies the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-extname" + ] + }, + { + "description": "path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-is-absolute" + ] + }, + { + "description": "path:deny-join -> Denies the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-join" + ] + }, + { + "description": "path:deny-normalize -> Denies the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-normalize" + ] + }, + { + "description": "path:deny-resolve -> Denies the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-resolve" + ] + }, + { + "description": "path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-resolve-directory" + ] + }, + { + "type": "string", + "enum": [ + "process:default" + ] + }, + { + "description": "process:allow-exit -> Enables the exit command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:allow-exit" + ] + }, + { + "description": "process:allow-restart -> Enables the restart command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:allow-restart" + ] + }, + { + "description": "process:deny-exit -> Denies the exit command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:deny-exit" + ] + }, + { + "description": "process:deny-restart -> Denies the restart command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:deny-restart" + ] + }, + { + "description": "resources:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "resources:default" + ] + }, + { + "description": "resources:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "resources:allow-close" + ] + }, + { + "description": "resources:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "resources:deny-close" + ] + }, + { + "description": "tray:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "tray:default" + ] + }, + { + "description": "tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-get-by-id" + ] + }, + { + "description": "tray:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-new" + ] + }, + { + "description": "tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-remove-by-id" + ] + }, + { + "description": "tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-icon" + ] + }, + { + "description": "tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-icon-as-template" + ] + }, + { + "description": "tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-menu" + ] + }, + { + "description": "tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-show-menu-on-left-click" + ] + }, + { + "description": "tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-temp-dir-path" + ] + }, + { + "description": "tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-title" + ] + }, + { + "description": "tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-tooltip" + ] + }, + { + "description": "tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-visible" + ] + }, + { + "description": "tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-get-by-id" + ] + }, + { + "description": "tray:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-new" + ] + }, + { + "description": "tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-remove-by-id" + ] + }, + { + "description": "tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-icon" + ] + }, + { + "description": "tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-icon-as-template" + ] + }, + { + "description": "tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-menu" + ] + }, + { + "description": "tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-show-menu-on-left-click" + ] + }, + { + "description": "tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-temp-dir-path" + ] + }, + { + "description": "tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-title" + ] + }, + { + "description": "tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-tooltip" + ] + }, + { + "description": "tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-visible" + ] + }, + { + "description": "updater:default -> Allows checking for new updates and installing them", + "type": "string", + "enum": [ + "updater:default" + ] + }, + { + "description": "updater:allow-check -> Enables the check command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-check" + ] + }, + { + "description": "updater:allow-download -> Enables the download command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-download" + ] + }, + { + "description": "updater:allow-download-and-install -> Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-download-and-install" + ] + }, + { + "description": "updater:allow-install -> Enables the install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-install" + ] + }, + { + "description": "updater:deny-check -> Denies the check command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-check" + ] + }, + { + "description": "updater:deny-download -> Denies the download command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-download" + ] + }, + { + "description": "updater:deny-download-and-install -> Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-download-and-install" + ] + }, + { + "description": "updater:deny-install -> Denies the install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-install" + ] + }, + { + "description": "webview:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "webview:default" + ] + }, + { + "description": "webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-create-webview" + ] + }, + { + "description": "webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-create-webview-window" + ] + }, + { + "description": "webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-internal-toggle-devtools" + ] + }, + { + "description": "webview:allow-print -> Enables the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-print" + ] + }, + { + "description": "webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-reparent" + ] + }, + { + "description": "webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-focus" + ] + }, + { + "description": "webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-position" + ] + }, + { + "description": "webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-size" + ] + }, + { + "description": "webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-zoom" + ] + }, + { + "description": "webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-close" + ] + }, + { + "description": "webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-position" + ] + }, + { + "description": "webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-size" + ] + }, + { + "description": "webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-create-webview" + ] + }, + { + "description": "webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-create-webview-window" + ] + }, + { + "description": "webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-internal-toggle-devtools" + ] + }, + { + "description": "webview:deny-print -> Denies the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-print" + ] + }, + { + "description": "webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-reparent" + ] + }, + { + "description": "webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-focus" + ] + }, + { + "description": "webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-position" + ] + }, + { + "description": "webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-size" + ] + }, + { + "description": "webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-zoom" + ] + }, + { + "description": "webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-close" + ] + }, + { + "description": "webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-position" + ] + }, + { + "description": "webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-size" + ] + }, + { + "description": "window:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "window:default" + ] + }, + { + "description": "window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-available-monitors" + ] + }, + { + "description": "window:allow-center -> Enables the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-center" + ] + }, + { + "description": "window:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-close" + ] + }, + { + "description": "window:allow-create -> Enables the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-create" + ] + }, + { + "description": "window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-current-monitor" + ] + }, + { + "description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-cursor-position" + ] + }, + { + "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-destroy" + ] + }, + { + "description": "window:allow-hide -> Enables the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-hide" + ] + }, + { + "description": "window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-inner-position" + ] + }, + { + "description": "window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-inner-size" + ] + }, + { + "description": "window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-internal-toggle-maximize" + ] + }, + { + "description": "window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-closable" + ] + }, + { + "description": "window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-decorated" + ] + }, + { + "description": "window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-focused" + ] + }, + { + "description": "window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-fullscreen" + ] + }, + { + "description": "window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-maximizable" + ] + }, + { + "description": "window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-maximized" + ] + }, + { + "description": "window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-minimizable" + ] + }, + { + "description": "window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-minimized" + ] + }, + { + "description": "window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-resizable" + ] + }, + { + "description": "window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-visible" + ] + }, + { + "description": "window:allow-maximize -> Enables the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-maximize" + ] + }, + { + "description": "window:allow-minimize -> Enables the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-minimize" + ] + }, + { + "description": "window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-monitor-from-point" + ] + }, + { + "description": "window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-outer-position" + ] + }, + { + "description": "window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-outer-size" + ] + }, + { + "description": "window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-primary-monitor" + ] + }, + { + "description": "window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-request-user-attention" + ] + }, + { + "description": "window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-scale-factor" + ] + }, + { + "description": "window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-always-on-bottom" + ] + }, + { + "description": "window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-always-on-top" + ] + }, + { + "description": "window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-closable" + ] + }, + { + "description": "window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-content-protected" + ] + }, + { + "description": "window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-grab" + ] + }, + { + "description": "window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-icon" + ] + }, + { + "description": "window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-position" + ] + }, + { + "description": "window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-visible" + ] + }, + { + "description": "window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-decorations" + ] + }, + { + "description": "window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-effects" + ] + }, + { + "description": "window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-focus" + ] + }, + { + "description": "window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-fullscreen" + ] + }, + { + "description": "window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-icon" + ] + }, + { + "description": "window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-ignore-cursor-events" + ] + }, + { + "description": "window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-max-size" + ] + }, + { + "description": "window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-maximizable" + ] + }, + { + "description": "window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-min-size" + ] + }, + { + "description": "window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-minimizable" + ] + }, + { + "description": "window:allow-set-position -> Enables the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-position" + ] + }, + { + "description": "window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-progress-bar" + ] + }, + { + "description": "window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-resizable" + ] + }, + { + "description": "window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-shadow" + ] + }, + { + "description": "window:allow-set-size -> Enables the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-size" + ] + }, + { + "description": "window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-skip-taskbar" + ] + }, + { + "description": "window:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-title" + ] + }, + { + "description": "window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-visible-on-all-workspaces" + ] + }, + { + "description": "window:allow-show -> Enables the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-show" + ] + }, + { + "description": "window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-start-dragging" + ] + }, + { + "description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-start-resize-dragging" + ] + }, + { + "description": "window:allow-theme -> Enables the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-theme" + ] + }, + { + "description": "window:allow-title -> Enables the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-title" + ] + }, + { + "description": "window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-toggle-maximize" + ] + }, + { + "description": "window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-unmaximize" + ] + }, + { + "description": "window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-unminimize" + ] + }, + { + "description": "window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-available-monitors" + ] + }, + { + "description": "window:deny-center -> Denies the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-center" + ] + }, + { + "description": "window:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-close" + ] + }, + { + "description": "window:deny-create -> Denies the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-create" + ] + }, + { + "description": "window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-current-monitor" + ] + }, + { + "description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-cursor-position" + ] + }, + { + "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-destroy" + ] + }, + { + "description": "window:deny-hide -> Denies the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-hide" + ] + }, + { + "description": "window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-inner-position" + ] + }, + { + "description": "window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-inner-size" + ] + }, + { + "description": "window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-internal-toggle-maximize" + ] + }, + { + "description": "window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-closable" + ] + }, + { + "description": "window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-decorated" + ] + }, + { + "description": "window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-focused" + ] + }, + { + "description": "window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-fullscreen" + ] + }, + { + "description": "window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-maximizable" + ] + }, + { + "description": "window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-maximized" + ] + }, + { + "description": "window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-minimizable" + ] + }, + { + "description": "window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-minimized" + ] + }, + { + "description": "window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-resizable" + ] + }, + { + "description": "window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-visible" + ] + }, + { + "description": "window:deny-maximize -> Denies the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-maximize" + ] + }, + { + "description": "window:deny-minimize -> Denies the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-minimize" + ] + }, + { + "description": "window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-monitor-from-point" + ] + }, + { + "description": "window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-outer-position" + ] + }, + { + "description": "window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-outer-size" + ] + }, + { + "description": "window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-primary-monitor" + ] + }, + { + "description": "window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-request-user-attention" + ] + }, + { + "description": "window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-scale-factor" + ] + }, + { + "description": "window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-always-on-bottom" + ] + }, + { + "description": "window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-always-on-top" + ] + }, + { + "description": "window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-closable" + ] + }, + { + "description": "window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-content-protected" + ] + }, + { + "description": "window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-grab" + ] + }, + { + "description": "window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-icon" + ] + }, + { + "description": "window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-position" + ] + }, + { + "description": "window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-visible" + ] + }, + { + "description": "window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-decorations" + ] + }, + { + "description": "window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-effects" + ] + }, + { + "description": "window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-focus" + ] + }, + { + "description": "window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-fullscreen" + ] + }, + { + "description": "window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-icon" + ] + }, + { + "description": "window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-ignore-cursor-events" + ] + }, + { + "description": "window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-max-size" + ] + }, + { + "description": "window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-maximizable" + ] + }, + { + "description": "window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-min-size" + ] + }, + { + "description": "window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-minimizable" + ] + }, + { + "description": "window:deny-set-position -> Denies the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-position" + ] + }, + { + "description": "window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-progress-bar" + ] + }, + { + "description": "window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-resizable" + ] + }, + { + "description": "window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-shadow" + ] + }, + { + "description": "window:deny-set-size -> Denies the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-size" + ] + }, + { + "description": "window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-skip-taskbar" + ] + }, + { + "description": "window:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-title" + ] + }, + { + "description": "window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-visible-on-all-workspaces" + ] + }, + { + "description": "window:deny-show -> Denies the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-show" + ] + }, + { + "description": "window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-start-dragging" + ] + }, + { + "description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-start-resize-dragging" + ] + }, + { + "description": "window:deny-theme -> Denies the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-theme" + ] + }, + { + "description": "window:deny-title -> Denies the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-title" + ] + }, + { + "description": "window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-toggle-maximize" + ] + }, + { + "description": "window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-unmaximize" + ] + }, + { + "description": "window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-unminimize" + ] + }, + { + "type": "string", + "enum": [ + "window-state:default" + ] + }, + { + "description": "window-state:allow-filename -> Enables the filename command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-filename" + ] + }, + { + "description": "window-state:allow-restore-state -> Enables the restore_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-restore-state" + ] + }, + { + "description": "window-state:allow-save-window-state -> Enables the save_window_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-save-window-state" + ] + }, + { + "description": "window-state:deny-filename -> Denies the filename command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-filename" + ] + }, + { + "description": "window-state:deny-restore-state -> Denies the restore_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-restore-state" + ] + }, + { + "description": "window-state:deny-save-window-state -> Denies the save_window_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-save-window-state" + ] + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/backend/gen/schemas/linux-schema.json b/backend/gen/schemas/linux-schema.json new file mode 100644 index 00000000..bc7e2c7d --- /dev/null +++ b/backend/gen/schemas/linux-schema.json @@ -0,0 +1,2333 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "a grouping and boundary mechanism developers can use to separate windows or plugins functionality from each other at runtime.\n\nIf a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create trust groups and reduce impact of vulnerabilities in certain plugins or windows. Windows can be added to a capability by exact name or glob patterns like *, admin-* or main-window.", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.", + "type": "string" + }, + "description": { + "description": "Description of the capability.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that uses this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that uses this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability. Must include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`.", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + } + }, + "platforms": { + "description": "Target platforms this capability applies. By default all platforms are affected by this capability.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n# Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ] + }, + "Identifier": { + "oneOf": [ + { + "description": "app:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "app:default" + ] + }, + { + "description": "app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-app-hide" + ] + }, + { + "description": "app:allow-app-show -> Enables the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-app-show" + ] + }, + { + "description": "app:allow-name -> Enables the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-name" + ] + }, + { + "description": "app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-tauri-version" + ] + }, + { + "description": "app:allow-version -> Enables the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-version" + ] + }, + { + "description": "app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-app-hide" + ] + }, + { + "description": "app:deny-app-show -> Denies the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-app-show" + ] + }, + { + "description": "app:deny-name -> Denies the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-name" + ] + }, + { + "description": "app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-tauri-version" + ] + }, + { + "description": "app:deny-version -> Denies the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-version" + ] + }, + { + "description": "event:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "event:default" + ] + }, + { + "description": "event:allow-emit -> Enables the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-emit" + ] + }, + { + "description": "event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-emit-to" + ] + }, + { + "description": "event:allow-listen -> Enables the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-listen" + ] + }, + { + "description": "event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-unlisten" + ] + }, + { + "description": "event:deny-emit -> Denies the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-emit" + ] + }, + { + "description": "event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-emit-to" + ] + }, + { + "description": "event:deny-listen -> Denies the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-listen" + ] + }, + { + "description": "event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-unlisten" + ] + }, + { + "description": "image:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "image:default" + ] + }, + { + "description": "image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-from-bytes" + ] + }, + { + "description": "image:allow-from-path -> Enables the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-from-path" + ] + }, + { + "description": "image:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-new" + ] + }, + { + "description": "image:allow-rgba -> Enables the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-rgba" + ] + }, + { + "description": "image:allow-size -> Enables the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-size" + ] + }, + { + "description": "image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-from-bytes" + ] + }, + { + "description": "image:deny-from-path -> Denies the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-from-path" + ] + }, + { + "description": "image:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-new" + ] + }, + { + "description": "image:deny-rgba -> Denies the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-rgba" + ] + }, + { + "description": "image:deny-size -> Denies the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-size" + ] + }, + { + "description": "log:default -> Allows the log command", + "type": "string", + "enum": [ + "log:default" + ] + }, + { + "description": "log:allow-log -> Enables the log command without any pre-configured scope.", + "type": "string", + "enum": [ + "log:allow-log" + ] + }, + { + "description": "log:deny-log -> Denies the log command without any pre-configured scope.", + "type": "string", + "enum": [ + "log:deny-log" + ] + }, + { + "description": "menu:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "menu:default" + ] + }, + { + "description": "menu:allow-append -> Enables the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-append" + ] + }, + { + "description": "menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-create-default" + ] + }, + { + "description": "menu:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-get" + ] + }, + { + "description": "menu:allow-insert -> Enables the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-insert" + ] + }, + { + "description": "menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-is-checked" + ] + }, + { + "description": "menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-is-enabled" + ] + }, + { + "description": "menu:allow-items -> Enables the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-items" + ] + }, + { + "description": "menu:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-new" + ] + }, + { + "description": "menu:allow-popup -> Enables the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-popup" + ] + }, + { + "description": "menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-prepend" + ] + }, + { + "description": "menu:allow-remove -> Enables the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-remove" + ] + }, + { + "description": "menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-remove-at" + ] + }, + { + "description": "menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-accelerator" + ] + }, + { + "description": "menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-app-menu" + ] + }, + { + "description": "menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-window-menu" + ] + }, + { + "description": "menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-checked" + ] + }, + { + "description": "menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-enabled" + ] + }, + { + "description": "menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-icon" + ] + }, + { + "description": "menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-text" + ] + }, + { + "description": "menu:allow-text -> Enables the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-text" + ] + }, + { + "description": "menu:deny-append -> Denies the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-append" + ] + }, + { + "description": "menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-create-default" + ] + }, + { + "description": "menu:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-get" + ] + }, + { + "description": "menu:deny-insert -> Denies the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-insert" + ] + }, + { + "description": "menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-is-checked" + ] + }, + { + "description": "menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-is-enabled" + ] + }, + { + "description": "menu:deny-items -> Denies the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-items" + ] + }, + { + "description": "menu:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-new" + ] + }, + { + "description": "menu:deny-popup -> Denies the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-popup" + ] + }, + { + "description": "menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-prepend" + ] + }, + { + "description": "menu:deny-remove -> Denies the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-remove" + ] + }, + { + "description": "menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-remove-at" + ] + }, + { + "description": "menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-accelerator" + ] + }, + { + "description": "menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-app-menu" + ] + }, + { + "description": "menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-window-menu" + ] + }, + { + "description": "menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-checked" + ] + }, + { + "description": "menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-enabled" + ] + }, + { + "description": "menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-icon" + ] + }, + { + "description": "menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-text" + ] + }, + { + "description": "menu:deny-text -> Denies the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-text" + ] + }, + { + "description": "path:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "path:default" + ] + }, + { + "description": "path:allow-basename -> Enables the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-basename" + ] + }, + { + "description": "path:allow-dirname -> Enables the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-dirname" + ] + }, + { + "description": "path:allow-extname -> Enables the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-extname" + ] + }, + { + "description": "path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-is-absolute" + ] + }, + { + "description": "path:allow-join -> Enables the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-join" + ] + }, + { + "description": "path:allow-normalize -> Enables the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-normalize" + ] + }, + { + "description": "path:allow-resolve -> Enables the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-resolve" + ] + }, + { + "description": "path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-resolve-directory" + ] + }, + { + "description": "path:deny-basename -> Denies the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-basename" + ] + }, + { + "description": "path:deny-dirname -> Denies the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-dirname" + ] + }, + { + "description": "path:deny-extname -> Denies the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-extname" + ] + }, + { + "description": "path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-is-absolute" + ] + }, + { + "description": "path:deny-join -> Denies the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-join" + ] + }, + { + "description": "path:deny-normalize -> Denies the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-normalize" + ] + }, + { + "description": "path:deny-resolve -> Denies the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-resolve" + ] + }, + { + "description": "path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-resolve-directory" + ] + }, + { + "type": "string", + "enum": [ + "process:default" + ] + }, + { + "description": "process:allow-exit -> Enables the exit command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:allow-exit" + ] + }, + { + "description": "process:allow-restart -> Enables the restart command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:allow-restart" + ] + }, + { + "description": "process:deny-exit -> Denies the exit command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:deny-exit" + ] + }, + { + "description": "process:deny-restart -> Denies the restart command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:deny-restart" + ] + }, + { + "description": "resources:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "resources:default" + ] + }, + { + "description": "resources:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "resources:allow-close" + ] + }, + { + "description": "resources:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "resources:deny-close" + ] + }, + { + "description": "tray:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "tray:default" + ] + }, + { + "description": "tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-get-by-id" + ] + }, + { + "description": "tray:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-new" + ] + }, + { + "description": "tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-remove-by-id" + ] + }, + { + "description": "tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-icon" + ] + }, + { + "description": "tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-icon-as-template" + ] + }, + { + "description": "tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-menu" + ] + }, + { + "description": "tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-show-menu-on-left-click" + ] + }, + { + "description": "tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-temp-dir-path" + ] + }, + { + "description": "tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-title" + ] + }, + { + "description": "tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-tooltip" + ] + }, + { + "description": "tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-visible" + ] + }, + { + "description": "tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-get-by-id" + ] + }, + { + "description": "tray:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-new" + ] + }, + { + "description": "tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-remove-by-id" + ] + }, + { + "description": "tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-icon" + ] + }, + { + "description": "tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-icon-as-template" + ] + }, + { + "description": "tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-menu" + ] + }, + { + "description": "tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-show-menu-on-left-click" + ] + }, + { + "description": "tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-temp-dir-path" + ] + }, + { + "description": "tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-title" + ] + }, + { + "description": "tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-tooltip" + ] + }, + { + "description": "tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-visible" + ] + }, + { + "description": "updater:default -> Allows checking for new updates and installing them", + "type": "string", + "enum": [ + "updater:default" + ] + }, + { + "description": "updater:allow-check -> Enables the check command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-check" + ] + }, + { + "description": "updater:allow-download -> Enables the download command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-download" + ] + }, + { + "description": "updater:allow-download-and-install -> Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-download-and-install" + ] + }, + { + "description": "updater:allow-install -> Enables the install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-install" + ] + }, + { + "description": "updater:deny-check -> Denies the check command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-check" + ] + }, + { + "description": "updater:deny-download -> Denies the download command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-download" + ] + }, + { + "description": "updater:deny-download-and-install -> Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-download-and-install" + ] + }, + { + "description": "updater:deny-install -> Denies the install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-install" + ] + }, + { + "description": "webview:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "webview:default" + ] + }, + { + "description": "webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-create-webview" + ] + }, + { + "description": "webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-create-webview-window" + ] + }, + { + "description": "webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-internal-toggle-devtools" + ] + }, + { + "description": "webview:allow-print -> Enables the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-print" + ] + }, + { + "description": "webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-reparent" + ] + }, + { + "description": "webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-focus" + ] + }, + { + "description": "webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-position" + ] + }, + { + "description": "webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-size" + ] + }, + { + "description": "webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-zoom" + ] + }, + { + "description": "webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-close" + ] + }, + { + "description": "webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-position" + ] + }, + { + "description": "webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-size" + ] + }, + { + "description": "webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-create-webview" + ] + }, + { + "description": "webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-create-webview-window" + ] + }, + { + "description": "webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-internal-toggle-devtools" + ] + }, + { + "description": "webview:deny-print -> Denies the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-print" + ] + }, + { + "description": "webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-reparent" + ] + }, + { + "description": "webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-focus" + ] + }, + { + "description": "webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-position" + ] + }, + { + "description": "webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-size" + ] + }, + { + "description": "webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-zoom" + ] + }, + { + "description": "webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-close" + ] + }, + { + "description": "webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-position" + ] + }, + { + "description": "webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-size" + ] + }, + { + "description": "window:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "window:default" + ] + }, + { + "description": "window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-available-monitors" + ] + }, + { + "description": "window:allow-center -> Enables the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-center" + ] + }, + { + "description": "window:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-close" + ] + }, + { + "description": "window:allow-create -> Enables the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-create" + ] + }, + { + "description": "window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-current-monitor" + ] + }, + { + "description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-cursor-position" + ] + }, + { + "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-destroy" + ] + }, + { + "description": "window:allow-hide -> Enables the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-hide" + ] + }, + { + "description": "window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-inner-position" + ] + }, + { + "description": "window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-inner-size" + ] + }, + { + "description": "window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-internal-toggle-maximize" + ] + }, + { + "description": "window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-closable" + ] + }, + { + "description": "window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-decorated" + ] + }, + { + "description": "window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-focused" + ] + }, + { + "description": "window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-fullscreen" + ] + }, + { + "description": "window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-maximizable" + ] + }, + { + "description": "window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-maximized" + ] + }, + { + "description": "window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-minimizable" + ] + }, + { + "description": "window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-minimized" + ] + }, + { + "description": "window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-resizable" + ] + }, + { + "description": "window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-visible" + ] + }, + { + "description": "window:allow-maximize -> Enables the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-maximize" + ] + }, + { + "description": "window:allow-minimize -> Enables the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-minimize" + ] + }, + { + "description": "window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-monitor-from-point" + ] + }, + { + "description": "window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-outer-position" + ] + }, + { + "description": "window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-outer-size" + ] + }, + { + "description": "window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-primary-monitor" + ] + }, + { + "description": "window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-request-user-attention" + ] + }, + { + "description": "window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-scale-factor" + ] + }, + { + "description": "window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-always-on-bottom" + ] + }, + { + "description": "window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-always-on-top" + ] + }, + { + "description": "window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-closable" + ] + }, + { + "description": "window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-content-protected" + ] + }, + { + "description": "window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-grab" + ] + }, + { + "description": "window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-icon" + ] + }, + { + "description": "window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-position" + ] + }, + { + "description": "window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-visible" + ] + }, + { + "description": "window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-decorations" + ] + }, + { + "description": "window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-effects" + ] + }, + { + "description": "window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-focus" + ] + }, + { + "description": "window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-fullscreen" + ] + }, + { + "description": "window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-icon" + ] + }, + { + "description": "window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-ignore-cursor-events" + ] + }, + { + "description": "window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-max-size" + ] + }, + { + "description": "window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-maximizable" + ] + }, + { + "description": "window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-min-size" + ] + }, + { + "description": "window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-minimizable" + ] + }, + { + "description": "window:allow-set-position -> Enables the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-position" + ] + }, + { + "description": "window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-progress-bar" + ] + }, + { + "description": "window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-resizable" + ] + }, + { + "description": "window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-shadow" + ] + }, + { + "description": "window:allow-set-size -> Enables the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-size" + ] + }, + { + "description": "window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-skip-taskbar" + ] + }, + { + "description": "window:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-title" + ] + }, + { + "description": "window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-visible-on-all-workspaces" + ] + }, + { + "description": "window:allow-show -> Enables the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-show" + ] + }, + { + "description": "window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-start-dragging" + ] + }, + { + "description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-start-resize-dragging" + ] + }, + { + "description": "window:allow-theme -> Enables the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-theme" + ] + }, + { + "description": "window:allow-title -> Enables the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-title" + ] + }, + { + "description": "window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-toggle-maximize" + ] + }, + { + "description": "window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-unmaximize" + ] + }, + { + "description": "window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-unminimize" + ] + }, + { + "description": "window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-available-monitors" + ] + }, + { + "description": "window:deny-center -> Denies the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-center" + ] + }, + { + "description": "window:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-close" + ] + }, + { + "description": "window:deny-create -> Denies the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-create" + ] + }, + { + "description": "window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-current-monitor" + ] + }, + { + "description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-cursor-position" + ] + }, + { + "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-destroy" + ] + }, + { + "description": "window:deny-hide -> Denies the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-hide" + ] + }, + { + "description": "window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-inner-position" + ] + }, + { + "description": "window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-inner-size" + ] + }, + { + "description": "window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-internal-toggle-maximize" + ] + }, + { + "description": "window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-closable" + ] + }, + { + "description": "window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-decorated" + ] + }, + { + "description": "window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-focused" + ] + }, + { + "description": "window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-fullscreen" + ] + }, + { + "description": "window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-maximizable" + ] + }, + { + "description": "window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-maximized" + ] + }, + { + "description": "window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-minimizable" + ] + }, + { + "description": "window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-minimized" + ] + }, + { + "description": "window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-resizable" + ] + }, + { + "description": "window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-visible" + ] + }, + { + "description": "window:deny-maximize -> Denies the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-maximize" + ] + }, + { + "description": "window:deny-minimize -> Denies the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-minimize" + ] + }, + { + "description": "window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-monitor-from-point" + ] + }, + { + "description": "window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-outer-position" + ] + }, + { + "description": "window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-outer-size" + ] + }, + { + "description": "window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-primary-monitor" + ] + }, + { + "description": "window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-request-user-attention" + ] + }, + { + "description": "window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-scale-factor" + ] + }, + { + "description": "window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-always-on-bottom" + ] + }, + { + "description": "window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-always-on-top" + ] + }, + { + "description": "window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-closable" + ] + }, + { + "description": "window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-content-protected" + ] + }, + { + "description": "window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-grab" + ] + }, + { + "description": "window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-icon" + ] + }, + { + "description": "window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-position" + ] + }, + { + "description": "window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-visible" + ] + }, + { + "description": "window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-decorations" + ] + }, + { + "description": "window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-effects" + ] + }, + { + "description": "window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-focus" + ] + }, + { + "description": "window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-fullscreen" + ] + }, + { + "description": "window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-icon" + ] + }, + { + "description": "window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-ignore-cursor-events" + ] + }, + { + "description": "window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-max-size" + ] + }, + { + "description": "window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-maximizable" + ] + }, + { + "description": "window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-min-size" + ] + }, + { + "description": "window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-minimizable" + ] + }, + { + "description": "window:deny-set-position -> Denies the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-position" + ] + }, + { + "description": "window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-progress-bar" + ] + }, + { + "description": "window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-resizable" + ] + }, + { + "description": "window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-shadow" + ] + }, + { + "description": "window:deny-set-size -> Denies the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-size" + ] + }, + { + "description": "window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-skip-taskbar" + ] + }, + { + "description": "window:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-title" + ] + }, + { + "description": "window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-visible-on-all-workspaces" + ] + }, + { + "description": "window:deny-show -> Denies the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-show" + ] + }, + { + "description": "window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-start-dragging" + ] + }, + { + "description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-start-resize-dragging" + ] + }, + { + "description": "window:deny-theme -> Denies the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-theme" + ] + }, + { + "description": "window:deny-title -> Denies the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-title" + ] + }, + { + "description": "window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-toggle-maximize" + ] + }, + { + "description": "window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-unmaximize" + ] + }, + { + "description": "window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-unminimize" + ] + }, + { + "type": "string", + "enum": [ + "window-state:default" + ] + }, + { + "description": "window-state:allow-filename -> Enables the filename command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-filename" + ] + }, + { + "description": "window-state:allow-restore-state -> Enables the restore_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-restore-state" + ] + }, + { + "description": "window-state:allow-save-window-state -> Enables the save_window_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-save-window-state" + ] + }, + { + "description": "window-state:deny-filename -> Denies the filename command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-filename" + ] + }, + { + "description": "window-state:deny-restore-state -> Denies the restore_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-restore-state" + ] + }, + { + "description": "window-state:deny-save-window-state -> Denies the save_window_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-save-window-state" + ] + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/backend/src/analytics.rs b/backend/src/analytics.rs index 61a03798..41c66fcc 100644 --- a/backend/src/analytics.rs +++ b/backend/src/analytics.rs @@ -10,12 +10,13 @@ use log::{ }; use reqwest::Client; use serde::Serialize; +use uuid::Uuid; const MEASUREMENT_ID: &str = "G-KTJZNR0ZET"; const API_KEY: Option<&str> = option_env!("ANALYTICS_API_KEY"); lazy_static! { - static ref ANALYTICS_ID: String = uuid::Uuid::new_v4().hyphenated().to_string(); + static ref ANALYTICS_ID: String = Uuid::new_v4().hyphenated().to_string(); } #[derive(Serialize, Debug, Clone)] diff --git a/backend/src/events.rs b/backend/src/events.rs index 98b6d810..e698f3e2 100644 --- a/backend/src/events.rs +++ b/backend/src/events.rs @@ -2,7 +2,10 @@ use std::fmt::Display; use log::error; use serde::Serialize; -use tauri::Manager; +use tauri::{ + EventTarget, + Manager, +}; use crate::serializable_enum; @@ -26,13 +29,13 @@ pub trait EventEmitter { impl EventEmitter for tauri::AppHandle { fn emit_event(&self, event: AppEvent, payload: TPayload) { - self.emit_all(&event.to_string(), payload) + self.emit_to(EventTarget::any(), &event.to_string(), payload) .unwrap_or_else(|err| error!("Failed to emit event: {err}")); } fn emit_error(&self, payload: TPayload) { error!("Error: {payload}"); - self.emit_all(&AppEvent::Error.to_string(), payload) + self.emit_to(EventTarget::any(), &AppEvent::Error.to_string(), payload) .unwrap_or_else(|err| error!("Failed to emit error: {err}.")); } } diff --git a/backend/src/main.rs b/backend/src/main.rs index ee794267..d68c4665 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -47,7 +47,7 @@ use tauri::{ AppHandle, Manager, }; -use tauri_plugin_log::LogTarget; +// use tauri_plugin_log::Target; mod analytics; mod app_state; @@ -669,15 +669,15 @@ fn main() { let tauri_builder = tauri::Builder::default() .plugin(tauri_plugin_window_state::Builder::default().build()) - .plugin( - tauri_plugin_log::Builder::default() - .level(log::LevelFilter::Info) - .targets([ - paths::logs_path().map_or(LogTarget::LogDir, LogTarget::Folder), - LogTarget::Stdout, - ]) - .build(), - ) + // .plugin( + // tauri_plugin_log::Builder::default() + // .level(log::LevelFilter::Info) + // .targets([ + // paths::logs_path().map_or(LogTarget::LogDir, LogTarget::Folder), + // LogTarget::Stdout, + // ]) + // .build(), + // ) .manage(AppState { installed_games: Mutex::default(), owned_games: Mutex::default(), @@ -690,20 +690,8 @@ fn main() { // This prevents/reduces the white flashbang on app start. // Unfortunately, it will still show the default window color for the system for a bit, // which can some times be white. - if let Some(window) = app.get_window("main") { + if let Some(window) = app.get_webview_window("main") { window.set_title(&format!("Rai Pal {}", env!("CARGO_PKG_VERSION")))?; - - #[cfg(target_os = "linux")] - { - window.with_webview(|webview| { - use webkit2gtk::traits::WebViewExt; - let mut color = webview.inner().background_color(); - color.set_red(0.102); - color.set_green(0.106); - color.set_blue(0.118); - webview.inner().set_background_color(&color); - })?; - } } Ok(()) diff --git a/backend/src/paths.rs b/backend/src/paths.rs index 8a44da58..b08ad13f 100644 --- a/backend/src/paths.rs +++ b/backend/src/paths.rs @@ -14,6 +14,10 @@ use std::{ use directories::ProjectDirs; use glob::glob; use log::error; +use tauri::{ + path::BaseDirectory, + Manager, +}; use crate::{ Error, @@ -67,10 +71,9 @@ pub fn installed_mods_path() -> Result { } pub fn resources_path(handle: &tauri::AppHandle) -> Result { - handle - .path_resolver() - .resolve_resource("resources") - .ok_or_else(Error::ResourcesNotFound) + Ok(handle + .path() + .resolve("resources", BaseDirectory::Resource)?) } pub fn file_name_without_extension(file_path: &Path) -> Result<&str> { diff --git a/backend/src/result.rs b/backend/src/result.rs index 019dafa2..6da34a35 100644 --- a/backend/src/result.rs +++ b/backend/src/result.rs @@ -57,9 +57,6 @@ pub enum Error { #[error("Invalid type `{0}` in binary vdf key/value pair")] InvalidBinaryVdfType(u8), - #[error("Failed to find Rai Pal resources folder")] - ResourcesNotFound(), - #[error("Failed to find app data folder")] AppDataNotFound(), diff --git a/backend/tauri.conf.json b/backend/tauri.conf.json index c6db26c5..b446ae04 100644 --- a/backend/tauri.conf.json +++ b/backend/tauri.conf.json @@ -3,61 +3,37 @@ "build": { "beforeDevCommand": "pnpm frontend:dev", "beforeBuildCommand": "pnpm frontend:build", - "devPath": "http://localhost:1420", - "distDir": "../dist", - "withGlobalTauri": false + "frontendDist": "../dist", + "devUrl": "http://localhost:1420" }, - "package": { - "productName": "Rai Pal" + "bundle": { + "active": true, + "targets": [ + "msi", + "updater" + ], + "resources": [ + "resources/*" + ], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] }, - "tauri": { + "productName": "Rai Pal", + "identifier": "com.raicuparta.pal", + "plugins": { "updater": { - "active": true, + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDNGMzI5QUM1RjMwMjM0OTMKUldTVE5BTHp4Wm95UDcvaWgyKzRENVkzZVc2K1JTOEhidUR4OFVENWVqemloUWRmZDllbzJGaSsK", "endpoints": [ "https://github.com/Raicuparta/rai-pal/releases/latest/download/latest.json" - ], - "dialog": false, - "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDNGMzI5QUM1RjMwMjM0OTMKUldTVE5BTHp4Wm95UDcvaWgyKzRENVkzZVc2K1JTOEhidUR4OFVENWVqemloUWRmZDllbzJGaSsK" - }, - "allowlist": { - "all": false, - "shell": { - "all": false, - "execute": false, - "open": "^((steam?://\\w+)|(https?://\\w+)).+", - "scope": [], - "sidecar": false - }, - "dialog": { - "all": false, - "ask": true, - "confirm": true, - "message": false, - "open": true, - "save": false - } - }, - "bundle": { - "active": true, - "targets": [ - "msi", - "updater" - ], - "identifier": "com.raicuparta.pal", - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ], - "resources": [ - "resources/*" ] - }, - "security": { - "csp": null - }, + } + }, + "app": { "windows": [ { "fullscreen": false, @@ -68,6 +44,10 @@ "minHeight": 300, "minWidth": 800 } - ] + ], + "withGlobalTauri": false, + "security": { + "csp": null + } } -} +} \ No newline at end of file diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 0d7970b1..a6a5d77f 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -1,160 +1,234 @@ -/* eslint-disable */ -// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. - -declare global { - interface Window { - __TAURI_INVOKE__(cmd: string, args?: Record): Promise; - } -} - -// Function avoids 'window not defined' in SSR -const invoke = () => window.__TAURI_INVOKE__; +import { invoke } from "@tauri-apps/api"; export function dummyCommand() { - return invoke()<[InstalledGame, AppEvent, ProviderCommandAction]>("dummy_command") + return invoke<[InstalledGame, AppEvent, ProviderCommandAction]>( + "dummy_command", + ); } export function updateData() { - return invoke()("update_data") + return invoke("update_data"); } export function getInstalledGames() { - return invoke()<{ [key: string]: InstalledGame }>("get_installed_games") + return invoke<{ [key: string]: InstalledGame }>("get_installed_games"); } export function getOwnedGames() { - return invoke()<{ [key: string]: OwnedGame }>("get_owned_games") + return invoke<{ [key: string]: OwnedGame }>("get_owned_games"); } export function getModLoaders() { - return invoke()<{ [key: string]: ModLoaderData }>("get_mod_loaders") + return invoke<{ [key: string]: ModLoaderData }>("get_mod_loaders"); } export function openGameFolder(gameId: string) { - return invoke()("open_game_folder", { gameId }) + return invoke("open_game_folder", { gameId }); } export function installMod(gameId: string, modId: string) { - return invoke()("install_mod", { gameId,modId }) + return invoke("install_mod", { gameId, modId }); } export function configureMod(gameId: string, modId: string) { - return invoke()("configure_mod", { gameId,modId }) + return invoke("configure_mod", { gameId, modId }); } export function openInstalledModFolder(gameId: string, modId: string) { - return invoke()("open_installed_mod_folder", { gameId,modId }) + return invoke("open_installed_mod_folder", { gameId, modId }); } export function uninstallMod(gameId: string, modId: string) { - return invoke()("uninstall_mod", { gameId,modId }) + return invoke("uninstall_mod", { gameId, modId }); } export function uninstallAllMods(gameId: string) { - return invoke()("uninstall_all_mods", { gameId }) + return invoke("uninstall_all_mods", { gameId }); } export function openGameModsFolder(gameId: string) { - return invoke()("open_game_mods_folder", { gameId }) + return invoke("open_game_mods_folder", { gameId }); } export function startGame(gameId: string) { - return invoke()("start_game", { gameId }) + return invoke("start_game", { gameId }); } export function startGameExe(gameId: string) { - return invoke()("start_game_exe", { gameId }) + return invoke("start_game_exe", { gameId }); } export function openModFolder(modId: string) { - return invoke()("open_mod_folder", { modId }) + return invoke("open_mod_folder", { modId }); } export function downloadMod(modId: string) { - return invoke()("download_mod", { modId }) + return invoke("download_mod", { modId }); } export function runRunnableWithoutGame(modId: string) { - return invoke()("run_runnable_without_game", { modId }) + return invoke("run_runnable_without_game", { modId }); } export function deleteMod(modId: string) { - return invoke()("delete_mod", { modId }) + return invoke("delete_mod", { modId }); } export function openModsFolder() { - return invoke()("open_mods_folder") + return invoke("open_mods_folder"); } export function addGame(path: string) { - return invoke()("add_game", { path }) + return invoke("add_game", { path }); } export function removeGame(gameId: string) { - return invoke()("remove_game", { gameId }) + return invoke("remove_game", { gameId }); } export function deleteSteamAppinfoCache() { - return invoke()("delete_steam_appinfo_cache") + return invoke("delete_steam_appinfo_cache"); } export function frontendReady() { - return invoke()("frontend_ready") + return invoke("frontend_ready"); } export function getLocalMods() { - return invoke()<{ [key: string]: LocalMod }>("get_local_mods") + return invoke<{ [key: string]: LocalMod }>("get_local_mods"); } export function getRemoteMods() { - return invoke()<{ [key: string]: RemoteMod }>("get_remote_mods") + return invoke<{ [key: string]: RemoteMod }>("get_remote_mods"); } export function getRemoteGames() { - return invoke()<{ [key: string]: RemoteGame }>("get_remote_games") + return invoke<{ [key: string]: RemoteGame }>("get_remote_games"); } export function openModLoaderFolder(modLoaderId: string) { - return invoke()("open_mod_loader_folder", { modLoaderId }) + return invoke("open_mod_loader_folder", { modLoaderId }); } export function refreshGame(gameId: string) { - return invoke()("refresh_game", { gameId }) + return invoke("refresh_game", { gameId }); } export function openLogsFolder() { - return invoke()("open_logs_folder") + return invoke("open_logs_folder"); } export function runProviderCommand(ownedGameId: string, commandAction: string) { - return invoke()("run_provider_command", { ownedGameId,commandAction }) -} - -export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } -export type UnityScriptingBackend = "Il2Cpp" | "Mono" -export type RemoteMod = { common: CommonModData; data: RemoteModData } -export type GameMode = "VR" | "Flat" -export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } -export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type ModKind = "Installable" | "Runnable" -export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } -export type AppEvent = "SyncInstalledGames" | "SyncOwnedGames" | "SyncRemoteGames" | "SyncModLoaders" | "SyncLocalMods" | "SyncRemoteMods" | "ExecutedProviderCommand" | "GameAdded" | "GameRemoved" | "Error" -export type Manifest = { title: string | null; version: string; runnable: RunnableModData | null; engine: EngineBrand | null; engineVersionRange: EngineVersionRange | null; unityBackend: UnityScriptingBackend | null } -export type LocalMod = { data: LocalModData; common: CommonModData } -export type InstalledGame = { id: string; name: string; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key: string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } -export type RunnableModData = { path: string; args: string[] } -export type RemoteGame = { id: string; engine: GameEngine | null; skipCache: boolean } -export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } -export type LocalModData = { path: string; manifest: Manifest | null } -export type ModLoaderData = { id: string; path: string; kind: ModKind } -export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; operatingSystem: OperatingSystem | null; scriptingBackend: UnityScriptingBackend | null } -export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" -export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" -export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" -export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } -export type AppType = "Game" | "Demo" -export type OperatingSystem = "Linux" | "Windows" -export type ProviderCommand = { String: string } | { Path: [string, string[]] } -export type Architecture = "X64" | "X86" -export type CommonModData = { id: string; engine: EngineBrand | null; unityBackend: UnityScriptingBackend | null; engineVersionRange: EngineVersionRange | null; loaderId: string } -export type OwnedGame = { id: string; provider: ProviderId; name: string; osList: OperatingSystem[]; releaseDate: BigInt | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key: string]: ProviderCommand } } + return invoke("run_provider_command", { ownedGameId, commandAction }); +} + +export type ModDownload = { + id: string; + url: string; + root: string | null; + runnable: RunnableModData | null; +}; +export type UnityScriptingBackend = "Il2Cpp" | "Mono"; +export type RemoteMod = { common: CommonModData; data: RemoteModData }; +export type GameMode = "VR" | "Flat"; +export type EngineVersion = { + numbers: EngineVersionNumbers; + suffix: string | null; + display: string; +}; +export type EngineVersionRange = { + minimum: EngineVersionNumbers | null; + maximum: EngineVersionNumbers | null; +}; +export type ModKind = "Installable" | "Runnable"; +export type GameEngine = { brand: EngineBrand; version: EngineVersion | null }; +export type AppEvent = + | "SyncInstalledGames" + | "SyncOwnedGames" + | "SyncRemoteGames" + | "SyncModLoaders" + | "SyncLocalMods" + | "SyncRemoteMods" + | "ExecutedProviderCommand" + | "GameAdded" + | "GameRemoved" + | "Error"; +export type Manifest = { + title: string | null; + version: string; + runnable: RunnableModData | null; + engine: EngineBrand | null; + engineVersionRange: EngineVersionRange | null; + unityBackend: UnityScriptingBackend | null; +}; +export type LocalMod = { data: LocalModData; common: CommonModData }; +export type InstalledGame = { + id: string; + name: string; + provider: ProviderId; + executable: GameExecutable; + installedModVersions: { [key: string]: string }; + discriminator: string | null; + thumbnailUrl: string | null; + ownedGameId: string | null; + startCommand: ProviderCommand | null; +}; +export type RunnableModData = { path: string; args: string[] }; +export type RemoteGame = { + id: string; + engine: GameEngine | null; + skipCache: boolean; +}; +export type RemoteModData = { + title: string; + deprecated: boolean; + author: string; + sourceCode: string; + description: string; + latestVersion: ModDownload | null; +}; +export type LocalModData = { path: string; manifest: Manifest | null }; +export type ModLoaderData = { id: string; path: string; kind: ModKind }; +export type GameExecutable = { + path: string; + name: string; + engine: GameEngine | null; + architecture: Architecture | null; + operatingSystem: OperatingSystem | null; + scriptingBackend: UnityScriptingBackend | null; +}; +export type ProviderCommandAction = + | "Install" + | "ShowInLibrary" + | "ShowInStore" + | "Start" + | "OpenInBrowser"; +export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox"; +export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker"; +export type EngineVersionNumbers = { + major: number; + minor: number | null; + patch: number | null; +}; +export type AppType = "Game" | "Demo"; +export type OperatingSystem = "Linux" | "Windows"; +export type ProviderCommand = { String: string } | { Path: [string, string[]] }; +export type Architecture = "X64" | "X86"; +export type CommonModData = { + id: string; + engine: EngineBrand | null; + unityBackend: UnityScriptingBackend | null; + engineVersionRange: EngineVersionRange | null; + loaderId: string; +}; +export type OwnedGame = { + id: string; + provider: ProviderId; + name: string; + osList: OperatingSystem[]; + releaseDate: bigint | null; + thumbnailUrl: string | null; + gameMode: GameMode | null; + appType: AppType | null; + providerCommands: { [key: string]: ProviderCommand }; +}; diff --git a/frontend/app.tsx b/frontend/app.tsx index 2afdffe3..bce186ee 100644 --- a/frontend/app.tsx +++ b/frontend/app.tsx @@ -43,7 +43,7 @@ const firstPage = Object.keys(pages)[0]; function App() { useData(); - useAppUpdater(); + // useAppUpdater(); return ( <> diff --git a/frontend/hooks/use-app-updater.ts b/frontend/hooks/use-app-updater.ts index 93567a2e..4d359ca9 100644 --- a/frontend/hooks/use-app-updater.ts +++ b/frontend/hooks/use-app-updater.ts @@ -4,8 +4,8 @@ import { checkUpdate, installUpdate, onUpdaterEvent, -} from "@tauri-apps/api/updater"; -import { relaunch } from "@tauri-apps/api/process"; +} from "@tauri-apps/plugin-updater"; +import { relaunch } from "@tauri-apps/plugin-process"; import { showAppNotification } from "@components/app-notifications"; import { dialog } from "@tauri-apps/api"; diff --git a/package.json b/package.json index bcbe9c70..48b37d57 100644 --- a/package.json +++ b/package.json @@ -47,5 +47,9 @@ "singleAttributePerLine": true, "quoteProps": "as-needed" }, - "packageManager": "pnpm@8.15.1+sha256.245fe901f8e7fa8782d7f17d32b6a83995e2ae03984cb5b62b8949bfdc27c7b5" + "packageManager": "pnpm@8.15.1+sha256.245fe901f8e7fa8782d7f17d32b6a83995e2ae03984cb5b62b8949bfdc27c7b5", + "dependencies": { + "@tauri-apps/plugin-process": "2.0.0-beta.5", + "@tauri-apps/plugin-updater": "2.0.0-beta.5" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70c5f5f6..14b20c67 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,6 +4,14 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +dependencies: + '@tauri-apps/plugin-process': + specifier: 2.0.0-beta.5 + version: 2.0.0-beta.5 + '@tauri-apps/plugin-updater': + specifier: 2.0.0-beta.5 + version: 2.0.0-beta.5 + devDependencies: '@mantine/code-highlight': specifier: ^7.4.2 @@ -759,6 +767,11 @@ packages: engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} dev: true + /@tauri-apps/api@2.0.0-beta.13: + resolution: {integrity: sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg==} + engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} + dev: false + /@tauri-apps/cli-darwin-arm64@2.0.0-beta.20: resolution: {integrity: sha512-oCJOCib7GuYkwkBXx+ekamR8NZZU+2i3MLP+DHpDxK5gS2uhCE+CBkamJkNt6y1x6xdVnwyqZOm5RvN4SRtyIA==} engines: {node: '>= 10'} @@ -866,6 +879,18 @@ packages: '@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.20 dev: true + /@tauri-apps/plugin-process@2.0.0-beta.5: + resolution: {integrity: sha512-UMiBm6TtNYfxRb6GwzA4PalkZGwalHdclI/t0MVG33fNXgX1PaWONR/NZW/k7JE+WpvRAnN/Kf9ur8aEzjVVSQ==} + dependencies: + '@tauri-apps/api': 2.0.0-beta.13 + dev: false + + /@tauri-apps/plugin-updater@2.0.0-beta.5: + resolution: {integrity: sha512-h8uNFQDtXaZPFyQcNAB5SxiSIvPbYRlM1fXf/lCcW8bAaMTanyszbHvR2vAYtVa/wIzKAOYriC/MpsJaKLjyhg==} + dependencies: + '@tauri-apps/api': 2.0.0-beta.13 + dev: false + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} dependencies: From 4f039a779f8d9a5a00378abec38348cddc0c6fa0 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 03:46:19 +0100 Subject: [PATCH 004/255] yahoo it works --- frontend/api/bindings.ts | 2 +- .../installed-games/add-game-button.tsx | 8 +++--- frontend/hooks/use-data.ts | 2 +- frontend/util/steam.ts | 4 +-- package.json | 4 ++- pnpm-lock.yaml | 28 +++++++++++++------ 6 files changed, 31 insertions(+), 17 deletions(-) diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index a6a5d77f..c2f0ba14 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -1,4 +1,4 @@ -import { invoke } from "@tauri-apps/api"; +import { invoke } from "@tauri-apps/api/core"; export function dummyCommand() { return invoke<[InstalledGame, AppEvent, ProviderCommandAction]>( diff --git a/frontend/components/installed-games/add-game-button.tsx b/frontend/components/installed-games/add-game-button.tsx index f621747c..6f63aa28 100644 --- a/frontend/components/installed-games/add-game-button.tsx +++ b/frontend/components/installed-games/add-game-button.tsx @@ -3,7 +3,7 @@ import { IconAppWindowFilled, IconPlaylistAdd } from "@tabler/icons-react"; import { useCallback, useEffect, useState } from "react"; import styles from "./installed-games.module.css"; import { addGame } from "@api/bindings"; -import { dialog } from "@tauri-apps/api"; +import { open as openDialog } from "@tauri-apps/plugin-dialog"; import { useAtomValue } from "jotai"; import { loadingAtom } from "@hooks/use-data"; import { useAsyncCommand } from "@hooks/use-async-command"; @@ -19,7 +19,7 @@ export function AddGame() { const [executeAddGame] = useAsyncCommand(addGame, handleSuccess); const handleClick = useCallback(async () => { - const result = await dialog.open({ + const result = await openDialog({ multiple: false, title: "Select the game executable", filters: [ @@ -33,9 +33,9 @@ export function AddGame() { }, ], }); - if (!result || Array.isArray(result)) return; + if (!result) return; - await executeAddGame(result); + await executeAddGame(result.path); }, [executeAddGame]); useEffect(() => { diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index 353ef566..8e476e3f 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -59,7 +59,7 @@ export function useData() { useEffect(() => { const unlistenPromise = event.listen( - event.TauriEvent.WINDOW_FILE_DROP, + event.TauriEvent.DROP, (event) => { if (event.payload.length > 0) { executeAddGame(event.payload[0]); diff --git a/frontend/util/steam.ts b/frontend/util/steam.ts index 55eb7fb9..38a5aeaa 100644 --- a/frontend/util/steam.ts +++ b/frontend/util/steam.ts @@ -1,5 +1,5 @@ import { showAppNotification } from "@components/app-notifications"; -import { shell } from "@tauri-apps/api"; +import { open as shellOpen } from "@tauri-apps/plugin-shell"; function runSteamCommand(command: string) { return async function (appId?: string | number) { @@ -7,7 +7,7 @@ function runSteamCommand(command: string) { showAppNotification("Running Steam command...", "info"); - return shell.open(`steam://${command}/${appId}`); + return shellOpen(`steam://${command}/${appId}`); }; } diff --git a/package.json b/package.json index 48b37d57..af50c2fb 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "@mantine/hooks": "^7.4.2", "@mantine/notifications": "^7.4.2", "@tabler/icons-react": "^2.46.0", - "@tauri-apps/api": "^1.5.3", + "@tauri-apps/api": "^2.0.0-beta.13", "@tauri-apps/cli": "2.0.0-beta.20", "@types/react": "^18.2.48", "@types/react-dom": "^18.2.18", @@ -49,7 +49,9 @@ }, "packageManager": "pnpm@8.15.1+sha256.245fe901f8e7fa8782d7f17d32b6a83995e2ae03984cb5b62b8949bfdc27c7b5", "dependencies": { + "@tauri-apps/plugin-dialog": "2.0.0-beta.5", "@tauri-apps/plugin-process": "2.0.0-beta.5", + "@tauri-apps/plugin-shell": "2.0.0-beta.6", "@tauri-apps/plugin-updater": "2.0.0-beta.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14b20c67..2c8cba86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,9 +5,15 @@ settings: excludeLinksFromLockfile: false dependencies: + '@tauri-apps/plugin-dialog': + specifier: 2.0.0-beta.5 + version: 2.0.0-beta.5 '@tauri-apps/plugin-process': specifier: 2.0.0-beta.5 version: 2.0.0-beta.5 + '@tauri-apps/plugin-shell': + specifier: 2.0.0-beta.6 + version: 2.0.0-beta.6 '@tauri-apps/plugin-updater': specifier: 2.0.0-beta.5 version: 2.0.0-beta.5 @@ -29,8 +35,8 @@ devDependencies: specifier: ^2.46.0 version: 2.46.0(react@18.2.0) '@tauri-apps/api': - specifier: ^1.5.3 - version: 1.5.3 + specifier: ^2.0.0-beta.13 + version: 2.0.0-beta.13 '@tauri-apps/cli': specifier: 2.0.0-beta.20 version: 2.0.0-beta.20 @@ -762,15 +768,9 @@ packages: resolution: {integrity: sha512-Q5G8Pj5IO+Uhc6pszpu5/hGYY018JwEzzvmuqr+gKJtfIvAHA3umpwUilMRLEy89p+WCP+YsDhicMhfBCCv1qA==} dev: true - /@tauri-apps/api@1.5.3: - resolution: {integrity: sha512-zxnDjHHKjOsrIzZm6nO5Xapb/BxqUq1tc7cGkFXsFkGTsSWgCPH1D8mm0XS9weJY2OaR73I3k3S+b7eSzJDfqA==} - engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: true - /@tauri-apps/api@2.0.0-beta.13: resolution: {integrity: sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg==} engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - dev: false /@tauri-apps/cli-darwin-arm64@2.0.0-beta.20: resolution: {integrity: sha512-oCJOCib7GuYkwkBXx+ekamR8NZZU+2i3MLP+DHpDxK5gS2uhCE+CBkamJkNt6y1x6xdVnwyqZOm5RvN4SRtyIA==} @@ -879,12 +879,24 @@ packages: '@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.20 dev: true + /@tauri-apps/plugin-dialog@2.0.0-beta.5: + resolution: {integrity: sha512-jkaBCsx2v6WB6sB77fTMCeijuvT3FlzwschiHnPlD7aU6CHvQgRlpCv/FttPdTq4ih2t6MIlM4oX85hNYgfs6w==} + dependencies: + '@tauri-apps/api': 2.0.0-beta.13 + dev: false + /@tauri-apps/plugin-process@2.0.0-beta.5: resolution: {integrity: sha512-UMiBm6TtNYfxRb6GwzA4PalkZGwalHdclI/t0MVG33fNXgX1PaWONR/NZW/k7JE+WpvRAnN/Kf9ur8aEzjVVSQ==} dependencies: '@tauri-apps/api': 2.0.0-beta.13 dev: false + /@tauri-apps/plugin-shell@2.0.0-beta.6: + resolution: {integrity: sha512-g3nM9cQQGl7Iv4MvyFuco/aPTiwOI/MixcoKso3VQIg5Aqd64NqR0r+GfsB0qx52txItqzSXwmeaj1eZjO9Q6Q==} + dependencies: + '@tauri-apps/api': 2.0.0-beta.13 + dev: false + /@tauri-apps/plugin-updater@2.0.0-beta.5: resolution: {integrity: sha512-h8uNFQDtXaZPFyQcNAB5SxiSIvPbYRlM1fXf/lCcW8bAaMTanyszbHvR2vAYtVa/wIzKAOYriC/MpsJaKLjyhg==} dependencies: From 5b53825dddcffe662e2390c778e8061e33810cd6 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 14:57:57 +0200 Subject: [PATCH 005/255] npm instead of pnpm --- .github/workflows/release.yml | 20 +- backend/gen/schemas/windows-schema.json | 2333 +++++++++ backend/rust-toolchain.toml | 1 - backend/tauri.conf.json | 6 +- package-lock.json | 5916 +++++++++++++++++++++++ package.json | 4 +- pnpm-lock.yaml | 3197 ------------ publish.ps1 | 2 +- 8 files changed, 8262 insertions(+), 3217 deletions(-) create mode 100644 backend/gen/schemas/windows-schema.json create mode 100644 package-lock.json delete mode 100644 pnpm-lock.yaml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b1400ed9..dd91909f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,8 +19,6 @@ jobs: - name: setup node uses: actions/setup-node@v3 - with: - node-version: 16 - name: install Rust stable uses: dtolnay/rust-toolchain@stable @@ -30,27 +28,21 @@ jobs: with: workspaces: "./backend -> target" - - uses: pnpm/action-setup@v2 - name: Install pnpm - with: - version: 8 - run_install: false - - - name: Get pnpm store directory + - name: Get npm store directory shell: bash run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + echo "STORE_PATH=$(npm store path --silent)" >> $GITHUB_ENV - uses: actions/cache@v3 - name: Setup pnpm cache + name: Setup npm cache with: path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + key: ${{ runner.os }}-npm-store-${{ hashFiles('**/package.lock.json') }} restore-keys: | - ${{ runner.os }}-pnpm-store- + ${{ runner.os }}-npm-store- - name: Install frontend dependencies - run: pnpm install + run: npm install - name: Build id: build diff --git a/backend/gen/schemas/windows-schema.json b/backend/gen/schemas/windows-schema.json new file mode 100644 index 00000000..bc7e2c7d --- /dev/null +++ b/backend/gen/schemas/windows-schema.json @@ -0,0 +1,2333 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "CapabilityFile", + "description": "Capability formats accepted in a capability file.", + "anyOf": [ + { + "description": "A single capability.", + "allOf": [ + { + "$ref": "#/definitions/Capability" + } + ] + }, + { + "description": "A list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + }, + { + "description": "A list of capabilities.", + "type": "object", + "required": [ + "capabilities" + ], + "properties": { + "capabilities": { + "description": "The list of capabilities.", + "type": "array", + "items": { + "$ref": "#/definitions/Capability" + } + } + } + } + ], + "definitions": { + "Capability": { + "description": "a grouping and boundary mechanism developers can use to separate windows or plugins functionality from each other at runtime.\n\nIf a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create trust groups and reduce impact of vulnerabilities in certain plugins or windows. Windows can be added to a capability by exact name or glob patterns like *, admin-* or main-window.", + "type": "object", + "required": [ + "identifier", + "permissions" + ], + "properties": { + "identifier": { + "description": "Identifier of the capability.", + "type": "string" + }, + "description": { + "description": "Description of the capability.", + "default": "", + "type": "string" + }, + "remote": { + "description": "Configure remote URLs that can use the capability permissions.", + "anyOf": [ + { + "$ref": "#/definitions/CapabilityRemote" + }, + { + "type": "null" + } + ] + }, + "local": { + "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", + "default": true, + "type": "boolean" + }, + "windows": { + "description": "List of windows that uses this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.", + "type": "array", + "items": { + "type": "string" + } + }, + "webviews": { + "description": "List of webviews that uses this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.", + "type": "array", + "items": { + "type": "string" + } + }, + "permissions": { + "description": "List of permissions attached to this capability. Must include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`.", + "type": "array", + "items": { + "$ref": "#/definitions/PermissionEntry" + } + }, + "platforms": { + "description": "Target platforms this capability applies. By default all platforms are affected by this capability.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Target" + } + } + } + }, + "CapabilityRemote": { + "description": "Configuration for remote URLs that are associated with the capability.", + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n# Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "PermissionEntry": { + "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", + "anyOf": [ + { + "description": "Reference a permission or permission set by identifier.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + { + "description": "Reference a permission or permission set by identifier and extends its scope.", + "type": "object", + "required": [ + "identifier" + ], + "properties": { + "identifier": { + "description": "Identifier of the permission or permission set.", + "allOf": [ + { + "$ref": "#/definitions/Identifier" + } + ] + }, + "allow": { + "description": "Data that defines what is allowed by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + }, + "deny": { + "description": "Data that defines what is denied by the scope.", + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/definitions/Value" + } + } + } + } + ] + }, + "Identifier": { + "oneOf": [ + { + "description": "app:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "app:default" + ] + }, + { + "description": "app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-app-hide" + ] + }, + { + "description": "app:allow-app-show -> Enables the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-app-show" + ] + }, + { + "description": "app:allow-name -> Enables the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-name" + ] + }, + { + "description": "app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-tauri-version" + ] + }, + { + "description": "app:allow-version -> Enables the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:allow-version" + ] + }, + { + "description": "app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-app-hide" + ] + }, + { + "description": "app:deny-app-show -> Denies the app_show command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-app-show" + ] + }, + { + "description": "app:deny-name -> Denies the name command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-name" + ] + }, + { + "description": "app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-tauri-version" + ] + }, + { + "description": "app:deny-version -> Denies the version command without any pre-configured scope.", + "type": "string", + "enum": [ + "app:deny-version" + ] + }, + { + "description": "event:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "event:default" + ] + }, + { + "description": "event:allow-emit -> Enables the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-emit" + ] + }, + { + "description": "event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-emit-to" + ] + }, + { + "description": "event:allow-listen -> Enables the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-listen" + ] + }, + { + "description": "event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:allow-unlisten" + ] + }, + { + "description": "event:deny-emit -> Denies the emit command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-emit" + ] + }, + { + "description": "event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-emit-to" + ] + }, + { + "description": "event:deny-listen -> Denies the listen command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-listen" + ] + }, + { + "description": "event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", + "type": "string", + "enum": [ + "event:deny-unlisten" + ] + }, + { + "description": "image:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "image:default" + ] + }, + { + "description": "image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-from-bytes" + ] + }, + { + "description": "image:allow-from-path -> Enables the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-from-path" + ] + }, + { + "description": "image:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-new" + ] + }, + { + "description": "image:allow-rgba -> Enables the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-rgba" + ] + }, + { + "description": "image:allow-size -> Enables the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:allow-size" + ] + }, + { + "description": "image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-from-bytes" + ] + }, + { + "description": "image:deny-from-path -> Denies the from_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-from-path" + ] + }, + { + "description": "image:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-new" + ] + }, + { + "description": "image:deny-rgba -> Denies the rgba command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-rgba" + ] + }, + { + "description": "image:deny-size -> Denies the size command without any pre-configured scope.", + "type": "string", + "enum": [ + "image:deny-size" + ] + }, + { + "description": "log:default -> Allows the log command", + "type": "string", + "enum": [ + "log:default" + ] + }, + { + "description": "log:allow-log -> Enables the log command without any pre-configured scope.", + "type": "string", + "enum": [ + "log:allow-log" + ] + }, + { + "description": "log:deny-log -> Denies the log command without any pre-configured scope.", + "type": "string", + "enum": [ + "log:deny-log" + ] + }, + { + "description": "menu:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "menu:default" + ] + }, + { + "description": "menu:allow-append -> Enables the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-append" + ] + }, + { + "description": "menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-create-default" + ] + }, + { + "description": "menu:allow-get -> Enables the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-get" + ] + }, + { + "description": "menu:allow-insert -> Enables the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-insert" + ] + }, + { + "description": "menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-is-checked" + ] + }, + { + "description": "menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-is-enabled" + ] + }, + { + "description": "menu:allow-items -> Enables the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-items" + ] + }, + { + "description": "menu:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-new" + ] + }, + { + "description": "menu:allow-popup -> Enables the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-popup" + ] + }, + { + "description": "menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-prepend" + ] + }, + { + "description": "menu:allow-remove -> Enables the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-remove" + ] + }, + { + "description": "menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-remove-at" + ] + }, + { + "description": "menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-accelerator" + ] + }, + { + "description": "menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-app-menu" + ] + }, + { + "description": "menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-window-menu" + ] + }, + { + "description": "menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-checked" + ] + }, + { + "description": "menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-enabled" + ] + }, + { + "description": "menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-icon" + ] + }, + { + "description": "menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-set-text" + ] + }, + { + "description": "menu:allow-text -> Enables the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:allow-text" + ] + }, + { + "description": "menu:deny-append -> Denies the append command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-append" + ] + }, + { + "description": "menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-create-default" + ] + }, + { + "description": "menu:deny-get -> Denies the get command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-get" + ] + }, + { + "description": "menu:deny-insert -> Denies the insert command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-insert" + ] + }, + { + "description": "menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-is-checked" + ] + }, + { + "description": "menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-is-enabled" + ] + }, + { + "description": "menu:deny-items -> Denies the items command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-items" + ] + }, + { + "description": "menu:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-new" + ] + }, + { + "description": "menu:deny-popup -> Denies the popup command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-popup" + ] + }, + { + "description": "menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-prepend" + ] + }, + { + "description": "menu:deny-remove -> Denies the remove command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-remove" + ] + }, + { + "description": "menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-remove-at" + ] + }, + { + "description": "menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-accelerator" + ] + }, + { + "description": "menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-app-menu" + ] + }, + { + "description": "menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-help-menu-for-nsapp" + ] + }, + { + "description": "menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-window-menu" + ] + }, + { + "description": "menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-as-windows-menu-for-nsapp" + ] + }, + { + "description": "menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-checked" + ] + }, + { + "description": "menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-enabled" + ] + }, + { + "description": "menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-icon" + ] + }, + { + "description": "menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-set-text" + ] + }, + { + "description": "menu:deny-text -> Denies the text command without any pre-configured scope.", + "type": "string", + "enum": [ + "menu:deny-text" + ] + }, + { + "description": "path:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "path:default" + ] + }, + { + "description": "path:allow-basename -> Enables the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-basename" + ] + }, + { + "description": "path:allow-dirname -> Enables the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-dirname" + ] + }, + { + "description": "path:allow-extname -> Enables the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-extname" + ] + }, + { + "description": "path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-is-absolute" + ] + }, + { + "description": "path:allow-join -> Enables the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-join" + ] + }, + { + "description": "path:allow-normalize -> Enables the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-normalize" + ] + }, + { + "description": "path:allow-resolve -> Enables the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-resolve" + ] + }, + { + "description": "path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:allow-resolve-directory" + ] + }, + { + "description": "path:deny-basename -> Denies the basename command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-basename" + ] + }, + { + "description": "path:deny-dirname -> Denies the dirname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-dirname" + ] + }, + { + "description": "path:deny-extname -> Denies the extname command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-extname" + ] + }, + { + "description": "path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-is-absolute" + ] + }, + { + "description": "path:deny-join -> Denies the join command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-join" + ] + }, + { + "description": "path:deny-normalize -> Denies the normalize command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-normalize" + ] + }, + { + "description": "path:deny-resolve -> Denies the resolve command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-resolve" + ] + }, + { + "description": "path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", + "type": "string", + "enum": [ + "path:deny-resolve-directory" + ] + }, + { + "type": "string", + "enum": [ + "process:default" + ] + }, + { + "description": "process:allow-exit -> Enables the exit command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:allow-exit" + ] + }, + { + "description": "process:allow-restart -> Enables the restart command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:allow-restart" + ] + }, + { + "description": "process:deny-exit -> Denies the exit command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:deny-exit" + ] + }, + { + "description": "process:deny-restart -> Denies the restart command without any pre-configured scope.", + "type": "string", + "enum": [ + "process:deny-restart" + ] + }, + { + "description": "resources:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "resources:default" + ] + }, + { + "description": "resources:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "resources:allow-close" + ] + }, + { + "description": "resources:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "resources:deny-close" + ] + }, + { + "description": "tray:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "tray:default" + ] + }, + { + "description": "tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-get-by-id" + ] + }, + { + "description": "tray:allow-new -> Enables the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-new" + ] + }, + { + "description": "tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-remove-by-id" + ] + }, + { + "description": "tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-icon" + ] + }, + { + "description": "tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-icon-as-template" + ] + }, + { + "description": "tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-menu" + ] + }, + { + "description": "tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-show-menu-on-left-click" + ] + }, + { + "description": "tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-temp-dir-path" + ] + }, + { + "description": "tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-title" + ] + }, + { + "description": "tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-tooltip" + ] + }, + { + "description": "tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:allow-set-visible" + ] + }, + { + "description": "tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-get-by-id" + ] + }, + { + "description": "tray:deny-new -> Denies the new command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-new" + ] + }, + { + "description": "tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-remove-by-id" + ] + }, + { + "description": "tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-icon" + ] + }, + { + "description": "tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-icon-as-template" + ] + }, + { + "description": "tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-menu" + ] + }, + { + "description": "tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-show-menu-on-left-click" + ] + }, + { + "description": "tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-temp-dir-path" + ] + }, + { + "description": "tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-title" + ] + }, + { + "description": "tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-tooltip" + ] + }, + { + "description": "tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "tray:deny-set-visible" + ] + }, + { + "description": "updater:default -> Allows checking for new updates and installing them", + "type": "string", + "enum": [ + "updater:default" + ] + }, + { + "description": "updater:allow-check -> Enables the check command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-check" + ] + }, + { + "description": "updater:allow-download -> Enables the download command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-download" + ] + }, + { + "description": "updater:allow-download-and-install -> Enables the download_and_install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-download-and-install" + ] + }, + { + "description": "updater:allow-install -> Enables the install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:allow-install" + ] + }, + { + "description": "updater:deny-check -> Denies the check command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-check" + ] + }, + { + "description": "updater:deny-download -> Denies the download command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-download" + ] + }, + { + "description": "updater:deny-download-and-install -> Denies the download_and_install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-download-and-install" + ] + }, + { + "description": "updater:deny-install -> Denies the install command without any pre-configured scope.", + "type": "string", + "enum": [ + "updater:deny-install" + ] + }, + { + "description": "webview:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "webview:default" + ] + }, + { + "description": "webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-create-webview" + ] + }, + { + "description": "webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-create-webview-window" + ] + }, + { + "description": "webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-internal-toggle-devtools" + ] + }, + { + "description": "webview:allow-print -> Enables the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-print" + ] + }, + { + "description": "webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-reparent" + ] + }, + { + "description": "webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-focus" + ] + }, + { + "description": "webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-position" + ] + }, + { + "description": "webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-size" + ] + }, + { + "description": "webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-set-webview-zoom" + ] + }, + { + "description": "webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-close" + ] + }, + { + "description": "webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-position" + ] + }, + { + "description": "webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:allow-webview-size" + ] + }, + { + "description": "webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-create-webview" + ] + }, + { + "description": "webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-create-webview-window" + ] + }, + { + "description": "webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-internal-toggle-devtools" + ] + }, + { + "description": "webview:deny-print -> Denies the print command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-print" + ] + }, + { + "description": "webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-reparent" + ] + }, + { + "description": "webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-focus" + ] + }, + { + "description": "webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-position" + ] + }, + { + "description": "webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-size" + ] + }, + { + "description": "webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-set-webview-zoom" + ] + }, + { + "description": "webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-close" + ] + }, + { + "description": "webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-position" + ] + }, + { + "description": "webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "webview:deny-webview-size" + ] + }, + { + "description": "window:default -> Default permissions for the plugin.", + "type": "string", + "enum": [ + "window:default" + ] + }, + { + "description": "window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-available-monitors" + ] + }, + { + "description": "window:allow-center -> Enables the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-center" + ] + }, + { + "description": "window:allow-close -> Enables the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-close" + ] + }, + { + "description": "window:allow-create -> Enables the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-create" + ] + }, + { + "description": "window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-current-monitor" + ] + }, + { + "description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-cursor-position" + ] + }, + { + "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-destroy" + ] + }, + { + "description": "window:allow-hide -> Enables the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-hide" + ] + }, + { + "description": "window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-inner-position" + ] + }, + { + "description": "window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-inner-size" + ] + }, + { + "description": "window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-internal-toggle-maximize" + ] + }, + { + "description": "window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-closable" + ] + }, + { + "description": "window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-decorated" + ] + }, + { + "description": "window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-focused" + ] + }, + { + "description": "window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-fullscreen" + ] + }, + { + "description": "window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-maximizable" + ] + }, + { + "description": "window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-maximized" + ] + }, + { + "description": "window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-minimizable" + ] + }, + { + "description": "window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-minimized" + ] + }, + { + "description": "window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-resizable" + ] + }, + { + "description": "window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-is-visible" + ] + }, + { + "description": "window:allow-maximize -> Enables the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-maximize" + ] + }, + { + "description": "window:allow-minimize -> Enables the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-minimize" + ] + }, + { + "description": "window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-monitor-from-point" + ] + }, + { + "description": "window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-outer-position" + ] + }, + { + "description": "window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-outer-size" + ] + }, + { + "description": "window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-primary-monitor" + ] + }, + { + "description": "window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-request-user-attention" + ] + }, + { + "description": "window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-scale-factor" + ] + }, + { + "description": "window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-always-on-bottom" + ] + }, + { + "description": "window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-always-on-top" + ] + }, + { + "description": "window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-closable" + ] + }, + { + "description": "window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-content-protected" + ] + }, + { + "description": "window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-grab" + ] + }, + { + "description": "window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-icon" + ] + }, + { + "description": "window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-position" + ] + }, + { + "description": "window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-cursor-visible" + ] + }, + { + "description": "window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-decorations" + ] + }, + { + "description": "window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-effects" + ] + }, + { + "description": "window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-focus" + ] + }, + { + "description": "window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-fullscreen" + ] + }, + { + "description": "window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-icon" + ] + }, + { + "description": "window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-ignore-cursor-events" + ] + }, + { + "description": "window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-max-size" + ] + }, + { + "description": "window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-maximizable" + ] + }, + { + "description": "window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-min-size" + ] + }, + { + "description": "window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-minimizable" + ] + }, + { + "description": "window:allow-set-position -> Enables the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-position" + ] + }, + { + "description": "window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-progress-bar" + ] + }, + { + "description": "window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-resizable" + ] + }, + { + "description": "window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-shadow" + ] + }, + { + "description": "window:allow-set-size -> Enables the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-size" + ] + }, + { + "description": "window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-skip-taskbar" + ] + }, + { + "description": "window:allow-set-title -> Enables the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-title" + ] + }, + { + "description": "window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-set-visible-on-all-workspaces" + ] + }, + { + "description": "window:allow-show -> Enables the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-show" + ] + }, + { + "description": "window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-start-dragging" + ] + }, + { + "description": "window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-start-resize-dragging" + ] + }, + { + "description": "window:allow-theme -> Enables the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-theme" + ] + }, + { + "description": "window:allow-title -> Enables the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-title" + ] + }, + { + "description": "window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-toggle-maximize" + ] + }, + { + "description": "window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-unmaximize" + ] + }, + { + "description": "window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:allow-unminimize" + ] + }, + { + "description": "window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-available-monitors" + ] + }, + { + "description": "window:deny-center -> Denies the center command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-center" + ] + }, + { + "description": "window:deny-close -> Denies the close command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-close" + ] + }, + { + "description": "window:deny-create -> Denies the create command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-create" + ] + }, + { + "description": "window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-current-monitor" + ] + }, + { + "description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-cursor-position" + ] + }, + { + "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-destroy" + ] + }, + { + "description": "window:deny-hide -> Denies the hide command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-hide" + ] + }, + { + "description": "window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-inner-position" + ] + }, + { + "description": "window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-inner-size" + ] + }, + { + "description": "window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-internal-toggle-maximize" + ] + }, + { + "description": "window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-closable" + ] + }, + { + "description": "window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-decorated" + ] + }, + { + "description": "window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-focused" + ] + }, + { + "description": "window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-fullscreen" + ] + }, + { + "description": "window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-maximizable" + ] + }, + { + "description": "window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-maximized" + ] + }, + { + "description": "window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-minimizable" + ] + }, + { + "description": "window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-minimized" + ] + }, + { + "description": "window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-resizable" + ] + }, + { + "description": "window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-is-visible" + ] + }, + { + "description": "window:deny-maximize -> Denies the maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-maximize" + ] + }, + { + "description": "window:deny-minimize -> Denies the minimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-minimize" + ] + }, + { + "description": "window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-monitor-from-point" + ] + }, + { + "description": "window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-outer-position" + ] + }, + { + "description": "window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-outer-size" + ] + }, + { + "description": "window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-primary-monitor" + ] + }, + { + "description": "window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-request-user-attention" + ] + }, + { + "description": "window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-scale-factor" + ] + }, + { + "description": "window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-always-on-bottom" + ] + }, + { + "description": "window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-always-on-top" + ] + }, + { + "description": "window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-closable" + ] + }, + { + "description": "window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-content-protected" + ] + }, + { + "description": "window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-grab" + ] + }, + { + "description": "window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-icon" + ] + }, + { + "description": "window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-position" + ] + }, + { + "description": "window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-cursor-visible" + ] + }, + { + "description": "window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-decorations" + ] + }, + { + "description": "window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-effects" + ] + }, + { + "description": "window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-focus" + ] + }, + { + "description": "window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-fullscreen" + ] + }, + { + "description": "window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-icon" + ] + }, + { + "description": "window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-ignore-cursor-events" + ] + }, + { + "description": "window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-max-size" + ] + }, + { + "description": "window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-maximizable" + ] + }, + { + "description": "window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-min-size" + ] + }, + { + "description": "window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-minimizable" + ] + }, + { + "description": "window:deny-set-position -> Denies the set_position command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-position" + ] + }, + { + "description": "window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-progress-bar" + ] + }, + { + "description": "window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-resizable" + ] + }, + { + "description": "window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-shadow" + ] + }, + { + "description": "window:deny-set-size -> Denies the set_size command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-size" + ] + }, + { + "description": "window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-skip-taskbar" + ] + }, + { + "description": "window:deny-set-title -> Denies the set_title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-title" + ] + }, + { + "description": "window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-set-visible-on-all-workspaces" + ] + }, + { + "description": "window:deny-show -> Denies the show command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-show" + ] + }, + { + "description": "window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-start-dragging" + ] + }, + { + "description": "window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-start-resize-dragging" + ] + }, + { + "description": "window:deny-theme -> Denies the theme command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-theme" + ] + }, + { + "description": "window:deny-title -> Denies the title command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-title" + ] + }, + { + "description": "window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-toggle-maximize" + ] + }, + { + "description": "window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-unmaximize" + ] + }, + { + "description": "window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", + "type": "string", + "enum": [ + "window:deny-unminimize" + ] + }, + { + "type": "string", + "enum": [ + "window-state:default" + ] + }, + { + "description": "window-state:allow-filename -> Enables the filename command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-filename" + ] + }, + { + "description": "window-state:allow-restore-state -> Enables the restore_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-restore-state" + ] + }, + { + "description": "window-state:allow-save-window-state -> Enables the save_window_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:allow-save-window-state" + ] + }, + { + "description": "window-state:deny-filename -> Denies the filename command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-filename" + ] + }, + { + "description": "window-state:deny-restore-state -> Denies the restore_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-restore-state" + ] + }, + { + "description": "window-state:deny-save-window-state -> Denies the save_window_state command without any pre-configured scope.", + "type": "string", + "enum": [ + "window-state:deny-save-window-state" + ] + } + ] + }, + "Value": { + "description": "All supported ACL values.", + "anyOf": [ + { + "description": "Represents a null JSON value.", + "type": "null" + }, + { + "description": "Represents a [`bool`].", + "type": "boolean" + }, + { + "description": "Represents a valid ACL [`Number`].", + "allOf": [ + { + "$ref": "#/definitions/Number" + } + ] + }, + { + "description": "Represents a [`String`].", + "type": "string" + }, + { + "description": "Represents a list of other [`Value`]s.", + "type": "array", + "items": { + "$ref": "#/definitions/Value" + } + }, + { + "description": "Represents a map of [`String`] keys to [`Value`]s.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/Value" + } + } + ] + }, + "Number": { + "description": "A valid ACL number.", + "anyOf": [ + { + "description": "Represents an [`i64`].", + "type": "integer", + "format": "int64" + }, + { + "description": "Represents a [`f64`].", + "type": "number", + "format": "double" + } + ] + }, + "Target": { + "description": "Platform target.", + "oneOf": [ + { + "description": "MacOS.", + "type": "string", + "enum": [ + "macOS" + ] + }, + { + "description": "Windows.", + "type": "string", + "enum": [ + "windows" + ] + }, + { + "description": "Linux.", + "type": "string", + "enum": [ + "linux" + ] + }, + { + "description": "Android.", + "type": "string", + "enum": [ + "android" + ] + }, + { + "description": "iOS.", + "type": "string", + "enum": [ + "iOS" + ] + } + ] + } + } +} \ No newline at end of file diff --git a/backend/rust-toolchain.toml b/backend/rust-toolchain.toml index ef35afa7..aa2092bd 100644 --- a/backend/rust-toolchain.toml +++ b/backend/rust-toolchain.toml @@ -1,3 +1,2 @@ [toolchain] -channel = "nightly-2023-10-10" components = [ "rustfmt", "clippy" ] diff --git a/backend/tauri.conf.json b/backend/tauri.conf.json index b446ae04..8faa664b 100644 --- a/backend/tauri.conf.json +++ b/backend/tauri.conf.json @@ -1,8 +1,8 @@ { "$schema": "../node_modules/@tauri-apps/cli/schema.json", "build": { - "beforeDevCommand": "pnpm frontend:dev", - "beforeBuildCommand": "pnpm frontend:build", + "beforeDevCommand": "npm run frontend:dev", + "beforeBuildCommand": "npm run frontend:build", "frontendDist": "../dist", "devUrl": "http://localhost:1420" }, @@ -50,4 +50,4 @@ "csp": null } } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..0b704e8f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5916 @@ +{ + "name": "rai-mods", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rai-mods", + "version": "0.0.0", + "dependencies": { + "@tauri-apps/plugin-dialog": "2.0.0-beta.5", + "@tauri-apps/plugin-process": "2.0.0-beta.5", + "@tauri-apps/plugin-shell": "2.0.0-beta.6", + "@tauri-apps/plugin-updater": "2.0.0-beta.5" + }, + "devDependencies": { + "@mantine/code-highlight": "^7.4.2", + "@mantine/core": "^7.4.2", + "@mantine/hooks": "^7.4.2", + "@mantine/notifications": "^7.4.2", + "@tabler/icons-react": "^2.46.0", + "@tauri-apps/api": "^2.0.0-beta.13", + "@tauri-apps/cli": "2.0.0-beta.20", + "@types/react": "^18.2.48", + "@types/react-dom": "^18.2.18", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "@vitejs/plugin-react": "^4.2.1", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "jotai": "^2.6.2", + "postcss": "^8.4.33", + "postcss-preset-mantine": "^1.12.3", + "postcss-simple-vars": "^7.0.1", + "prettier": "^3.2.4", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-virtuoso": "^4.6.2", + "typescript": "^5.3.3", + "vite": "^4.5.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", + "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", + "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helpers": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/template": "^7.24.7", + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", + "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", + "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.24.7", + "@babel/helper-validator-option": "^7.24.7", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz", + "integrity": "sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", + "integrity": "sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", + "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", + "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", + "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", + "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", + "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", + "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", + "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", + "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.24.7", + "@babel/helper-environment-visitor": "^7.24.7", + "@babel/helper-function-name": "^7.24.7", + "@babel/helper-hoist-variables": "^7.24.7", + "@babel/helper-split-export-declaration": "^7.24.7", + "@babel/parser": "^7.24.7", + "@babel/types": "^7.24.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", + "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", + "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", + "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", + "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.26.17", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.17.tgz", + "integrity": "sha512-ESD+jYWwqwVzaIgIhExrArdsCL1rOAzryG/Sjlu8yaD3Mtqi3uVyhbE2V7jD58Mo52qbzKz2eUY/Xgh5I86FCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.0", + "@floating-ui/utils": "^0.2.0", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", + "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", + "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mantine/code-highlight": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.10.2.tgz", + "integrity": "sha512-fzWUSr4Vj2s8y0k0l1FrtcBmYrOkP13lKzPbyYN76TSiACN8A5BimDQCGdd2V9CJgI4KTIPtD+F3Di3kBUPuSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "highlight.js": "^11.9.0" + }, + "peerDependencies": { + "@mantine/core": "7.10.2", + "@mantine/hooks": "7.10.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/core": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.10.2.tgz", + "integrity": "sha512-sPqJY2A+zHAhi7/mJKL2EH92jKc6JDACJY17gXS+FcbIQgiaY1rxA/tdcybpq8FbswSgUYZO6CRL6XWEhatw5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.9", + "clsx": "^2.1.1", + "react-number-format": "^5.3.1", + "react-remove-scroll": "^2.5.7", + "react-textarea-autosize": "8.5.3", + "type-fest": "^4.12.0" + }, + "peerDependencies": { + "@mantine/hooks": "7.10.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/hooks": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.10.2.tgz", + "integrity": "sha512-3m4flbR2yv3Bl21pHl5BKOOnqrInp/gVD72rozLeu/jzIZqQy8yFRTY2bUWCebPwNem//OD1rCORsBXNXvq31g==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@mantine/notifications": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.10.2.tgz", + "integrity": "sha512-wX6qNBvpV7iqlH98AkGuS9plq02yYhTG7bkzP3Y7jd7o2ognLPoN83YeIaxzuZ/qVnWrwZrOHOx87Ox2e9Qyxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mantine/store": "7.10.2", + "react-transition-group": "4.4.5" + }, + "peerDependencies": { + "@mantine/core": "7.10.2", + "@mantine/hooks": "7.10.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/store": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.10.2.tgz", + "integrity": "sha512-izT4ivE2Ka2NBTjy5Ck31F3sSybCBLXJhX/ESDCasVR9MKD2Ci2Y6nbm0UtBdPf4+PrDPZtaPwqQzL92uZLtCQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "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": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tabler/icons": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-2.47.0.tgz", + "integrity": "sha512-4w5evLh+7FUUiA1GucvGj2ReX2TvOjEr4ejXdwL/bsjoSkof6r1gQmzqI+VHrE2CpJpB3al7bCTulOkFa/RcyA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-2.47.0.tgz", + "integrity": "sha512-iqly2FvCF/qUbgmvS8E40rVeYY7laltc5GUjRxQj59DuX0x/6CpKHTXt86YlI2whg4czvd/c8Ce8YR08uEku0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tabler/icons": "2.47.0", + "prop-types": "^15.7.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@tauri-apps/api": { + "version": "2.0.0-beta.13", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-beta.13.tgz", + "integrity": "sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">= 18", + "npm": ">= 6.6.0", + "yarn": ">= 1.19.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-beta.20.tgz", + "integrity": "sha512-707q9uIc2oNrYHd2dtMvxTrpZXVpart5EIktnRymNOpphkLlB6WUBjHD+ga45WqTU6cNGKbYvkKqTNfshNul9Q==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.0.0-beta.20", + "@tauri-apps/cli-darwin-x64": "2.0.0-beta.20", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-beta.20", + "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-beta.20", + "@tauri-apps/cli-linux-arm64-musl": "2.0.0-beta.20", + "@tauri-apps/cli-linux-x64-gnu": "2.0.0-beta.20", + "@tauri-apps/cli-linux-x64-musl": "2.0.0-beta.20", + "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-beta.20", + "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-beta.20", + "@tauri-apps/cli-win32-x64-msvc": "2.0.0-beta.20" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-beta.20.tgz", + "integrity": "sha512-oCJOCib7GuYkwkBXx+ekamR8NZZU+2i3MLP+DHpDxK5gS2uhCE+CBkamJkNt6y1x6xdVnwyqZOm5RvN4SRtyIA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-beta.20.tgz", + "integrity": "sha512-lC5QSnRExedYN4Ds6ZlSvC2PxP8qfIYBJQ5ktf+PJI5gQALdNeVtd6YnTG1ODCEklfLq9WKkGwp7JdALTU5wDA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-beta.20.tgz", + "integrity": "sha512-nZCeBMHHye5DLOJV5k2w658hnCS+LYaOZ8y/G9l3ei+g0L/HBjlSy6r4simsAT5TG8+l3oCZzLBngfTMdDS/YA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-gnu": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-beta.20.tgz", + "integrity": "sha512-B79ISVLPVBgwnCchVqwTKU+vxnFYqxKomcR4rmsvxfs0NVtT5QuNzE1k4NUQnw3966yjwhYR3mnHsSJQSB4Eyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-arm64-musl": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-beta.20.tgz", + "integrity": "sha512-ojIkv/1uZHhcrgfIN8xgn4BBeo/Xg+bnV0wer6lD78zyxkUMWeEZ+u3mae1ejCJNhhaZOxNaUQ67MvDOiGyr5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-gnu": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-beta.20.tgz", + "integrity": "sha512-xBy1FNbHKlc7T6pOmFQQPECxJaI5A9QWX7Kb9N64cNVusoOGlvc3xHYkXMS4PTr7xXOT0yiE1Ww2OwDRJ3lYsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-linux-x64-musl": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-beta.20.tgz", + "integrity": "sha512-+O6zq5jmtUxA1FUAAwF2ywPysy4NRo2Y6G+ESZDkY9XosRwdt5OUjqAsYktZA3AxDMZVei8r9buwTqUwi9ny/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-arm64-msvc": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-beta.20.tgz", + "integrity": "sha512-RswgMbWyOQcv53CHvIuiuhAh4kKDqaGyZfWD4VlxqX/XhkoF5gsNgr0MxzrY7pmoL+89oVI+fiGVJz4nOQE5vA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-ia32-msvc": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-beta.20.tgz", + "integrity": "sha512-5lgWmDVXhX3SBGbiv5SduM1yajiRnUEJClWhSdRrEEJeXdsxpCsBEhxYnUnDCEzPKxLLn5fdBv3VrVctJ03csQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-win32-x64-msvc": { + "version": "2.0.0-beta.20", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-beta.20.tgz", + "integrity": "sha512-SuSiiVQTQPSzWlsxQp/NMzWbzDS9TdVDOw7CCfgiG5wnT2GsxzrcIAVN6i7ILsVFLxrjr0bIgPldSJcdcH84Yw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-dialog": { + "version": "2.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-beta.5.tgz", + "integrity": "sha512-jkaBCsx2v6WB6sB77fTMCeijuvT3FlzwschiHnPlD7aU6CHvQgRlpCv/FttPdTq4ih2t6MIlM4oX85hNYgfs6w==", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "2.0.0-beta.13" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.0.0-beta.5.tgz", + "integrity": "sha512-UMiBm6TtNYfxRb6GwzA4PalkZGwalHdclI/t0MVG33fNXgX1PaWONR/NZW/k7JE+WpvRAnN/Kf9ur8aEzjVVSQ==", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "2.0.0-beta.13" + } + }, + "node_modules/@tauri-apps/plugin-shell": { + "version": "2.0.0-beta.6", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-beta.6.tgz", + "integrity": "sha512-g3nM9cQQGl7Iv4MvyFuco/aPTiwOI/MixcoKso3VQIg5Aqd64NqR0r+GfsB0qx52txItqzSXwmeaj1eZjO9Q6Q==", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "2.0.0-beta.13" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-beta.5.tgz", + "integrity": "sha512-h8uNFQDtXaZPFyQcNAB5SxiSIvPbYRlM1fXf/lCcW8bAaMTanyszbHvR2vAYtVa/wIzKAOYriC/MpsJaKLjyhg==", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "2.0.0-beta.13" + } + }, + "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": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "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": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.3", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", + "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", + "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.toreversed": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", + "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.16" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001636", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", + "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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": { + "color-name": "1.1.3" + } + }, + "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/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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true, + "license": "MIT" + }, + "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": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.810", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.810.tgz", + "integrity": "sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.34.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.3.tgz", + "integrity": "sha512-aoW4MV891jkUulwDApQbPYTVZmeuSyFrudpbTAQuj5Fv8VL+o6df2xIGpw8B0hPjAaih1/Fb0om9grCdyFYemA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.toreversed": "^1.1.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.hasown": "^1.1.4", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.7.tgz", + "integrity": "sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-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": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jotai": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.8.3.tgz", + "integrity": "sha512-pR4plVvdbzB6zyt7VLLHPMAkcRSKhRIvZKd+qkifQLa3CEziEo1uwZjePj4acTmQrboiISBlYSdCz3gWcr1Nkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=17.0.0", + "react": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", + "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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-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": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "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": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-mixins": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz", + "integrity": "sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "postcss-js": "^4.0.0", + "postcss-simple-vars": "^7.0.0", + "sugarss": "^4.0.1" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-preset-mantine": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.15.0.tgz", + "integrity": "sha512-OKPs6uoORSXlU/GFH1ZtFaslecHBPwuoSikdL5W3WKJm4ZPAQM0mw9x9m3toa/Mo1JhoBmYMM28i+zEdav5Edg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-mixins": "^9.0.4", + "postcss-nested": "^6.0.1" + }, + "peerDependencies": { + "postcss": ">=8.0.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-simple-vars": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", + "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-number-format": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", + "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", + "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-virtuoso": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.7.11.tgz", + "integrity": "sha512-Kdn9qEtQI2ulEuBMzW2BTkDsfijB05QUd6lpZ1K36oyA3k65Cz4lG4EKrh2pCfUafX4C2uMSZOwzMOhbrMOTFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16 || >=17 || >= 18", + "react-dom": ">=16 || >=17 || >= 18" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sugarss": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "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": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.20.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.20.1.tgz", + "integrity": "sha512-R6wDsVsoS9xYOpy8vgeBlqpdOyzJ12HNfQhC/aAKWM3YoCV9TtunJzh/QpkMgeDhkoynDcw5f1y+qF9yc/HHyg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.2.tgz", + "integrity": "sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", + "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", + "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.5", + "has-tostringtag": "^1.0.0", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index af50c2fb..777cd79c 100644 --- a/package.json +++ b/package.json @@ -47,11 +47,13 @@ "singleAttributePerLine": true, "quoteProps": "as-needed" }, - "packageManager": "pnpm@8.15.1+sha256.245fe901f8e7fa8782d7f17d32b6a83995e2ae03984cb5b62b8949bfdc27c7b5", "dependencies": { "@tauri-apps/plugin-dialog": "2.0.0-beta.5", "@tauri-apps/plugin-process": "2.0.0-beta.5", "@tauri-apps/plugin-shell": "2.0.0-beta.6", "@tauri-apps/plugin-updater": "2.0.0-beta.5" + }, + "engines": { + "node": ">=20.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml deleted file mode 100644 index 2c8cba86..00000000 --- a/pnpm-lock.yaml +++ /dev/null @@ -1,3197 +0,0 @@ -lockfileVersion: '6.0' - -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - -dependencies: - '@tauri-apps/plugin-dialog': - specifier: 2.0.0-beta.5 - version: 2.0.0-beta.5 - '@tauri-apps/plugin-process': - specifier: 2.0.0-beta.5 - version: 2.0.0-beta.5 - '@tauri-apps/plugin-shell': - specifier: 2.0.0-beta.6 - version: 2.0.0-beta.6 - '@tauri-apps/plugin-updater': - specifier: 2.0.0-beta.5 - version: 2.0.0-beta.5 - -devDependencies: - '@mantine/code-highlight': - specifier: ^7.4.2 - version: 7.4.2(@mantine/core@7.4.2)(@mantine/hooks@7.4.2)(react-dom@18.2.0)(react@18.2.0) - '@mantine/core': - specifier: ^7.4.2 - version: 7.4.2(@mantine/hooks@7.4.2)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': - specifier: ^7.4.2 - version: 7.4.2(react@18.2.0) - '@mantine/notifications': - specifier: ^7.4.2 - version: 7.4.2(@mantine/core@7.4.2)(@mantine/hooks@7.4.2)(react-dom@18.2.0)(react@18.2.0) - '@tabler/icons-react': - specifier: ^2.46.0 - version: 2.46.0(react@18.2.0) - '@tauri-apps/api': - specifier: ^2.0.0-beta.13 - version: 2.0.0-beta.13 - '@tauri-apps/cli': - specifier: 2.0.0-beta.20 - version: 2.0.0-beta.20 - '@types/react': - specifier: ^18.2.48 - version: 18.2.48 - '@types/react-dom': - specifier: ^18.2.18 - version: 18.2.18 - '@typescript-eslint/eslint-plugin': - specifier: ^6.19.0 - version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: ^6.19.0 - version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@vitejs/plugin-react': - specifier: ^4.2.1 - version: 4.2.1(vite@4.5.2) - eslint: - specifier: ^8.56.0 - version: 8.56.0 - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.56.0) - eslint-plugin-react: - specifier: ^7.33.2 - version: 7.33.2(eslint@8.56.0) - eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.56.0) - eslint-plugin-react-refresh: - specifier: ^0.4.5 - version: 0.4.5(eslint@8.56.0) - jotai: - specifier: ^2.6.2 - version: 2.6.2(@types/react@18.2.48)(react@18.2.0) - postcss: - specifier: ^8.4.33 - version: 8.4.33 - postcss-preset-mantine: - specifier: ^1.12.3 - version: 1.12.3(postcss@8.4.33) - postcss-simple-vars: - specifier: ^7.0.1 - version: 7.0.1(postcss@8.4.33) - prettier: - specifier: ^3.2.4 - version: 3.2.4 - react: - specifier: ^18.2.0 - version: 18.2.0 - react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) - react-virtuoso: - specifier: ^4.6.2 - version: 4.6.2(react-dom@18.2.0)(react@18.2.0) - typescript: - specifier: ^5.3.3 - version: 5.3.3 - vite: - specifier: ^4.5.2 - version: 4.5.2 - -packages: - - /@aashutoshrathi/word-wrap@1.2.6: - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - dev: true - - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 - dev: true - - /@babel/code-frame@7.23.5: - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - dev: true - - /@babel/compat-data@7.23.5: - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/core@7.23.7: - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} - engines: {node: '>=6.9.0'} - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.8 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/generator@7.23.6: - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.22 - jsesc: 2.5.2 - dev: true - - /@babel/helper-compilation-targets@7.23.6: - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - dev: true - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-imports@7.22.15: - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - dev: true - - /@babel/helper-plugin-utils@7.22.5: - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-split-export-declaration@7.22.6: - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-identifier@7.22.20: - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-validator-option@7.23.5: - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers@7.23.8: - resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight@7.23.4: - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - dev: true - - /@babel/parser@7.23.6: - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7): - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - dev: true - - /@babel/runtime@7.23.8: - resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: true - - /@babel/traverse@7.23.7: - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types@7.23.6: - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: true - - /@esbuild/android-arm64@0.18.20: - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm@0.18.20: - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/android-x64@0.18.20: - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-arm64@0.18.20: - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/darwin-x64@0.18.20: - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.18.20: - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/freebsd-x64@0.18.20: - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm64@0.18.20: - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-arm@0.18.20: - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ia32@0.18.20: - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64@0.18.20: - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-mips64el@0.18.20: - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-ppc64@0.18.20: - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-riscv64@0.18.20: - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-s390x@0.18.20: - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-x64@0.18.20: - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@esbuild/netbsd-x64@0.18.20: - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/openbsd-x64@0.18.20: - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /@esbuild/sunos-x64@0.18.20: - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-arm64@0.18.20: - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-ia32@0.18.20: - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@esbuild/win32-x64@0.18.20: - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.56.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.10.0: - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true - - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.0 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - - /@eslint/js@8.56.0: - resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@floating-ui/core@1.5.3: - resolution: {integrity: sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==} - dependencies: - '@floating-ui/utils': 0.2.1 - dev: true - - /@floating-ui/dom@1.5.4: - resolution: {integrity: sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==} - dependencies: - '@floating-ui/core': 1.5.3 - '@floating-ui/utils': 0.2.1 - dev: true - - /@floating-ui/react-dom@2.0.6(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/dom': 1.5.4 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@floating-ui/react@0.24.8(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-AuYeDoaR8jtUlUXtZ1IJ/6jtBkGnSpJXbGNzokBL87VDJ8opMq1Bgrc0szhK482ReQY6KZsMoZCVSb4xwalkBA==} - peerDependencies: - react: '>=16.8.0' - react-dom: '>=16.8.0' - dependencies: - '@floating-ui/react-dom': 2.0.6(react-dom@18.2.0)(react@18.2.0) - aria-hidden: 1.2.3 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - tabbable: 6.2.0 - dev: true - - /@floating-ui/utils@0.2.1: - resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==} - dev: true - - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true - - /@humanwhocodes/object-schema@2.0.2: - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - dev: true - - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.22 - dev: true - - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} - engines: {node: '>=6.0.0'} - dev: true - - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - dev: true - - /@jridgewell/trace-mapping@0.3.22: - resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - dev: true - - /@mantine/code-highlight@7.4.2(@mantine/core@7.4.2)(@mantine/hooks@7.4.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-CVo3gMOWW+hjDQg2S63BZNmXHGRFYtugtWDIwC8fv7U6P2acs1OuxuXUrGkHkm8s3jJNTWB4kF2vd+7x5Z8GpQ==} - peerDependencies: - '@mantine/core': 7.4.2 - '@mantine/hooks': 7.4.2 - react: ^18.2.0 - react-dom: ^18.2.0 - dependencies: - '@mantine/core': 7.4.2(@mantine/hooks@7.4.2)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': 7.4.2(react@18.2.0) - clsx: 2.0.0 - highlight.js: 11.9.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /@mantine/core@7.4.2(@mantine/hooks@7.4.2)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-kXmq7NjSd1AsOIzqPwQhA7SeZS9hrbARRqhRwr4LLR3NKps9hLmVto441DnpHH/D27eL9gGLSl4GRIdogjX6mg==} - peerDependencies: - '@mantine/hooks': 7.4.2 - react: ^18.2.0 - react-dom: ^18.2.0 - dependencies: - '@floating-ui/react': 0.24.8(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': 7.4.2(react@18.2.0) - clsx: 2.0.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-number-format: 5.3.1(react-dom@18.2.0)(react@18.2.0) - react-remove-scroll: 2.5.7(@types/react@18.2.48)(react@18.2.0) - react-textarea-autosize: 8.5.3(@types/react@18.2.48)(react@18.2.0) - type-fest: 3.13.1 - transitivePeerDependencies: - - '@types/react' - dev: true - - /@mantine/hooks@7.4.2(react@18.2.0): - resolution: {integrity: sha512-tNtn/SNOtSmjLQmIk4S5nsTJjV84Oj0AUYRrAN78HHw3bfWp6bdWbgYPtPEH9e6iFJfdxiX0hrLfWqROalAsbQ==} - peerDependencies: - react: ^18.2.0 - dependencies: - react: 18.2.0 - dev: true - - /@mantine/notifications@7.4.2(@mantine/core@7.4.2)(@mantine/hooks@7.4.2)(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-lOIv9x+ifb2HyW3SE2UYEWzeQoKVptBR9HCB1m+KUzZiJ5pnBrujWluBzhqYghShr/wykc4Rf4L0hx39egCP9g==} - peerDependencies: - '@mantine/core': 7.4.2 - '@mantine/hooks': 7.4.2 - react: ^18.2.0 - react-dom: ^18.2.0 - dependencies: - '@mantine/core': 7.4.2(@mantine/hooks@7.4.2)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0) - '@mantine/hooks': 7.4.2(react@18.2.0) - '@mantine/store': 7.4.2(react@18.2.0) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) - dev: true - - /@mantine/store@7.4.2(react@18.2.0): - resolution: {integrity: sha512-XGGAKu3oUMmnpw8USe4La+T+oSVqsIhYKDjKPxRs5iQ9GKPtxwabAqBXEkPHA1y/txrsEaU5eJVu0ysyBbU4hQ==} - peerDependencies: - react: ^18.2.0 - dependencies: - react: 18.2.0 - dev: true - - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - dev: true - - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true - - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.16.0 - dev: true - - /@tabler/icons-react@2.46.0(react@18.2.0): - resolution: {integrity: sha512-X8MRxuslIOFqMjAo+GvUZDpjlOwNYNJTuOsHXf/NBvVI6ygqUf0FUNsDLLA5fQ6k6KtRwxMlgGB+eR8ZG1UP0g==} - peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 - dependencies: - '@tabler/icons': 2.46.0 - prop-types: 15.8.1 - react: 18.2.0 - dev: true - - /@tabler/icons@2.46.0: - resolution: {integrity: sha512-Q5G8Pj5IO+Uhc6pszpu5/hGYY018JwEzzvmuqr+gKJtfIvAHA3umpwUilMRLEy89p+WCP+YsDhicMhfBCCv1qA==} - dev: true - - /@tauri-apps/api@2.0.0-beta.13: - resolution: {integrity: sha512-Np1opKANzRMF3lgJ9gDquBCB9SxlE2lRmNpVx1+L6RyzAmigkuh0ZulT5jMnDA3JLsuSDU135r/s4t/Pmx4atg==} - engines: {node: '>= 18', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - - /@tauri-apps/cli-darwin-arm64@2.0.0-beta.20: - resolution: {integrity: sha512-oCJOCib7GuYkwkBXx+ekamR8NZZU+2i3MLP+DHpDxK5gS2uhCE+CBkamJkNt6y1x6xdVnwyqZOm5RvN4SRtyIA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-darwin-x64@2.0.0-beta.20: - resolution: {integrity: sha512-lC5QSnRExedYN4Ds6ZlSvC2PxP8qfIYBJQ5ktf+PJI5gQALdNeVtd6YnTG1ODCEklfLq9WKkGwp7JdALTU5wDA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm-gnueabihf@2.0.0-beta.20: - resolution: {integrity: sha512-nZCeBMHHye5DLOJV5k2w658hnCS+LYaOZ8y/G9l3ei+g0L/HBjlSy6r4simsAT5TG8+l3oCZzLBngfTMdDS/YA==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm64-gnu@2.0.0-beta.20: - resolution: {integrity: sha512-B79ISVLPVBgwnCchVqwTKU+vxnFYqxKomcR4rmsvxfs0NVtT5QuNzE1k4NUQnw3966yjwhYR3mnHsSJQSB4Eyw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-arm64-musl@2.0.0-beta.20: - resolution: {integrity: sha512-ojIkv/1uZHhcrgfIN8xgn4BBeo/Xg+bnV0wer6lD78zyxkUMWeEZ+u3mae1ejCJNhhaZOxNaUQ67MvDOiGyr5Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-x64-gnu@2.0.0-beta.20: - resolution: {integrity: sha512-xBy1FNbHKlc7T6pOmFQQPECxJaI5A9QWX7Kb9N64cNVusoOGlvc3xHYkXMS4PTr7xXOT0yiE1Ww2OwDRJ3lYsg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-linux-x64-musl@2.0.0-beta.20: - resolution: {integrity: sha512-+O6zq5jmtUxA1FUAAwF2ywPysy4NRo2Y6G+ESZDkY9XosRwdt5OUjqAsYktZA3AxDMZVei8r9buwTqUwi9ny/g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-arm64-msvc@2.0.0-beta.20: - resolution: {integrity: sha512-RswgMbWyOQcv53CHvIuiuhAh4kKDqaGyZfWD4VlxqX/XhkoF5gsNgr0MxzrY7pmoL+89oVI+fiGVJz4nOQE5vA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-ia32-msvc@2.0.0-beta.20: - resolution: {integrity: sha512-5lgWmDVXhX3SBGbiv5SduM1yajiRnUEJClWhSdRrEEJeXdsxpCsBEhxYnUnDCEzPKxLLn5fdBv3VrVctJ03csQ==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli-win32-x64-msvc@2.0.0-beta.20: - resolution: {integrity: sha512-SuSiiVQTQPSzWlsxQp/NMzWbzDS9TdVDOw7CCfgiG5wnT2GsxzrcIAVN6i7ILsVFLxrjr0bIgPldSJcdcH84Yw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /@tauri-apps/cli@2.0.0-beta.20: - resolution: {integrity: sha512-707q9uIc2oNrYHd2dtMvxTrpZXVpart5EIktnRymNOpphkLlB6WUBjHD+ga45WqTU6cNGKbYvkKqTNfshNul9Q==} - engines: {node: '>= 10'} - hasBin: true - optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 2.0.0-beta.20 - '@tauri-apps/cli-darwin-x64': 2.0.0-beta.20 - '@tauri-apps/cli-linux-arm-gnueabihf': 2.0.0-beta.20 - '@tauri-apps/cli-linux-arm64-gnu': 2.0.0-beta.20 - '@tauri-apps/cli-linux-arm64-musl': 2.0.0-beta.20 - '@tauri-apps/cli-linux-x64-gnu': 2.0.0-beta.20 - '@tauri-apps/cli-linux-x64-musl': 2.0.0-beta.20 - '@tauri-apps/cli-win32-arm64-msvc': 2.0.0-beta.20 - '@tauri-apps/cli-win32-ia32-msvc': 2.0.0-beta.20 - '@tauri-apps/cli-win32-x64-msvc': 2.0.0-beta.20 - dev: true - - /@tauri-apps/plugin-dialog@2.0.0-beta.5: - resolution: {integrity: sha512-jkaBCsx2v6WB6sB77fTMCeijuvT3FlzwschiHnPlD7aU6CHvQgRlpCv/FttPdTq4ih2t6MIlM4oX85hNYgfs6w==} - dependencies: - '@tauri-apps/api': 2.0.0-beta.13 - dev: false - - /@tauri-apps/plugin-process@2.0.0-beta.5: - resolution: {integrity: sha512-UMiBm6TtNYfxRb6GwzA4PalkZGwalHdclI/t0MVG33fNXgX1PaWONR/NZW/k7JE+WpvRAnN/Kf9ur8aEzjVVSQ==} - dependencies: - '@tauri-apps/api': 2.0.0-beta.13 - dev: false - - /@tauri-apps/plugin-shell@2.0.0-beta.6: - resolution: {integrity: sha512-g3nM9cQQGl7Iv4MvyFuco/aPTiwOI/MixcoKso3VQIg5Aqd64NqR0r+GfsB0qx52txItqzSXwmeaj1eZjO9Q6Q==} - dependencies: - '@tauri-apps/api': 2.0.0-beta.13 - dev: false - - /@tauri-apps/plugin-updater@2.0.0-beta.5: - resolution: {integrity: sha512-h8uNFQDtXaZPFyQcNAB5SxiSIvPbYRlM1fXf/lCcW8bAaMTanyszbHvR2vAYtVa/wIzKAOYriC/MpsJaKLjyhg==} - dependencies: - '@tauri-apps/api': 2.0.0-beta.13 - dev: false - - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.8 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - dev: true - - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - dev: true - - /@types/babel__traverse@7.20.5: - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} - dependencies: - '@babel/types': 7.23.6 - dev: true - - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/prop-types@15.7.11: - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} - dev: true - - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} - dependencies: - '@types/react': 18.2.48 - dev: true - - /@types/react@18.2.48: - resolution: {integrity: sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==} - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.3 - dev: true - - /@types/scheduler@0.16.8: - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} - dev: true - - /@types/semver@7.5.6: - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: true - - /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4 - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.3.0 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4 - eslint: 8.56.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@6.19.0: - resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 - dev: true - - /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@6.19.0: - resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - - /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): - resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.19.0 - '@typescript-eslint/types': 6.19.0 - '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) - eslint: 8.56.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@6.19.0: - resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.19.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /@vitejs/plugin-react@4.2.1(vite@4.5.2): - resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^4.2.0 || ^5.0.0 - dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.0 - vite: 4.5.2 - transitivePeerDependencies: - - supports-color - dev: true - - /acorn-jsx@5.3.2(acorn@8.11.3): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - dev: true - - /acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - dev: true - - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true - - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - dependencies: - color-convert: 1.9.3 - dev: true - - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true - - /aria-hidden@1.2.3: - resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} - engines: {node: '>=10'} - dependencies: - tslib: 2.6.2 - dev: true - - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 - dev: true - - /array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-string: 1.0.7 - dev: true - - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true - - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - dev: true - - /array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - dev: true - - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - dev: true - - /asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - dependencies: - has-symbols: 1.0.3 - dev: true - - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - dev: true - - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - dev: true - - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: true - - /browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - dependencies: - caniuse-lite: 1.0.30001579 - electron-to-chromium: 1.4.640 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - dev: true - - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.1 - dev: true - - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - - /camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - dev: true - - /caniuse-lite@1.0.30001579: - resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} - dev: true - - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - dev: true - - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /clsx@2.0.0: - resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} - engines: {node: '>=6'} - dev: true - - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - dependencies: - color-name: 1.1.3 - dev: true - - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true - - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true - - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true - - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - dev: true - - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true - - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true - - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.1 - gopd: 1.0.1 - has-property-descriptors: 1.0.0 - dev: true - - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - dev: true - - /detect-node-es@1.1.0: - resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} - dev: true - - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: true - - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dom-helpers@5.2.1: - resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} - dependencies: - '@babel/runtime': 7.23.8 - csstype: 3.1.3 - dev: true - - /electron-to-chromium@1.4.640: - resolution: {integrity: sha512-z/6oZ/Muqk4BaE7P69bXhUhpJbUM9ZJeka43ZwxsDshKtePns4mhBlh8bU5+yrnOnz3fhG82XLzGUXazOmsWnA==} - dev: true - - /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.4 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.13.0 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 - dev: true - - /es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - es-set-tostringtag: 2.0.1 - function-bind: 1.1.2 - get-intrinsic: 1.2.1 - globalthis: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - dev: true - - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - has-tostringtag: 1.0.0 - dev: true - - /es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - dependencies: - has: 1.0.4 - dev: true - - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - - /esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - dev: true - - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /eslint-config-prettier@9.1.0(eslint@8.56.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-plugin-react-hooks@4.6.0(eslint@8.56.0): - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-plugin-react-refresh@0.4.5(eslint@8.56.0): - resolution: {integrity: sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==} - peerDependencies: - eslint: '>=7' - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-plugin-react@7.33.2(eslint@8.56.0): - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.7 - array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 - doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.56.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.10 - dev: true - - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - dev: true - - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /eslint@8.56.0: - resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.56.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - dev: true - - /esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - dev: true - - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - dev: true - - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true - - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true - - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.5 - dev: true - - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true - - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true - - /fastq@1.16.0: - resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} - dependencies: - reusify: 1.0.4 - dev: true - - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: true - - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.2.9 - keyv: 4.5.4 - rimraf: 3.0.2 - dev: true - - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} - dev: true - - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true - - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true - - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true - - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - dependencies: - function-bind: 1.1.2 - has: 1.0.4 - has-proto: 1.0.1 - has-symbols: 1.0.3 - dev: true - - /get-nonce@1.0.1: - resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} - engines: {node: '>=6'} - dev: true - - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - dev: true - - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - dev: true - - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - dev: true - - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true - - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - dev: true - - /globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - dev: true - - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.0 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - dependencies: - get-intrinsic: 1.2.1 - dev: true - - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true - - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true - - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true - - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - dependencies: - get-intrinsic: 1.2.1 - dev: true - - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - dev: true - - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true - - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - dev: true - - /highlight.js@11.9.0: - resolution: {integrity: sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==} - engines: {node: '>=12.0.0'} - dev: true - - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} - engines: {node: '>= 4'} - dev: true - - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - dev: true - - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true - - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - dev: true - - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true - - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - side-channel: 1.0.4 - dev: true - - /invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 - dev: true - - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 - dev: true - - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - dependencies: - has: 1.0.4 - dev: true - - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true - - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - dev: true - - /is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - dev: true - - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true - - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - dev: true - - /is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - dev: true - - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - dependencies: - has-tostringtag: 1.0.0 - dev: true - - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - dependencies: - which-typed-array: 1.1.11 - dev: true - - /is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - dev: true - - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.2 - dev: true - - /is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - dev: true - - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true - - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true - - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - dependencies: - define-properties: 1.2.1 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 - dev: true - - /jotai@2.6.2(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-kl4KguU1Fr+tFiLi3A3h9qPEzhvLTTDA10DO3QZAz6k7BEaQJ+qvSBwolzonnfNI4QzEovyQfUqVgnRxfnnQVQ==} - engines: {node: '>=12.20.0'} - peerDependencies: - '@types/react': '>=17.0.0' - react: '>=17.0.0' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true - - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - dependencies: - argparse: 2.0.1 - dev: true - - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true - - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true - - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.7 - array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 - dev: true - - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - dev: true - - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - dev: true - - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - dependencies: - js-tokens: 4.0.0 - dev: true - - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: true - - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true - - /micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: true - - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - dev: true - - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - - /node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - dev: true - - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true - - /object-inspect@1.13.0: - resolution: {integrity: sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==} - dev: true - - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true - - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - dependencies: - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - dev: true - - /optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - dev: true - - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: true - - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - dev: true - - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - dev: true - - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true - - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true - - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true - - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true - - /picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true - - /postcss-js@4.0.1(postcss@8.4.33): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - dependencies: - camelcase-css: 2.0.1 - postcss: 8.4.33 - dev: true - - /postcss-mixins@9.0.4(postcss@8.4.33): - resolution: {integrity: sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==} - engines: {node: '>=14.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - fast-glob: 3.3.2 - postcss: 8.4.33 - postcss-js: 4.0.1(postcss@8.4.33) - postcss-simple-vars: 7.0.1(postcss@8.4.33) - sugarss: 4.0.1(postcss@8.4.33) - dev: true - - /postcss-nested@6.0.1(postcss@8.4.33): - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - dependencies: - postcss: 8.4.33 - postcss-selector-parser: 6.0.15 - dev: true - - /postcss-preset-mantine@1.12.3(postcss@8.4.33): - resolution: {integrity: sha512-cCwowf20mIyRXnV1cSVoMGfhYgy8ZqFJWsEJthdMZ3n7LijjucE9l/HO47gv5gAtr9nY1MkaEkpWS7ulhSTbSg==} - peerDependencies: - postcss: '>=8.0.0' - dependencies: - postcss: 8.4.33 - postcss-mixins: 9.0.4(postcss@8.4.33) - postcss-nested: 6.0.1(postcss@8.4.33) - dev: true - - /postcss-selector-parser@6.0.15: - resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} - engines: {node: '>=4'} - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - dev: true - - /postcss-simple-vars@7.0.1(postcss@8.4.33): - resolution: {integrity: sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==} - engines: {node: '>=14.0'} - peerDependencies: - postcss: ^8.2.1 - dependencies: - postcss: 8.4.33 - dev: true - - /postcss@8.4.33: - resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - - /prettier@3.2.4: - resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} - engines: {node: '>=14'} - hasBin: true - dev: true - - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true - - /react-dom@18.2.0(react@18.2.0): - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - dependencies: - loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 - dev: true - - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true - - /react-number-format@5.3.1(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-qpYcQLauIeEhCZUZY9jXZnnroOtdy3jYaS1zQ3M1Sr6r/KMOBEIGNIb7eKT19g2N1wbYgFgvDzs19hw5TrB8XQ==} - peerDependencies: - react: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - dependencies: - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - dev: true - - /react-remove-scroll-bar@2.3.4(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) - tslib: 2.6.2 - dev: true - - /react-remove-scroll@2.5.7(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-FnrTWO4L7/Bhhf3CYBNArEG/yROV0tKmTv7/3h9QCFvH6sndeFf1wPqOcbFVu5VAulS5dV1wGT3GZZ/1GawqiA==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - react-remove-scroll-bar: 2.3.4(@types/react@18.2.48)(react@18.2.0) - react-style-singleton: 2.2.1(@types/react@18.2.48)(react@18.2.0) - tslib: 2.6.2 - use-callback-ref: 1.3.1(@types/react@18.2.48)(react@18.2.0) - use-sidecar: 1.1.2(@types/react@18.2.48)(react@18.2.0) - dev: true - - /react-style-singleton@2.2.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - get-nonce: 1.0.1 - invariant: 2.2.4 - react: 18.2.0 - tslib: 2.6.2 - dev: true - - /react-textarea-autosize@8.5.3(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==} - engines: {node: '>=10'} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - '@babel/runtime': 7.23.8 - react: 18.2.0 - use-composed-ref: 1.3.0(react@18.2.0) - use-latest: 1.2.1(@types/react@18.2.48)(react@18.2.0) - transitivePeerDependencies: - - '@types/react' - dev: true - - /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} - peerDependencies: - react: '>=16.6.0' - react-dom: '>=16.6.0' - dependencies: - '@babel/runtime': 7.23.8 - dom-helpers: 5.2.1 - loose-envify: 1.4.0 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /react-virtuoso@4.6.2(react-dom@18.2.0)(react@18.2.0): - resolution: {integrity: sha512-vvlqvzPif+MvBrJ09+hJJrVY0xJK9yran+A+/1iwY78k0YCVKsyoNPqoLxOxzYPggspNBNXqUXEcvckN29OxyQ==} - engines: {node: '>=10'} - peerDependencies: - react: '>=16 || >=17 || >= 18' - react-dom: '>=16 || >=17 || >= 18' - dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - dev: true - - /react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - dependencies: - loose-envify: 1.4.0 - dev: true - - /reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - dev: true - - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true - - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - set-function-name: 2.0.1 - dev: true - - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - dev: true - - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true - - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - - /rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true - - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-regex: 1.1.4 - dev: true - - /scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - dependencies: - loose-envify: 1.4.0 - dev: true - - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true - - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: true - - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.1 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 - dev: true - - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - dev: true - - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true - - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.13.0 - dev: true - - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true - - /source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - dev: true - - /string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 - dev: true - - /string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.1 - es-abstract: 1.22.2 - dev: true - - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - dev: true - - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true - - /sugarss@4.0.1(postcss@8.4.33): - resolution: {integrity: sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.3.3 - dependencies: - postcss: 8.4.33 - dev: true - - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - dependencies: - has-flag: 3.0.0 - dev: true - - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - dev: true - - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true - - /tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - dev: true - - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true - - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true - - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: true - - /ts-api-utils@1.0.3(typescript@5.3.3): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - dependencies: - typescript: 5.3.3 - dev: true - - /tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - dev: true - - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true - - /type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - dev: true - - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - dev: true - - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - is-typed-array: 1.1.12 - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - - /update-browserslist-db@1.0.13(browserslist@4.22.2): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 - dev: true - - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - dev: true - - /use-callback-ref@1.3.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-Lg4Vx1XZQauB42Hw3kK7JM6yjVjgFmFC5/Ab797s79aARomD2nEErc4mCgM8EZrARLmmbWpi5DGCadmK50DcAQ==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - tslib: 2.6.2 - dev: true - - /use-composed-ref@1.3.0(react@18.2.0): - resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: true - - /use-isomorphic-layout-effect@1.1.2(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - dev: true - - /use-latest@1.2.1(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==} - peerDependencies: - '@types/react': '*' - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - react: 18.2.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@18.2.48)(react@18.2.0) - dev: true - - /use-sidecar@1.1.2(@types/react@18.2.48)(react@18.2.0): - resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} - engines: {node: '>=10'} - peerDependencies: - '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - '@types/react': - optional: true - dependencies: - '@types/react': 18.2.48 - detect-node-es: 1.1.0 - react: 18.2.0 - tslib: 2.6.2 - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true - - /vite@4.5.2: - resolution: {integrity: sha512-tBCZBNSBbHQkaGyhGCDUGqeo2ph8Fstyp6FMSvTtsXeZSPpSMGlviAOav2hxVTqFcx8Hj/twtWKsMJXNY0xI8w==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.18.20 - postcss: 8.4.33 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - - /which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - dependencies: - function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 - is-async-function: 2.0.0 - is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 - is-generator-function: 1.0.10 - is-regex: 1.1.4 - is-weakref: 1.0.2 - isarray: 2.0.5 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.11 - dev: true - - /which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 - dev: true - - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 - dev: true - - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true - - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true - - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true - - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true diff --git a/publish.ps1 b/publish.ps1 index a0ff9e69..0afde18b 100644 --- a/publish.ps1 +++ b/publish.ps1 @@ -18,7 +18,7 @@ function CheckEnvVar { CheckEnvVar -Var "TAURI_PRIVATE_KEY" CheckEnvVar -Var "TAURI_KEY_PASSWORD" -pnpm build +npm build $msiFolder = "./backend/target/release/bundle/msi" From 8e473250a727c6d097833fcaf9fe3c600997f99f Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 15:19:57 +0200 Subject: [PATCH 006/255] using stable version of rust --- backend/Cargo.lock | 793 +++++++++++++++++----------------- backend/Cargo.toml | 2 +- backend/src/main.rs | 44 +- backend/src/steam/id_lists.rs | 16 +- 4 files changed, 399 insertions(+), 456 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 10930491..de88cb4e 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aes" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" dependencies = [ "cfg-if", "cipher", @@ -30,20 +30,20 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.7" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", "once_cell", "version_check", ] [[package]] name = "ahash" -version = "0.8.7" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "once_cell", @@ -53,9 +53,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] @@ -77,9 +77,9 @@ dependencies = [ [[package]] name = "allocator-api2" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] name = "android-tzdata" @@ -116,9 +116,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.79" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" [[package]] name = "arbitrary" @@ -137,13 +137,13 @@ checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" [[package]] name = "async-trait" -version = "0.1.77" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -177,15 +177,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.1.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.69" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", "cc", @@ -198,9 +198,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64" @@ -282,18 +282,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" dependencies = [ "once_cell", - "proc-macro-crate 2.0.0", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", "syn_derive", ] [[package]] name = "brotli" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516074a47ef4bce09577a3b379392300159ce5b1ba2e501ff1c819950066100f" +checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -312,15 +312,15 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.14.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byte-unit" -version = "5.1.2" +version = "5.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d405b41420a161b4e1dd5a52e3349f41b4dae9a39be02aff1d67fe53256430ac" +checksum = "33ac19bdf0b2665407c39d82dbc937e951e7e2001609f0fb32edd0af45a2d63e" dependencies = [ "rust_decimal", "serde", @@ -329,9 +329,9 @@ dependencies = [ [[package]] name = "bytecheck" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6372023ac861f6e6dc89c8344a8f398fb42aaba2b5dbc649ca0c0e9dbcb627" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" dependencies = [ "bytecheck_derive", "ptr_meta", @@ -340,9 +340,9 @@ dependencies = [ [[package]] name = "bytecheck_derive" -version = "0.6.11" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7ec4c6f261935ad534c0c22dbef2201b45918860eb1c574b972bd213a76af61" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ "proc-macro2", "quote", @@ -351,9 +351,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.14.0" +version = "1.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" +checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e" [[package]] name = "byteorder" @@ -363,9 +363,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.5.0" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" dependencies = [ "serde", ] @@ -455,17 +455,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a969e13a7589e9e3e4207e153bae624ade2b5622fb4684a4923b23ec3d57719" dependencies = [ "serde", - "toml 0.8.8", + "toml 0.8.2", ] [[package]] name = "cc" -version = "1.0.83" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "c891175c3fb232128f48de6590095e59198bbeb8620c310be349bfc3afd12c7b" dependencies = [ "jobserver", "libc", + "once_cell", ] [[package]] @@ -487,9 +488,9 @@ dependencies = [ [[package]] name = "cfg-expr" -version = "0.15.6" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a" +checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02" dependencies = [ "smallvec", "target-lexicon", @@ -515,9 +516,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.31" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", @@ -525,7 +526,7 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] @@ -570,9 +571,9 @@ dependencies = [ [[package]] name = "combine" -version = "4.6.6" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ "bytes", "memchr", @@ -632,9 +633,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -650,11 +651,10 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.10" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "cfg-if", "crossbeam-utils", ] @@ -698,24 +698,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "ctor" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d2b3721e861707777e3195b0158f950ae6dc4a27e4d02ff9f67e3eb3de199e" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "darling" -version = "0.20.3" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0209d94da627ab5605dcccf08bb18afa5009cfbef48d8a8b7d7bdbc79be25c5e" +checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1" dependencies = [ "darling_core", "darling_macro", @@ -723,27 +723,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.20.3" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "177e3443818124b357d8e76f53be906d60937f0d3a90773a664fa63fa253e621" +checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "darling_macro" -version = "0.20.3" +version = "0.20.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5" +checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178" dependencies = [ "darling_core", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -773,20 +773,20 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "derive_more" -version = "0.99.17" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ "convert_case", "proc-macro2", "quote", "rustc_version", - "syn 1.0.109", + "syn 2.0.68", ] [[package]] @@ -891,7 +891,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -914,7 +914,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -934,9 +934,9 @@ checksum = "dcbb2bf8e87535c23f7a8a321e364ce21462d0ff10cb6407820e8e96dfff6653" [[package]] name = "dtoa-short" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbaceec3c6e4211c79e7b1800fb9680527106beb2f9c51904a3210c03a448c74" +checksum = "cd1511a7b6a56299bd043a9c167a6d2bfb37bf84a6dfceaba651168adfb43c87" dependencies = [ "dtoa", ] @@ -955,15 +955,16 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] name = "embed-resource" -version = "2.4.0" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54cc3e827ee1c3812239a9a41dede7b4d7d5d5464faa32d71bd7cba28ce2cb2" +checksum = "c6985554d0688b687c5cb73898a34fbe3ad6c24c58c238a4d91d5e840670ee9d" dependencies = [ "cc", + "memchr", "rustc_version", - "toml 0.8.8", + "toml 0.8.2", "vswhom", - "winreg 0.51.0", + "winreg 0.52.0", ] [[package]] @@ -974,23 +975,23 @@ checksum = "4ef6b89e5b37196644d8796de5268852ff179b44e96276cf4290264843743bb7" [[package]] name = "encoding_rs" -version = "0.8.33" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" dependencies = [ "cfg-if", ] [[package]] name = "enum_dispatch" -version = "0.3.12" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f33313078bb8d4d05a2733a94ac4c2d8a0df9a2b84424ebf4f33bfc224a890e" +checksum = "aa18ce2bc66555b3218614519ac839ddb759a7d6720732f979ef8d13be147ecd" dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -1011,9 +1012,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "errno" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ "libc", "windows-sys 0.52.0", @@ -1033,15 +1034,15 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "2.0.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" +checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "fdeflate" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "209098dd6dfc4445aa6111f0e98653ac323eaa4dfd212c9ca3931bf9955c31bd" +checksum = "4f9bfee30e4dedf0ab8b422f03af778d9612b63f502710fc500a334ebe2de645" dependencies = [ "simd-adler32", ] @@ -1079,9 +1080,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.28" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" dependencies = [ "crc32fast", "miniz_oxide", @@ -1120,7 +1121,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -1216,7 +1217,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -1393,9 +1394,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", "libc", @@ -1404,9 +1405,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "gio" @@ -1470,11 +1471,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb0228f477c0900c880fd78c8759b95c7636dbd7842707f49e132378aa2acdc" dependencies = [ "heck 0.4.1", - "proc-macro-crate 2.0.0", + "proc-macro-crate 2.0.2", "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -1496,7 +1497,7 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "glob" version = "0.3.1" -source = "git+https://github.com/rust-lang/glob#7b29204bb108a83300b0ce877072fcb62b83316a" +source = "git+https://github.com/rust-lang/glob#49ee1e92bd6e8c5854c0b339634f9b4b733aba4f" [[package]] name = "gobject-sys" @@ -1569,7 +1570,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -1584,7 +1585,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.1.0", + "indexmap 2.2.6", "slab", "tokio", "tokio-util", @@ -1597,16 +1598,16 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.7", + "ahash 0.7.8", ] [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "ahash 0.8.7", + "ahash 0.8.11", "allocator-api2", ] @@ -1616,7 +1617,7 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" dependencies = [ - "hashbrown 0.14.3", + "hashbrown 0.14.5", ] [[package]] @@ -1633,9 +1634,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hex" @@ -1674,7 +1675,7 @@ checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ "bytes", "fnv", - "itoa 1.0.10", + "itoa 1.0.11", ] [[package]] @@ -1702,9 +1703,9 @@ dependencies = [ [[package]] name = "httparse" -version = "1.8.0" +version = "1.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" [[package]] name = "hyper" @@ -1719,7 +1720,7 @@ dependencies = [ "http", "http-body", "httparse", - "itoa 1.0.10", + "itoa 1.0.11", "pin-project-lite", "smallvec", "tokio", @@ -1782,9 +1783,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.59" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -1842,12 +1843,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.1.0" +version = "2.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "serde", ] @@ -1871,9 +1872,9 @@ dependencies = [ [[package]] name = "instant" -version = "0.1.12" +version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" dependencies = [ "cfg-if", ] @@ -1911,9 +1912,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.10" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "javascriptcore-rs" @@ -1962,32 +1963,31 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.27" +version = "0.1.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c37f63953c4c63420ed5fd3d6d398c719489b9f872b9fa683262f8edd363c7d" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" dependencies = [ "libc", ] [[package]] name = "js-sys" -version = "0.3.66" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] [[package]] name = "json-patch" -version = "1.2.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55ff1e1486799e3f64129f8ccad108b38290df9cd7015cd31bed17239f0789d6" +checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" dependencies = [ "serde", "serde_json", "thiserror", - "treediff", ] [[package]] @@ -2059,14 +2059,14 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "lazy_static" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libappindicator" @@ -2094,9 +2094,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.151" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" @@ -2110,13 +2110,12 @@ dependencies = [ [[package]] name = "libredox" -version = "0.0.1" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.5.0", "libc", - "redox_syscall 0.4.1", ] [[package]] @@ -2132,24 +2131,21 @@ dependencies = [ [[package]] name = "line-wrap" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f30344350a2a51da54c1d53be93fade8a237e545dbcc4bdbe635413f2117cab9" -dependencies = [ - "safemem", -] +checksum = "dd1bc4d24ad230d21fb898d1116b1801d7adfc449d42026475862ab48b11e70e" [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" [[package]] name = "lock_api" -version = "0.4.11" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" dependencies = [ "autocfg", "scopeguard", @@ -2231,9 +2227,9 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "memoffset" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" dependencies = [ "autocfg", ] @@ -2252,9 +2248,9 @@ checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" [[package]] name = "miniz_oxide" -version = "0.7.1" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", "simd-adler32", @@ -2262,9 +2258,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -2292,11 +2288,10 @@ dependencies = [ [[package]] name = "native-tls" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" dependencies = [ - "lazy_static", "libc", "log", "openssl", @@ -2339,9 +2334,9 @@ dependencies = [ [[package]] name = "new_debug_unreachable" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "no-std-compat" @@ -2365,11 +2360,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-traits" -version = "0.2.17" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", ] @@ -2407,9 +2408,9 @@ dependencies = [ [[package]] name = "num_threads" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" dependencies = [ "libc", ] @@ -2544,9 +2545,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "576dfe1fc8f9df304abb159d767a29d0476f7750fbf8aa7ad07816004a207434" dependencies = [ "memchr", ] @@ -2559,9 +2560,9 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "open" -version = "5.0.1" +version = "5.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90878fb664448b54c4e592455ad02831e23a3f7e157374a8b95654731aac7349" +checksum = "b5ca541f22b1c46d4bb9801014f234758ab4297e7870b904b6a8415b980a7388" dependencies = [ "is-wsl", "libc", @@ -2570,9 +2571,9 @@ dependencies = [ [[package]] name = "openssl" -version = "0.10.62" +version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cde4d2d9200ad5909f8dac647e29482e07c3a35de8a13fce7c9c7747ad9f671" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ "bitflags 2.5.0", "cfg-if", @@ -2591,7 +2592,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -2602,9 +2603,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.98" +version = "0.9.102" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1665caf8ab2dc9aef43d1c0023bd904633a6a05cb30b0ad59bec2ae986e57a7" +checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" dependencies = [ "cc", "libc", @@ -2651,9 +2652,9 @@ dependencies = [ [[package]] name = "parking_lot" -version = "0.12.1" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" dependencies = [ "lock_api", "parking_lot_core", @@ -2661,15 +2662,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.9" +version = "0.9.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", + "redox_syscall 0.5.2", "smallvec", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] @@ -2685,9 +2686,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" [[package]] name = "pathdiff" @@ -2734,9 +2735,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.5" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5" +checksum = "560131c633294438da9f7c4b08189194b20946c8274c6b9e38881a7874dc8ee8" dependencies = [ "memchr", "thiserror", @@ -2745,9 +2746,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.5" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2" +checksum = "26293c9193fbca7b1a3bf9b79dc1e388e927e6cacaa78b4a3ab705a1d3d41459" dependencies = [ "pest", "pest_generator", @@ -2755,22 +2756,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.5" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227" +checksum = "3ec22af7d3fb470a85dd2ca96b7c577a1eb4ef6f1683a9fe9a8c16e136c04687" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "pest_meta" -version = "2.7.5" +version = "2.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6" +checksum = "d7a240022f37c361ec1878d646fc5b7d7c4d28d5946e1a80ad5a7a4f4ca0bdcd" dependencies = [ "once_cell", "pest", @@ -2881,7 +2882,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -2928,14 +2929,14 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "pin-project-lite" -version = "0.2.13" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -2945,9 +2946,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "plain" @@ -2957,12 +2958,12 @@ checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" [[package]] name = "plist" -version = "1.6.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5699cc8a63d1aa2b1ee8e12b9ad70ac790d65788cd36101fa37f87ea46c4cef" +checksum = "d9d34169e64b3c7a80c8621a48adaf44e0cf62c78a9b25dd9dd35f1881a17cf9" dependencies = [ - "base64 0.21.5", - "indexmap 2.1.0", + "base64 0.21.7", + "indexmap 2.2.6", "line-wrap", "quick-xml", "serde", @@ -2971,9 +2972,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.10" +version = "0.17.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -3012,11 +3013,12 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8" +checksum = "b00f26d3400549137f92511a46ac1cd8ce37cb5598a96d382381458b992a5d24" dependencies = [ - "toml_edit 0.20.7", + "toml_datetime", + "toml_edit 0.20.2", ] [[package]] @@ -3051,9 +3053,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.74" +version = "1.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2de98502f212cfcea8d0bb305bd0f49d7ebdd75b64ba0a68f937d888f4e0d6db" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" dependencies = [ "unicode-ident", ] @@ -3136,9 +3138,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -3154,7 +3156,7 @@ name = "rai-pal" version = "0.12.0" dependencies = [ "async-trait", - "base64 0.21.5", + "base64 0.21.7", "byteorder", "chrono", "directories", @@ -3251,7 +3253,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", ] [[package]] @@ -3304,25 +3306,25 @@ dependencies = [ [[package]] name = "redox_users" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", "libredox", "thiserror", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", - "regex-syntax 0.8.2", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", ] [[package]] @@ -3336,13 +3338,13 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.2", + "regex-syntax 0.8.4", ] [[package]] @@ -3353,15 +3355,15 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" [[package]] name = "regex-syntax" -version = "0.8.2" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rend" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2571463863a6bd50c32f94402933f03457a3fbaf697a707c5be741e459f08fd" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" dependencies = [ "bytecheck", ] @@ -3424,7 +3426,7 @@ checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" dependencies = [ "cc", "cfg-if", - "getrandom 0.2.11", + "getrandom 0.2.15", "libc", "spin", "untrusted", @@ -3433,9 +3435,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.43" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "527a97cdfef66f65998b5f3b637c26f5a5ec09cc52a3f9932313ac645f4190f5" +checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" dependencies = [ "bitvec", "bytecheck", @@ -3451,9 +3453,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.43" +version = "0.7.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5c462a1328c8e67e4d6dbad1eb0355dd43e8ab432c6e227a43657f16ade5033" +checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" dependencies = [ "proc-macro2", "quote", @@ -3476,9 +3478,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.33.1" +version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06676aec5ccb8fc1da723cc8c0f9a46549f21ebb8753d3915c6c41db1e7f1dc4" +checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" dependencies = [ "arrayvec", "borsh", @@ -3492,9 +3494,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" @@ -3513,9 +3515,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" dependencies = [ "bitflags 2.5.0", "errno", @@ -3567,21 +3569,15 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.14" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" [[package]] name = "ryu" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" - -[[package]] -name = "safemem" -version = "0.3.3" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef703b7cb59335eae2eb93ceb664c0eb7ea6bf567079d843e09420219668e072" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -3624,7 +3620,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -3656,7 +3652,7 @@ checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -3667,11 +3663,11 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" [[package]] name = "security-framework" -version = "2.9.2" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +checksum = "c627723fd09706bacdb5cf41499e95098555af3c3c29d014dc3c458ef6be11c0" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.5.0", "core-foundation", "core-foundation-sys", "libc", @@ -3680,9 +3676,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.1" +version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +checksum = "317936bbbd05227752583946b9e66d7ce3b489f84e11a94a510b4437fef407d7" dependencies = [ "core-foundation-sys", "libc", @@ -3710,31 +3706,31 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.194" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b114498256798c94a0689e1a15fec6005dee8ac1f41de56404b67afc2a4b773" +checksum = "7253ab4de971e72fb7be983802300c30b5a7f0c2e56fab8abfc6a214307c0094" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.194" +version = "1.0.203" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3385e45322e8f9931410f01b3031ec534c3947d0e94c18049af4d9f9907d4e0" +checksum = "500cbc0ebeb6f46627f50f3f5811ccf6bf00643be300b4c3eabc0ef55dc5b5ba" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -3745,36 +3741,36 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "serde_json" -version = "1.0.110" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fbd975230bada99c8bb618e0c365c2eefa219158d5c6c29610fd09ff1833257" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ - "itoa 1.0.10", + "itoa 1.0.11", "ryu", "serde", ] [[package]] name = "serde_repr" -version = "0.1.18" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "serde_spanned" -version = "0.6.5" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1" +checksum = "79e674e01f999af37c49f70a6ede167a8a60b2503e56c5599532a65baa5969a0" dependencies = [ "serde", ] @@ -3786,23 +3782,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.10", + "itoa 1.0.11", "ryu", "serde", ] [[package]] name = "serde_with" -version = "3.4.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23" +checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20" dependencies = [ - "base64 0.21.5", + "base64 0.22.1", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.1.0", + "indexmap 2.2.6", "serde", + "serde_derive", "serde_json", "serde_with_macros", "time", @@ -3810,14 +3807,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.4.0" +version = "3.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93634eb5f75a2323b16de4748022ac4297f9e76b6dced2be287a099f41b5e788" +checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -3918,12 +3915,12 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" -version = "0.5.5" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" dependencies = [ "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -4036,15 +4033,15 @@ dependencies = [ [[package]] name = "strsim" -version = "0.10.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "subtle" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" +checksum = "0d0208408ba0c3df17ed26eb06992cb1a1268d41b2c0e12e65203fbe3972cee5" [[package]] name = "swift-rs" @@ -4052,7 +4049,7 @@ version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" dependencies = [ - "base64 0.21.5", + "base64 0.21.7", "serde", "serde_json", ] @@ -4070,9 +4067,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.46" +version = "2.0.68" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89456b690ff72fddcecf231caedbe615c59480c93358a93dfae7fc29e3ebbf0e" +checksum = "901fa70d88b9d6c98022e23b4136f9f3e54e4662c3bc1bd1d84a42a9a0f0c1e9" dependencies = [ "proc-macro2", "quote", @@ -4088,7 +4085,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -4120,14 +4117,14 @@ dependencies = [ [[package]] name = "system-deps" -version = "6.2.0" +version = "6.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331" +checksum = "a3e535eb8dded36d55ec13eddacd30dec501792ff23a0b1682c38601b8cf2349" dependencies = [ "cfg-expr", - "heck 0.4.1", + "heck 0.5.0", "pkg-config", - "toml 0.8.8", + "toml 0.8.2", "version-compare", ] @@ -4189,9 +4186,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tar" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909" dependencies = [ "filetime", "libc", @@ -4200,9 +4197,9 @@ dependencies = [ [[package]] name = "target-lexicon" -version = "0.12.12" +version = "0.12.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a" +checksum = "e1fc403891a21bcfb7c37834ba66a547a8f402146eba7265b5a6d88059c9ff2f" [[package]] name = "tauri" @@ -4217,7 +4214,7 @@ dependencies = [ "dunce", "embed_plist", "futures-util", - "getrandom 0.2.11", + "getrandom 0.2.15", "glob 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "gtk", "heck 0.5.0", @@ -4271,7 +4268,7 @@ dependencies = [ "serde_json", "tauri-utils", "tauri-winres", - "toml 0.8.8", + "toml 0.8.2", "walkdir", ] @@ -4293,7 +4290,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.46", + "syn 2.0.68", "tauri-utils", "thiserror", "time", @@ -4311,7 +4308,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", "tauri-codegen", "tauri-utils", ] @@ -4329,7 +4326,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "toml 0.8.8", + "toml 0.8.2", "walkdir", ] @@ -4479,7 +4476,7 @@ dependencies = [ "serde_with", "swift-rs", "thiserror", - "toml 0.8.8", + "toml 0.8.2", "url", "urlpattern", "walkdir", @@ -4497,13 +4494,12 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.9.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.4.1", "rustix", "windows-sys 0.52.0", ] @@ -4542,14 +4538,14 @@ checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", @@ -4557,13 +4553,14 @@ dependencies = [ [[package]] name = "time" -version = "0.3.31" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", - "itoa 1.0.10", + "itoa 1.0.11", "libc", + "num-conv", "num_threads", "powerfmt", "serde", @@ -4579,10 +4576,11 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.16" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ + "num-conv", "time-core", ] @@ -4603,9 +4601,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.35.1" +version = "1.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" +checksum = "ba4f4a02a7a80d6f274636f0aa95c7e383b912d41fe721a31f29e29698585a4a" dependencies = [ "backtrace", "bytes", @@ -4614,9 +4612,21 @@ dependencies = [ "num_cpus", "pin-project-lite", "socket2", + "tokio-macros", "windows-sys 0.48.0", ] +[[package]] +name = "tokio-macros" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f5ae998a069d4b5aba8ee9dad856af7d520c3699e6159b185c2acd48155d39a" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "tokio-native-tls" version = "0.3.1" @@ -4640,16 +4650,15 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.10" +version = "0.7.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" +checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" dependencies = [ "bytes", "futures-core", "futures-sink", "pin-project-lite", "tokio", - "tracing", ] [[package]] @@ -4666,21 +4675,21 @@ dependencies = [ [[package]] name = "toml" -version = "0.8.8" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35" +checksum = "185d8ab0dfbb35cf1399a6344d8484209c088f75f8f68230da55d48d95d43e3d" dependencies = [ "serde", "serde_spanned", "toml_datetime", - "toml_edit 0.21.0", + "toml_edit 0.20.2", ] [[package]] name = "toml_datetime" -version = "0.6.5" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" dependencies = [ "serde", ] @@ -4691,7 +4700,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -4700,22 +4709,11 @@ dependencies = [ [[package]] name = "toml_edit" -version = "0.20.7" +version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.1.0", - "toml_datetime", - "winnow", -] - -[[package]] -name = "toml_edit" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" -dependencies = [ - "indexmap 2.1.0", + "indexmap 2.2.6", "serde", "serde_spanned", "toml_datetime", @@ -4768,7 +4766,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -4830,15 +4828,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "treediff" -version = "4.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52984d277bdf2a751072b5df30ec0377febdb02f7696d64c2d7d54630bac4303" -dependencies = [ - "serde_json", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -4900,9 +4889,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.14" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" @@ -4912,9 +4901,9 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] @@ -4933,9 +4922,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "url" -version = "2.5.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" dependencies = [ "form_urlencoded", "idna", @@ -4970,11 +4959,11 @@ checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" [[package]] name = "uuid" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" +checksum = "3ea73390fe27785838dcbf75b91b1d84799e28f1ce71e6f372a5dc2200c80de5" dependencies = [ - "getrandom 0.2.11", + "getrandom 0.2.15", ] [[package]] @@ -4997,9 +4986,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" [[package]] name = "version-compare" -version = "0.1.1" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" +checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" [[package]] name = "version_check" @@ -5029,9 +5018,9 @@ dependencies = [ [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -5060,9 +5049,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -5070,24 +5059,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.39" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -5097,9 +5086,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5107,22 +5096,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-streams" @@ -5139,9 +5128,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.66" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -5236,7 +5225,7 @@ checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -5279,11 +5268,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.6" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -5375,7 +5364,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -5386,7 +5375,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -5397,7 +5386,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -5408,7 +5397,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -5495,9 +5484,9 @@ dependencies = [ [[package]] name = "windows-version" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75aa004c988e080ad34aff5739c39d0312f4684699d6d71fc8a198d057b8b9b4" +checksum = "6998aa457c9ba8ff2fb9f13e9d2a930dabcea28f1d0ab94d687d8b3654844515" dependencies = [ "windows-targets 0.52.5", ] @@ -5636,9 +5625,9 @@ checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" [[package]] name = "winnow" -version = "0.5.31" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a4882e6b134d6c28953a387571f1acdd3496830d5e36c5e3a1075580ea641c" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] @@ -5652,16 +5641,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "winreg" -version = "0.51.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "winreg" version = "0.52.0" @@ -5746,9 +5725,9 @@ dependencies = [ [[package]] name = "xattr" -version = "1.2.0" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "914566e6413e7fa959cc394fb30e563ba80f3541fbd40816d4c05a0fc3f2a0f1" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ "libc", "linux-raw-sys", @@ -5757,22 +5736,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +checksum = "ae87e3fcd617500e5d106f0380cf7b77f3c6092aae37191433159dda23cfb087" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.32" +version = "0.7.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +checksum = "15e934569e47891f7d9411f1a451d947a60e000ab3bd24fbb970f000387d1b3b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.46", + "syn 2.0.68", ] [[package]] @@ -5811,7 +5790,7 @@ dependencies = [ "crc32fast", "crossbeam-utils", "displaydoc", - "indexmap 2.1.0", + "indexmap 2.2.6", "memchr", "thiserror", ] @@ -5837,9 +5816,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.9+zstd.1.5.5" +version = "2.0.11+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e16efa8a874a0481a574084d34cc26fdb3b99627480f785888deb6386506656" +checksum = "75652c55c0b6f3e6f12eb786fe1bc960396bf05a1eb3bf1f3691c3610ac2e6d4" dependencies = [ "cc", "pkg-config", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 09eb71d6..aad47efc 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -48,7 +48,7 @@ tauri-plugin-updater = "2.0.0-beta.8" tauri-plugin-window-state = "2.0.0-beta.9" tauri-runtime = "2.0.0-beta.18" thiserror = "1.0.50" -tokio = "1.35.1" +tokio = { version = "1.35.1", features = ["macros"] } uuid = { version = "1.8.0", features = ["v4"] } zip = "0.6.6" diff --git a/backend/src/main.rs b/backend/src/main.rs index d68c4665..63c2da19 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,52 +1,24 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -#![feature(future_join)] -use std::{ - collections::HashMap, - path::PathBuf, - sync::Mutex, -}; +use std::{collections::HashMap, path::PathBuf, sync::Mutex}; -use app_state::{ - AppState, - DataValue, - StateData, - StatefulHandle, -}; -use events::{ - AppEvent, - EventEmitter, -}; +use app_state::{AppState, DataValue, StateData, StatefulHandle}; +use events::{AppEvent, EventEmitter}; use installed_game::InstalledGame; use local_mod::LocalMod; use log::error; use maps::TryGettable; -use mod_loaders::mod_loader::{ - self, - ModLoaderActions, -}; -use paths::{ - hash_path, - normalize_path, -}; +use mod_loaders::mod_loader::{self, ModLoaderActions}; +use paths::{hash_path, normalize_path}; use providers::{ manual_provider, - provider::{ - self, - ProviderActions, - }, + provider::{self, ProviderActions}, provider_command::ProviderCommandAction, }; -use result::{ - Error, - Result, -}; +use result::{Error, Result}; use steamlocate::SteamDir; -use tauri::{ - AppHandle, - Manager, -}; +use tauri::{AppHandle, Manager}; // use tauri_plugin_log::Target; mod analytics; diff --git a/backend/src/steam/id_lists.rs b/backend/src/steam/id_lists.rs index 8266706c..0d6bb436 100644 --- a/backend/src/steam/id_lists.rs +++ b/backend/src/steam/id_lists.rs @@ -1,18 +1,11 @@ use std::{ - collections::{ - HashMap, - HashSet, - }, + collections::{HashMap, HashSet}, future, }; use log::error; -use crate::{ - game_engines::game_engine::EngineBrand, - serializable_struct, - Result, -}; +use crate::{game_engines::game_engine::EngineBrand, serializable_struct, Result}; const STEAM_APP_IDS_URL_BASE: &str = "https://raicuparta.github.io/rai-pal-db/steam-ids"; @@ -50,13 +43,12 @@ fn get_ids_data_list(ids: &HashSet, engine: EngineBrand) -> Vec Result> { - let (unity, unreal, godot, game_maker) = future::join!( + let (unity, unreal, godot, game_maker) = tokio::join!( get_list("Unity"), get_list("Unreal"), get_list("Godot"), get_list("GameMaker") - ) - .await; + ); let games = [ get_ids_data_list(&unity, EngineBrand::Unity), From 33b0a34bb71fd7bcf886d0557405ca98dee37478 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 15:22:56 +0200 Subject: [PATCH 007/255] Update dependencies --- backend/Cargo.lock | 33 +++++++++++++-------------------- backend/Cargo.toml | 6 +++--- 2 files changed, 16 insertions(+), 23 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index de88cb4e..51599f2b 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -75,12 +75,6 @@ dependencies = [ "alloc-no-stdlib", ] -[[package]] -name = "allocator-api2" -version = "0.2.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" - [[package]] name = "android-tzdata" version = "0.1.1" @@ -1512,9 +1506,9 @@ dependencies = [ [[package]] name = "goblin" -version = "0.7.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f27c1b4369c2cd341b5de549380158b105a04c331be5db9110eef7b6d2742134" +checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" dependencies = [ "log", "plain", @@ -1608,14 +1602,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash 0.8.11", - "allocator-api2", ] [[package]] name = "hashlink" -version = "0.8.4" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ "hashbrown 0.14.5", ] @@ -2120,9 +2113,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" dependencies = [ "cc", "pkg-config", @@ -3156,7 +3149,7 @@ name = "rai-pal" version = "0.12.0" dependencies = [ "async-trait", - "base64 0.21.7", + "base64 0.22.1", "byteorder", "chrono", "directories", @@ -3464,9 +3457,9 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.30.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a78046161564f5e7cd9008aff3b2990b3850dc8e0349119b98e8f251e099f24d" +checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" dependencies = [ "bitflags 2.5.0", "fallible-iterator", @@ -3637,18 +3630,18 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "scroll" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04c565b551bafbef4157586fa379538366e4385d42082f255bfd96e4fe8519da" +checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" dependencies = [ "scroll_derive", ] [[package]] name = "scroll_derive" -version = "0.11.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1db149f81d46d2deba7cd3c50772474707729550221e69588478ebf9ada425ae" +checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" dependencies = [ "proc-macro2", "quote", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index aad47efc..217d421c 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -23,13 +23,13 @@ steamlocate = { git = "https://github.com/Raicuparta/steamlocate-rs", branch = " # specta = "1.0.5" # tauri-specta = { version = "1.0.2", features = ["typescript"] } async-trait = "0.1.74" -base64 = "0.21.5" +base64 = "0.22.1" byteorder = "1.5.0" chrono = "0.4.31" directories = "5.0.1" enum_dispatch = "0.3.12" futures = "0.3.29" -goblin = "0.7.1" +goblin = "0.8.2" lazy_static = "1.4.0" lazy-regex = "3.0.2" log = "0.4.20" @@ -37,7 +37,7 @@ open = "5.0.0" pelite = "0.10.0" rand = "0.8.5" reqwest = { version = "0.12.5", features = ["json"] } -rusqlite = { version = "0.30.0", features = ["bundled"] } +rusqlite = { version = "0.31.0", features = ["bundled"] } serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.108" serde_urlencoded = "0.7.1" From cc76e3c14e229b68c93c75aa64c8f0597cc5bc8b Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 24 Jun 2024 15:48:02 +0200 Subject: [PATCH 008/255] update specta --- backend/Cargo.lock | 68 +++ backend/Cargo.toml | 4 +- backend/src/macros/serializable_enum.rs | 2 +- backend/src/macros/serializable_struct.rs | 2 +- backend/src/main.rs | 171 +++--- backend/src/providers/provider_command.rs | 14 +- backend/src/result.rs | 98 +++- frontend/api/bindings.ts | 514 +++++++++++------- .../installed-games/add-game-button.tsx | 4 +- .../installed-games/game-mod-row.tsx | 19 +- .../installed-games/installed-game-modal.tsx | 22 +- frontend/components/mods/mod-modal.tsx | 10 +- frontend/components/mods/mods-page.tsx | 4 +- .../owned-games/fix-owned-games-button.tsx | 4 +- .../providers/provider-command-button.tsx | 8 +- .../components/settings/settings-page.tsx | 4 +- frontend/hooks/use-data-subscription.ts | 13 +- frontend/hooks/use-data.ts | 15 +- frontend/hooks/use-update-data.ts | 6 +- frontend/main.tsx | 4 +- 20 files changed, 615 insertions(+), 371 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 51599f2b..1358b376 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" + [[package]] name = "addr2line" version = "0.22.0" @@ -1845,6 +1851,12 @@ dependencies = [ "serde", ] +[[package]] +name = "indoc" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" + [[package]] name = "infer" version = "0.15.0" @@ -3168,6 +3180,7 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "specta", "steamlocate", "tauri", "tauri-build", @@ -3176,6 +3189,7 @@ dependencies = [ "tauri-plugin-updater", "tauri-plugin-window-state", "tauri-runtime", + "tauri-specta", "thiserror", "tokio", "uuid", @@ -3965,6 +3979,31 @@ dependencies = [ "system-deps", ] +[[package]] +name = "specta" +version = "2.0.0-rc.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3624a07cbde326fdf1ec37cbd39d06a224660fa0199b7db7316f2349583df981" +dependencies = [ + "once_cell", + "paste", + "serde", + "specta-macros", + "thiserror", +] + +[[package]] +name = "specta-macros" +version = "2.0.0-rc.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef33e9678ae36993fcbfc46aa29568ef10d32fd54428808759c6a450998c43ec" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "spin" version = "0.9.8" @@ -4225,6 +4264,7 @@ dependencies = [ "serde_json", "serde_repr", "serialize-to-javascript", + "specta", "state", "swift-rs", "tauri-build", @@ -4441,6 +4481,34 @@ dependencies = [ "wry", ] +[[package]] +name = "tauri-specta" +version = "2.0.0-rc.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85f26e4ded13fbeab2216dcb5a59b5cf8b475740afea932918888402bcc62a02" +dependencies = [ + "heck 0.5.0", + "indoc", + "serde", + "serde_json", + "specta", + "tauri", + "tauri-specta-macros", + "thiserror", +] + +[[package]] +name = "tauri-specta-macros" +version = "2.0.0-rc.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6f9e90bf2012877e2c4029a1bf756277183e9c7c77b850ef965711553998012" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.68", +] + [[package]] name = "tauri-utils" version = "2.0.0-beta.17" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 217d421c..3f33d31b 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -20,8 +20,8 @@ glob = { git = "https://github.com/rust-lang/glob", version = "0.3.1" } # Also I made my own fork to remove some annoying prints. steamlocate = { git = "https://github.com/Raicuparta/steamlocate-rs", branch = "dev-v2.0" } -# specta = "1.0.5" -# tauri-specta = { version = "1.0.2", features = ["typescript"] } +specta = "2.0.0-rc.12" +tauri-specta = { version = "2.0.0-rc.11", features = ["typescript"] } async-trait = "0.1.74" base64 = "0.22.1" byteorder = "1.5.0" diff --git a/backend/src/macros/serializable_enum.rs b/backend/src/macros/serializable_enum.rs index f3d81e74..c6c92e25 100644 --- a/backend/src/macros/serializable_enum.rs +++ b/backend/src/macros/serializable_enum.rs @@ -1,7 +1,7 @@ #[macro_export] macro_rules! serializable_enum { ($enum_name:ident { $($variant:ident),* $(,)? }) => { - #[derive(serde::Serialize, serde::Deserialize, /*specta::Type, */Clone, PartialEq, Eq, Hash, Debug, Copy)] + #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug, Copy)] pub enum $enum_name { $($variant,)* } diff --git a/backend/src/macros/serializable_struct.rs b/backend/src/macros/serializable_struct.rs index cce6cf20..a9396df6 100644 --- a/backend/src/macros/serializable_struct.rs +++ b/backend/src/macros/serializable_struct.rs @@ -1,7 +1,7 @@ #[macro_export] macro_rules! serializable_struct { ($struct_name:ident { $($field:tt)* }) => { - #[derive(serde::Serialize, serde::Deserialize, /*specta::Type, */Clone, Debug)] + #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, Debug)] #[serde(rename_all = "camelCase")] pub struct $struct_name { $($field)* diff --git a/backend/src/main.rs b/backend/src/main.rs index 63c2da19..2357aa1a 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -49,37 +49,37 @@ mod steam; mod windows; #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn get_installed_games(handle: AppHandle) -> Result { handle.app_state().installed_games.get_data() } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn get_owned_games(handle: AppHandle) -> Result { handle.app_state().owned_games.get_data() } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn get_mod_loaders(handle: AppHandle) -> Result { mod_loader::get_data_map(&handle.app_state().mod_loaders.get_data()?) } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn get_local_mods(handle: AppHandle) -> Result { handle.app_state().local_mods.get_data() } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn get_remote_mods(handle: AppHandle) -> Result { handle.app_state().remote_mods.get_data() } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn get_remote_games(handle: AppHandle) -> Result { handle.app_state().remote_games.get_data() } @@ -101,7 +101,7 @@ fn update_state( } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_game_folder(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -111,7 +111,7 @@ async fn open_game_folder(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_game_mods_folder(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -121,19 +121,19 @@ async fn open_game_mods_folder(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_mods_folder() -> Result { Ok(open::that_detached(paths::installed_mods_path()?)?) } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_mod_folder(mod_id: &str, handle: AppHandle) -> Result { handle.app_state().local_mods.try_get(mod_id)?.open_folder() } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_mod_loader_folder(mod_loader_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -143,7 +143,7 @@ async fn open_mod_loader_folder(mod_loader_id: &str, handle: AppHandle) -> Resul } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn download_mod(mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let remote_mod = state.remote_mods.try_get(mod_id)?; @@ -160,7 +160,7 @@ async fn download_mod(mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn delete_mod(mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let local_mod = state.local_mods.try_get(mod_id)?; @@ -176,7 +176,7 @@ async fn delete_mod(mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn start_game(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -190,7 +190,7 @@ async fn start_game(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn start_game_exe(game_id: &str, handle: AppHandle) -> Result { handle .app_state() @@ -200,7 +200,7 @@ async fn start_game_exe(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn install_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -225,7 +225,7 @@ async fn install_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn run_runnable_without_game(mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -241,7 +241,7 @@ async fn run_runnable_without_game(mod_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn configure_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -258,7 +258,7 @@ async fn configure_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_installed_mod_folder(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); @@ -295,13 +295,13 @@ fn refresh_game_mods_and_exe(game_id: &str, handle: &AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn refresh_game(game_id: &str, handle: AppHandle) -> Result { refresh_game_mods_and_exe(game_id, &handle) } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn uninstall_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let mut installed_games = state.installed_games.get_data()?; @@ -322,7 +322,7 @@ async fn uninstall_mod(game_id: &str, mod_id: &str, handle: AppHandle) -> Result } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn uninstall_all_mods(game_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let game = state.installed_games.try_get(game_id)?; @@ -503,7 +503,7 @@ async fn update_mods(handle: AppHandle, resources_path: PathBuf) { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn update_data(handle: AppHandle) -> Result { let resources_path = paths::resources_path(&handle)?; @@ -527,7 +527,7 @@ async fn update_data(handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn add_game(path: PathBuf, handle: AppHandle) -> Result { let state = handle.app_state(); let normalized_path = normalize_path(&path); @@ -558,7 +558,7 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn remove_game(game_id: &str, handle: AppHandle) -> Result { let state = handle.app_state(); let game = state.installed_games.try_get(game_id)?; @@ -580,7 +580,7 @@ async fn remove_game(game_id: &str, handle: AppHandle) -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn run_provider_command( owned_game_id: &str, command_action: &str, @@ -600,14 +600,14 @@ async fn run_provider_command( } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn delete_steam_appinfo_cache() -> Result { let steam_dir = SteamDir::locate()?; steam::appinfo::delete(steam_dir.path()) } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn frontend_ready() -> Result { analytics::send_event(analytics::Event::StartApp, "").await; @@ -615,7 +615,7 @@ async fn frontend_ready() -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn open_logs_folder() -> Result { paths::open_logs_folder()?; @@ -623,7 +623,7 @@ async fn open_logs_folder() -> Result { } #[tauri::command] -// #[specta::specta] +#[specta::specta] async fn dummy_command() -> Result<(InstalledGame, AppEvent, ProviderCommandAction)> { // This command is here just so tauri_specta exports these types. // This should stop being needed once tauri_specta starts supporting events. @@ -639,7 +639,53 @@ fn main() { // TODO handle Linux. })); - let tauri_builder = tauri::Builder::default() + let invoke_handler = { + // You can use `tauri_specta::js::builder` for exporting JS Doc instead of Typescript!` + let builder = tauri_specta::ts::builder() + .config( + specta::ts::ExportConfig::default() + .bigint(specta::ts::BigIntExportBehavior::BigInt), + ) + .commands(tauri_specta::collect_commands![ + dummy_command, + update_data, + get_installed_games, + get_owned_games, + get_mod_loaders, + open_game_folder, + install_mod, + configure_mod, + open_installed_mod_folder, + uninstall_mod, + uninstall_all_mods, + open_game_mods_folder, + start_game, + start_game_exe, + open_mod_folder, + download_mod, + run_runnable_without_game, + delete_mod, + open_mods_folder, + add_game, + remove_game, + delete_steam_appinfo_cache, + frontend_ready, + get_local_mods, + get_remote_mods, + get_remote_games, + open_mod_loader_folder, + refresh_game, + open_logs_folder, + run_provider_command, + ]); + + #[cfg(debug_assertions)] + let builder = builder.path("../frontend/api/bindings.ts"); + + builder.build().unwrap() + }; + + tauri::Builder::default() .plugin(tauri_plugin_window_state::Builder::default().build()) // .plugin( // tauri_plugin_log::Builder::default() @@ -667,44 +713,21 @@ fn main() { } Ok(()) + }) + .invoke_handler(invoke_handler) + .run(tauri::generate_context!()) + .unwrap_or_else(|error| { + #[cfg(target_os = "windows")] + if let tauri::Error::Runtime(tauri_runtime::Error::CreateWebview(webview_error)) = error + { + windows::webview_error_dialog(&webview_error.to_string()); + return; + } + #[cfg(target_os = "windows")] + windows::error_dialog(&error.to_string()); + // TODO handle Linux. }); - let (tauri_builder/*, types_result*/) = set_up_api!( - tauri_builder, - [ - dummy_command, - update_data, - get_installed_games, - get_owned_games, - get_mod_loaders, - open_game_folder, - install_mod, - configure_mod, - open_installed_mod_folder, - uninstall_mod, - uninstall_all_mods, - open_game_mods_folder, - start_game, - start_game_exe, - open_mod_folder, - download_mod, - run_runnable_without_game, - delete_mod, - open_mods_folder, - add_game, - remove_game, - delete_steam_appinfo_cache, - frontend_ready, - get_local_mods, - get_remote_mods, - get_remote_games, - open_mod_loader_folder, - refresh_game, - open_logs_folder, - run_provider_command, - ] - ); - // match types_result { // Ok(types) => { // #[cfg(debug_assertions)] @@ -721,18 +744,4 @@ fn main() { // error!("Failed to generate api bindings: {err}"); // } // } - - tauri_builder - .run(tauri::generate_context!()) - .unwrap_or_else(|error| { - #[cfg(target_os = "windows")] - if let tauri::Error::Runtime(tauri_runtime::Error::CreateWebview(webview_error)) = error - { - windows::webview_error_dialog(&webview_error.to_string()); - return; - } - #[cfg(target_os = "windows")] - windows::error_dialog(&error.to_string()); - // TODO handle Linux. - }); } diff --git a/backend/src/providers/provider_command.rs b/backend/src/providers/provider_command.rs index 8f935fce..10f99573 100644 --- a/backend/src/providers/provider_command.rs +++ b/backend/src/providers/provider_command.rs @@ -1,16 +1,8 @@ -use std::{ - path::PathBuf, - process::Command, -}; +use std::{path::PathBuf, process::Command}; -use crate::{ - serializable_enum, - Result, -}; +use crate::{serializable_enum, Result}; -#[derive( - serde::Serialize, serde::Deserialize, /*specta::Type,*/ Clone, PartialEq, Eq, Hash, Debug, -)] +#[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug)] pub enum ProviderCommand { String(String), Path(PathBuf, Vec), diff --git a/backend/src/result.rs b/backend/src/result.rs index 6da34a35..b1150659 100644 --- a/backend/src/result.rs +++ b/backend/src/result.rs @@ -1,58 +1,114 @@ -use std::{ - env, - path::PathBuf, - result, -}; +use std::{env, path::PathBuf, result}; -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, specta::Type)] pub enum Error { #[error("Not implemented")] NotImplemented, #[error(transparent)] - Io(#[from] std::io::Error), + Io( + #[serde(skip)] + #[from] + std::io::Error, + ), #[error(transparent)] - GlobPattern(#[from] glob::PatternError), + GlobPattern( + #[serde(skip)] + #[from] + glob::PatternError, + ), #[error(transparent)] - Glob(#[from] glob::GlobError), + Glob( + #[from] + #[serde(skip)] + glob::GlobError, + ), #[error(transparent)] - Reqwest(#[from] reqwest::Error), + Reqwest( + #[from] + #[serde(skip)] + reqwest::Error, + ), #[error(transparent)] - Goblin(#[from] goblin::error::Error), + Goblin( + #[from] + #[serde(skip)] + goblin::error::Error, + ), #[error("Failed to find Steam. **Is Steam installed**? ({0})")] - SteamLocate(#[from] steamlocate::Error), + SteamLocate( + #[from] + #[serde(skip)] + steamlocate::Error, + ), #[error(transparent)] - Zip(#[from] zip::result::ZipError), + Zip( + #[from] + #[serde(skip)] + zip::result::ZipError, + ), #[error(transparent)] - Tauri(#[from] tauri::Error), + Tauri( + #[from] + #[serde(skip)] + tauri::Error, + ), #[error(transparent)] - Json(#[from] serde_json::Error), + Json( + #[from] + #[serde(skip)] + serde_json::Error, + ), #[error(transparent)] - ChronoParse(#[from] chrono::ParseError), + ChronoParse( + #[from] + #[serde(skip)] + chrono::ParseError, + ), #[error(transparent)] - SQLite(#[from] rusqlite::Error), + SQLite( + #[from] + #[serde(skip)] + rusqlite::Error, + ), #[error(transparent)] - Env(#[from] env::VarError), + Env( + #[from] + #[serde(skip)] + env::VarError, + ), #[error(transparent)] - TaskJoin(#[from] tokio::task::JoinError), + TaskJoin( + #[from] + #[serde(skip)] + tokio::task::JoinError, + ), #[error(transparent)] - UrlEncode(#[from] serde_urlencoded::ser::Error), + UrlEncode( + #[from] + #[serde(skip)] + serde_urlencoded::ser::Error, + ), #[error(transparent)] - HeaderToStr(#[from] reqwest::header::ToStrError), + HeaderToStr( + #[from] + #[serde(skip)] + reqwest::header::ToStrError, + ), #[error("Invalid type `{0}` in binary vdf key/value pair")] InvalidBinaryVdfType(u8), diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index c2f0ba14..d415bf7f 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -1,234 +1,346 @@ -import { invoke } from "@tauri-apps/api/core"; -export function dummyCommand() { - return invoke<[InstalledGame, AppEvent, ProviderCommandAction]>( - "dummy_command", - ); -} + // This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. -export function updateData() { - return invoke("update_data"); -} + /** user-defined commands **/ -export function getInstalledGames() { - return invoke<{ [key: string]: InstalledGame }>("get_installed_games"); + export const commands = { +async dummyCommand() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("dummy_command") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function getOwnedGames() { - return invoke<{ [key: string]: OwnedGame }>("get_owned_games"); +}, +async updateData() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("update_data") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function getModLoaders() { - return invoke<{ [key: string]: ModLoaderData }>("get_mod_loaders"); +}, +async getInstalledGames() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("get_installed_games") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openGameFolder(gameId: string) { - return invoke("open_game_folder", { gameId }); +}, +async getOwnedGames() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("get_owned_games") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function installMod(gameId: string, modId: string) { - return invoke("install_mod", { gameId, modId }); +}, +async getModLoaders() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("get_mod_loaders") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function configureMod(gameId: string, modId: string) { - return invoke("configure_mod", { gameId, modId }); +}, +async openGameFolder(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_game_folder", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openInstalledModFolder(gameId: string, modId: string) { - return invoke("open_installed_mod_folder", { gameId, modId }); +}, +async installMod(gameId: string, modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("install_mod", { gameId, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function uninstallMod(gameId: string, modId: string) { - return invoke("uninstall_mod", { gameId, modId }); +}, +async configureMod(gameId: string, modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("configure_mod", { gameId, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function uninstallAllMods(gameId: string) { - return invoke("uninstall_all_mods", { gameId }); +}, +async openInstalledModFolder(gameId: string, modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_installed_mod_folder", { gameId, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openGameModsFolder(gameId: string) { - return invoke("open_game_mods_folder", { gameId }); +}, +async uninstallMod(gameId: string, modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("uninstall_mod", { gameId, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function startGame(gameId: string) { - return invoke("start_game", { gameId }); +}, +async uninstallAllMods(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("uninstall_all_mods", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function startGameExe(gameId: string) { - return invoke("start_game_exe", { gameId }); +}, +async openGameModsFolder(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_game_mods_folder", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openModFolder(modId: string) { - return invoke("open_mod_folder", { modId }); +}, +async startGame(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("start_game", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function downloadMod(modId: string) { - return invoke("download_mod", { modId }); +}, +async startGameExe(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("start_game_exe", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function runRunnableWithoutGame(modId: string) { - return invoke("run_runnable_without_game", { modId }); +}, +async openModFolder(modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_mod_folder", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function deleteMod(modId: string) { - return invoke("delete_mod", { modId }); +}, +async downloadMod(modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("download_mod", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openModsFolder() { - return invoke("open_mods_folder"); +}, +async runRunnableWithoutGame(modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("run_runnable_without_game", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function addGame(path: string) { - return invoke("add_game", { path }); +}, +async deleteMod(modId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("delete_mod", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function removeGame(gameId: string) { - return invoke("remove_game", { gameId }); +}, +async openModsFolder() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_mods_folder") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function deleteSteamAppinfoCache() { - return invoke("delete_steam_appinfo_cache"); +}, +async addGame(path: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("add_game", { path }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function frontendReady() { - return invoke("frontend_ready"); +}, +async removeGame(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("remove_game", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function getLocalMods() { - return invoke<{ [key: string]: LocalMod }>("get_local_mods"); +}, +async deleteSteamAppinfoCache() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("delete_steam_appinfo_cache") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function getRemoteMods() { - return invoke<{ [key: string]: RemoteMod }>("get_remote_mods"); +}, +async frontendReady() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("frontend_ready") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function getRemoteGames() { - return invoke<{ [key: string]: RemoteGame }>("get_remote_games"); +}, +async getLocalMods() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("get_local_mods") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openModLoaderFolder(modLoaderId: string) { - return invoke("open_mod_loader_folder", { modLoaderId }); +}, +async getRemoteMods() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("get_remote_mods") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function refreshGame(gameId: string) { - return invoke("refresh_game", { gameId }); +}, +async getRemoteGames() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("get_remote_games") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openModLoaderFolder(modLoaderId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_mod_loader_folder", { modLoaderId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async refreshGame(gameId: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("refresh_game", { gameId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openLogsFolder() : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("open_logs_folder") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async runProviderCommand(ownedGameId: string, commandAction: string) : Promise> { +try { + return { status: "ok", data: await TAURI_INVOKE("run_provider_command", { ownedGameId, commandAction }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; } - -export function openLogsFolder() { - return invoke("open_logs_folder"); } - -export function runProviderCommand(ownedGameId: string, commandAction: string) { - return invoke("run_provider_command", { ownedGameId, commandAction }); } -export type ModDownload = { - id: string; - url: string; - root: string | null; - runnable: RunnableModData | null; -}; -export type UnityScriptingBackend = "Il2Cpp" | "Mono"; -export type RemoteMod = { common: CommonModData; data: RemoteModData }; -export type GameMode = "VR" | "Flat"; -export type EngineVersion = { - numbers: EngineVersionNumbers; - suffix: string | null; - display: string; -}; -export type EngineVersionRange = { - minimum: EngineVersionNumbers | null; - maximum: EngineVersionNumbers | null; -}; -export type ModKind = "Installable" | "Runnable"; -export type GameEngine = { brand: EngineBrand; version: EngineVersion | null }; -export type AppEvent = - | "SyncInstalledGames" - | "SyncOwnedGames" - | "SyncRemoteGames" - | "SyncModLoaders" - | "SyncLocalMods" - | "SyncRemoteMods" - | "ExecutedProviderCommand" - | "GameAdded" - | "GameRemoved" - | "Error"; -export type Manifest = { - title: string | null; - version: string; - runnable: RunnableModData | null; - engine: EngineBrand | null; - engineVersionRange: EngineVersionRange | null; - unityBackend: UnityScriptingBackend | null; -}; -export type LocalMod = { data: LocalModData; common: CommonModData }; -export type InstalledGame = { - id: string; - name: string; - provider: ProviderId; - executable: GameExecutable; - installedModVersions: { [key: string]: string }; - discriminator: string | null; - thumbnailUrl: string | null; - ownedGameId: string | null; - startCommand: ProviderCommand | null; -}; -export type RunnableModData = { path: string; args: string[] }; -export type RemoteGame = { - id: string; - engine: GameEngine | null; - skipCache: boolean; -}; -export type RemoteModData = { - title: string; - deprecated: boolean; - author: string; - sourceCode: string; - description: string; - latestVersion: ModDownload | null; -}; -export type LocalModData = { path: string; manifest: Manifest | null }; -export type ModLoaderData = { id: string; path: string; kind: ModKind }; -export type GameExecutable = { - path: string; - name: string; - engine: GameEngine | null; - architecture: Architecture | null; - operatingSystem: OperatingSystem | null; - scriptingBackend: UnityScriptingBackend | null; -}; -export type ProviderCommandAction = - | "Install" - | "ShowInLibrary" - | "ShowInStore" - | "Start" - | "OpenInBrowser"; -export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox"; -export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker"; -export type EngineVersionNumbers = { - major: number; - minor: number | null; - patch: number | null; -}; -export type AppType = "Game" | "Demo"; -export type OperatingSystem = "Linux" | "Windows"; -export type ProviderCommand = { String: string } | { Path: [string, string[]] }; -export type Architecture = "X64" | "X86"; -export type CommonModData = { - id: string; - engine: EngineBrand | null; - unityBackend: UnityScriptingBackend | null; - engineVersionRange: EngineVersionRange | null; - loaderId: string; -}; -export type OwnedGame = { - id: string; - provider: ProviderId; - name: string; - osList: OperatingSystem[]; - releaseDate: bigint | null; - thumbnailUrl: string | null; - gameMode: GameMode | null; - appType: AppType | null; - providerCommands: { [key: string]: ProviderCommand }; + /** user-defined events **/ + + + + /** user-defined statics **/ + + + +/** user-defined types **/ + +export type AppEvent = "SyncInstalledGames" | "SyncOwnedGames" | "SyncRemoteGames" | "SyncModLoaders" | "SyncLocalMods" | "SyncRemoteMods" | "ExecutedProviderCommand" | "GameAdded" | "GameRemoved" | "Error" +export type AppType = "Game" | "Demo" +export type Architecture = "X64" | "X86" +export type CommonModData = { id: string; engine: EngineBrand | null; unityBackend: UnityScriptingBackend | null; engineVersionRange: EngineVersionRange | null; loaderId: string } +export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" +export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } +export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } +export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } +export type Error = "NotImplemented" | "Io" | "GlobPattern" | "Glob" | "Reqwest" | "Goblin" | "SteamLocate" | "Zip" | "Tauri" | "Json" | "ChronoParse" | "SQLite" | "Env" | "TaskJoin" | "UrlEncode" | "HeaderToStr" | { InvalidBinaryVdfType: number } | { AppDataNotFound: [] } | { PathParseFailure: string } | { PathParentNotFound: string } | { EmptyFile: string } | { AppInfoNotFound: string } | { FailedToParseUnityVersionAsset: string } | { ModInstallInfoInsufficient: [string, string] } | { EmptyStateData: [] } | { FailedToAccessStateData: string } | { FailedToGetGameFromPath: string } | { GameAlreadyAdded: string } | { DataEntryNotFound: string } | { UnityBackendUnknown: string } | { ModDownloadNotAvailable: string } | { RunnableManifestNotFound: string } | { CantRunNonRunnable: string } +export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } +export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; operatingSystem: OperatingSystem | null; scriptingBackend: UnityScriptingBackend | null } +export type GameMode = "VR" | "Flat" +export type InstalledGame = { id: string; name: string; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } +export type LocalMod = { data: LocalModData; common: CommonModData } +export type LocalModData = { path: string; manifest: Manifest | null } +export type Manifest = { title: string | null; version: string; runnable: RunnableModData | null; engine: EngineBrand | null; engineVersionRange: EngineVersionRange | null; unityBackend: UnityScriptingBackend | null } +export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } +export type ModKind = "Installable" | "Runnable" +export type ModLoaderData = { id: string; path: string; kind: ModKind } +export type OperatingSystem = "Linux" | "Windows" +export type OwnedGame = { id: string; provider: ProviderId; name: string; osList: OperatingSystem[]; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in string]: ProviderCommand } } +export type ProviderCommand = { String: string } | { Path: [string, string[]] } +export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" +export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" +export type RemoteGame = { id: string; engine: GameEngine | null; skipCache: boolean } +export type RemoteMod = { common: CommonModData; data: RemoteModData } +export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } +export type RunnableModData = { path: string; args: string[] } +export type UnityScriptingBackend = "Il2Cpp" | "Mono" + +/** tauri-specta globals **/ + + import { invoke as TAURI_INVOKE } from "@tauri-apps/api/core"; +import * as TAURI_API_EVENT from "@tauri-apps/api/event"; +import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; + +type __EventObj__ = { + listen: ( + cb: TAURI_API_EVENT.EventCallback + ) => ReturnType>; + once: ( + cb: TAURI_API_EVENT.EventCallback + ) => ReturnType>; + emit: T extends null + ? (payload?: T) => ReturnType + : (payload: T) => ReturnType; }; + +export type Result = + | { status: "ok"; data: T } + | { status: "error"; error: E }; + +function __makeEvents__>( + mappings: Record +) { + return new Proxy( + {} as unknown as { + [K in keyof T]: __EventObj__ & { + (handle: __WebviewWindow__): __EventObj__; + }; + }, + { + get: (_, event) => { + const name = mappings[event as keyof T]; + + return new Proxy((() => {}) as any, { + apply: (_, __, [window]: [__WebviewWindow__]) => ({ + listen: (arg: any) => window.listen(name, arg), + once: (arg: any) => window.once(name, arg), + emit: (arg: any) => window.emit(name, arg), + }), + get: (_, command: keyof __EventObj__) => { + switch (command) { + case "listen": + return (arg: any) => TAURI_API_EVENT.listen(name, arg); + case "once": + return (arg: any) => TAURI_API_EVENT.once(name, arg); + case "emit": + return (arg: any) => TAURI_API_EVENT.emit(name, arg); + } + }, + }); + }, + } + ); +} + + \ No newline at end of file diff --git a/frontend/components/installed-games/add-game-button.tsx b/frontend/components/installed-games/add-game-button.tsx index 6f63aa28..6d4b091d 100644 --- a/frontend/components/installed-games/add-game-button.tsx +++ b/frontend/components/installed-games/add-game-button.tsx @@ -2,7 +2,7 @@ import { Button, Group, Modal, Stack, Text } from "@mantine/core"; import { IconAppWindowFilled, IconPlaylistAdd } from "@tabler/icons-react"; import { useCallback, useEffect, useState } from "react"; import styles from "./installed-games.module.css"; -import { addGame } from "@api/bindings"; +import { commands } from "@api/bindings"; import { open as openDialog } from "@tauri-apps/plugin-dialog"; import { useAtomValue } from "jotai"; import { loadingAtom } from "@hooks/use-data"; @@ -16,7 +16,7 @@ export function AddGame() { setIsOpen(false); }, []); - const [executeAddGame] = useAsyncCommand(addGame, handleSuccess); + const [executeAddGame] = useAsyncCommand(commands.addGame, handleSuccess); const handleClick = useCallback(async () => { const result = await openDialog({ diff --git a/frontend/components/installed-games/game-mod-row.tsx b/frontend/components/installed-games/game-mod-row.tsx index 85ecac8d..363eadeb 100644 --- a/frontend/components/installed-games/game-mod-row.tsx +++ b/frontend/components/installed-games/game-mod-row.tsx @@ -8,15 +8,7 @@ import { Group, Stack, } from "@mantine/core"; -import { - ModLoaderData, - configureMod, - downloadMod, - installMod, - openInstalledModFolder, - openModFolder, - uninstallMod, -} from "@api/bindings"; +import { ModLoaderData, commands } from "@api/bindings"; import { CommandButton } from "@components/command-button"; import { IconCheck, @@ -41,6 +33,15 @@ import { getModTitle } from "../../util/game-mod"; import { CommandDropdown } from "@components/command-dropdown"; import { DeprecatedBadge } from "@components/mods/deprecated-badge"; +const { + configureMod, + downloadMod, + installMod, + openInstalledModFolder, + openModFolder, + uninstallMod, +} = commands; + type Props = { readonly game: ProcessedInstalledGame; readonly mod: UnifiedMod; diff --git a/frontend/components/installed-games/installed-game-modal.tsx b/frontend/components/installed-games/installed-game-modal.tsx index 8b555981..45f6d4b2 100644 --- a/frontend/components/installed-games/installed-game-modal.tsx +++ b/frontend/components/installed-games/installed-game-modal.tsx @@ -8,17 +8,7 @@ import { Table, Tooltip, } from "@mantine/core"; -import { - EngineVersion, - EngineVersionRange, - openGameFolder, - openGameModsFolder, - refreshGame, - removeGame, - startGame, - startGameExe, - uninstallAllMods, -} from "@api/bindings"; +import { EngineVersion, EngineVersionRange, commands } from "@api/bindings"; import { useMemo } from "react"; import { ItemName } from "../item-name"; import { CommandButton } from "@components/command-button"; @@ -51,6 +41,16 @@ type Props = { readonly onClose: () => void; }; +const { + openGameFolder, + openGameModsFolder, + refreshGame, + removeGame, + startGame, + startGameExe, + uninstallAllMods, +} = commands; + function isVersionWithinRange( version: EngineVersion | null | undefined, range: EngineVersionRange | null, diff --git a/frontend/components/mods/mod-modal.tsx b/frontend/components/mods/mod-modal.tsx index 339cf4ec..0a2c7a33 100644 --- a/frontend/components/mods/mod-modal.tsx +++ b/frontend/components/mods/mod-modal.tsx @@ -1,10 +1,5 @@ import { Group, Modal, Stack } from "@mantine/core"; -import { - deleteMod, - downloadMod, - openModFolder, - runRunnableWithoutGame, -} from "@api/bindings"; +import { commands } from "@api/bindings"; import { CommandButton } from "@components/command-button"; import { IconDownload, @@ -19,6 +14,9 @@ import { ItemName } from "@components/item-name"; import { getModTitle } from "../../util/game-mod"; import { DeprecatedBadge } from "./deprecated-badge"; +const { deleteMod, downloadMod, openModFolder, runRunnableWithoutGame } = + commands; + type Props = { readonly mod: UnifiedMod; readonly onClose: () => void; diff --git a/frontend/components/mods/mods-page.tsx b/frontend/components/mods/mods-page.tsx index 6f9656d7..12969a01 100644 --- a/frontend/components/mods/mods-page.tsx +++ b/frontend/components/mods/mods-page.tsx @@ -2,7 +2,7 @@ import { Button, Group, Stack, Table, Text } from "@mantine/core"; import { useMemo, useState } from "react"; import { TableContainer } from "@components/table/table-container"; import { RefreshButton } from "@components/refresh-button"; -import { openModsFolder } from "@api/bindings"; +import { commands } from "@api/bindings"; import { IconFolderCog } from "@tabler/icons-react"; import { EngineBadge, @@ -47,7 +47,7 @@ export function ModsPage() { ) : null} + ); diff --git a/frontend/hooks/use-command-data.ts b/frontend/hooks/use-command-data.ts new file mode 100644 index 00000000..e7c8042f --- /dev/null +++ b/frontend/hooks/use-command-data.ts @@ -0,0 +1,26 @@ +import { useSetAtom, atom } from "jotai"; +import { useAsyncCommand } from "./use-async-command"; +import { useEffect } from "react"; +import { Result } from "@api/bindings"; + +export function commandData( + command: () => Promise>, + defaultValue: TResultValue, +) { + const stateAtom = atom(defaultValue); + + function useCommandData() { + const [asyncCommand] = useAsyncCommand(command); + const setData = useSetAtom(stateAtom); + + useEffect(() => { + asyncCommand().then((resultData) => { + if (resultData) { + setData(resultData); + } + }); + }, [asyncCommand, setData]); + } + + return [stateAtom, useCommandData] as const; +} diff --git a/frontend/hooks/use-data-partial-subscription.ts b/frontend/hooks/use-data-partial-subscription.ts index d0501438..9e760d60 100644 --- a/frontend/hooks/use-data-partial-subscription.ts +++ b/frontend/hooks/use-data-partial-subscription.ts @@ -8,7 +8,7 @@ import { import { useEffect, useRef } from "react"; import { useThrottledCallback } from "@mantine/hooks"; import { events } from "@api/bindings"; -import { dataCacheStore } from "./use-data"; +import { getDataCache } from "../util/data-cache"; type PartialData = { data: Map>; @@ -20,7 +20,6 @@ export function dataPartialSubscription< TData extends Map>, >(eventId: TEventId, getId: (payload: EventPayload) => string) { const cacheId = `data-partial-subscription-cache-${eventId}`; - const defaultData = new Map() as TData; const stateAtom = atom>({ data: defaultData, @@ -33,7 +32,7 @@ export function dataPartialSubscription< setData({ data: dataRef.current, }); - dataCacheStore.set(cacheId, [...dataRef.current]); + getDataCache().set(cacheId, [...dataRef.current]); }, 500); useAppEvent(events[eventId], (payload) => { @@ -43,7 +42,7 @@ export function dataPartialSubscription< useEffect(() => { try { - dataCacheStore + getDataCache() .get<[string, EventPayload][]>(cacheId) .then((data) => { if (data) { @@ -52,7 +51,7 @@ export function dataPartialSubscription< }); } catch (error) { console.error("Failed to load cached data. Clearing cache", error); - dataCacheStore.set(cacheId, []); + getDataCache().set(cacheId, []); } }, []); diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index 8df9aa18..ffe724ce 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -1,10 +1,10 @@ import { atom } from "jotai"; -import { events } from "@api/bindings"; +import { commands, events } from "@api/bindings"; import { dataSubscription } from "./use-data-subscription"; import { useUpdateData } from "./use-update-data"; import { dataPartialSubscription } from "./use-data-partial-subscription"; -import { Store } from "@tauri-apps/plugin-store"; import { useGameDropEvent } from "./use-game-drop-event"; +import { commandData } from "./use-command-data"; export const [installedGamesAtom, useInstalledGamesSubscription] = dataPartialSubscription("foundInstalledGame", (payload) => payload.id); @@ -27,15 +27,13 @@ export const [remoteModsAtom, useRemoteModsSubscription] = dataSubscription( {}, ); -export const [remoteGamesAtom, useRemoteGamesSubscription] = dataSubscription( - events.syncRemoteGames, +export const [remoteGamesAtom, useRemoteGamesSubscription] = commandData( + commands.fetchRemoteGames, [], ); export const loadingCountAtom = atom(0); -export const dataCacheStore = new Store(".data-cache.dat"); - export function useData() { useInstalledGamesSubscription(); useRemoteGamesSubscription(); diff --git a/frontend/hooks/use-update-data.ts b/frontend/hooks/use-update-data.ts index a2453a6c..5c6829eb 100644 --- a/frontend/hooks/use-update-data.ts +++ b/frontend/hooks/use-update-data.ts @@ -44,7 +44,7 @@ export function useUpdateData(executeOnMount = false) { } handleDataPromise(commands.updateLocalMods()); - handleDataPromise(commands.updateRemoteGames()); + // handleDataPromise(commands.updateRemoteGames()); }); }, [setLoading]); diff --git a/frontend/util/data-cache.ts b/frontend/util/data-cache.ts new file mode 100644 index 00000000..516306c3 --- /dev/null +++ b/frontend/util/data-cache.ts @@ -0,0 +1,5 @@ +import { Store } from "@tauri-apps/plugin-store"; + +export function getDataCache() { + return new Store(".data-cache.dat"); +} From ae3fed835e127f14fc40f611291850e98b92b3d2 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 6 Aug 2024 20:34:40 +0200 Subject: [PATCH 157/255] More parsed engine versions --- backend/rai-pal-core/src/remote_games.rs | 35 ++++++++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/rai-pal-core/src/remote_games.rs index 77173137..98ca0e83 100644 --- a/backend/rai-pal-core/src/remote_games.rs +++ b/backend/rai-pal-core/src/remote_games.rs @@ -1,7 +1,8 @@ use rai_pal_proc_macros::serializable_struct; -use crate::game_engines::game_engine::{EngineBrand, GameEngine}; -use crate::game_engines::unity; +use crate::game_engines::game_engine::{ + EngineBrand, EngineVersion, EngineVersionNumbers, GameEngine, +}; use crate::result::Result; const URL_BASE: &str = "https://raicuparta.github.io/rai-pal-db/game-db"; @@ -36,8 +37,6 @@ pub struct RemoteGame { pub epic_ids: Option>, } -// loose way to match string to brand, just needs to contain the name -// don't worry about case or extra spaces fn engine_brand_from_string(brand: &str) -> Option { let brand_lower = brand.to_lowercase(); if brand_lower.contains("unity") { @@ -53,6 +52,28 @@ fn engine_brand_from_string(brand: &str) -> Option { } } +fn parse_version(version: &str) -> Option { + let version_numbers = version + .split('.') + .filter_map(|part| part.parse::().ok()) + .take(2) + .collect::>(); + + version_numbers.first().map(|major| EngineVersion { + display: version_numbers + .iter() + .map(u32::to_string) + .collect::>() + .join("."), + numbers: EngineVersionNumbers { + major: *major, + minor: version_numbers.get(1).copied(), + patch: version_numbers.get(2).copied(), + }, + suffix: None, + }) +} + pub async fn get() -> Result> { let url = format!("{URL_BASE}/{DATABASE_VERSION}/games.json"); let response = reqwest::get(&url).await?; @@ -69,10 +90,12 @@ pub async fn get() -> Result> { .filter_map(|engine| { Some(GameEngine { brand: engine_brand_from_string(&engine.brand)?, - // TODO: Unreal game versions can be parsed from the brand part (maybe do this in the database python code tho) version: engine .version - .and_then(|version| unity::parse_version(&version)), + .and_then(|version| parse_version(&version)) + // If we can't parse the version or it wasn't provided, we can check if there's a number in the actual engine name. + // This is common for Unreal Engine, since it usually shows up as "Unreal Engine 4" or similar. + .or_else(|| parse_version(&engine.brand)), }) }) .collect() From b354a6cd9ceef474e20a6805137dad5de8d6e8b0 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 6 Aug 2024 20:36:48 +0200 Subject: [PATCH 158/255] comment --- backend/rai-pal-core/src/remote_games.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/rai-pal-core/src/remote_games.rs index 98ca0e83..0d92c684 100644 --- a/backend/rai-pal-core/src/remote_games.rs +++ b/backend/rai-pal-core/src/remote_games.rs @@ -52,6 +52,8 @@ fn engine_brand_from_string(brand: &str) -> Option { } } +// Version strings in PCGamingWiki can be all weird, so parsing is pretty lax here. +// We just split by dots and take the first numbers we find. fn parse_version(version: &str) -> Option { let version_numbers = version .split('.') From fbbdac5a38ddae13c7c964209aaa639a951e6c03 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 6 Aug 2024 21:21:06 +0200 Subject: [PATCH 159/255] persist selected tab --- frontend/app.tsx | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/frontend/app.tsx b/frontend/app.tsx index d92a0fff..e14ff145 100644 --- a/frontend/app.tsx +++ b/frontend/app.tsx @@ -14,9 +14,10 @@ import { import { ThanksPage } from "@components/thanks/thanks-page"; import { useAtomValue } from "jotai"; import { PageTab } from "@components/page-tab"; -import { useMemo } from "react"; +import { useCallback, useMemo } from "react"; import { useAppUpdater } from "@hooks/use-app-updater"; import { ThanksTabIcon } from "@components/thanks/thanks-tab-icon"; +import { usePersistedState } from "@hooks/use-persisted-state"; const pages = { installedGames: { @@ -54,6 +55,10 @@ function App() { const installedGames = useAtomValue(installedGamesAtom); const ownedGames = useAtomValue(ownedGamesAtom); + const [selectedTab, setSelectedTab] = usePersistedState( + firstPage, + "selected-app-tab", + ); const counts: TabCounts = useMemo( () => ({ @@ -66,11 +71,19 @@ function App() { [installedGames.data.size, ownedGames.data.size], ); + const handleTabChange = useCallback( + (pageId: string | null) => { + setSelectedTab(pageId as PageId); + }, + [setSelectedTab], + ); + return ( <> Date: Tue, 6 Aug 2024 21:25:14 +0200 Subject: [PATCH 160/255] persist sorting --- frontend/hooks/use-filtered-list.ts | 1 + frontend/hooks/use-table-sort.ts | 31 ++++++++++++++++++----------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/frontend/hooks/use-filtered-list.ts b/frontend/hooks/use-filtered-list.ts index e3e2e8e0..cc8104d3 100644 --- a/frontend/hooks/use-filtered-list.ts +++ b/frontend/hooks/use-filtered-list.ts @@ -15,6 +15,7 @@ export function useFilteredList( defaultFilterValue: TFilter, ) { const [sort, setSort] = useTableSort( + id, tableHeaders.find((header) => header.sort || header.getSortValue)?.id, ); const [filter, setFilter] = usePersistedState( diff --git a/frontend/hooks/use-table-sort.ts b/frontend/hooks/use-table-sort.ts index 439bf3eb..07a90984 100644 --- a/frontend/hooks/use-table-sort.ts +++ b/frontend/hooks/use-table-sort.ts @@ -1,22 +1,29 @@ -import { useCallback, useState } from "react"; +import { useCallback } from "react"; +import { usePersistedState } from "./use-persisted-state"; export type TableSort = { id?: string; reverse: boolean; }; -export function useTableSort(defaultId?: string) { - const [sort, setSort] = useState({ - id: defaultId, - reverse: false, - }); +export function useTableSort(tableId: string, defaultId?: string) { + const [sort, setSort] = usePersistedState( + { + id: defaultId, + reverse: false, + }, + tableId, + ); - const updateSort = useCallback((id: string) => { - setSort((previousSort) => ({ - id, - reverse: previousSort?.id === id && !previousSort.reverse, - })); - }, []); + const updateSort = useCallback( + (id: string) => { + setSort((previousSort) => ({ + id, + reverse: previousSort?.id === id && !previousSort.reverse, + })); + }, + [setSort], + ); return [sort, updateSort] as const; } From 58130e9b844f95a50da9b013196b4f4d12738adc Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 6 Aug 2024 22:05:53 +0200 Subject: [PATCH 161/255] commen --- frontend/hooks/use-persisted-state.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/hooks/use-persisted-state.ts b/frontend/hooks/use-persisted-state.ts index 8af63c76..7bd22ac2 100644 --- a/frontend/hooks/use-persisted-state.ts +++ b/frontend/hooks/use-persisted-state.ts @@ -5,6 +5,9 @@ import { setLocalStorage, } from "../util/local-storage"; +// This uses localStorage to persist state. +// The persisted data will often randomly disappear, but localStorage is really fast to use. +// So this is good for stuff that is convenient to persist, but not a big deal if it gets lost. export function usePersistedState(defaultState: TState, key?: string) { const [state, setState] = useState(() => { if (!key) return defaultState; From fc62ddbf677fe6b46e9e7271d317b03bd3ea230d Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 6 Aug 2024 22:10:15 +0200 Subject: [PATCH 162/255] loading during command data --- frontend/hooks/use-command-data.ts | 25 +++++++++++++++++-------- frontend/hooks/use-data.ts | 1 + 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/frontend/hooks/use-command-data.ts b/frontend/hooks/use-command-data.ts index e7c8042f..aa7b3495 100644 --- a/frontend/hooks/use-command-data.ts +++ b/frontend/hooks/use-command-data.ts @@ -1,25 +1,34 @@ import { useSetAtom, atom } from "jotai"; +import { atomWithStorage } from "jotai/utils"; import { useAsyncCommand } from "./use-async-command"; import { useEffect } from "react"; -import { Result } from "@api/bindings"; +import { type commands, Result } from "@api/bindings"; +import { loadingCountAtom } from "./use-data"; export function commandData( + id: keyof typeof commands, command: () => Promise>, defaultValue: TResultValue, ) { - const stateAtom = atom(defaultValue); + const stateAtom = atomWithStorage(id, defaultValue); function useCommandData() { const [asyncCommand] = useAsyncCommand(command); const setData = useSetAtom(stateAtom); + const setLoadingCount = useSetAtom(loadingCountAtom); useEffect(() => { - asyncCommand().then((resultData) => { - if (resultData) { - setData(resultData); - } - }); - }, [asyncCommand, setData]); + setLoadingCount((count) => count + 1); + asyncCommand() + .then((resultData) => { + if (resultData) { + setData(resultData); + } + }) + .finally(() => { + setLoadingCount((count) => count - 1); + }); + }, [asyncCommand, setData, setLoadingCount]); } return [stateAtom, useCommandData] as const; diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index ffe724ce..790b9e4c 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -28,6 +28,7 @@ export const [remoteModsAtom, useRemoteModsSubscription] = dataSubscription( ); export const [remoteGamesAtom, useRemoteGamesSubscription] = commandData( + "fetchRemoteGames", commands.fetchRemoteGames, [], ); From 34e579a29c962e76f944b5923c81a204bc4122d3 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 8 Aug 2024 13:29:25 +0200 Subject: [PATCH 163/255] enable gzip feature for reqwest --- backend/Cargo.lock | 14 ++++++++++++++ backend/rai-pal-core/Cargo.toml | 5 ++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 5754b3cc..90a641b4 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -175,6 +175,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "async-compression" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" +dependencies = [ + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", +] + [[package]] name = "async-io" version = "2.3.3" @@ -3728,6 +3741,7 @@ version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" dependencies = [ + "async-compression", "base64 0.22.1", "bytes", "encoding_rs", diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index e5d8b808..d7191f09 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -29,7 +29,10 @@ lazy_static = "1.4.0" lazy-regex = "3.0.2" pelite = "0.10.0" rand = "0.8.5" -reqwest = { version = "0.12.5", features = ["json"] } +reqwest = { version = "0.12.5", features = [ + "json", + "gzip", # We have some large JSONs in the Rai Pal Database, so gzip is useful. +] } rusqlite = { version = "0.31.0", features = ["bundled"] } serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" From f003aaca2246fa751c20cd82a1ccd02edbe4ec28 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 8 Aug 2024 14:50:28 +0200 Subject: [PATCH 164/255] dont use storage for remote games for now --- frontend/hooks/use-command-data.ts | 6 ++---- frontend/hooks/use-data.ts | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/frontend/hooks/use-command-data.ts b/frontend/hooks/use-command-data.ts index aa7b3495..bd65dc07 100644 --- a/frontend/hooks/use-command-data.ts +++ b/frontend/hooks/use-command-data.ts @@ -1,16 +1,14 @@ import { useSetAtom, atom } from "jotai"; -import { atomWithStorage } from "jotai/utils"; import { useAsyncCommand } from "./use-async-command"; import { useEffect } from "react"; -import { type commands, Result } from "@api/bindings"; +import { Result } from "@api/bindings"; import { loadingCountAtom } from "./use-data"; export function commandData( - id: keyof typeof commands, command: () => Promise>, defaultValue: TResultValue, ) { - const stateAtom = atomWithStorage(id, defaultValue); + const stateAtom = atom(defaultValue); function useCommandData() { const [asyncCommand] = useAsyncCommand(command); diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index 790b9e4c..ffe724ce 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -28,7 +28,6 @@ export const [remoteModsAtom, useRemoteModsSubscription] = dataSubscription( ); export const [remoteGamesAtom, useRemoteGamesSubscription] = commandData( - "fetchRemoteGames", commands.fetchRemoteGames, [], ); From 1a220e58d69106b049bbcf9e3a60efeb523ab4db Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 8 Aug 2024 15:05:23 +0200 Subject: [PATCH 165/255] fix cache error handling --- .../hooks/use-data-partial-subscription.ts | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/frontend/hooks/use-data-partial-subscription.ts b/frontend/hooks/use-data-partial-subscription.ts index 9e760d60..217af54f 100644 --- a/frontend/hooks/use-data-partial-subscription.ts +++ b/frontend/hooks/use-data-partial-subscription.ts @@ -41,18 +41,17 @@ export function dataPartialSubscription< }); useEffect(() => { - try { - getDataCache() - .get<[string, EventPayload][]>(cacheId) - .then((data) => { - if (data) { - dataRef.current = new Map([...data, ...dataRef.current]) as TData; - } - }); - } catch (error) { - console.error("Failed to load cached data. Clearing cache", error); - getDataCache().set(cacheId, []); - } + getDataCache() + .get<[string, EventPayload][]>(cacheId) + .then((data) => { + if (data) { + dataRef.current = new Map([...data, ...dataRef.current]) as TData; + } + }) + .catch((error) => { + console.error("Failed to load cached data. Clearing cache", error); + getDataCache().set(cacheId, []); + }); }, []); return stateAtom; From 0908073e1c57c81c12536513af5ab88760430c75 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 8 Aug 2024 15:12:18 +0200 Subject: [PATCH 166/255] fix not updating state after loading from cache --- frontend/hooks/use-data-partial-subscription.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/hooks/use-data-partial-subscription.ts b/frontend/hooks/use-data-partial-subscription.ts index 217af54f..e4695a9a 100644 --- a/frontend/hooks/use-data-partial-subscription.ts +++ b/frontend/hooks/use-data-partial-subscription.ts @@ -46,13 +46,14 @@ export function dataPartialSubscription< .then((data) => { if (data) { dataRef.current = new Map([...data, ...dataRef.current]) as TData; + updateState(); } }) .catch((error) => { console.error("Failed to load cached data. Clearing cache", error); getDataCache().set(cacheId, []); }); - }, []); + }, [updateState]); return stateAtom; } From c18c7eb1c4ee5dde4db14fca914311081341e87f Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 8 Aug 2024 15:25:45 +0200 Subject: [PATCH 167/255] include original provider game id in owned games --- backend/rai-pal-core/src/installed_game.rs | 2 +- backend/rai-pal-core/src/owned_game.rs | 8 +++++--- frontend/api/bindings.ts | 2 +- frontend/components/owned-games/owned-games-page.tsx | 2 +- frontend/hooks/use-data.ts | 2 +- frontend/hooks/use-processed-owned-games.ts | 4 ++-- 6 files changed, 11 insertions(+), 9 deletions(-) diff --git a/backend/rai-pal-core/src/installed_game.rs b/backend/rai-pal-core/src/installed_game.rs index 73c65335..fc28f142 100644 --- a/backend/rai-pal-core/src/installed_game.rs +++ b/backend/rai-pal-core/src/installed_game.rs @@ -95,7 +95,7 @@ impl InstalledGame { } pub fn set_provider_game_id(&mut self, provider_game_id: &str) -> &Self { - self.owned_game_id = Some(owned_game::get_id(self.provider, provider_game_id)); + self.owned_game_id = Some(owned_game::get_global_id(self.provider, provider_game_id)); self } diff --git a/backend/rai-pal-core/src/owned_game.rs b/backend/rai-pal-core/src/owned_game.rs index ee1737b5..4e700b75 100644 --- a/backend/rai-pal-core/src/owned_game.rs +++ b/backend/rai-pal-core/src/owned_game.rs @@ -13,7 +13,8 @@ use crate::{ #[serializable_struct] pub struct OwnedGame { - pub id: String, + pub global_id: String, + pub provider_game_id: String, pub provider: ProviderId, pub name: String, pub release_date: Option, @@ -27,7 +28,8 @@ pub struct OwnedGame { impl OwnedGame { pub fn new(provider_game_id: &str, provider: ProviderId, name: &str) -> Self { Self { - id: get_id(provider, provider_game_id), + global_id: get_global_id(provider, provider_game_id), + provider_game_id: provider_game_id.to_string(), provider, name: name.to_string(), provider_commands: HashMap::default(), @@ -77,6 +79,6 @@ impl OwnedGame { } } -pub fn get_id(provider: ProviderId, provider_game_id: &str) -> String { +pub fn get_global_id(provider: ProviderId, provider_game_id: &str) -> String { format!("{provider}_{provider_game_id}") } diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 92229ad7..5e7ea446 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -293,7 +293,7 @@ export type Manifest = { title: string | null; version: string; runnable: Runnab export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } export type ModKind = "Installable" | "Runnable" export type ModLoaderData = { id: string; path: string; kind: ModKind } -export type OwnedGame = { id: string; provider: ProviderId; name: string; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } +export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; name: string; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" diff --git a/frontend/components/owned-games/owned-games-page.tsx b/frontend/components/owned-games/owned-games-page.tsx index 904c20b4..25f85e58 100644 --- a/frontend/components/owned-games/owned-games-page.tsx +++ b/frontend/components/owned-games/owned-games-page.tsx @@ -114,7 +114,7 @@ export function OwnedGamesPage() { data={filteredGames} columns={filteredColumns} onChangeSort={setSort} - onClickItem={(game) => setSelectedGameId(game.id)} + onClickItem={(game) => setSelectedGameId(game.globalId)} sort={sort} /> diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index ffe724ce..cdc93bf5 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -10,7 +10,7 @@ export const [installedGamesAtom, useInstalledGamesSubscription] = dataPartialSubscription("foundInstalledGame", (payload) => payload.id); export const [ownedGamesAtom, useOwnedGamesSubscription] = - dataPartialSubscription("foundOwnedGame", (payload) => payload.id); + dataPartialSubscription("foundOwnedGame", (payload) => payload.globalId); export const [modLoadersAtom, useModLoadersSubscription] = dataSubscription( events.syncModLoaders, diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index 5589c235..9a3a8179 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -101,14 +101,14 @@ export function useProcessedOwnedGames() { const key = map === databaseGamesByProvider.title ? normalizeTitle(ownedGame.name) - : ownedGame.id.replace(`${ownedGame.provider}_`, ""); + : ownedGame.providerGameId; return map[key]; } for (const [gameId, ownedGame] of ownedGames.data.entries()) { const installedGame = - installedGamesByProvider[ownedGame.provider][ownedGame.id]; + installedGamesByProvider[ownedGame.provider][ownedGame.globalId]; result[gameId] = { ...ownedGame, From 4a912737fc17b24422343ffc34e348fb65f80519 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 8 Aug 2024 19:16:59 +0200 Subject: [PATCH 168/255] specify rust version in toolchain.toml --- backend/rust-toolchain.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/rust-toolchain.toml b/backend/rust-toolchain.toml index aa2092bd..c038c0b7 100644 --- a/backend/rust-toolchain.toml +++ b/backend/rust-toolchain.toml @@ -1,2 +1,3 @@ [toolchain] -components = [ "rustfmt", "clippy" ] +components = ["rustfmt", "clippy"] +channel = "1.80" From 1e8c4b0ab08750e9f558ff4bcde2c37034bcde10 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 10:50:37 +0200 Subject: [PATCH 169/255] cleanup dependencies --- backend/Cargo.lock | 15 ----------- backend/Cargo.toml | 7 ----- backend/gen/schemas/acl-manifests.json | 2 +- backend/gen/schemas/desktop-schema.json | 35 ------------------------- backend/gen/schemas/windows-schema.json | 35 ------------------------- backend/rai-pal-core/Cargo.toml | 7 +++-- package.json | 2 +- 7 files changed, 5 insertions(+), 98 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 90a641b4..31e5b5ab 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3487,7 +3487,6 @@ checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" name = "rai-pal" version = "0.13.0" dependencies = [ - "futures", "log", "open", "rai-pal-core", @@ -3500,14 +3499,11 @@ dependencies = [ "tauri-build", "tauri-plugin-dialog", "tauri-plugin-log", - "tauri-plugin-process", "tauri-plugin-store", "tauri-plugin-updater", "tauri-plugin-window-state", "tauri-runtime", "tauri-specta", - "thiserror", - "tokio", "webkit2gtk", "webview2-com", "winapi", @@ -3541,7 +3537,6 @@ dependencies = [ "serde_urlencoded", "specta", "steamlocate", - "tauri-specta", "thiserror", "tokio", "uuid", @@ -4855,16 +4850,6 @@ dependencies = [ "time", ] -[[package]] -name = "tauri-plugin-process" -version = "2.0.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d3663df0cd3e96feb37d46aad5d499d2edfcca5c62548ad34f1684e0019168" -dependencies = [ - "tauri", - "tauri-plugin", -] - [[package]] name = "tauri-plugin-store" version = "2.0.0-rc.0" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index e5a6f2e2..427c24b0 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -17,7 +17,6 @@ edition.workspace = true tauri-build = { version = "2.0.0-rc.0", features = [] } [workspace.dependencies] -futures = "0.3.29" log = "0.4.20" open = "5.0.0" rai-pal-core = { path = "./rai-pal-core" } @@ -26,21 +25,17 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.108" specta = "2.0.0-rc.19" tauri-specta = { version = "2.0.0-rc.14", features = ["derive", "typescript"] } -thiserror = "1.0.50" -tokio = { version = "1.35.1", features = ["macros"] } [dependencies] specta-typescript = "0.0.6" tauri = { version = "2.0.0-rc.0", features = [] } tauri-plugin-dialog = "2.0.0-rc.0" tauri-plugin-log = "2.0.0-rc.0" -tauri-plugin-process = "2.0.0-rc.0" tauri-plugin-store = "2.0.0-rc.0" tauri-plugin-updater = "2.0.0-rc.0" tauri-plugin-window-state = "2.0.0-rc.0" tauri-runtime = "2.0.0-rc.0" -futures.workspace = true log.workspace = true open.workspace = true rai-pal-core.workspace = true @@ -49,8 +44,6 @@ serde_json.workspace = true serde.workspace = true specta.workspace = true tauri-specta.workspace = true -thiserror.workspace = true -tokio.workspace = true [target.'cfg(target_os = "linux")'.dependencies] webkit2gtk = "2.0.1" diff --git a/backend/gen/schemas/acl-manifests.json b/backend/gen/schemas/acl-manifests.json index fdf53e7a..81cb9d3d 100644 --- a/backend/gen/schemas/acl-manifests.json +++ b/backend/gen/schemas/acl-manifests.json @@ -1 +1 @@ -{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"process":{"default_permission":{"identifier":"default","description":"This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n","permissions":["allow-exit","allow-restart"]},"permissions":{"allow-exit":{"identifier":"allow-exit","description":"Enables the exit command without any pre-configured scope.","commands":{"allow":["exit"],"deny":[]}},"allow-restart":{"identifier":"allow-restart","description":"Enables the restart command without any pre-configured scope.","commands":{"allow":["restart"],"deny":[]}},"deny-exit":{"identifier":"deny-exit","description":"Denies the exit command without any pre-configured scope.","commands":{"allow":[],"deny":["exit"]}},"deny-restart":{"identifier":"deny-restart","description":"Denies the restart command without any pre-configured scope.","commands":{"allow":[],"deny":["restart"]}}},"permission_sets":{},"global_scope_schema":null},"store":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-clear","allow-delete","allow-entries","allow-get","allow-has","allow-keys","allow-length","allow-load","allow-reset","allow-save","allow-set","allow-values"]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-delete":{"identifier":"allow-delete","description":"Enables the delete command without any pre-configured scope.","commands":{"allow":["delete"],"deny":[]}},"allow-entries":{"identifier":"allow-entries","description":"Enables the entries command without any pre-configured scope.","commands":{"allow":["entries"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-has":{"identifier":"allow-has","description":"Enables the has command without any pre-configured scope.","commands":{"allow":["has"],"deny":[]}},"allow-keys":{"identifier":"allow-keys","description":"Enables the keys command without any pre-configured scope.","commands":{"allow":["keys"],"deny":[]}},"allow-length":{"identifier":"allow-length","description":"Enables the length command without any pre-configured scope.","commands":{"allow":["length"],"deny":[]}},"allow-load":{"identifier":"allow-load","description":"Enables the load command without any pre-configured scope.","commands":{"allow":["load"],"deny":[]}},"allow-reset":{"identifier":"allow-reset","description":"Enables the reset command without any pre-configured scope.","commands":{"allow":["reset"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"allow-set":{"identifier":"allow-set","description":"Enables the set command without any pre-configured scope.","commands":{"allow":["set"],"deny":[]}},"allow-values":{"identifier":"allow-values","description":"Enables the values command without any pre-configured scope.","commands":{"allow":["values"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-delete":{"identifier":"deny-delete","description":"Denies the delete command without any pre-configured scope.","commands":{"allow":[],"deny":["delete"]}},"deny-entries":{"identifier":"deny-entries","description":"Denies the entries command without any pre-configured scope.","commands":{"allow":[],"deny":["entries"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-has":{"identifier":"deny-has","description":"Denies the has command without any pre-configured scope.","commands":{"allow":[],"deny":["has"]}},"deny-keys":{"identifier":"deny-keys","description":"Denies the keys command without any pre-configured scope.","commands":{"allow":[],"deny":["keys"]}},"deny-length":{"identifier":"deny-length","description":"Denies the length command without any pre-configured scope.","commands":{"allow":[],"deny":["length"]}},"deny-load":{"identifier":"deny-load","description":"Denies the load command without any pre-configured scope.","commands":{"allow":[],"deny":["load"]}},"deny-reset":{"identifier":"deny-reset","description":"Denies the reset command without any pre-configured scope.","commands":{"allow":[],"deny":["reset"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}},"deny-set":{"identifier":"deny-set","description":"Denies the set command without any pre-configured scope.","commands":{"allow":[],"deny":["set"]}},"deny-values":{"identifier":"deny-values","description":"Denies the values command without any pre-configured scope.","commands":{"allow":[],"deny":["values"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file +{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"store":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-clear","allow-delete","allow-entries","allow-get","allow-has","allow-keys","allow-length","allow-load","allow-reset","allow-save","allow-set","allow-values"]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-delete":{"identifier":"allow-delete","description":"Enables the delete command without any pre-configured scope.","commands":{"allow":["delete"],"deny":[]}},"allow-entries":{"identifier":"allow-entries","description":"Enables the entries command without any pre-configured scope.","commands":{"allow":["entries"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-has":{"identifier":"allow-has","description":"Enables the has command without any pre-configured scope.","commands":{"allow":["has"],"deny":[]}},"allow-keys":{"identifier":"allow-keys","description":"Enables the keys command without any pre-configured scope.","commands":{"allow":["keys"],"deny":[]}},"allow-length":{"identifier":"allow-length","description":"Enables the length command without any pre-configured scope.","commands":{"allow":["length"],"deny":[]}},"allow-load":{"identifier":"allow-load","description":"Enables the load command without any pre-configured scope.","commands":{"allow":["load"],"deny":[]}},"allow-reset":{"identifier":"allow-reset","description":"Enables the reset command without any pre-configured scope.","commands":{"allow":["reset"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"allow-set":{"identifier":"allow-set","description":"Enables the set command without any pre-configured scope.","commands":{"allow":["set"],"deny":[]}},"allow-values":{"identifier":"allow-values","description":"Enables the values command without any pre-configured scope.","commands":{"allow":["values"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-delete":{"identifier":"deny-delete","description":"Denies the delete command without any pre-configured scope.","commands":{"allow":[],"deny":["delete"]}},"deny-entries":{"identifier":"deny-entries","description":"Denies the entries command without any pre-configured scope.","commands":{"allow":[],"deny":["entries"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-has":{"identifier":"deny-has","description":"Denies the has command without any pre-configured scope.","commands":{"allow":[],"deny":["has"]}},"deny-keys":{"identifier":"deny-keys","description":"Denies the keys command without any pre-configured scope.","commands":{"allow":[],"deny":["keys"]}},"deny-length":{"identifier":"deny-length","description":"Denies the length command without any pre-configured scope.","commands":{"allow":[],"deny":["length"]}},"deny-load":{"identifier":"deny-load","description":"Denies the load command without any pre-configured scope.","commands":{"allow":[],"deny":["load"]}},"deny-reset":{"identifier":"deny-reset","description":"Denies the reset command without any pre-configured scope.","commands":{"allow":[],"deny":["reset"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}},"deny-set":{"identifier":"deny-set","description":"Denies the set command without any pre-configured scope.","commands":{"allow":[],"deny":["set"]}},"deny-values":{"identifier":"deny-values","description":"Denies the values command without any pre-configured scope.","commands":{"allow":[],"deny":["values"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/backend/gen/schemas/desktop-schema.json b/backend/gen/schemas/desktop-schema.json index 16741f6e..2a80568d 100644 --- a/backend/gen/schemas/desktop-schema.json +++ b/backend/gen/schemas/desktop-schema.json @@ -2208,41 +2208,6 @@ "log:deny-log" ] }, - { - "description": "process:default -> This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n", - "type": "string", - "enum": [ - "process:default" - ] - }, - { - "description": "process:allow-exit -> Enables the exit command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:allow-exit" - ] - }, - { - "description": "process:allow-restart -> Enables the restart command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:allow-restart" - ] - }, - { - "description": "process:deny-exit -> Denies the exit command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:deny-exit" - ] - }, - { - "description": "process:deny-restart -> Denies the restart command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:deny-restart" - ] - }, { "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", "type": "string", diff --git a/backend/gen/schemas/windows-schema.json b/backend/gen/schemas/windows-schema.json index 16741f6e..2a80568d 100644 --- a/backend/gen/schemas/windows-schema.json +++ b/backend/gen/schemas/windows-schema.json @@ -2208,41 +2208,6 @@ "log:deny-log" ] }, - { - "description": "process:default -> This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n", - "type": "string", - "enum": [ - "process:default" - ] - }, - { - "description": "process:allow-exit -> Enables the exit command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:allow-exit" - ] - }, - { - "description": "process:allow-restart -> Enables the restart command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:allow-restart" - ] - }, - { - "description": "process:deny-exit -> Denies the exit command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:deny-exit" - ] - }, - { - "description": "process:deny-restart -> Denies the restart command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:deny-restart" - ] - }, { "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", "type": "string", diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index d7191f09..8d58a1b1 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -6,16 +6,12 @@ edition.workspace = true [lib] [dependencies] -futures.workspace = true log.workspace = true open.workspace = true rai-pal-proc-macros.workspace = true serde_json.workspace = true serde.workspace = true specta.workspace = true -tauri-specta.workspace = true -thiserror.workspace = true -tokio.workspace = true async-trait = "0.1.74" base64 = "0.22.1" @@ -38,6 +34,9 @@ serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } zip = "0.6.6" +tokio = { version = "1.35.1", features = ["macros"] } +thiserror = "1.0.50" +futures = "0.3.29" [target.'cfg(target_os = "linux")'.dependencies] webkit2gtk = "2.0.1" diff --git a/package.json b/package.json index 4c306d33..4a15b4ae 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "tauri dev", "build": "tauri build", - "build-debug": "tauri build --debug --no-bundle --verbose", + "build-debug": "tauri build --debug --no-bundle", "vite": "vite", "tauri": "tauri", "update-icons": "tauri icon backend/icons/icon-source.png", From 508bf2c23a57d281ec392f98e53131c9f2dd99b5 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 11:00:42 +0200 Subject: [PATCH 170/255] more dependency cleanup --- backend/Cargo.lock | 32 +++++++++++++------------------- backend/Cargo.toml | 10 +--------- backend/proc-macros/Cargo.toml | 5 ++--- backend/rai-pal-core/Cargo.toml | 8 ++------ 4 files changed, 18 insertions(+), 37 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 31e5b5ab..369d48d7 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2401,9 +2401,9 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.28.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c10584274047cb335c23d3e61bcef8e323adae7c5c8c760540f73610177fc3f" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ "cc", "pkg-config", @@ -3504,10 +3504,6 @@ dependencies = [ "tauri-plugin-window-state", "tauri-runtime", "tauri-specta", - "webkit2gtk", - "webview2-com", - "winapi", - "winreg 0.52.0", ] [[package]] @@ -3540,8 +3536,6 @@ dependencies = [ "thiserror", "tokio", "uuid", - "webkit2gtk", - "webview2-com", "winapi", "winreg 0.52.0", "zip 0.6.6", @@ -3549,7 +3543,7 @@ dependencies = [ [[package]] name = "rai-pal-proc-macros" -version = "0.1.0" +version = "0.13.0" dependencies = [ "quote", "serde", @@ -3851,9 +3845,9 @@ dependencies = [ [[package]] name = "rusqlite" -version = "0.31.0" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b838eba278d213a8beaf485bd313fd580ca4505a00d5871caeb1457c55322cae" +checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" dependencies = [ "bitflags 2.6.0", "fallible-iterator", @@ -4382,9 +4376,9 @@ dependencies = [ [[package]] name = "specta" -version = "2.0.0-rc.19" +version = "2.0.0-rc.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c55a15e1cd11cd8b7bb846d2770ac2870f661a3cfe0b9744acf9da4d902ad931" +checksum = "4ccbb212565d2dc177bc15ecb7b039d66c4490da892436a4eee5b394d620c9bc" dependencies = [ "paste", "specta-macros", @@ -4405,9 +4399,9 @@ dependencies = [ [[package]] name = "specta-serde" -version = "0.0.6" +version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22c118b7369eac59b0b6e84e72b0dcc443efee3f6390f78fc5e9b2f388130b7e" +checksum = "12260cbb21abb2e83a0375b1521867910e3aed8a7afa782206150ce552cd2e5a" dependencies = [ "specta", "thiserror", @@ -4415,9 +4409,9 @@ dependencies = [ [[package]] name = "specta-typescript" -version = "0.0.6" +version = "0.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f681a64d09d0f9a898af8b443d2d1b866b1adb350d09da6ada186e10321c4f6" +checksum = "b1e4472229365ceb6395487e3a60d921ad8e21f9ad06eaecc396f098902c9adc" dependencies = [ "specta", "specta-serde", @@ -4954,9 +4948,9 @@ dependencies = [ [[package]] name = "tauri-specta" -version = "2.0.0-rc.14" +version = "2.0.0-rc.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c546a51bfe005c03e10b5a71c752165bd94b46566dfe0a409f409d67e17a3361" +checksum = "5146a4f94911b69b6086a0a700e8748b96cc18220b0504d5085dc0f856d2bec7" dependencies = [ "heck 0.5.0", "serde", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 427c24b0..ca4ff15f 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -27,7 +27,7 @@ specta = "2.0.0-rc.19" tauri-specta = { version = "2.0.0-rc.14", features = ["derive", "typescript"] } [dependencies] -specta-typescript = "0.0.6" +specta-typescript = "0.0.7" tauri = { version = "2.0.0-rc.0", features = [] } tauri-plugin-dialog = "2.0.0-rc.0" tauri-plugin-log = "2.0.0-rc.0" @@ -45,14 +45,6 @@ serde.workspace = true specta.workspace = true tauri-specta.workspace = true -[target.'cfg(target_os = "linux")'.dependencies] -webkit2gtk = "2.0.1" -webview2-com = "0.31.0" # Needed for getting the webview window on linux - -[target.'cfg(target_os = "windows")'.dependencies] -winapi = { version = "0.3.9", features = ["shellapi", "winuser"] } -winreg = "0.52.0" - [features] # this feature is used for production builds or when `devPath` points to the filesystem # DO NOT REMOVE!! diff --git a/backend/proc-macros/Cargo.toml b/backend/proc-macros/Cargo.toml index 3badf1a2..bb37fa29 100644 --- a/backend/proc-macros/Cargo.toml +++ b/backend/proc-macros/Cargo.toml @@ -1,8 +1,7 @@ [package] name = "rai-pal-proc-macros" -version = "0.1.0" -authors = ["Raicuparta"] -license = "GPL-3.0-or-later" +version.workspace = true +edition.workspace = true [lib] proc-macro = true diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 8d58a1b1..b14f3a46 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -29,7 +29,7 @@ reqwest = { version = "0.12.5", features = [ "json", "gzip", # We have some large JSONs in the Rai Pal Database, so gzip is useful. ] } -rusqlite = { version = "0.31.0", features = ["bundled"] } +rusqlite = { version = "0.32.1", features = ["bundled"] } serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } @@ -38,12 +38,8 @@ tokio = { version = "1.35.1", features = ["macros"] } thiserror = "1.0.50" futures = "0.3.29" -[target.'cfg(target_os = "linux")'.dependencies] -webkit2gtk = "2.0.1" -webview2-com = "0.31.0" # Needed for getting the webview window on linux - [target.'cfg(target_os = "windows")'.dependencies] -winapi = { version = "0.3.9", features = ["shellapi", "winuser"] } +winapi = { version = "0.3.9", features = ["winuser"] } winreg = "0.52.0" [lints] From a502966c2443f4021af11e39a52a4f4ea5269aba Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 11:20:36 +0200 Subject: [PATCH 171/255] show window via rust --- backend/capabilities/main.json | 3 +-- backend/gen/schemas/capabilities.json | 2 +- backend/src/main.rs | 8 ++++++++ backend/tauri.conf.json | 1 - index.html | 4 ---- vite.config.ts | 8 ++++++++ 6 files changed, 18 insertions(+), 8 deletions(-) diff --git a/backend/capabilities/main.json b/backend/capabilities/main.json index cb4afd1b..802b2b67 100644 --- a/backend/capabilities/main.json +++ b/backend/capabilities/main.json @@ -14,7 +14,6 @@ "dialog:allow-open", "dialog:allow-ask", "updater:allow-check", - "store:default", - "core:window:allow-show" + "store:default" ] } diff --git a/backend/gen/schemas/capabilities.json b/backend/gen/schemas/capabilities.json index b2e552fd..d09e6be8 100644 --- a/backend/gen/schemas/capabilities.json +++ b/backend/gen/schemas/capabilities.json @@ -1 +1 @@ -{"main-capabilities":{"identifier":"main-capabilities","description":"","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","dialog:allow-open","dialog:allow-ask","updater:allow-check","store:default","core:window:allow-show"]}} \ No newline at end of file +{"main-capabilities":{"identifier":"main-capabilities","description":"","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","dialog:allow-open","dialog:allow-ask","updater:allow-check","store:default"]}} \ No newline at end of file diff --git a/backend/src/main.rs b/backend/src/main.rs index 6adc58e6..04a9d08c 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -563,6 +563,14 @@ fn main() { if let Some(window) = app.get_webview_window("main") { window.set_title(&format!("Rai Pal {}", env!("CARGO_PKG_VERSION")))?; + + // Window is created hidden in tauri.conf.json. + // We show it here once everything is ready, which reduces the jumping around + // that happens while waiting for tauri_plugin_window_state to do its thing. + // We could also trigger this on the frontend to reduce the white flash, + // but it never seems to go away, and that introduces an extra delay + // until something is visible, so I figure I'd just show it here. + window.show()?; } Ok(()) diff --git a/backend/tauri.conf.json b/backend/tauri.conf.json index 6f800e2a..049cc117 100644 --- a/backend/tauri.conf.json +++ b/backend/tauri.conf.json @@ -46,7 +46,6 @@ "visible": false } ], - "withGlobalTauri": true, "security": { "dangerousDisableAssetCspModification": [ "style-src-elem" diff --git a/index.html b/index.html index 9dfdbbf5..06060c02 100644 --- a/index.html +++ b/index.html @@ -21,8 +21,4 @@ background-color: #1a1b1e; } - diff --git a/vite.config.ts b/vite.config.ts index 852d272b..59cb7b4f 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -36,6 +36,14 @@ export default defineConfig(async () => ({ ignored: ["backend/target/**"], }, }, + build: { + rollupOptions: { + output: { + manualChunks: undefined, + }, + }, + chunkSizeWarningLimit: 2000, + }, // 3. to make use of `TAURI_DEBUG` and other env variables // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand envPrefix: ["VITE_", "TAURI_ENV_"], From b631e690211e24874bbf6cb1aa045d9febe663b1 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 11:50:45 +0200 Subject: [PATCH 172/255] update deps --- backend/Cargo.lock | 170 ++++++++++++++++++++------------------------ backend/src/main.rs | 4 +- 2 files changed, 78 insertions(+), 96 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 369d48d7..8f742d06 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -54,7 +54,7 @@ dependencies = [ "cfg-if", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -524,9 +524,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca2be1d5c43812bae364ee3f30b3afcb7877cf59f4aeb94c66f313a41d2fac9" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" dependencies = [ "serde", ] @@ -621,9 +621,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc" +checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" dependencies = [ "jobserver", "libc", @@ -1116,9 +1116,9 @@ dependencies = [ [[package]] name = "dunce" -version = "1.0.4" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" +checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "dyn-clone" @@ -1299,21 +1299,21 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "libredox", + "windows-sys 0.59.0", ] [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", "miniz_oxide", @@ -2031,9 +2031,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" +checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" dependencies = [ "bytes", "futures-channel", @@ -2397,6 +2397,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.6.0", "libc", + "redox_syscall", ] [[package]] @@ -2834,9 +2835,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.2" +version = "0.36.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f203fa8daa7bb185f760ae12bd8e097f63d17041dcdcaf675ac54cdf863170e" +checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" dependencies = [ "memchr", ] @@ -2973,7 +2974,7 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.3", + "redox_syscall", "smallvec", "windows-targets 0.52.6", ] @@ -3321,11 +3322,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy 0.6.6", + "zerocopy", ] [[package]] @@ -3424,9 +3425,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" dependencies = [ "bytes", "pin-project-lite", @@ -3434,6 +3435,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", + "socket2", "thiserror", "tokio", "tracing", @@ -3441,9 +3443,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" dependencies = [ "bytes", "rand 0.8.5", @@ -3465,6 +3467,7 @@ dependencies = [ "libc", "once_cell", "socket2", + "tracing", "windows-sys 0.52.0", ] @@ -3642,15 +3645,6 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" -[[package]] -name = "redox_syscall" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "redox_syscall" version = "0.5.3" @@ -3673,9 +3667,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -3881,9 +3875,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "1.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" @@ -3923,9 +3917,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -3933,9 +3927,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "976295e77ce332211c0d24d92c0e83e50f5c5f046d11082cea19f3df13a3562d" +checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" @@ -4096,9 +4090,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.204" +version = "1.0.205" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" dependencies = [ "serde_derive", ] @@ -4116,9 +4110,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.205" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" dependencies = [ "proc-macro2", "quote", @@ -4138,9 +4132,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.121" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ "itoa 1.0.11", "memchr", @@ -4342,7 +4336,7 @@ dependencies = [ "objc2-foundation", "objc2-quartz-core", "raw-window-handle 0.6.2", - "redox_syscall 0.5.3", + "redox_syscall", "wasm-bindgen", "web-sys", "windows-sys 0.52.0", @@ -4707,9 +4701,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85ceb8d082c3b17b4b2eb134a39363a22c696ddba473d6e5c0ab1caadad4cfca" +checksum = "96a58b3a716b51d7f671f729bb8c0a53cd2551eec8450c64e828ef4e6c9f948e" dependencies = [ "anyhow", "cargo_toml", @@ -4729,9 +4723,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2407c7d37a491b16e530445c9611d91091cae198eea2ed424913b740215605f2" +checksum = "90a9e63ecd827d57228864764e0234935c9aac230099cf145197c8c08e754ced" dependencies = [ "base64 0.22.1", "brotli", @@ -4756,9 +4750,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d210893b693be00f569b4f54456803debe104b7675f368205f2b6e94bac09b34" +checksum = "a54f5d5b289aa6215ffcfed7d4ff9960a04b7a854436d04519a9fcf911050cba" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4770,9 +4764,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b352e4478af27bd7c76724bb426ebb32fc51baafb2186afabed4e706dc9e39d4" +checksum = "03ce2ac5e182251ff932750d69c9b240a78e44901a7a6234814d63c595b43660" dependencies = [ "anyhow", "glob", @@ -4905,9 +4899,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6624fdf383ccafc9e8ad9205fe6e5c976b318efcd6b3662dde658c74e4254792" +checksum = "8f01b129b1ebdf09563c354760dbe7c0e96a166b4e33362d9c8d207f527c7ea5" dependencies = [ "dpi", "gtk", @@ -4924,9 +4918,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fd1a785c4281f8231b091593393b40cb3a800810c407b1ffed52de27ff1640a" +checksum = "fcda27639094ace2bf25f00bc10e35ea4e3af2f92753b1bdd2a174d1fa5a6292" dependencies = [ "cocoa", "gtk", @@ -4976,9 +4970,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f435eeaae1e69cf93cf19da0f727989eed2e5eb6fc63a8d21432f59dd3ac4ac" +checksum = "28bb83cffa26e9cb7a2b3d0c31ab87bf277f44aaaa90f17159aef4d37aabd051" dependencies = [ "brotli", "cargo_metadata", @@ -5021,14 +5015,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.10.1" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" dependencies = [ "cfg-if", "fastrand", + "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5788,11 +5783,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5912,6 +5907,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.42.2" @@ -6280,34 +6284,14 @@ dependencies = [ "zvariant", ] -[[package]] -name = "zerocopy" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" -dependencies = [ - "byteorder", - "zerocopy-derive 0.6.6", -] - [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy-derive" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "byteorder", + "zerocopy-derive", ] [[package]] @@ -6383,9 +6367,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.12+zstd.1.5.6" +version = "2.0.13+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" dependencies = [ "cc", "pkg-config", diff --git a/backend/src/main.rs b/backend/src/main.rs index 04a9d08c..34382475 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -4,8 +4,6 @@ #![allow(clippy::used_underscore_binding)] // Command stuff needs to be async so I can spawn tasks. #![allow(clippy::unused_async)] -// This is here because tauri specta would go over whatever the default limit is. -#![recursion_limit = "256"] use std::{collections::HashMap, path::PathBuf, sync::Mutex}; @@ -513,7 +511,7 @@ fn main() { uninstall_all_mods, uninstall_mod, update_local_mods, - fetch_remote_games + fetch_remote_games, ]) .events(events::collect_events()); From b9a3d7b3b321ddccc1cfac029b03a754b0072ea6 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 11:58:59 +0200 Subject: [PATCH 173/255] update zip --- backend/Cargo.lock | 183 ++++++-------------------------- backend/rai-pal-core/Cargo.toml | 2 +- 2 files changed, 32 insertions(+), 153 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 8f742d06..0c5d0410 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -23,17 +23,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "ahash" version = "0.7.8" @@ -346,12 +335,6 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "base64ct" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" - [[package]] name = "bitflags" version = "1.3.2" @@ -531,27 +514,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bzip2" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" -dependencies = [ - "bzip2-sys", - "libc", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.11+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "cairo-rs" version = "0.18.5" @@ -624,10 +586,6 @@ name = "cc" version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" -dependencies = [ - "jobserver", - "libc", -] [[package]] name = "cesu8" @@ -689,16 +647,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "cocoa" version = "0.25.0" @@ -748,12 +696,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "constant_time_eq" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" - [[package]] name = "convert_case" version = "0.4.0" @@ -1017,7 +959,6 @@ checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", - "subtle", ] [[package]] @@ -1912,15 +1853,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - [[package]] name = "html5ever" version = "0.26.0" @@ -2145,15 +2077,6 @@ dependencies = [ "cfb", ] -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - [[package]] name = "instant" version = "0.1.13" @@ -2245,15 +2168,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" -[[package]] -name = "jobserver" -version = "0.1.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" -dependencies = [ - "libc", -] - [[package]] name = "js-sys" version = "0.3.69" @@ -2589,7 +2503,7 @@ dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys", - "num_enum", + "num_enum 0.5.11", "raw-window-handle 0.5.2", "thiserror", ] @@ -2670,7 +2584,16 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive", + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" +dependencies = [ + "num_enum_derive 0.7.3", ] [[package]] @@ -2685,6 +2608,18 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "num_enum_derive" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" +dependencies = [ + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.72", +] + [[package]] name = "num_threads" version = "0.1.7" @@ -2979,17 +2914,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "password-hash" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" -dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "paste" version = "1.0.15" @@ -3002,18 +2926,6 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" -[[package]] -name = "pbkdf2" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" -dependencies = [ - "digest", - "hmac", - "password-hash", - "sha2", -] - [[package]] name = "pelite" version = "0.10.0" @@ -3541,7 +3453,7 @@ dependencies = [ "uuid", "winapi", "winreg 0.52.0", - "zip 0.6.6", + "zip 1.1.4", ] [[package]] @@ -6313,22 +6225,18 @@ checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zip" -version = "0.6.6" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +checksum = "9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164" dependencies = [ - "aes", - "byteorder", - "bzip2", - "constant_time_eq", + "arbitrary", "crc32fast", "crossbeam-utils", + "displaydoc", "flate2", - "hmac", - "pbkdf2", - "sha1", - "time", - "zstd", + "indexmap 2.3.0", + "num_enum 0.7.3", + "thiserror", ] [[package]] @@ -6346,35 +6254,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "zstd" -version = "0.11.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" -dependencies = [ - "zstd-safe", -] - -[[package]] -name = "zstd-safe" -version = "5.0.2+zstd.1.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" -dependencies = [ - "libc", - "zstd-sys", -] - -[[package]] -name = "zstd-sys" -version = "2.0.13+zstd.1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" -dependencies = [ - "cc", - "pkg-config", -] - [[package]] name = "zvariant" version = "4.0.0" diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index b14f3a46..78de0319 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -33,10 +33,10 @@ rusqlite = { version = "0.32.1", features = ["bundled"] } serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } -zip = "0.6.6" tokio = { version = "1.35.1", features = ["macros"] } thiserror = "1.0.50" futures = "0.3.29" +zip = { version = "1.1.4", default-features = false, features = ["deflate"] } [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3.9", features = ["winuser"] } From 787250a34f112bb2bb8a72592571c9a6180b6d57 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 12:17:11 +0200 Subject: [PATCH 174/255] no need for async_trait dependency anymore --- backend/Cargo.lock | 1 - backend/rai-pal-core/Cargo.toml | 1 - backend/rai-pal-core/src/lib.rs | 2 ++ backend/rai-pal-core/src/mod_loaders/bepinex.rs | 2 -- backend/rai-pal-core/src/mod_loaders/mod_loader.rs | 2 -- backend/rai-pal-core/src/mod_loaders/runnable_loader.rs | 2 -- backend/rai-pal-core/src/providers/epic_provider.rs | 2 -- backend/rai-pal-core/src/providers/gog_provider.rs | 2 -- backend/rai-pal-core/src/providers/itch_provider.rs | 2 -- backend/rai-pal-core/src/providers/manual_provider.rs | 2 -- backend/rai-pal-core/src/providers/provider.rs | 2 -- backend/rai-pal-core/src/providers/steam_provider.rs | 2 -- backend/rai-pal-core/src/providers/xbox_provider.rs | 2 -- 13 files changed, 2 insertions(+), 22 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 0c5d0410..5fd587cb 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3425,7 +3425,6 @@ dependencies = [ name = "rai-pal-core" version = "0.13.0" dependencies = [ - "async-trait", "base64 0.22.1", "byteorder", "chrono", diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 78de0319..8586916b 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -13,7 +13,6 @@ serde_json.workspace = true serde.workspace = true specta.workspace = true -async-trait = "0.1.74" base64 = "0.22.1" byteorder = "1.5.0" chrono = "0.4.31" diff --git a/backend/rai-pal-core/src/lib.rs b/backend/rai-pal-core/src/lib.rs index 70509d8d..59b8b3b0 100644 --- a/backend/rai-pal-core/src/lib.rs +++ b/backend/rai-pal-core/src/lib.rs @@ -1,3 +1,5 @@ +#![allow(async_fn_in_trait)] + pub mod analytics; pub mod app_type; pub mod debug; diff --git a/backend/rai-pal-core/src/mod_loaders/bepinex.rs b/backend/rai-pal-core/src/mod_loaders/bepinex.rs index 129f072c..84201529 100644 --- a/backend/rai-pal-core/src/mod_loaders/bepinex.rs +++ b/backend/rai-pal-core/src/mod_loaders/bepinex.rs @@ -4,7 +4,6 @@ use std::{ path::{Path, PathBuf}, }; -use async_trait::async_trait; use rai_pal_proc_macros::serializable_struct; use zip::ZipArchive; @@ -44,7 +43,6 @@ impl ModLoaderStatic for BepInEx { } } -#[async_trait] impl ModLoaderActions for BepInEx { fn get_data(&self) -> &ModLoaderData { &self.data diff --git a/backend/rai-pal-core/src/mod_loaders/mod_loader.rs b/backend/rai-pal-core/src/mod_loaders/mod_loader.rs index 4327b856..5983db6e 100644 --- a/backend/rai-pal-core/src/mod_loaders/mod_loader.rs +++ b/backend/rai-pal-core/src/mod_loaders/mod_loader.rs @@ -4,7 +4,6 @@ use std::{ path::{Path, PathBuf}, }; -use async_trait::async_trait; use enum_dispatch::enum_dispatch; use log::error; use rai_pal_proc_macros::serializable_struct; @@ -37,7 +36,6 @@ pub enum ModLoader { RunnableLoader, } -#[async_trait] #[enum_dispatch(ModLoader)] pub trait ModLoaderActions { fn install(&self, game: &InstalledGame) -> Result; diff --git a/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs b/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs index 1534711c..3cd32350 100644 --- a/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs +++ b/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs @@ -3,7 +3,6 @@ use std::{ process::Command, }; -use async_trait::async_trait; use log::error; use rai_pal_proc_macros::serializable_struct; @@ -106,7 +105,6 @@ fn replace_parameters(argument: &str, game: &InstalledGame) -> String { result } -#[async_trait] impl ModLoaderActions for RunnableLoader { fn get_data(&self) -> &ModLoaderData { &self.data diff --git a/backend/rai-pal-core/src/providers/epic_provider.rs b/backend/rai-pal-core/src/providers/epic_provider.rs index c2f44449..2ec3fb4b 100644 --- a/backend/rai-pal-core/src/providers/epic_provider.rs +++ b/backend/rai-pal-core/src/providers/epic_provider.rs @@ -6,7 +6,6 @@ use std::{ path::{Path, PathBuf}, }; -use async_trait::async_trait; use base64::engine::general_purpose; use log::error; use rai_pal_proc_macros::serializable_struct; @@ -177,7 +176,6 @@ impl EpicCatalogItem { } } -#[async_trait] impl ProviderActions for Epic { async fn get_games( &self, diff --git a/backend/rai-pal-core/src/providers/gog_provider.rs b/backend/rai-pal-core/src/providers/gog_provider.rs index 6d95b514..d6ec114f 100644 --- a/backend/rai-pal-core/src/providers/gog_provider.rs +++ b/backend/rai-pal-core/src/providers/gog_provider.rs @@ -2,7 +2,6 @@ use std::path::{Path, PathBuf}; -use async_trait::async_trait; use log::error; use rai_pal_proc_macros::serializable_struct; use rusqlite::{Connection, OpenFlags}; @@ -94,7 +93,6 @@ impl ProviderStatic for Gog { } } -#[async_trait] impl ProviderActions for Gog { async fn get_games( &self, diff --git a/backend/rai-pal-core/src/providers/itch_provider.rs b/backend/rai-pal-core/src/providers/itch_provider.rs index 95988949..0ea9e787 100644 --- a/backend/rai-pal-core/src/providers/itch_provider.rs +++ b/backend/rai-pal-core/src/providers/itch_provider.rs @@ -1,6 +1,5 @@ use std::path::{Path, PathBuf}; -use async_trait::async_trait; use chrono::DateTime; use log::error; use rai_pal_proc_macros::serializable_struct; @@ -102,7 +101,6 @@ pub struct ItchDatabase { caves: Vec, } -#[async_trait] impl ProviderActions for Itch { async fn get_games( &self, diff --git a/backend/rai-pal-core/src/providers/manual_provider.rs b/backend/rai-pal-core/src/providers/manual_provider.rs index da6a0756..67108b97 100644 --- a/backend/rai-pal-core/src/providers/manual_provider.rs +++ b/backend/rai-pal-core/src/providers/manual_provider.rs @@ -3,7 +3,6 @@ use std::{ path::{Path, PathBuf}, }; -use async_trait::async_trait; use log::error; use rai_pal_proc_macros::serializable_struct; @@ -34,7 +33,6 @@ impl ProviderStatic for Manual { } } -#[async_trait] impl ProviderActions for Manual { async fn get_games( &self, diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/rai-pal-core/src/providers/provider.rs index e567337d..9f5c9581 100644 --- a/backend/rai-pal-core/src/providers/provider.rs +++ b/backend/rai-pal-core/src/providers/provider.rs @@ -4,7 +4,6 @@ use std::{ path::PathBuf, }; -use async_trait::async_trait; use enum_dispatch::enum_dispatch; #[cfg(target_os = "windows")] @@ -54,7 +53,6 @@ const PROVIDERS: &Map = &[ create_map_entry::(), ]; -#[async_trait] #[enum_dispatch(Provider)] pub trait ProviderActions { async fn get_games( diff --git a/backend/rai-pal-core/src/providers/steam_provider.rs b/backend/rai-pal-core/src/providers/steam_provider.rs index b686b7d0..48ad35c3 100644 --- a/backend/rai-pal-core/src/providers/steam_provider.rs +++ b/backend/rai-pal-core/src/providers/steam_provider.rs @@ -5,7 +5,6 @@ use std::{ path::{Path, PathBuf}, }; -use async_trait::async_trait; use futures::StreamExt; use lazy_regex::BytesRegex; use steamlocate::SteamDir; @@ -237,7 +236,6 @@ impl Steam { } } -#[async_trait] impl ProviderActions for Steam { async fn get_games( &self, diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index b7c6e9b2..909768c3 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -2,7 +2,6 @@ use std::path::PathBuf; -use async_trait::async_trait; use log::error; use winreg::{ enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}, @@ -31,7 +30,6 @@ impl ProviderStatic for Xbox { } } -#[async_trait] impl ProviderActions for Xbox { async fn get_games( &self, From 4a1a92ce05f855865cc37a71037480c75d68fc67 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 12:27:23 +0200 Subject: [PATCH 175/255] more dependency cleanup --- backend/Cargo.lock | 40 ------------------------------ backend/rai-pal-core/Cargo.toml | 3 +-- backend/rai-pal-core/src/result.rs | 7 ------ frontend/api/bindings.ts | 2 +- 4 files changed, 2 insertions(+), 50 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 5fd587cb..1ec25d7e 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -640,10 +640,8 @@ checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", - "js-sys", "num-traits", "serde", - "wasm-bindgen", "windows-targets 0.52.6", ] @@ -1714,17 +1712,6 @@ dependencies = [ "system-deps", ] -[[package]] -name = "goblin" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b363a30c165f666402fe6a3024d3bec7ebc898f96a4a23bd1c99f8dbf3f4f47" -dependencies = [ - "log", - "plain", - "scroll", -] - [[package]] name = "gtk" version = "0.18.1" @@ -3179,12 +3166,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" -[[package]] -name = "plain" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4596b6d070b27117e987119b4dac604f3c58cfb0b191112e24771b2faeac1a6" - [[package]] name = "plist" version = "1.7.0" @@ -3432,7 +3413,6 @@ dependencies = [ "enum_dispatch", "futures", "globwalk", - "goblin", "lazy-regex", "lazy_static", "log", @@ -3921,26 +3901,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scroll" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ab8598aa408498679922eff7fa985c25d58a90771bd6be794434c5277eab1a6" -dependencies = [ - "scroll_derive", -] - -[[package]] -name = "scroll_derive" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f81c2fde025af7e69b1d1420531c8a8811ca898919db177141a85313b1cb932" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "seahash" version = "4.1.0" diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 8586916b..ab9fbdd3 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -15,11 +15,10 @@ specta.workspace = true base64 = "0.22.1" byteorder = "1.5.0" -chrono = "0.4.31" +chrono = { version = "0.4.31", default-features = false, features = ["std"] } directories = "5.0.1" enum_dispatch = "0.3.12" globwalk = "0.9.1" -goblin = "0.8.2" lazy_static = "1.4.0" lazy-regex = "3.0.2" pelite = "0.10.0" diff --git a/backend/rai-pal-core/src/result.rs b/backend/rai-pal-core/src/result.rs index 39773426..ca192a36 100644 --- a/backend/rai-pal-core/src/result.rs +++ b/backend/rai-pal-core/src/result.rs @@ -19,13 +19,6 @@ pub enum Error { reqwest::Error, ), - #[error(transparent)] - Goblin( - #[from] - #[serde(skip)] - goblin::error::Error, - ), - #[error(transparent)] Zip( #[from] diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 5e7ea446..91f3db28 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -277,7 +277,7 @@ export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type Error = "Io" | "Reqwest" | "Goblin" | "Zip" | "Json" | "ChronoParse" | "SQLite" | "Env" | "TaskJoin" | "UrlEncode" | "HeaderToStr" | "TryFromInt" | "Regex" | "SteamLocate" | { InvalidBinaryVdfType: [number, string] } | { AppDataNotFound: [] } | { PathParseFailure: string } | { PathParentNotFound: string } | { EmptyFile: string } | { AppInfoNotFound: string } | { FailedToParseUnityVersionAsset: string } | { ModInstallInfoInsufficient: [string, string] } | { EmptyStateData: [] } | { FailedToAccessStateData: string } | { FailedToGetGameFromPath: string } | { GameAlreadyAdded: string } | { DataEntryNotFound: string } | { UnityBackendUnknown: string } | { ModDownloadNotAvailable: string } | { RunnableManifestNotFound: string } | { CantRunNonRunnable: string } | { FailedToGetResourcesPath: string } | { InvalidProviderId: string } +export type Error = "Io" | "Reqwest" | "Zip" | "Json" | "ChronoParse" | "SQLite" | "Env" | "TaskJoin" | "UrlEncode" | "HeaderToStr" | "TryFromInt" | "Regex" | "SteamLocate" | { InvalidBinaryVdfType: [number, string] } | { AppDataNotFound: [] } | { PathParseFailure: string } | { PathParentNotFound: string } | { EmptyFile: string } | { AppInfoNotFound: string } | { FailedToParseUnityVersionAsset: string } | { ModInstallInfoInsufficient: [string, string] } | { EmptyStateData: [] } | { FailedToAccessStateData: string } | { FailedToGetGameFromPath: string } | { GameAlreadyAdded: string } | { DataEntryNotFound: string } | { UnityBackendUnknown: string } | { ModDownloadNotAvailable: string } | { RunnableManifestNotFound: string } | { CantRunNonRunnable: string } | { FailedToGetResourcesPath: string } | { InvalidProviderId: string } export type ErrorRaised = string export type ExecutedProviderCommand = null export type FoundInstalledGame = InstalledGame From 03b8cc3dfd625b514cbff98c9663e5084b2b69d4 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 12:30:35 +0200 Subject: [PATCH 176/255] cleaner pelite --- backend/Cargo.lock | 11 ----------- backend/rai-pal-core/Cargo.toml | 2 +- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 1ec25d7e..9ee6e9b8 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -894,9 +894,6 @@ name = "dataview" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50eb3a329e19d78c3a3dfa4ec5a51ecb84fa3a20c06edad04be25356018218f9" -dependencies = [ - "derive_pod", -] [[package]] name = "deranged" @@ -943,12 +940,6 @@ dependencies = [ "syn 2.0.72", ] -[[package]] -name = "derive_pod" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ea6706d74fca54e15f1d40b5cf7fe7f764aaec61352a9fcec58fe27e042fc8" - [[package]] name = "digest" version = "0.10.7" @@ -2920,10 +2911,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88dccf4bd32294364aeb7bd55d749604450e9db54605887551f21baea7617685" dependencies = [ "dataview", - "libc", "no-std-compat", "pelite-macros", - "winapi", ] [[package]] diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index ab9fbdd3..c3345d82 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -21,7 +21,7 @@ enum_dispatch = "0.3.12" globwalk = "0.9.1" lazy_static = "1.4.0" lazy-regex = "3.0.2" -pelite = "0.10.0" +pelite = { version = "0.10.0", features = ["std"], default-features = false } rand = "0.8.5" reqwest = { version = "0.12.5", features = [ "json", From 522aa118affa9b0f36884e6fdaae1929c2c47419 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 12:39:55 +0200 Subject: [PATCH 177/255] ditch rand --- backend/Cargo.lock | 1 - backend/rai-pal-core/Cargo.toml | 1 - backend/rai-pal-core/src/mod_loaders/mod_database.rs | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 9ee6e9b8..e6bcbb12 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3408,7 +3408,6 @@ dependencies = [ "open", "pelite", "rai-pal-proc-macros", - "rand 0.8.5", "reqwest", "rusqlite", "serde", diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index c3345d82..320a63d3 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -22,7 +22,6 @@ globwalk = "0.9.1" lazy_static = "1.4.0" lazy-regex = "3.0.2" pelite = { version = "0.10.0", features = ["std"], default-features = false } -rand = "0.8.5" reqwest = { version = "0.12.5", features = [ "json", "gzip", # We have some large JSONs in the Rai Pal Database, so gzip is useful. diff --git a/backend/rai-pal-core/src/mod_loaders/mod_database.rs b/backend/rai-pal-core/src/mod_loaders/mod_database.rs index 5b2874db..aa482306 100644 --- a/backend/rai-pal-core/src/mod_loaders/mod_database.rs +++ b/backend/rai-pal-core/src/mod_loaders/mod_database.rs @@ -64,10 +64,8 @@ pub struct ModGithubInfo { } pub async fn get(mod_loader_id: &str) -> Result { - let random = rand::random::(); - Ok(reqwest::get(format!( - "{URL_BASE}/{DATABASE_VERSION}/{mod_loader_id}.json?cache_avoider={random}" + "{URL_BASE}/{DATABASE_VERSION}/{mod_loader_id}.json" )) .await? .json::() From 14655344599165f7f38c8a6c5dae92243250325c Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 12:53:21 +0200 Subject: [PATCH 178/255] fix table sort messing with filters --- frontend/hooks/use-filtered-list.ts | 2 +- frontend/hooks/use-table-sort.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/hooks/use-filtered-list.ts b/frontend/hooks/use-filtered-list.ts index cc8104d3..5d0bf098 100644 --- a/frontend/hooks/use-filtered-list.ts +++ b/frontend/hooks/use-filtered-list.ts @@ -20,7 +20,7 @@ export function useFilteredList( ); const [filter, setFilter] = usePersistedState( defaultFilterValue, - id, + `filtered-list-${id}`, ); const [search, setSearch] = useState(""); diff --git a/frontend/hooks/use-table-sort.ts b/frontend/hooks/use-table-sort.ts index 07a90984..ef2b957e 100644 --- a/frontend/hooks/use-table-sort.ts +++ b/frontend/hooks/use-table-sort.ts @@ -12,7 +12,7 @@ export function useTableSort(tableId: string, defaultId?: string) { id: defaultId, reverse: false, }, - tableId, + `table-sort-${tableId}`, ); const updateSort = useCallback( From 156eb8cd76ca664c64f1aa43cfc10d9fd42afc6b Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 12:58:41 +0200 Subject: [PATCH 179/255] cleanup --- backend/src/main.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index 34382475..f54920d4 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,7 +1,5 @@ // Prevents additional console window on Windows in release, DO NOT REMOVE!! #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] -// There's some weird tauri thing making this clippy error show up everywhere. -#![allow(clippy::used_underscore_binding)] // Command stuff needs to be async so I can spawn tasks. #![allow(clippy::unused_async)] @@ -270,7 +268,7 @@ fn refresh_local_mods(mod_loaders: &mod_loader::Map, handle: &AppHandle) -> loca let local_mods: HashMap<_, _> = mod_loaders .values() .filter_map(|mod_loader| { - mod_loader.get_local_mods().ok() // don't swallow error. + mod_loader.get_local_mods().ok() // TODO: don't swallow error. }) .flatten() .collect(); From fad8b49b32cd7590876a6f0caddc5ae01dcdc82d Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 9 Aug 2024 17:18:48 +0200 Subject: [PATCH 180/255] prevent panics being reported after window closes --- backend/src/main.rs | 11 ++++++++++- package-lock.json | 20 ++++++++++++++++++++ package.json | 3 ++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index f54920d4..904e873e 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -473,7 +473,7 @@ fn main() { // So I can just catch panics here and show a system message with the error. std::panic::set_hook(Box::new(|info| { #[cfg(target_os = "windows")] - windows::error_dialog(&info.to_string()); + windows::error_dialog(&format!("I found a panic!!!: {info}")); #[cfg(target_os = "linux")] log::error!("Panic: {info}"); @@ -567,6 +567,15 @@ fn main() { // but it never seems to go away, and that introduces an extra delay // until something is visible, so I figure I'd just show it here. window.show()?; + + window.on_window_event(|event| { + if let tauri::WindowEvent::Destroyed { .. } = event { + // Once the window is closed, we don't need to report panics anymore. + // I'm doing this because closing the window abruptly while events are being sent + // causes panics, so it was easy to trigger those messages by just closing while loading data. + let _ = std::panic::take_hook(); + } + }); } Ok(()) diff --git a/package-lock.json b/package-lock.json index 8c0f95d8..166f892b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "@typescript-eslint/eslint-plugin": "8.0.0", "@typescript-eslint/parser": "8.0.0", "@vitejs/plugin-react": "^4.3.1", + "cross-env": "^7.0.3", "eslint": "8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "^7.34.3", @@ -2399,6 +2400,25 @@ "dev": true, "license": "MIT" }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", diff --git a/package.json b/package.json index 4a15b4ae..598faad6 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "tauri dev", "build": "tauri build", - "build-debug": "tauri build --debug --no-bundle", + "build-debug": "cross-env CARGO_TARGET_DIR=target/debug/standalone-build tauri build --debug --no-bundle", "vite": "vite", "tauri": "tauri", "update-icons": "tauri icon backend/icons/icon-source.png", @@ -31,6 +31,7 @@ "@typescript-eslint/eslint-plugin": "8.0.0", "@typescript-eslint/parser": "8.0.0", "@vitejs/plugin-react": "^4.3.1", + "cross-env": "^7.0.3", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", From 87f2f774c26b51821bfa5593e9b909adf4d8eda7 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 10 Aug 2024 13:44:06 +0200 Subject: [PATCH 181/255] no need for futures crate --- backend/Cargo.lock | 18 ------- backend/rai-pal-core/Cargo.toml | 1 - .../src/mod_loaders/mod_loader.rs | 47 ++++++++-------- .../src/providers/steam_provider.rs | 53 +++++++------------ 4 files changed, 41 insertions(+), 78 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index e6bcbb12..773d2887 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -1322,21 +1322,6 @@ dependencies = [ "new_debug_unreachable", ] -[[package]] -name = "futures" -version = "0.3.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - [[package]] name = "futures-channel" version = "0.3.30" @@ -1344,7 +1329,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", - "futures-sink", ] [[package]] @@ -1412,7 +1396,6 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "futures-channel", "futures-core", "futures-io", "futures-macro", @@ -3400,7 +3383,6 @@ dependencies = [ "chrono", "directories", "enum_dispatch", - "futures", "globwalk", "lazy-regex", "lazy_static", diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 320a63d3..71d59e64 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -32,7 +32,6 @@ steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } tokio = { version = "1.35.1", features = ["macros"] } thiserror = "1.0.50" -futures = "0.3.29" zip = { version = "1.1.4", default-features = false, features = ["deflate"] } [target.'cfg(target_os = "windows")'.dependencies] diff --git a/backend/rai-pal-core/src/mod_loaders/mod_loader.rs b/backend/rai-pal-core/src/mod_loaders/mod_loader.rs index 5983db6e..461967cc 100644 --- a/backend/rai-pal-core/src/mod_loaders/mod_loader.rs +++ b/backend/rai-pal-core/src/mod_loaders/mod_loader.rs @@ -79,31 +79,30 @@ pub trait ModLoaderActions { ModDatabase { mods: Vec::new() } }); - futures::future::join_all(database.mods.iter().map(|database_mod| async { - ( - database_mod.id.clone(), - RemoteMod { - common: CommonModData { - id: database_mod.id.clone(), - engine: database_mod.engine, - engine_version_range: database_mod.engine_version_range.clone(), - unity_backend: database_mod.unity_backend, - loader_id: loader_id.clone(), - }, - data: RemoteModData { - author: database_mod.author.clone(), - description: database_mod.description.clone(), - source_code: database_mod.source_code.clone(), - title: database_mod.title.clone(), - latest_version: database_mod.get_download().await, - deprecated: database_mod.deprecated.unwrap_or(false), - }, + let mut mods_map = HashMap::new(); + + for database_mod in database.mods { + let remote_mod = RemoteMod { + common: CommonModData { + id: database_mod.id.clone(), + engine: database_mod.engine, + engine_version_range: database_mod.engine_version_range.clone(), + unity_backend: database_mod.unity_backend, + loader_id: loader_id.clone(), }, - ) - })) - .await - .into_iter() - .collect() + data: RemoteModData { + author: database_mod.author.clone(), + description: database_mod.description.clone(), + source_code: database_mod.source_code.clone(), + title: database_mod.title.clone(), + latest_version: database_mod.get_download().await, + deprecated: database_mod.deprecated.unwrap_or(false), + }, + }; + mods_map.insert(database_mod.id.clone(), remote_mod); + } + + mods_map } async fn download_mod(&self, remote_mod: &RemoteMod) -> Result { diff --git a/backend/rai-pal-core/src/providers/steam_provider.rs b/backend/rai-pal-core/src/providers/steam_provider.rs index 48ad35c3..145fbaed 100644 --- a/backend/rai-pal-core/src/providers/steam_provider.rs +++ b/backend/rai-pal-core/src/providers/steam_provider.rs @@ -5,7 +5,6 @@ use std::{ path::{Path, PathBuf}, }; -use futures::StreamExt; use lazy_regex::BytesRegex; use steamlocate::SteamDir; @@ -185,8 +184,10 @@ impl Steam { Ok(isolated_numbers) } +} - async fn get_steam_games( +impl ProviderActions for Steam { + async fn get_games( &self, installed_callback: TInstalledCallback, owned_callback: TOwnedCallback, @@ -210,47 +211,29 @@ impl Steam { HashSet::new() }); - futures::stream::iter(app_info_reader) - .for_each_concurrent(Some(20), |app_info_result| async { - match app_info_result { - Ok(app_info) => { - if let Some(owned_game) = - Self::get_owned_game(&app_info, &owned_ids_whitelist) - { - owned_callback(owned_game); - } - if let Some(app_path) = app_paths.get(&app_info.app_id) { - for installed_game in Self::get_installed_games(&app_info, app_path) { - installed_callback(installed_game); - } - } + for app_info_result in app_info_reader { + match app_info_result { + Ok(app_info) => { + if let Some(owned_game) = Self::get_owned_game(&app_info, &owned_ids_whitelist) + { + owned_callback(owned_game); } - Err(error) => { - log::error!("Failed to read Steam appinfo: {}", error); + if let Some(app_path) = app_paths.get(&app_info.app_id) { + for installed_game in Self::get_installed_games(&app_info, app_path) { + installed_callback(installed_game); + } } } - }) - .await; + Err(error) => { + log::error!("Failed to read Steam appinfo: {}", error); + } + } + } Ok(()) } } -impl ProviderActions for Steam { - async fn get_games( - &self, - installed_callback: TInstalledCallback, - owned_callback: TOwnedCallback, - ) -> Result - where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, - { - self.get_steam_games(installed_callback, owned_callback) - .await - } -} - pub fn get_start_command( steam_launch: &SteamLaunchOption, discriminator: &Option, From ddd6775a46695d54e43c372afe6ba23afe311f20 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 10 Aug 2024 13:47:32 +0200 Subject: [PATCH 182/255] no direct tokio dependency --- backend/Cargo.lock | 13 ------------- backend/rai-pal-core/Cargo.toml | 1 - backend/rai-pal-core/src/result.rs | 7 ------- 3 files changed, 21 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 773d2887..2136ccaf 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3398,7 +3398,6 @@ dependencies = [ "specta", "steamlocate", "thiserror", - "tokio", "uuid", "winapi", "winreg 0.52.0", @@ -4975,22 +4974,10 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "socket2", - "tokio-macros", "tracing", "windows-sys 0.52.0", ] -[[package]] -name = "tokio-macros" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "tokio-native-tls" version = "0.3.1" diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 71d59e64..91e97c34 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -30,7 +30,6 @@ rusqlite = { version = "0.32.1", features = ["bundled"] } serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } -tokio = { version = "1.35.1", features = ["macros"] } thiserror = "1.0.50" zip = { version = "1.1.4", default-features = false, features = ["deflate"] } diff --git a/backend/rai-pal-core/src/result.rs b/backend/rai-pal-core/src/result.rs index ca192a36..97310ebd 100644 --- a/backend/rai-pal-core/src/result.rs +++ b/backend/rai-pal-core/src/result.rs @@ -54,13 +54,6 @@ pub enum Error { env::VarError, ), - #[error(transparent)] - TaskJoin( - #[from] - #[serde(skip)] - tokio::task::JoinError, - ), - #[error(transparent)] UrlEncode( #[from] From 728f046b946572b67e7f5a93d352b66e340e5a9b Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 10 Aug 2024 13:55:57 +0200 Subject: [PATCH 183/255] update zip dependency --- backend/Cargo.lock | 59 ++++++++++++--------------------- backend/rai-pal-core/Cargo.toml | 2 +- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 2136ccaf..38730cd2 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2302,6 +2302,12 @@ dependencies = [ "scopeguard", ] +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + [[package]] name = "log" version = "0.4.22" @@ -2464,7 +2470,7 @@ dependencies = [ "bitflags 1.3.2", "jni-sys", "ndk-sys", - "num_enum 0.5.11", + "num_enum", "raw-window-handle 0.5.2", "thiserror", ] @@ -2545,16 +2551,7 @@ version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" dependencies = [ - "num_enum_derive 0.5.11", -] - -[[package]] -name = "num_enum" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" -dependencies = [ - "num_enum_derive 0.7.3", + "num_enum_derive", ] [[package]] @@ -2569,18 +2566,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "num_enum_derive" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" -dependencies = [ - "proc-macro-crate 2.0.2", - "proc-macro2", - "quote", - "syn 2.0.72", -] - [[package]] name = "num_threads" version = "0.1.7" @@ -3401,7 +3386,7 @@ dependencies = [ "uuid", "winapi", "winreg 0.52.0", - "zip 1.1.4", + "zip", ] [[package]] @@ -4719,7 +4704,7 @@ dependencies = [ "tokio", "url", "windows-sys 0.52.0", - "zip 2.1.6", + "zip", ] [[package]] @@ -6141,9 +6126,9 @@ checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zip" -version = "1.1.4" +version = "2.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cc23c04387f4da0374be4533ad1208cbb091d5c11d070dfef13676ad6497164" +checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" dependencies = [ "arbitrary", "crc32fast", @@ -6151,23 +6136,23 @@ dependencies = [ "displaydoc", "flate2", "indexmap 2.3.0", - "num_enum 0.7.3", + "memchr", "thiserror", + "zopfli", ] [[package]] -name = "zip" -version = "2.1.6" +name = "zopfli" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" dependencies = [ - "arbitrary", + "bumpalo", "crc32fast", - "crossbeam-utils", - "displaydoc", - "indexmap 2.3.0", - "memchr", - "thiserror", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", ] [[package]] diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 91e97c34..7c13d692 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -31,7 +31,7 @@ serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } thiserror = "1.0.50" -zip = { version = "1.1.4", default-features = false, features = ["deflate"] } +zip = { version = "2.1.6", default-features = false, features = ["deflate"] } [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3.9", features = ["winuser"] } From 1f1e0c7b73463b302bc43aba6b333e95891ffb4a Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 10 Aug 2024 15:30:36 +0200 Subject: [PATCH 184/255] lets not use maps --- frontend/app.tsx | 6 +++--- frontend/hooks/use-data-partial-subscription.ts | 15 ++++++++------- frontend/hooks/use-game-drop-event.ts | 2 +- frontend/hooks/use-processed-installed-games.ts | 4 ++-- frontend/hooks/use-processed-owned-games.ts | 4 ++-- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/frontend/app.tsx b/frontend/app.tsx index e14ff145..fa3f2792 100644 --- a/frontend/app.tsx +++ b/frontend/app.tsx @@ -62,13 +62,13 @@ function App() { const counts: TabCounts = useMemo( () => ({ - installedGames: installedGames.data.size, - ownedGames: ownedGames.data.size, + installedGames: Object.entries(installedGames.data).length, + ownedGames: Object.entries(ownedGames.data).length, mods: -1, settings: -1, thanks: -1, }), - [installedGames.data.size, ownedGames.data.size], + [installedGames.data, ownedGames.data], ); const handleTabChange = useCallback( diff --git a/frontend/hooks/use-data-partial-subscription.ts b/frontend/hooks/use-data-partial-subscription.ts index e4695a9a..cd2181f3 100644 --- a/frontend/hooks/use-data-partial-subscription.ts +++ b/frontend/hooks/use-data-partial-subscription.ts @@ -11,16 +11,17 @@ import { events } from "@api/bindings"; import { getDataCache } from "../util/data-cache"; type PartialData = { - data: Map>; + data: Record>; }; export function dataPartialSubscription< TEventId extends AppEventId, TEvent extends AppEvent, - TData extends Map>, >(eventId: TEventId, getId: (payload: EventPayload) => string) { + type DataRecord = Record>; + const cacheId = `data-partial-subscription-cache-${eventId}`; - const defaultData = new Map() as TData; + const defaultData = {} as DataRecord; const stateAtom = atom>({ data: defaultData, }); @@ -32,20 +33,20 @@ export function dataPartialSubscription< setData({ data: dataRef.current, }); - getDataCache().set(cacheId, [...dataRef.current]); + getDataCache().set(cacheId, dataRef.current); }, 500); useAppEvent(events[eventId], (payload) => { - dataRef.current.set(getId(payload), payload); + dataRef.current[getId(payload)] = payload; updateState(); }); useEffect(() => { getDataCache() - .get<[string, EventPayload][]>(cacheId) + .get(cacheId) .then((data) => { if (data) { - dataRef.current = new Map([...data, ...dataRef.current]) as TData; + dataRef.current = { ...data, ...dataRef.current }; updateState(); } }) diff --git a/frontend/hooks/use-game-drop-event.ts b/frontend/hooks/use-game-drop-event.ts index be2f1c4b..b198c98e 100644 --- a/frontend/hooks/use-game-drop-event.ts +++ b/frontend/hooks/use-game-drop-event.ts @@ -13,7 +13,7 @@ export function useGameDropEvent() { useAppEvent(events.gameRemoved, (gameId) => { setInstalledGames((previousInstalledGames) => { // Mutating the inner value because we're doing some cursed thing for performance. - previousInstalledGames.data.delete(gameId); + delete previousInstalledGames.data[gameId]; // But creating a new object for the outer structure, to count as a new reference. return { diff --git a/frontend/hooks/use-processed-installed-games.ts b/frontend/hooks/use-processed-installed-games.ts index 83cd89a6..0fa084bc 100644 --- a/frontend/hooks/use-processed-installed-games.ts +++ b/frontend/hooks/use-processed-installed-games.ts @@ -19,7 +19,7 @@ export function useProcessedInstalledGames() { const processedInstalledGames: ProcessedInstalledGameRecord = useMemo(() => { const result: ProcessedInstalledGameRecord = {}; - for (const [gameId, installedGame] of installedGames.data.entries()) { + for (const [gameId, installedGame] of Object.entries(installedGames.data)) { const installedModVersions: InstalledModVersions = {}; for (const mod of Object.values(mods)) { const modEngine = mod.common.engine; @@ -41,7 +41,7 @@ export function useProcessedInstalledGames() { result[gameId] = { ...installedGame, ownedGame: installedGame.ownedGameId - ? ownedGames.data.get(installedGame.ownedGameId) + ? ownedGames.data[installedGame.ownedGameId] : undefined, hasOutdatedMod: Object.entries(installedGame.installedModVersions).findIndex( diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index 9a3a8179..219ac088 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -71,7 +71,7 @@ export function useProcessedOwnedGames() { Itch: {}, }; - for (const installedGame of installedGames.data.values()) { + for (const installedGame of Object.values(installedGames.data)) { if (!installedGame.ownedGameId) continue; result[installedGame.provider][installedGame.ownedGameId] = installedGame; @@ -106,7 +106,7 @@ export function useProcessedOwnedGames() { return map[key]; } - for (const [gameId, ownedGame] of ownedGames.data.entries()) { + for (const [gameId, ownedGame] of Object.entries(ownedGames.data)) { const installedGame = installedGamesByProvider[ownedGame.provider][ownedGame.globalId]; From 58ebdd56968e34eb22776e5c3af1c4c4f36891c8 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 10 Aug 2024 15:31:57 +0200 Subject: [PATCH 185/255] fix clear cache button --- frontend/components/settings/settings-page.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/components/settings/settings-page.tsx b/frontend/components/settings/settings-page.tsx index 469b1b6e..26d0c6b4 100644 --- a/frontend/components/settings/settings-page.tsx +++ b/frontend/components/settings/settings-page.tsx @@ -28,7 +28,7 @@ export function SettingsPage() { - + ); diff --git a/frontend/hooks/use-async-command.ts b/frontend/hooks/use-async-command.ts index ba8b4473..8bb94ee8 100644 --- a/frontend/hooks/use-async-command.ts +++ b/frontend/hooks/use-async-command.ts @@ -1,16 +1,21 @@ import { Result } from "@api/bindings"; import { showAppNotification } from "@components/app-notifications"; -import { useCallback, useRef, useState } from "react"; +import { useCallback, useEffect, useRef, useState } from "react"; +// This hook helps dealing with async commands given by the backend, +// parsing the Result types that the backend uses. +// It can also be used with any async function that doesn't return a +// Result type, as a wrapper that adds loading and success states. export function useAsyncCommand( - command: (args: TArgs) => Promise>, - onSuccess?: (result: TResultValue) => void, + command: ( + args: TArgs, + ) => Promise | TResultValue>, ) { const [isLoading, setIsLoading] = useState(false); const [success, setSuccess] = useState(false); const timeout = useRef(); - const executeCommand = useCallback( + const executeCommand: (args: TArgs) => Promise = useCallback( async (args: TArgs) => { setIsLoading(true); setSuccess(false); @@ -21,29 +26,41 @@ export function useAsyncCommand( return command(args) .then((result) => { - if (result.status === "error") { - throw new Error(JSON.stringify(result.error)); - } + if (result && typeof result === "object" && "status" in result) { + if (result.status === "error") { + throw new Error(JSON.stringify(result.error)); + } - if (onSuccess) { - onSuccess(result.data); + return result.data; } + + return result; + }) + .then((result) => { setSuccess(true); timeout.current = setTimeout(() => { setSuccess(false); }, 1000); - return result.data; + return result; }) .catch((error) => { showAppNotification(`Failed to execute command: ${error}`, "error"); - return null; + throw error; }) .finally(() => setIsLoading(false)); }, - [command, onSuccess], + [command], ); + useEffect(() => { + return () => { + if (timeout.current) { + clearTimeout(timeout.current); + } + }; + }, []); + return [executeCommand, isLoading, success] as const; } From e8040d2c366c47c52bf52453ca970956a1c9eeee Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 14:27:15 +0200 Subject: [PATCH 190/255] cache on backend --- backend/Cargo.lock | 1 + backend/Cargo.toml | 2 + backend/rai-pal-core/Cargo.toml | 2 +- .../src/providers/epic_provider.rs | 8 +- .../src/providers/gog_provider.rs | 8 +- .../src/providers/itch_provider.rs | 8 +- .../src/providers/manual_provider.rs | 8 +- .../rai-pal-core/src/providers/provider.rs | 4 +- .../src/providers/steam_provider.rs | 8 +- .../src/providers/xbox_provider.rs | 8 +- backend/rai-pal-core/src/result.rs | 3 - backend/src/app_cache.rs | 98 +++++++++++++++++++ backend/src/main.rs | 95 ++++++++++++------ backend/src/result.rs | 46 +++++++++ frontend/api/bindings.ts | 19 +++- .../components/settings/settings-page.tsx | 3 +- frontend/hooks/use-data-counts.ts | 4 +- .../hooks/use-data-partial-subscription.ts | 63 ------------ frontend/hooks/use-data.ts | 12 +-- frontend/hooks/use-game-drop-event.ts | 3 +- .../hooks/use-processed-installed-games.ts | 4 +- frontend/hooks/use-processed-owned-games.ts | 6 +- frontend/hooks/use-update-data.ts | 90 +++++++++++++---- frontend/util/data-cache.ts | 11 --- 24 files changed, 338 insertions(+), 176 deletions(-) create mode 100644 backend/src/app_cache.rs create mode 100644 backend/src/result.rs delete mode 100644 frontend/hooks/use-data-partial-subscription.ts delete mode 100644 frontend/util/data-cache.ts diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 38730cd2..1c7e93e6 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3357,6 +3357,7 @@ dependencies = [ "tauri-plugin-window-state", "tauri-runtime", "tauri-specta", + "thiserror", ] [[package]] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index ca4ff15f..1e4c4816 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -25,6 +25,7 @@ serde = { version = "1.0", features = ["derive"] } serde_json = "1.0.108" specta = "2.0.0-rc.19" tauri-specta = { version = "2.0.0-rc.14", features = ["derive", "typescript"] } +thiserror = "1.0.50" [dependencies] specta-typescript = "0.0.7" @@ -44,6 +45,7 @@ serde_json.workspace = true serde.workspace = true specta.workspace = true tauri-specta.workspace = true +thiserror.workspace = true [features] # this feature is used for production builds or when `devPath` points to the filesystem diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index 7c13d692..d8551656 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -12,6 +12,7 @@ rai-pal-proc-macros.workspace = true serde_json.workspace = true serde.workspace = true specta.workspace = true +thiserror.workspace = true base64 = "0.22.1" byteorder = "1.5.0" @@ -30,7 +31,6 @@ rusqlite = { version = "0.32.1", features = ["bundled"] } serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } -thiserror = "1.0.50" zip = { version = "2.1.6", default-features = false, features = ["deflate"] } [target.'cfg(target_os = "windows")'.dependencies] diff --git a/backend/rai-pal-core/src/providers/epic_provider.rs b/backend/rai-pal-core/src/providers/epic_provider.rs index 2ec3fb4b..49443053 100644 --- a/backend/rai-pal-core/src/providers/epic_provider.rs +++ b/backend/rai-pal-core/src/providers/epic_provider.rs @@ -179,12 +179,12 @@ impl EpicCatalogItem { impl ProviderActions for Epic { async fn get_games( &self, - installed_callback: TInstalledCallback, - owned_callback: TOwnedCallback, + mut installed_callback: TInstalledCallback, + mut owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { let app_data_path = RegKey::predef(HKEY_LOCAL_MACHINE) .open_subkey(r"SOFTWARE\WOW6432Node\Epic Games\EpicGamesLauncher") diff --git a/backend/rai-pal-core/src/providers/gog_provider.rs b/backend/rai-pal-core/src/providers/gog_provider.rs index d6ec114f..0259a0e3 100644 --- a/backend/rai-pal-core/src/providers/gog_provider.rs +++ b/backend/rai-pal-core/src/providers/gog_provider.rs @@ -96,12 +96,12 @@ impl ProviderStatic for Gog { impl ProviderActions for Gog { async fn get_games( &self, - installed_callback: TInstalledCallback, - owned_callback: TOwnedCallback, + mut installed_callback: TInstalledCallback, + mut owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { let database = get_database()?; let launcher_path = get_launcher_path()?; diff --git a/backend/rai-pal-core/src/providers/itch_provider.rs b/backend/rai-pal-core/src/providers/itch_provider.rs index 0ea9e787..210598fd 100644 --- a/backend/rai-pal-core/src/providers/itch_provider.rs +++ b/backend/rai-pal-core/src/providers/itch_provider.rs @@ -104,12 +104,12 @@ pub struct ItchDatabase { impl ProviderActions for Itch { async fn get_games( &self, - installed_callback: TInstalledCallback, - owned_callback: TOwnedCallback, + mut installed_callback: TInstalledCallback, + mut owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { let app_data_path = directories::BaseDirs::new() .ok_or_else(Error::AppDataNotFound)? diff --git a/backend/rai-pal-core/src/providers/manual_provider.rs b/backend/rai-pal-core/src/providers/manual_provider.rs index 67108b97..e0e65106 100644 --- a/backend/rai-pal-core/src/providers/manual_provider.rs +++ b/backend/rai-pal-core/src/providers/manual_provider.rs @@ -36,12 +36,12 @@ impl ProviderStatic for Manual { impl ProviderActions for Manual { async fn get_games( &self, - installed_callback: TInstalledCallback, - _owned_callback: TOwnedCallback, + mut installed_callback: TInstalledCallback, + mut _owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { for path in read_games_config(&games_config_path()?).paths { if let Some(installed_game) = create_game_from_path(&path) { diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/rai-pal-core/src/providers/provider.rs index 9f5c9581..5bb4bb3b 100644 --- a/backend/rai-pal-core/src/providers/provider.rs +++ b/backend/rai-pal-core/src/providers/provider.rs @@ -61,8 +61,8 @@ pub trait ProviderActions { owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync; + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync; } const fn create_map_entry( diff --git a/backend/rai-pal-core/src/providers/steam_provider.rs b/backend/rai-pal-core/src/providers/steam_provider.rs index 145fbaed..e00533d6 100644 --- a/backend/rai-pal-core/src/providers/steam_provider.rs +++ b/backend/rai-pal-core/src/providers/steam_provider.rs @@ -189,12 +189,12 @@ impl Steam { impl ProviderActions for Steam { async fn get_games( &self, - installed_callback: TInstalledCallback, - owned_callback: TOwnedCallback, + mut installed_callback: TInstalledCallback, + mut owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { let steam_dir = SteamDir::locate()?; let steam_path = steam_dir.path(); diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index 909768c3..bb1ea4c0 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -33,12 +33,12 @@ impl ProviderStatic for Xbox { impl ProviderActions for Xbox { async fn get_games( &self, - installed_callback: TInstalledCallback, - _owned_callback: TOwnedCallback, + mut installed_callback: TInstalledCallback, + mut _owned_callback: TOwnedCallback, ) -> Result where - TInstalledCallback: Fn(InstalledGame) + Send + Sync, - TOwnedCallback: Fn(OwnedGame) + Send + Sync, + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { let gaming_services = RegKey::predef(HKEY_LOCAL_MACHINE) .open_subkey("SOFTWARE\\Microsoft\\GamingServices")?; diff --git a/backend/rai-pal-core/src/result.rs b/backend/rai-pal-core/src/result.rs index 97310ebd..81ef05d9 100644 --- a/backend/rai-pal-core/src/result.rs +++ b/backend/rai-pal-core/src/result.rs @@ -142,9 +142,6 @@ pub enum Error { #[error("Can't run mod with ID `{0}` because it isn't a runnable mod.")] CantRunNonRunnable(String), - #[error("Failed to get app resources path: `{0}`")] - FailedToGetResourcesPath(String), - #[error("Provider ID {0} is invalid in this platform.")] InvalidProviderId(String), } diff --git a/backend/src/app_cache.rs b/backend/src/app_cache.rs new file mode 100644 index 00000000..d691dacf --- /dev/null +++ b/backend/src/app_cache.rs @@ -0,0 +1,98 @@ +use std::{collections::HashMap, path::PathBuf}; + +use crate::result::Result; +use rai_pal_core::{ + installed_game::InstalledGame, + owned_game::OwnedGame, + providers::provider::{self, ProviderId}, +}; +use rai_pal_proc_macros::serializable_struct; +use serde_json::json; +use tauri::{AppHandle, Manager, Wry}; +use tauri_plugin_store::{with_store, StoreCollection}; + +#[serializable_struct] +pub struct ProviderCacheData { + pub installed_games: HashMap, + pub owned_games: HashMap, +} + +pub struct ProviderCache { + path: PathBuf, + pub data: ProviderCacheData, +} + +impl ProviderCache { + const DATA_KEY: &'static str = "data"; + const CACHE_FOLDER: &'static str = "cache"; + + pub fn new(id: ProviderId) -> Self { + Self { + path: PathBuf::from(Self::CACHE_FOLDER) + .join("providers") + .join(id.to_string()), + data: ProviderCacheData { + installed_games: HashMap::new(), + owned_games: HashMap::new(), + }, + } + } + + pub fn load(&mut self, handle: &AppHandle) -> Result { + let stores = handle.state::>(); + + let mut cache_data = ProviderCacheData { + installed_games: HashMap::new(), + owned_games: HashMap::new(), + }; + + with_store(handle.clone(), stores, self.path.clone(), |store| { + if let Some(data) = store.get(Self::DATA_KEY) { + cache_data = serde_json::from_value(data.clone())?; + } + + Ok(()) + })?; + + self.data = cache_data; + + Ok(()) + } + + pub fn save(&self, handle: &AppHandle) -> Result { + let stores = handle.state::>(); + + with_store(handle.clone(), stores, self.path.clone(), |store| { + store.insert(Self::DATA_KEY.to_string(), json!(self.data))?; + store.save()?; + Ok(()) + })?; + + Ok(()) + } + + pub fn set_data(&mut self, data: ProviderCacheData) -> &mut Self { + self.data = data; + self + } + + pub fn clear(&self, handle: &AppHandle) -> Result { + let stores = handle.state::>(); + + with_store(handle.clone(), stores, self.path.clone(), |store| { + store.clear()?; + store.save()?; + + Ok(()) + })?; + Ok(()) + } + + pub fn clear_all(handle: &AppHandle) -> Result { + for provider_id in provider::get_provider_ids() { + Self::new(provider_id).clear(handle)?; + } + + Ok(()) + } +} diff --git a/backend/src/main.rs b/backend/src/main.rs index 904e873e..e3272d07 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -5,9 +5,10 @@ use std::{collections::HashMap, path::PathBuf, sync::Mutex}; +use crate::result::{Error, Result}; +use app_cache::{ProviderCache, ProviderCacheData}; use app_state::{AppState, DataValue, StateData, StatefulHandle}; use events::EventEmitter; -use log::error; use rai_pal_core::installed_game::InstalledGame; use rai_pal_core::local_mod::{self, LocalMod}; use rai_pal_core::maps::TryGettable; @@ -21,7 +22,6 @@ use rai_pal_core::providers::{ provider_command::ProviderCommandAction, }; use rai_pal_core::remote_games::{self, RemoteGame}; -use rai_pal_core::result::{Error, Result}; #[cfg(target_os = "windows")] use rai_pal_core::windows; use rai_pal_core::{analytics, remote_mod, steam}; @@ -32,25 +32,29 @@ use tauri_plugin_log::{Target, TargetKind}; use tauri_plugin_window_state::StateFlags; use tauri_specta::Builder; +mod app_cache; mod app_state; mod events; +mod result; #[tauri::command] #[specta::specta] async fn get_mod_loaders(handle: AppHandle) -> Result { - mod_loader::get_data_map(&handle.app_state().mod_loaders.get_data()?) + Ok(mod_loader::get_data_map( + &handle.app_state().mod_loaders.get_data()?, + )?) } #[tauri::command] #[specta::specta] async fn get_local_mods(handle: AppHandle) -> Result { - handle.app_state().local_mods.get_data() + Ok(handle.app_state().local_mods.get_data()?) } #[tauri::command] #[specta::specta] async fn get_remote_mods(handle: AppHandle) -> Result { - handle.app_state().remote_mods.get_data() + Ok(handle.app_state().remote_mods.get_data()?) } fn update_state(data: TData, mutex: &Mutex>) { @@ -62,13 +66,13 @@ fn update_state(data: TData, mutex: &Mutex>) { #[tauri::command] #[specta::specta] async fn open_game_folder(installed_game: InstalledGame) -> Result { - installed_game.open_game_folder() + Ok(installed_game.open_game_folder()?) } #[tauri::command] #[specta::specta] async fn open_game_mods_folder(installed_game: InstalledGame) -> Result { - installed_game.open_mods_folder() + Ok(installed_game.open_mods_folder()?) } #[tauri::command] @@ -80,17 +84,21 @@ async fn open_mods_folder() -> Result { #[tauri::command] #[specta::specta] async fn open_mod_folder(mod_id: &str, handle: AppHandle) -> Result { - handle.app_state().local_mods.try_get(mod_id)?.open_folder() + Ok(handle + .app_state() + .local_mods + .try_get(mod_id)? + .open_folder()?) } #[tauri::command] #[specta::specta] async fn open_mod_loader_folder(mod_loader_id: &str, handle: AppHandle) -> Result { - handle + Ok(handle .app_state() .mod_loaders .try_get(mod_loader_id)? - .open_folder() + .open_folder()?) } #[tauri::command] @@ -139,7 +147,7 @@ async fn start_game(installed_game: InstalledGame, handle: AppHandle) -> Result #[tauri::command] #[specta::specta] async fn start_game_exe(installed_game: InstalledGame) -> Result { - installed_game.start_exe() + Ok(installed_game.start_exe()?) } #[tauri::command] @@ -340,19 +348,7 @@ async fn refresh_and_get_local_mod( } }; - local_mods.try_get(mod_id).cloned() -} - -fn installed_game_callback(handle: AppHandle) -> impl Fn(InstalledGame) { - move |game: InstalledGame| { - handle.emit_safe(events::FoundInstalledGame(game)); - } -} - -fn owned_game_callback(handle: AppHandle) -> impl Fn(OwnedGame) { - move |game: OwnedGame| { - handle.emit_safe(events::FoundOwnedGame(game)); - } + Ok(local_mods.try_get(mod_id).cloned()?) } #[tauri::command] @@ -379,7 +375,7 @@ async fn update_local_mods(handle: AppHandle) -> Result { #[tauri::command] #[specta::specta] async fn fetch_remote_games() -> Result> { - remote_games::get().await + Ok(remote_games::get().await?) } #[tauri::command] @@ -387,13 +383,30 @@ async fn fetch_remote_games() -> Result> { async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Result { let provider = provider::get_provider(provider_id)?; + let mut installed_games: HashMap = HashMap::new(); + let mut owned_games: HashMap = HashMap::new(); + + let installed_game_callback = |game: InstalledGame| { + handle.emit_safe(events::FoundInstalledGame(game.clone())); + installed_games.insert(game.id.clone(), game); + }; + + let owned_game_callback = |game: OwnedGame| { + handle.emit_safe(events::FoundOwnedGame(game.clone())); + owned_games.insert(game.global_id.clone(), game); + }; + provider - .get_games( - installed_game_callback(handle.clone()), - owned_game_callback(handle.clone()), - ) + .get_games(installed_game_callback, owned_game_callback) .await?; + ProviderCache::new(provider_id) + .set_data(ProviderCacheData { + installed_games: installed_games.clone(), + owned_games: owned_games.clone(), + }) + .save(&handle)?; + Ok(()) } @@ -449,7 +462,7 @@ async fn run_provider_command( #[tauri::command] #[specta::specta] async fn delete_steam_appinfo_cache() -> Result { - steam::appinfo::delete() + Ok(steam::appinfo::delete()?) } #[tauri::command] @@ -468,6 +481,24 @@ async fn open_logs_folder() -> Result { Ok(()) } +#[tauri::command] +#[specta::specta] +async fn get_provider_cache( + handle: AppHandle, + provider_id: ProviderId, +) -> Result { + let mut cache = ProviderCache::new(provider_id); + cache.load(&handle)?; + + Ok(cache.data) +} + +#[tauri::command] +#[specta::specta] +async fn clear_cache(handle: AppHandle) -> Result { + ProviderCache::clear_all(&handle) +} + fn main() { // Since I'm making all exposed functions async, panics won't crash anything important, I think. // So I can just catch panics here and show a system message with the error. @@ -510,6 +541,8 @@ fn main() { uninstall_mod, update_local_mods, fetch_remote_games, + get_provider_cache, + clear_cache, ]) .events(events::collect_events()); @@ -520,7 +553,7 @@ fn main() { "../frontend/api/bindings.ts", ) .unwrap_or_else(|err| { - error!("Failed to generate TypeScript bindings: {err}"); + log::error!("Failed to generate TypeScript bindings: {err}"); std::process::exit(1); }); diff --git a/backend/src/result.rs b/backend/src/result.rs new file mode 100644 index 00000000..5b968999 --- /dev/null +++ b/backend/src/result.rs @@ -0,0 +1,46 @@ +use std::result; + +#[derive(Debug, thiserror::Error, specta::Type)] +pub enum Error { + #[error(transparent)] + Tauri( + #[serde(skip)] + #[from] + tauri::Error, + ), + + #[error(transparent)] + TauriPluginStore( + #[serde(skip)] + #[from] + tauri_plugin_store::Error, + ), + + #[error(transparent)] + Io( + #[serde(skip)] + #[from] + std::io::Error, + ), + + #[error(transparent)] + Core( + #[serde(skip)] + #[from] + rai_pal_core::result::Error, + ), + + #[error("Failed to get app resources path: `{0}`")] + FailedToGetResourcesPath(String), +} + +impl serde::Serialize for Error { + fn serialize(&self, serializer: S) -> result::Result + where + S: serde::ser::Serializer, + { + serializer.serialize_str(self.to_string().as_ref()) + } +} + +pub type Result = result::Result; diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index efb13a95..37ba09e8 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -236,6 +236,22 @@ async fetchRemoteGames() : Promise> { if(e instanceof Error) throw e; else return { status: "error", error: e as any }; } +}, +async getProviderCache(providerId: ProviderId) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_provider_cache", { providerId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async clearCache() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("clear_cache") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} } } @@ -277,7 +293,7 @@ export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type Error = "Io" | "Reqwest" | "Zip" | "Json" | "ChronoParse" | "SQLite" | "Env" | "UrlEncode" | "HeaderToStr" | "TryFromInt" | "Regex" | "SteamLocate" | { InvalidBinaryVdfType: [number, string] } | { AppDataNotFound: [] } | { PathParseFailure: string } | { PathParentNotFound: string } | { EmptyFile: string } | { AppInfoNotFound: string } | { FailedToParseUnityVersionAsset: string } | { ModInstallInfoInsufficient: [string, string] } | { EmptyStateData: [] } | { FailedToAccessStateData: string } | { FailedToGetGameFromPath: string } | { GameAlreadyAdded: string } | { DataEntryNotFound: string } | { UnityBackendUnknown: string } | { ModDownloadNotAvailable: string } | { RunnableManifestNotFound: string } | { CantRunNonRunnable: string } | { FailedToGetResourcesPath: string } | { InvalidProviderId: string } +export type Error = "Tauri" | "TauriPluginStore" | "Io" | "Core" | { FailedToGetResourcesPath: string } export type ErrorRaised = string export type ExecutedProviderCommand = null export type FoundInstalledGame = InstalledGame @@ -294,6 +310,7 @@ export type ModDownload = { id: string; url: string; root: string | null; runnab export type ModKind = "Installable" | "Runnable" export type ModLoaderData = { id: string; path: string; kind: ModKind } export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; name: string; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } +export type ProviderCacheData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" diff --git a/frontend/components/settings/settings-page.tsx b/frontend/components/settings/settings-page.tsx index 6602d629..e68bcf48 100644 --- a/frontend/components/settings/settings-page.tsx +++ b/frontend/components/settings/settings-page.tsx @@ -3,7 +3,6 @@ import { resetLocalStorage } from "../../util/local-storage"; import { IconFolderCode, IconRotateDot, IconTrash } from "@tabler/icons-react"; import { CommandButton } from "@components/command-button"; import { commands } from "@api/bindings"; -import { clearDataCache } from "../../util/data-cache"; export function SettingsPage() { return ( @@ -28,7 +27,7 @@ export function SettingsPage() { } > Clear cached games diff --git a/frontend/hooks/use-data-counts.ts b/frontend/hooks/use-data-counts.ts index c8c7e7dd..429b2847 100644 --- a/frontend/hooks/use-data-counts.ts +++ b/frontend/hooks/use-data-counts.ts @@ -10,8 +10,8 @@ export function useDataCounts() { const ownedGames = useAtomValue(ownedGamesAtom); const counts: TabCounts = useMemo( () => ({ - installedGames: Object.entries(installedGames.data).length, - ownedGames: Object.entries(ownedGames.data).length, + installedGames: Object.entries(installedGames).length, + ownedGames: Object.entries(ownedGames).length, mods: -1, settings: -1, thanks: -1, diff --git a/frontend/hooks/use-data-partial-subscription.ts b/frontend/hooks/use-data-partial-subscription.ts deleted file mode 100644 index cd2181f3..00000000 --- a/frontend/hooks/use-data-partial-subscription.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { useSetAtom, atom } from "jotai"; -import { - AppEvent, - AppEventId, - EventPayload, - useAppEvent, -} from "./use-app-event"; -import { useEffect, useRef } from "react"; -import { useThrottledCallback } from "@mantine/hooks"; -import { events } from "@api/bindings"; -import { getDataCache } from "../util/data-cache"; - -type PartialData = { - data: Record>; -}; - -export function dataPartialSubscription< - TEventId extends AppEventId, - TEvent extends AppEvent, ->(eventId: TEventId, getId: (payload: EventPayload) => string) { - type DataRecord = Record>; - - const cacheId = `data-partial-subscription-cache-${eventId}`; - const defaultData = {} as DataRecord; - const stateAtom = atom>({ - data: defaultData, - }); - - function useDataSubscription() { - const setData = useSetAtom(stateAtom); - const dataRef = useRef(defaultData); - const updateState = useThrottledCallback(() => { - setData({ - data: dataRef.current, - }); - getDataCache().set(cacheId, dataRef.current); - }, 500); - - useAppEvent(events[eventId], (payload) => { - dataRef.current[getId(payload)] = payload; - updateState(); - }); - - useEffect(() => { - getDataCache() - .get(cacheId) - .then((data) => { - if (data) { - dataRef.current = { ...data, ...dataRef.current }; - updateState(); - } - }) - .catch((error) => { - console.error("Failed to load cached data. Clearing cache", error); - getDataCache().set(cacheId, []); - }); - }, [updateState]); - - return stateAtom; - } - - return [stateAtom, useDataSubscription] as const; -} diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index cdc93bf5..c209e2d8 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -1,16 +1,12 @@ import { atom } from "jotai"; -import { commands, events } from "@api/bindings"; +import { commands, events, InstalledGame, OwnedGame } from "@api/bindings"; import { dataSubscription } from "./use-data-subscription"; import { useUpdateData } from "./use-update-data"; -import { dataPartialSubscription } from "./use-data-partial-subscription"; import { useGameDropEvent } from "./use-game-drop-event"; import { commandData } from "./use-command-data"; -export const [installedGamesAtom, useInstalledGamesSubscription] = - dataPartialSubscription("foundInstalledGame", (payload) => payload.id); - -export const [ownedGamesAtom, useOwnedGamesSubscription] = - dataPartialSubscription("foundOwnedGame", (payload) => payload.globalId); +export const installedGamesAtom = atom>({}); +export const ownedGamesAtom = atom>({}); export const [modLoadersAtom, useModLoadersSubscription] = dataSubscription( events.syncModLoaders, @@ -35,12 +31,10 @@ export const [remoteGamesAtom, useRemoteGamesSubscription] = commandData( export const loadingCountAtom = atom(0); export function useData() { - useInstalledGamesSubscription(); useRemoteGamesSubscription(); useModLoadersSubscription(); useLocalModsSubscription(); useRemoteModsSubscription(); - useOwnedGamesSubscription(); useGameDropEvent(); useUpdateData(true); } diff --git a/frontend/hooks/use-game-drop-event.ts b/frontend/hooks/use-game-drop-event.ts index b198c98e..b4222f0c 100644 --- a/frontend/hooks/use-game-drop-event.ts +++ b/frontend/hooks/use-game-drop-event.ts @@ -10,10 +10,11 @@ export function useGameDropEvent() { const [executeAddGame] = useAsyncCommand(commands.addGame); const setInstalledGames = useSetAtom(installedGamesAtom); + // TODO: might not need this once I fix cache invalidation. useAppEvent(events.gameRemoved, (gameId) => { setInstalledGames((previousInstalledGames) => { // Mutating the inner value because we're doing some cursed thing for performance. - delete previousInstalledGames.data[gameId]; + delete previousInstalledGames[gameId]; // But creating a new object for the outer structure, to count as a new reference. return { diff --git a/frontend/hooks/use-processed-installed-games.ts b/frontend/hooks/use-processed-installed-games.ts index 0fa084bc..8a7ee3f9 100644 --- a/frontend/hooks/use-processed-installed-games.ts +++ b/frontend/hooks/use-processed-installed-games.ts @@ -19,7 +19,7 @@ export function useProcessedInstalledGames() { const processedInstalledGames: ProcessedInstalledGameRecord = useMemo(() => { const result: ProcessedInstalledGameRecord = {}; - for (const [gameId, installedGame] of Object.entries(installedGames.data)) { + for (const [gameId, installedGame] of Object.entries(installedGames)) { const installedModVersions: InstalledModVersions = {}; for (const mod of Object.values(mods)) { const modEngine = mod.common.engine; @@ -41,7 +41,7 @@ export function useProcessedInstalledGames() { result[gameId] = { ...installedGame, ownedGame: installedGame.ownedGameId - ? ownedGames.data[installedGame.ownedGameId] + ? ownedGames[installedGame.ownedGameId] : undefined, hasOutdatedMod: Object.entries(installedGame.installedModVersions).findIndex( diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index 219ac088..b97d2d74 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -71,7 +71,7 @@ export function useProcessedOwnedGames() { Itch: {}, }; - for (const installedGame of Object.values(installedGames.data)) { + for (const installedGame of Object.values(installedGames)) { if (!installedGame.ownedGameId) continue; result[installedGame.provider][installedGame.ownedGameId] = installedGame; @@ -106,7 +106,7 @@ export function useProcessedOwnedGames() { return map[key]; } - for (const [gameId, ownedGame] of Object.entries(ownedGames.data)) { + for (const [gameId, ownedGame] of Object.entries(ownedGames)) { const installedGame = installedGamesByProvider[ownedGame.provider][ownedGame.globalId]; @@ -118,7 +118,7 @@ export function useProcessedOwnedGames() { } return result; - }, [ownedGames.data, installedGamesByProvider, databaseGamesByProvider]); + }, [ownedGames, installedGamesByProvider, databaseGamesByProvider]); return processedOwnedGames; } diff --git a/frontend/hooks/use-update-data.ts b/frontend/hooks/use-update-data.ts index 5c6829eb..3b287266 100644 --- a/frontend/hooks/use-update-data.ts +++ b/frontend/hooks/use-update-data.ts @@ -1,15 +1,74 @@ -import { useCallback, useEffect } from "react"; +import { useCallback, useEffect, useState } from "react"; import { useSetAtom } from "jotai"; -import { commands, Result, Error } from "@api/bindings"; -import { loadingCountAtom } from "./use-data"; +import { commands, Result, Error, events, ProviderId } from "@api/bindings"; +import { + installedGamesAtom, + loadingCountAtom, + ownedGamesAtom, +} from "./use-data"; import { showAppNotification } from "@components/app-notifications"; +import { useAppEvent } from "./use-app-event"; +import { useThrottledCallback } from "@mantine/hooks"; export function useUpdateData(executeOnMount = false) { const setLoading = useSetAtom(loadingCountAtom); + const setInstalledGames = useSetAtom(installedGamesAtom); + const setOwnedGames = useSetAtom(ownedGamesAtom); + const [providerIds, setProviderIds] = useState([]); - const updateAppData = useCallback(() => { - console.log("Updating app data..."); + useEffect(() => { + commands.getProviderIds().then((providerIdsResult) => { + if (providerIdsResult.status === "error") { + showAppNotification( + `Failed to get info about available game providers: ${providerIdsResult.error}`, + "error", + ); + return; + } + setProviderIds(providerIdsResult.data); + }); + }, []); + + const updateProviderGames = useCallback(() => { + for (const providerId of providerIds) { + commands.getProviderCache(providerId).then((cacheResult) => { + if (cacheResult.status === "error") { + showAppNotification( + `Failed to get provider cache for ${providerId}: ${cacheResult.error}`, + "error", + ); + return false; + } + + setInstalledGames((previousInstalledGames) => ({ + ...previousInstalledGames, + ...cacheResult.data.installedGames, + })); + + setOwnedGames((previousOwnedGames) => ({ + ...previousOwnedGames, + ...cacheResult.data.ownedGames, + })); + + return true; + }); + } + }, [providerIds, setInstalledGames, setOwnedGames]); + + const throttledUpdateProviderGames = useThrottledCallback( + updateProviderGames, + 1000, + ); + + useAppEvent(events.foundOwnedGame, throttledUpdateProviderGames); + useAppEvent(events.foundInstalledGame, throttledUpdateProviderGames); + + useEffect(() => { + updateProviderGames(); + }, [updateProviderGames]); + + const updateAppData = useCallback(() => { function handleDataPromise(promise: Promise>) { setLoading((previousLoading) => previousLoading + 1); promise @@ -30,23 +89,12 @@ export function useUpdateData(executeOnMount = false) { .finally(() => setLoading((previousLoading) => previousLoading - 1)); } - commands.getProviderIds().then((providerIdsResult) => { - if (providerIdsResult.status === "error") { - showAppNotification( - `Failed to get info about available game providers: ${providerIdsResult.error}`, - "error", - ); - return; - } - - for (const providerId of providerIdsResult.data) { - handleDataPromise(commands.getProviderGames(providerId)); - } + for (const providerId of providerIds) { + handleDataPromise(commands.getProviderGames(providerId)); + } - handleDataPromise(commands.updateLocalMods()); - // handleDataPromise(commands.updateRemoteGames()); - }); - }, [setLoading]); + handleDataPromise(commands.updateLocalMods()); + }, [providerIds, setLoading]); useEffect(() => { if (executeOnMount) { diff --git a/frontend/util/data-cache.ts b/frontend/util/data-cache.ts deleted file mode 100644 index d96ea45c..00000000 --- a/frontend/util/data-cache.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Store } from "@tauri-apps/plugin-store"; - -export function getDataCache() { - return new Store(".data-cache.dat"); -} - -export async function clearDataCache() { - const cache = getDataCache(); - await cache.reset(); - await cache.save(); -} From 53cdd6db4a8c1f4847cadf78b495b55243486ff8 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 14:40:39 +0200 Subject: [PATCH 191/255] save frontend state with same shape as cache --- frontend/hooks/use-data-counts.ts | 15 ++-- frontend/hooks/use-data.ts | 7 +- frontend/hooks/use-game-drop-event.ts | 27 +++---- .../hooks/use-processed-installed-games.ts | 73 ++++++++++--------- frontend/hooks/use-processed-owned-games.ts | 44 +++++------ frontend/hooks/use-update-data.ts | 22 ++---- 6 files changed, 92 insertions(+), 96 deletions(-) diff --git a/frontend/hooks/use-data-counts.ts b/frontend/hooks/use-data-counts.ts index 429b2847..37cfc1f5 100644 --- a/frontend/hooks/use-data-counts.ts +++ b/frontend/hooks/use-data-counts.ts @@ -1,22 +1,25 @@ import { useAtomValue } from "jotai"; import { useMemo } from "react"; -import { installedGamesAtom, ownedGamesAtom } from "./use-data"; +import { providerDataAtom } from "./use-data"; import { PageId } from "../pages"; export type TabCounts = Record; export function useDataCounts() { - const installedGames = useAtomValue(installedGamesAtom); - const ownedGames = useAtomValue(ownedGamesAtom); + const providerDataMap = useAtomValue(providerDataAtom); const counts: TabCounts = useMemo( () => ({ - installedGames: Object.entries(installedGames).length, - ownedGames: Object.entries(ownedGames).length, + installedGames: Object.values(providerDataMap) + .map((data) => Object.entries(data.installedGames)) + .flat().length, + ownedGames: Object.values(providerDataMap) + .map((data) => Object.entries(data.ownedGames)) + .flat().length, mods: -1, settings: -1, thanks: -1, }), - [installedGames, ownedGames], + [providerDataMap], ); return counts; diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index c209e2d8..ccbf8948 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -1,12 +1,13 @@ import { atom } from "jotai"; -import { commands, events, InstalledGame, OwnedGame } from "@api/bindings"; +import { commands, events, ProviderCacheData, ProviderId } from "@api/bindings"; import { dataSubscription } from "./use-data-subscription"; import { useUpdateData } from "./use-update-data"; import { useGameDropEvent } from "./use-game-drop-event"; import { commandData } from "./use-command-data"; -export const installedGamesAtom = atom>({}); -export const ownedGamesAtom = atom>({}); +export const providerDataAtom = atom< + Partial> +>({}); export const [modLoadersAtom, useModLoadersSubscription] = dataSubscription( events.syncModLoaders, diff --git a/frontend/hooks/use-game-drop-event.ts b/frontend/hooks/use-game-drop-event.ts index b4222f0c..dc3988b1 100644 --- a/frontend/hooks/use-game-drop-event.ts +++ b/frontend/hooks/use-game-drop-event.ts @@ -1,27 +1,24 @@ -import { commands, events } from "@api/bindings"; +import { commands } from "@api/bindings"; import { useAsyncCommand } from "./use-async-command"; -import { useAppEvent } from "./use-app-event"; -import { useSetAtom } from "jotai"; -import { installedGamesAtom } from "./use-data"; import { getCurrentWebview } from "@tauri-apps/api/webview"; import { useEffect } from "react"; export function useGameDropEvent() { const [executeAddGame] = useAsyncCommand(commands.addGame); - const setInstalledGames = useSetAtom(installedGamesAtom); // TODO: might not need this once I fix cache invalidation. - useAppEvent(events.gameRemoved, (gameId) => { - setInstalledGames((previousInstalledGames) => { - // Mutating the inner value because we're doing some cursed thing for performance. - delete previousInstalledGames[gameId]; + // TODO: remove game on frontend. + // useAppEvent(events.gameRemoved, (gameId) => { + // setProviderData((previousInstalledGames) => { + // // Mutating the inner value because we're doing some cursed thing for performance. + // delete previousInstalledGames[gameId]; - // But creating a new object for the outer structure, to count as a new reference. - return { - ...previousInstalledGames, - }; - }); - }); + // // But creating a new object for the outer structure, to count as a new reference. + // return { + // ...previousInstalledGames, + // }; + // }); + // }); useEffect(() => { const unlistenPromise = getCurrentWebview().onDragDropEvent((event) => { diff --git a/frontend/hooks/use-processed-installed-games.ts b/frontend/hooks/use-processed-installed-games.ts index 8a7ee3f9..ae427794 100644 --- a/frontend/hooks/use-processed-installed-games.ts +++ b/frontend/hooks/use-processed-installed-games.ts @@ -1,6 +1,6 @@ import { useAtomValue } from "jotai"; import { useMemo } from "react"; -import { installedGamesAtom, ownedGamesAtom } from "./use-data"; +import { providerDataAtom } from "./use-data"; import { useUnifiedMods } from "./use-unified-mods"; import { getIsOutdated } from "../util/is-outdated"; import { InstalledGame, OwnedGame } from "@api/bindings"; @@ -13,49 +13,52 @@ export interface ProcessedInstalledGame extends InstalledGame { } export function useProcessedInstalledGames() { - const installedGames = useAtomValue(installedGamesAtom); - const ownedGames = useAtomValue(ownedGamesAtom); + const providerDataMap = useAtomValue(providerDataAtom); const mods = useUnifiedMods(); const processedInstalledGames: ProcessedInstalledGameRecord = useMemo(() => { const result: ProcessedInstalledGameRecord = {}; - for (const [gameId, installedGame] of Object.entries(installedGames)) { - const installedModVersions: InstalledModVersions = {}; - for (const mod of Object.values(mods)) { - const modEngine = mod.common.engine; - const gameEngine = installedGame.executable.engine?.brand; - const engineMatch = - !modEngine || !gameEngine || modEngine == gameEngine; - - const modBackend = mod.common.unityBackend; - const gameBackend = installedGame.executable.scriptingBackend; - const backendMatch = - !modBackend || !gameBackend || modBackend == gameBackend; - - if (backendMatch && engineMatch) { - installedModVersions[mod.common.id] = - mod.local?.manifest?.version ?? null; + for (const providerData of Object.values(providerDataMap)) { + for (const [gameId, installedGame] of Object.entries( + providerData.installedGames, + )) { + const installedModVersions: InstalledModVersions = {}; + for (const mod of Object.values(mods)) { + const modEngine = mod.common.engine; + const gameEngine = installedGame.executable.engine?.brand; + const engineMatch = + !modEngine || !gameEngine || modEngine == gameEngine; + + const modBackend = mod.common.unityBackend; + const gameBackend = installedGame.executable.scriptingBackend; + const backendMatch = + !modBackend || !gameBackend || modBackend == gameBackend; + + if (backendMatch && engineMatch) { + installedModVersions[mod.common.id] = + mod.local?.manifest?.version ?? null; + } } - } - result[gameId] = { - ...installedGame, - ownedGame: installedGame.ownedGameId - ? ownedGames[installedGame.ownedGameId] - : undefined, - hasOutdatedMod: - Object.entries(installedGame.installedModVersions).findIndex( - ([modId, installedVersion]) => - getIsOutdated( - installedVersion, - mods[modId]?.remote?.latestVersion?.id, - ), - ) !== -1, - }; + result[gameId] = { + ...installedGame, + ownedGame: installedGame.ownedGameId + ? providerData.ownedGames[installedGame.ownedGameId] + : undefined, + hasOutdatedMod: + Object.entries(installedGame.installedModVersions).findIndex( + ([modId, installedVersion]) => + getIsOutdated( + installedVersion, + mods[modId]?.remote?.latestVersion?.id, + ), + ) !== -1, + }; + } } return result; - }, [installedGames, mods, ownedGames]); + }, [mods, providerDataMap]); return processedInstalledGames; } diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index b97d2d74..90081fa7 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -1,10 +1,6 @@ import { useAtomValue } from "jotai"; import { useMemo } from "react"; -import { - ownedGamesAtom, - installedGamesAtom, - remoteGamesAtom, -} from "./use-data"; +import { remoteGamesAtom, providerDataAtom } from "./use-data"; import { InstalledGame, OwnedGame, @@ -30,8 +26,7 @@ function normalizeTitle(title: string): string { } export function useProcessedOwnedGames() { - const ownedGames = useAtomValue(ownedGamesAtom); - const installedGames = useAtomValue(installedGamesAtom); + const providerDataMap = useAtomValue(providerDataAtom); const remoteGames = useAtomValue(remoteGamesAtom); const databaseGamesByProvider = useMemo(() => { @@ -71,14 +66,17 @@ export function useProcessedOwnedGames() { Itch: {}, }; - for (const installedGame of Object.values(installedGames)) { - if (!installedGame.ownedGameId) continue; + for (const providerData of Object.values(providerDataMap)) { + for (const installedGame of Object.values(providerData.installedGames)) { + if (!installedGame.ownedGameId) continue; - result[installedGame.provider][installedGame.ownedGameId] = installedGame; + result[installedGame.provider][installedGame.ownedGameId] = + installedGame; + } } return result; - }, [installedGames]); + }, [providerDataMap]); const processedOwnedGames: ProcessedOwnedGameRecord = useMemo(() => { const result: ProcessedOwnedGameRecord = {}; @@ -106,19 +104,23 @@ export function useProcessedOwnedGames() { return map[key]; } - for (const [gameId, ownedGame] of Object.entries(ownedGames)) { - const installedGame = - installedGamesByProvider[ownedGame.provider][ownedGame.globalId]; - - result[gameId] = { - ...ownedGame, - remoteData: getDatabaseGame(ownedGame), - isInstalled: Boolean(installedGame), - }; + for (const providerData of Object.values(providerDataMap)) { + for (const [gameId, ownedGame] of Object.entries( + providerData.ownedGames, + )) { + const installedGame = + installedGamesByProvider[ownedGame.provider][ownedGame.globalId]; + + result[gameId] = { + ...ownedGame, + remoteData: getDatabaseGame(ownedGame), + isInstalled: Boolean(installedGame), + }; + } } return result; - }, [ownedGames, installedGamesByProvider, databaseGamesByProvider]); + }, [databaseGamesByProvider, providerDataMap, installedGamesByProvider]); return processedOwnedGames; } diff --git a/frontend/hooks/use-update-data.ts b/frontend/hooks/use-update-data.ts index 3b287266..94918cbf 100644 --- a/frontend/hooks/use-update-data.ts +++ b/frontend/hooks/use-update-data.ts @@ -1,19 +1,14 @@ import { useCallback, useEffect, useState } from "react"; import { useSetAtom } from "jotai"; import { commands, Result, Error, events, ProviderId } from "@api/bindings"; -import { - installedGamesAtom, - loadingCountAtom, - ownedGamesAtom, -} from "./use-data"; +import { loadingCountAtom, providerDataAtom } from "./use-data"; import { showAppNotification } from "@components/app-notifications"; import { useAppEvent } from "./use-app-event"; import { useThrottledCallback } from "@mantine/hooks"; export function useUpdateData(executeOnMount = false) { const setLoading = useSetAtom(loadingCountAtom); - const setInstalledGames = useSetAtom(installedGamesAtom); - const setOwnedGames = useSetAtom(ownedGamesAtom); + const setProviderData = useSetAtom(providerDataAtom); const [providerIds, setProviderIds] = useState([]); useEffect(() => { @@ -41,20 +36,15 @@ export function useUpdateData(executeOnMount = false) { return false; } - setInstalledGames((previousInstalledGames) => ({ - ...previousInstalledGames, - ...cacheResult.data.installedGames, - })); - - setOwnedGames((previousOwnedGames) => ({ - ...previousOwnedGames, - ...cacheResult.data.ownedGames, + setProviderData((previousProviderData) => ({ + ...previousProviderData, + [providerId]: cacheResult.data, })); return true; }); } - }, [providerIds, setInstalledGames, setOwnedGames]); + }, [providerIds, setProviderData]); const throttledUpdateProviderGames = useThrottledCallback( updateProviderGames, From 117835f315ab49bcd6384bdf3b8ca9f0a16b2e94 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 14:53:06 +0200 Subject: [PATCH 192/255] better way to check if owned game is installed --- frontend/hooks/use-processed-owned-games.ts | 35 ++++++--------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index 90081fa7..1c39c087 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -1,12 +1,7 @@ import { useAtomValue } from "jotai"; import { useMemo } from "react"; import { remoteGamesAtom, providerDataAtom } from "./use-data"; -import { - InstalledGame, - OwnedGame, - ProviderId, - RemoteGame, -} from "@api/bindings"; +import { OwnedGame, RemoteGame } from "@api/bindings"; type ProcessedOwnedGameRecord = Record; export interface ProcessedOwnedGame extends OwnedGame { @@ -14,11 +9,6 @@ export interface ProcessedOwnedGame extends OwnedGame { remoteData?: RemoteGame; } -type InstalledGamesByProvider = Record< - ProviderId, - Record ->; - type DatabaseMapGroupBy = "steamId" | "epicId" | "gogId" | "title"; function normalizeTitle(title: string): string { @@ -56,22 +46,15 @@ export function useProcessedOwnedGames() { return result; }, [remoteGames]); - const installedGamesByProvider: InstalledGamesByProvider = useMemo(() => { - const result: InstalledGamesByProvider = { - Steam: {}, - Manual: {}, - Epic: {}, - Gog: {}, - Xbox: {}, - Itch: {}, - }; + // Global IDs of owned games that are also installed. + const installedOwnedIds: Set = useMemo(() => { + const result: Set = new Set(); for (const providerData of Object.values(providerDataMap)) { for (const installedGame of Object.values(providerData.installedGames)) { if (!installedGame.ownedGameId) continue; - result[installedGame.provider][installedGame.ownedGameId] = - installedGame; + result.add(installedGame.ownedGameId); } } @@ -108,19 +91,19 @@ export function useProcessedOwnedGames() { for (const [gameId, ownedGame] of Object.entries( providerData.ownedGames, )) { - const installedGame = - installedGamesByProvider[ownedGame.provider][ownedGame.globalId]; + const provider = providerDataMap[ownedGame.provider]; + if (!provider) continue; result[gameId] = { ...ownedGame, remoteData: getDatabaseGame(ownedGame), - isInstalled: Boolean(installedGame), + isInstalled: installedOwnedIds.has(ownedGame.globalId), }; } } return result; - }, [databaseGamesByProvider, providerDataMap, installedGamesByProvider]); + }, [databaseGamesByProvider, installedOwnedIds, providerDataMap]); return processedOwnedGames; } From 59f5451d2bda15d3976f89dc563f6f8ed351492f Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 14:57:50 +0200 Subject: [PATCH 193/255] no need to include individual games in events anymore --- backend/src/events.rs | 6 +++--- backend/src/main.rs | 8 ++++---- frontend/api/bindings.ts | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/backend/src/events.rs b/backend/src/events.rs index a7e4c718..5d4b303e 100644 --- a/backend/src/events.rs +++ b/backend/src/events.rs @@ -4,13 +4,13 @@ use rai_pal_proc_macros::serializable_event; use serde::Serialize; use tauri_specta::Event; -use rai_pal_core::{installed_game, local_mod, mod_loaders::mod_loader, owned_game, remote_mod}; +use rai_pal_core::{local_mod, mod_loaders::mod_loader, remote_mod}; #[serializable_event] -pub struct FoundInstalledGame(pub installed_game::InstalledGame); +pub struct FoundInstalledGame(); #[serializable_event] -pub struct FoundOwnedGame(pub owned_game::OwnedGame); +pub struct FoundOwnedGame(); #[serializable_event] pub struct SyncModLoaders(pub mod_loader::DataMap); diff --git a/backend/src/main.rs b/backend/src/main.rs index e3272d07..f1e3a004 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -230,7 +230,7 @@ fn refresh_game_mods_and_exe(installed_game: &InstalledGame, handle: &AppHandle) new_game.refresh_installed_mods(); new_game.refresh_executable()?; - handle.emit_safe(events::FoundInstalledGame(new_game)); + handle.emit_safe(events::FoundInstalledGame()); Ok(()) } @@ -387,12 +387,12 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul let mut owned_games: HashMap = HashMap::new(); let installed_game_callback = |game: InstalledGame| { - handle.emit_safe(events::FoundInstalledGame(game.clone())); + handle.emit_safe(events::FoundInstalledGame()); installed_games.insert(game.id.clone(), game); }; let owned_game_callback = |game: OwnedGame| { - handle.emit_safe(events::FoundOwnedGame(game.clone())); + handle.emit_safe(events::FoundOwnedGame()); owned_games.insert(game.global_id.clone(), game); }; @@ -425,7 +425,7 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result { let game_name = installed_game.name.clone(); handle.emit_safe(events::SelectInstalledGame(installed_game.id.clone())); - handle.emit_safe(events::FoundInstalledGame(installed_game)); + handle.emit_safe(events::FoundInstalledGame()); analytics::send_event(analytics::Event::ManuallyAddGame, &game_name).await; diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 37ba09e8..9959884a 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -296,8 +296,8 @@ export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum export type Error = "Tauri" | "TauriPluginStore" | "Io" | "Core" | { FailedToGetResourcesPath: string } export type ErrorRaised = string export type ExecutedProviderCommand = null -export type FoundInstalledGame = InstalledGame -export type FoundOwnedGame = OwnedGame +export type FoundInstalledGame = [] +export type FoundOwnedGame = [] export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } export type GameMode = "VR" | "Flat" From a8fe090962c0f99cfcf0be8bc29e6fd0d70b70ba Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 17:01:40 +0200 Subject: [PATCH 194/255] also use app state --- backend/rai-pal-core/src/result.rs | 6 --- backend/src/app_cache.rs | 12 +++-- backend/src/app_state.rs | 18 +++---- backend/src/main.rs | 75 +++++++++++++++++++++--------- backend/src/result.rs | 6 +++ frontend/api/bindings.ts | 8 ++-- frontend/hooks/use-data.ts | 8 ++-- frontend/hooks/use-update-data.ts | 12 ++--- 8 files changed, 89 insertions(+), 56 deletions(-) diff --git a/backend/rai-pal-core/src/result.rs b/backend/rai-pal-core/src/result.rs index 81ef05d9..b375a767 100644 --- a/backend/rai-pal-core/src/result.rs +++ b/backend/rai-pal-core/src/result.rs @@ -115,12 +115,6 @@ pub enum Error { #[error("Failed to install mod, because the known game information is insufficient. Missing information: `{0}`. Game: `{1}`")] ModInstallInfoInsufficient(String, PathBuf), - #[error("State data is empty")] - EmptyStateData(), - - #[error("Failed to access state data: `{0}`")] - FailedToAccessStateData(String), - #[error("Failed to get game data from path `{0}`")] FailedToGetGameFromPath(PathBuf), diff --git a/backend/src/app_cache.rs b/backend/src/app_cache.rs index d691dacf..0ac92714 100644 --- a/backend/src/app_cache.rs +++ b/backend/src/app_cache.rs @@ -12,14 +12,16 @@ use tauri::{AppHandle, Manager, Wry}; use tauri_plugin_store::{with_store, StoreCollection}; #[serializable_struct] -pub struct ProviderCacheData { +pub struct ProviderData { pub installed_games: HashMap, pub owned_games: HashMap, } +pub type ProviderDataMap = HashMap; + pub struct ProviderCache { path: PathBuf, - pub data: ProviderCacheData, + pub data: ProviderData, } impl ProviderCache { @@ -31,7 +33,7 @@ impl ProviderCache { path: PathBuf::from(Self::CACHE_FOLDER) .join("providers") .join(id.to_string()), - data: ProviderCacheData { + data: ProviderData { installed_games: HashMap::new(), owned_games: HashMap::new(), }, @@ -41,7 +43,7 @@ impl ProviderCache { pub fn load(&mut self, handle: &AppHandle) -> Result { let stores = handle.state::>(); - let mut cache_data = ProviderCacheData { + let mut cache_data = ProviderData { installed_games: HashMap::new(), owned_games: HashMap::new(), }; @@ -71,7 +73,7 @@ impl ProviderCache { Ok(()) } - pub fn set_data(&mut self, data: ProviderCacheData) -> &mut Self { + pub fn set_data(&mut self, data: ProviderData) -> &mut Self { self.data = data; self } diff --git a/backend/src/app_state.rs b/backend/src/app_state.rs index d70277b4..c6b0a8c2 100644 --- a/backend/src/app_state.rs +++ b/backend/src/app_state.rs @@ -6,17 +6,18 @@ use std::{ sync::Mutex, }; +use crate::result::Result; +use crate::{app_cache::ProviderData, result::Error}; use tauri::Manager; use rai_pal_core::{ - local_mod, - maps::TryGettable, - mod_loaders::mod_loader, - remote_mod, - result::{Error, Result}, + installed_game::InstalledGame, local_mod, maps::TryGettable, mod_loaders::mod_loader, + owned_game::OwnedGame, providers::provider::ProviderId, remote_mod, }; pub struct AppState { + pub installed_games: HashMap>>>, + pub owned_games: HashMap>>>, pub mod_loaders: Mutex>, pub local_mods: Mutex>, pub remote_mods: Mutex>, @@ -33,7 +34,7 @@ impl StateData for Mutex> { where TData: Clone, { - self.try_lock() + self.lock() .map_err(|err| Error::FailedToAccessStateData(err.to_string()))? .as_ref() .ok_or(Error::EmptyStateData()) @@ -58,12 +59,13 @@ where K: Borrow, Q: ?Sized + Hash + Display + Eq, { - self.try_lock() + Ok(self + .try_lock() .map_err(|err| Error::FailedToAccessStateData(err.to_string()))? .as_ref() .ok_or(Error::EmptyStateData())? .try_get(key) - .cloned() + .cloned()?) } } diff --git a/backend/src/main.rs b/backend/src/main.rs index f1e3a004..d20a7277 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -6,7 +6,7 @@ use std::{collections::HashMap, path::PathBuf, sync::Mutex}; use crate::result::{Error, Result}; -use app_cache::{ProviderCache, ProviderCacheData}; +use app_cache::{ProviderCache, ProviderData, ProviderDataMap}; use app_state::{AppState, DataValue, StateData, StatefulHandle}; use events::EventEmitter; use rai_pal_core::installed_game::InstalledGame; @@ -381,27 +381,46 @@ async fn fetch_remote_games() -> Result> { #[tauri::command] #[specta::specta] async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Result { - let provider = provider::get_provider(provider_id)?; - - let mut installed_games: HashMap = HashMap::new(); - let mut owned_games: HashMap = HashMap::new(); - - let installed_game_callback = |game: InstalledGame| { + let update_installed_games_state = |installed_games: HashMap| { + if let Some(mutex) = handle.app_state().installed_games.get(&provider_id) { + update_state(installed_games.clone(), mutex); + } handle.emit_safe(events::FoundInstalledGame()); - installed_games.insert(game.id.clone(), game); }; - let owned_game_callback = |game: OwnedGame| { + let update_owned_games_state = |owned_games: HashMap| { + if let Some(mutex) = handle.app_state().owned_games.get(&provider_id) { + update_state(owned_games.clone(), mutex); + } handle.emit_safe(events::FoundOwnedGame()); - owned_games.insert(game.global_id.clone(), game); }; + let mut cache = ProviderCache::new(provider_id); + cache.load(&handle)?; // TODO don't fail load if cache fails + + let mut installed_games = cache.data.installed_games.clone(); + let mut owned_games = cache.data.owned_games.clone(); + + update_installed_games_state(installed_games.clone()); + update_owned_games_state(owned_games.clone()); + + let provider = provider::get_provider(provider_id)?; + provider - .get_games(installed_game_callback, owned_game_callback) + .get_games( + |game: InstalledGame| { + installed_games.insert(game.id.clone(), game); + update_installed_games_state(installed_games.clone()); + }, + |game: OwnedGame| { + owned_games.insert(game.global_id.clone(), game); + update_owned_games_state(owned_games.clone()); + }, + ) .await?; ProviderCache::new(provider_id) - .set_data(ProviderCacheData { + .set_data(ProviderData { installed_games: installed_games.clone(), owned_games: owned_games.clone(), }) @@ -483,14 +502,20 @@ async fn open_logs_folder() -> Result { #[tauri::command] #[specta::specta] -async fn get_provider_cache( - handle: AppHandle, - provider_id: ProviderId, -) -> Result { - let mut cache = ProviderCache::new(provider_id); - cache.load(&handle)?; - - Ok(cache.data) +async fn get_provider_data(handle: AppHandle, provider_id: ProviderId) -> Result { + let state = handle.app_state(); + Ok(ProviderData { + installed_games: state + .installed_games + .try_get(&provider_id)? + .get_data() + .unwrap_or_default(), + owned_games: state + .owned_games + .try_get(&provider_id)? + .get_data() + .unwrap_or_default(), + }) } #[tauri::command] @@ -541,7 +566,7 @@ fn main() { uninstall_mod, update_local_mods, fetch_remote_games, - get_provider_cache, + get_provider_data, clear_cache, ]) .events(events::collect_events()); @@ -585,6 +610,14 @@ fn main() { mod_loaders: Mutex::default(), local_mods: Mutex::default(), remote_mods: Mutex::default(), + installed_games: provider::get_provider_ids() + .into_iter() + .map(|provider_id| (provider_id, Mutex::default())) + .collect(), + owned_games: provider::get_provider_ids() + .into_iter() + .map(|provider_id| (provider_id, Mutex::default())) + .collect(), }) .invoke_handler(builder.invoke_handler()) .setup(move |app| { diff --git a/backend/src/result.rs b/backend/src/result.rs index 5b968999..2631ccd5 100644 --- a/backend/src/result.rs +++ b/backend/src/result.rs @@ -32,6 +32,12 @@ pub enum Error { #[error("Failed to get app resources path: `{0}`")] FailedToGetResourcesPath(String), + + #[error("State data is empty")] + EmptyStateData(), + + #[error("Failed to access state data: `{0}`")] + FailedToAccessStateData(String), } impl serde::Serialize for Error { diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 9959884a..4f5ff477 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -237,9 +237,9 @@ async fetchRemoteGames() : Promise> { else return { status: "error", error: e as any }; } }, -async getProviderCache(providerId: ProviderId) : Promise> { +async getProviderData(providerId: ProviderId) : Promise> { try { - return { status: "ok", data: await TAURI_INVOKE("get_provider_cache", { providerId }) }; + return { status: "ok", data: await TAURI_INVOKE("get_provider_data", { providerId }) }; } catch (e) { if(e instanceof Error) throw e; else return { status: "error", error: e as any }; @@ -293,7 +293,7 @@ export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type Error = "Tauri" | "TauriPluginStore" | "Io" | "Core" | { FailedToGetResourcesPath: string } +export type Error = "Tauri" | "TauriPluginStore" | "Io" | "Core" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } export type ErrorRaised = string export type ExecutedProviderCommand = null export type FoundInstalledGame = [] @@ -310,9 +310,9 @@ export type ModDownload = { id: string; url: string; root: string | null; runnab export type ModKind = "Installable" | "Runnable" export type ModLoaderData = { id: string; path: string; kind: ModKind } export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; name: string; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } -export type ProviderCacheData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" +export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" export type RemoteGame = { title: string | null; engines: GameEngine[] | null; steamIds: string[] | null; gogIds: string[] | null; epicIds: string[] | null } export type RemoteMod = { common: CommonModData; data: RemoteModData } diff --git a/frontend/hooks/use-data.ts b/frontend/hooks/use-data.ts index ccbf8948..10e50268 100644 --- a/frontend/hooks/use-data.ts +++ b/frontend/hooks/use-data.ts @@ -1,13 +1,13 @@ import { atom } from "jotai"; -import { commands, events, ProviderCacheData, ProviderId } from "@api/bindings"; +import { commands, events, ProviderData, ProviderId } from "@api/bindings"; import { dataSubscription } from "./use-data-subscription"; import { useUpdateData } from "./use-update-data"; import { useGameDropEvent } from "./use-game-drop-event"; import { commandData } from "./use-command-data"; -export const providerDataAtom = atom< - Partial> ->({}); +export const providerDataAtom = atom>>( + {}, +); export const [modLoadersAtom, useModLoadersSubscription] = dataSubscription( events.syncModLoaders, diff --git a/frontend/hooks/use-update-data.ts b/frontend/hooks/use-update-data.ts index 94918cbf..6b039cd2 100644 --- a/frontend/hooks/use-update-data.ts +++ b/frontend/hooks/use-update-data.ts @@ -27,10 +27,10 @@ export function useUpdateData(executeOnMount = false) { const updateProviderGames = useCallback(() => { for (const providerId of providerIds) { - commands.getProviderCache(providerId).then((cacheResult) => { - if (cacheResult.status === "error") { + commands.getProviderData(providerId).then((result) => { + if (result.status === "error") { showAppNotification( - `Failed to get provider cache for ${providerId}: ${cacheResult.error}`, + `Failed to get provider data for ${providerId}: ${result.error}`, "error", ); return false; @@ -38,7 +38,7 @@ export function useUpdateData(executeOnMount = false) { setProviderData((previousProviderData) => ({ ...previousProviderData, - [providerId]: cacheResult.data, + [providerId]: result.data, })); return true; @@ -54,10 +54,6 @@ export function useUpdateData(executeOnMount = false) { useAppEvent(events.foundOwnedGame, throttledUpdateProviderGames); useAppEvent(events.foundInstalledGame, throttledUpdateProviderGames); - useEffect(() => { - updateProviderGames(); - }, [updateProviderGames]); - const updateAppData = useCallback(() => { function handleDataPromise(promise: Promise>) { setLoading((previousLoading) => previousLoading + 1); From 4be330d93aec80e4e430652d53f91388b944e8e7 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 17:02:49 +0200 Subject: [PATCH 195/255] cleanup --- backend/src/app_cache.rs | 2 -- backend/src/app_state.rs | 2 +- backend/src/main.rs | 6 +++--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/backend/src/app_cache.rs b/backend/src/app_cache.rs index 0ac92714..09dd4b85 100644 --- a/backend/src/app_cache.rs +++ b/backend/src/app_cache.rs @@ -17,8 +17,6 @@ pub struct ProviderData { pub owned_games: HashMap, } -pub type ProviderDataMap = HashMap; - pub struct ProviderCache { path: PathBuf, pub data: ProviderData, diff --git a/backend/src/app_state.rs b/backend/src/app_state.rs index c6b0a8c2..79e30870 100644 --- a/backend/src/app_state.rs +++ b/backend/src/app_state.rs @@ -6,8 +6,8 @@ use std::{ sync::Mutex, }; +use crate::result::Error; use crate::result::Result; -use crate::{app_cache::ProviderData, result::Error}; use tauri::Manager; use rai_pal_core::{ diff --git a/backend/src/main.rs b/backend/src/main.rs index d20a7277..37f361e1 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -6,7 +6,7 @@ use std::{collections::HashMap, path::PathBuf, sync::Mutex}; use crate::result::{Error, Result}; -use app_cache::{ProviderCache, ProviderData, ProviderDataMap}; +use app_cache::{ProviderCache, ProviderData}; use app_state::{AppState, DataValue, StateData, StatefulHandle}; use events::EventEmitter; use rai_pal_core::installed_game::InstalledGame; @@ -48,13 +48,13 @@ async fn get_mod_loaders(handle: AppHandle) -> Result { #[tauri::command] #[specta::specta] async fn get_local_mods(handle: AppHandle) -> Result { - Ok(handle.app_state().local_mods.get_data()?) + handle.app_state().local_mods.get_data() } #[tauri::command] #[specta::specta] async fn get_remote_mods(handle: AppHandle) -> Result { - Ok(handle.app_state().remote_mods.get_data()?) + handle.app_state().remote_mods.get_data() } fn update_state(data: TData, mutex: &Mutex>) { From 370e6c1c755f73e22cfa9549cb7b50fee27c7317 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 11 Aug 2024 17:44:54 +0200 Subject: [PATCH 196/255] reset cache if broken --- backend/src/main.rs | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index 37f361e1..36ec5757 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -275,8 +275,12 @@ async fn uninstall_all_mods(installed_game: InstalledGame, handle: AppHandle) -> fn refresh_local_mods(mod_loaders: &mod_loader::Map, handle: &AppHandle) -> local_mod::Map { let local_mods: HashMap<_, _> = mod_loaders .values() - .filter_map(|mod_loader| { - mod_loader.get_local_mods().ok() // TODO: don't swallow error. + .filter_map(|mod_loader| match mod_loader.get_local_mods() { + Ok(local_mods) => Some(local_mods), + Err(err) => { + log::error!("Failed to get local mods: {err}"); + None + } }) .flatten() .collect(); @@ -396,13 +400,18 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul }; let mut cache = ProviderCache::new(provider_id); - cache.load(&handle)?; // TODO don't fail load if cache fails - let mut installed_games = cache.data.installed_games.clone(); - let mut owned_games = cache.data.owned_games.clone(); + let mut installed_games = HashMap::::new(); + let mut owned_games = HashMap::::new(); - update_installed_games_state(installed_games.clone()); - update_owned_games_state(owned_games.clone()); + if let Err(err) = cache.load(&handle) { + log::warn!("Failed to load cache for provider {provider_id}: {err}"); + } else { + installed_games = cache.data.installed_games.clone(); + owned_games = cache.data.owned_games.clone(); + update_installed_games_state(installed_games.clone()); + update_owned_games_state(owned_games.clone()); + } let provider = provider::get_provider(provider_id)?; @@ -419,7 +428,7 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul ) .await?; - ProviderCache::new(provider_id) + cache .set_data(ProviderData { installed_games: installed_games.clone(), owned_games: owned_games.clone(), From ae75e02fefa3299f1ba8c2dffe80c9fb928e4c89 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 12 Aug 2024 23:18:23 +0200 Subject: [PATCH 197/255] run tauri dev with nightly --- backend/Cargo.toml | 5 ++++ backend/gen/schemas/linux-schema.json | 35 --------------------------- package.json | 2 +- 3 files changed, 6 insertions(+), 36 deletions(-) diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 1e4c4816..6b41db7e 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -60,6 +60,11 @@ opt-level = "s" panic = "abort" strip = true +[profile.dev] +debug = 0 +strip = "debuginfo" + + [workspace.lints.clippy] all = { level = "warn", priority = -1 } nursery = { level = "warn", priority = -1 } diff --git a/backend/gen/schemas/linux-schema.json b/backend/gen/schemas/linux-schema.json index 16741f6e..2a80568d 100644 --- a/backend/gen/schemas/linux-schema.json +++ b/backend/gen/schemas/linux-schema.json @@ -2208,41 +2208,6 @@ "log:deny-log" ] }, - { - "description": "process:default -> This permission set configures which\nprocess feeatures are by default exposed.\n\n#### Granted Permissions\n\nThis enables to quit via `allow-exit` and restart via `allow-restart`\nthe application.\n", - "type": "string", - "enum": [ - "process:default" - ] - }, - { - "description": "process:allow-exit -> Enables the exit command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:allow-exit" - ] - }, - { - "description": "process:allow-restart -> Enables the restart command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:allow-restart" - ] - }, - { - "description": "process:deny-exit -> Denies the exit command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:deny-exit" - ] - }, - { - "description": "process:deny-restart -> Denies the restart command without any pre-configured scope.", - "type": "string", - "enum": [ - "process:deny-restart" - ] - }, { "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", "type": "string", diff --git a/package.json b/package.json index 598faad6..3257e99c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "tauri dev", + "dev": "cross-env RUSTUP_TOOLCHAIN=nightly tauri dev", "build": "tauri build", "build-debug": "cross-env CARGO_TARGET_DIR=target/debug/standalone-build tauri build --debug --no-bundle", "vite": "vite", From a834e46f22bfc95e0f6973cbc1ea843eede9f97f Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Wed, 14 Aug 2024 13:09:21 +0100 Subject: [PATCH 198/255] use new provider ids format --- backend/rai-pal-core/src/remote_games.rs | 51 ++++++++++++------------ frontend/api/bindings.ts | 2 +- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/rai-pal-core/src/remote_games.rs index 0d92c684..d437109b 100644 --- a/backend/rai-pal-core/src/remote_games.rs +++ b/backend/rai-pal-core/src/remote_games.rs @@ -1,8 +1,11 @@ +use std::collections::HashMap; + use rai_pal_proc_macros::serializable_struct; use crate::game_engines::game_engine::{ EngineBrand, EngineVersion, EngineVersionNumbers, GameEngine, }; +use crate::providers::provider::ProviderId; use crate::result::Result; const URL_BASE: &str = "https://raicuparta.github.io/rai-pal-db/game-db"; @@ -23,18 +26,14 @@ struct GameDatabaseEngineVersion { struct GameDatabaseEntry { pub title: Option, pub engines: Option>, - pub steam_ids: Option>, - pub gog_ids: Option>, - pub epic_ids: Option>, + pub provider_ids: Option>>, } #[serializable_struct] pub struct RemoteGame { pub title: Option, pub engines: Option>, - pub steam_ids: Option>, - pub gog_ids: Option>, - pub epic_ids: Option>, + pub provider_ids: HashMap>, } fn engine_brand_from_string(brand: &str) -> Option { @@ -84,27 +83,27 @@ pub async fn get() -> Result> { let games = game_database .into_iter() - .map(|entry| RemoteGame { - title: entry.title, - engines: entry.engines.map(|engines| { - engines - .into_iter() - .filter_map(|engine| { - Some(GameEngine { - brand: engine_brand_from_string(&engine.brand)?, - version: engine - .version - .and_then(|version| parse_version(&version)) - // If we can't parse the version or it wasn't provided, we can check if there's a number in the actual engine name. - // This is common for Unreal Engine, since it usually shows up as "Unreal Engine 4" or similar. - .or_else(|| parse_version(&engine.brand)), + .filter_map(|entry| { + Some(RemoteGame { + title: entry.title, + engines: entry.engines.map(|engines| { + engines + .into_iter() + .filter_map(|engine| { + Some(GameEngine { + brand: engine_brand_from_string(&engine.brand)?, + version: engine + .version + .and_then(|version| parse_version(&version)) + // If we can't parse the version or it wasn't provided, we can check if there's a number in the actual engine name. + // This is common for Unreal Engine, since it usually shows up as "Unreal Engine 4" or similar. + .or_else(|| parse_version(&engine.brand)), + }) }) - }) - .collect() - }), - steam_ids: entry.steam_ids, - gog_ids: entry.gog_ids, - epic_ids: entry.epic_ids, + .collect() + }), + provider_ids: entry.provider_ids?, + }) }) .collect(); diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 4f5ff477..53db974b 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -314,7 +314,7 @@ export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" -export type RemoteGame = { title: string | null; engines: GameEngine[] | null; steamIds: string[] | null; gogIds: string[] | null; epicIds: string[] | null } +export type RemoteGame = { title: string | null; engines: GameEngine[] | null; providerIds: { [key in ProviderId]: string[] } } export type RemoteMod = { common: CommonModData; data: RemoteModData } export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } export type RunnableModData = { path: string; args: string[] } From 65201b2383c245ba7ad8b889ee88febcacf2dfcb Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Wed, 14 Aug 2024 13:31:28 +0100 Subject: [PATCH 199/255] use new game database format on frontend --- frontend/hooks/use-processed-owned-games.ts | 72 ++++++++------------- 1 file changed, 26 insertions(+), 46 deletions(-) diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index 1c39c087..cb05333d 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -1,7 +1,7 @@ import { useAtomValue } from "jotai"; import { useMemo } from "react"; import { remoteGamesAtom, providerDataAtom } from "./use-data"; -import { OwnedGame, RemoteGame } from "@api/bindings"; +import { OwnedGame, ProviderId, RemoteGame } from "@api/bindings"; type ProcessedOwnedGameRecord = Record; export interface ProcessedOwnedGame extends OwnedGame { @@ -9,8 +9,6 @@ export interface ProcessedOwnedGame extends OwnedGame { remoteData?: RemoteGame; } -type DatabaseMapGroupBy = "steamId" | "epicId" | "gogId" | "title"; - function normalizeTitle(title: string): string { return title.replace(/\W+/g, "").toLowerCase(); } @@ -19,32 +17,27 @@ export function useProcessedOwnedGames() { const providerDataMap = useAtomValue(providerDataAtom); const remoteGames = useAtomValue(remoteGamesAtom); - const databaseGamesByProvider = useMemo(() => { - const result: Record> = { - steamId: {}, - epicId: {}, - gogId: {}, - title: {}, - }; + const [databaseGamesByProvider, databaseGamesByTitle] = useMemo(() => { + const byProvider: Partial>> = + {}; + const byTitle: Record = {}; + const providerIds = Object.keys(providerDataMap) as ProviderId[]; for (const remoteGame of remoteGames) { - for (const steamId of remoteGame.steamIds ?? []) { - result.steamId[steamId] = remoteGame; - } - for (const gogId of remoteGame.gogIds ?? []) { - result.gogId[gogId] = remoteGame; - } - for (const epicId of remoteGame.epicIds ?? []) { - result.epicId[epicId] = remoteGame; + for (const providerId of providerIds) { + byProvider[providerId] ??= {}; + for (const remoteGameId of remoteGame.providerIds[providerId] ?? []) { + byProvider[providerId][remoteGameId] = remoteGame; + } } if (remoteGame.title) { - result.title[normalizeTitle(remoteGame.title)] = remoteGame; + byTitle[normalizeTitle(remoteGame.title)] = remoteGame; } } - return result; - }, [remoteGames]); + return [byProvider, byTitle]; + }, [remoteGames, providerDataMap]); // Global IDs of owned games that are also installed. const installedOwnedIds: Set = useMemo(() => { @@ -64,29 +57,6 @@ export function useProcessedOwnedGames() { const processedOwnedGames: ProcessedOwnedGameRecord = useMemo(() => { const result: ProcessedOwnedGameRecord = {}; - function getDatabaseGameMapping(ownedGame: OwnedGame) { - switch (ownedGame.provider) { - case "Steam": - return databaseGamesByProvider.steamId; - case "Epic": - return databaseGamesByProvider.epicId; - case "Gog": - return databaseGamesByProvider.gogId; - default: - return databaseGamesByProvider.title; - } - } - - function getDatabaseGame(ownedGame: OwnedGame) { - const map = getDatabaseGameMapping(ownedGame); - const key = - map === databaseGamesByProvider.title - ? normalizeTitle(ownedGame.name) - : ownedGame.providerGameId; - - return map[key]; - } - for (const providerData of Object.values(providerDataMap)) { for (const [gameId, ownedGame] of Object.entries( providerData.ownedGames, @@ -94,16 +64,26 @@ export function useProcessedOwnedGames() { const provider = providerDataMap[ownedGame.provider]; if (!provider) continue; + const remoteData = + databaseGamesByProvider[ownedGame.provider]?.[ + ownedGame.providerGameId + ] ?? databaseGamesByTitle[normalizeTitle(ownedGame.name)]; + result[gameId] = { ...ownedGame, - remoteData: getDatabaseGame(ownedGame), + remoteData, isInstalled: installedOwnedIds.has(ownedGame.globalId), }; } } return result; - }, [databaseGamesByProvider, installedOwnedIds, providerDataMap]); + }, [ + databaseGamesByProvider, + databaseGamesByTitle, + installedOwnedIds, + providerDataMap, + ]); return processedOwnedGames; } From bed69f5ce54a32914cb48cf46446029d1201d8f0 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 20 Aug 2024 01:01:12 +0200 Subject: [PATCH 200/255] prevent stuff being in cache forever --- backend/src/main.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/backend/src/main.rs b/backend/src/main.rs index 36ec5757..d2d0a7ce 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -402,7 +402,10 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul let mut cache = ProviderCache::new(provider_id); let mut installed_games = HashMap::::new(); + let mut installed_games_without_cache = HashMap::::new(); + let mut owned_games = HashMap::::new(); + let mut owned_games_without_cache = HashMap::::new(); if let Err(err) = cache.load(&handle) { log::warn!("Failed to load cache for provider {provider_id}: {err}"); @@ -418,20 +421,25 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul provider .get_games( |game: InstalledGame| { + installed_games_without_cache.insert(game.id.clone(), game.clone()); installed_games.insert(game.id.clone(), game); update_installed_games_state(installed_games.clone()); }, |game: OwnedGame| { + owned_games_without_cache.insert(game.global_id.clone(), game.clone()); owned_games.insert(game.global_id.clone(), game); update_owned_games_state(owned_games.clone()); }, ) .await?; + update_installed_games_state(installed_games_without_cache.clone()); + update_owned_games_state(owned_games_without_cache.clone()); + cache .set_data(ProviderData { - installed_games: installed_games.clone(), - owned_games: owned_games.clone(), + installed_games: installed_games_without_cache.clone(), + owned_games: owned_games_without_cache.clone(), }) .save(&handle)?; From c1af6c74184d1957b83b92ded20de2819f52e82d Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 20 Aug 2024 01:26:37 +0200 Subject: [PATCH 201/255] refreshing and removing games using backend state --- backend/src/events.rs | 4 -- backend/src/main.rs | 82 ++++++++++++++++++--------- frontend/api/bindings.ts | 3 - frontend/hooks/use-game-drop-event.ts | 14 ----- 4 files changed, 56 insertions(+), 47 deletions(-) diff --git a/backend/src/events.rs b/backend/src/events.rs index 5d4b303e..b2a9a5df 100644 --- a/backend/src/events.rs +++ b/backend/src/events.rs @@ -27,9 +27,6 @@ pub struct ExecutedProviderCommand; #[serializable_event] pub struct SelectInstalledGame(pub String); -#[serializable_event] -pub struct GameRemoved(pub String); - #[serializable_event] pub struct ErrorRaised(pub String); @@ -63,7 +60,6 @@ pub fn collect_events() -> tauri_specta::Events { SyncRemoteMods, ExecutedProviderCommand, SelectInstalledGame, - GameRemoved, ErrorRaised, ] } diff --git a/backend/src/main.rs b/backend/src/main.rs index d2d0a7ce..9afb0526 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -226,11 +226,19 @@ async fn open_installed_mod_folder( } fn refresh_game_mods_and_exe(installed_game: &InstalledGame, handle: &AppHandle) -> Result { - let mut new_game = installed_game.clone(); - new_game.refresh_installed_mods(); - new_game.refresh_executable()?; + let mut refreshed_game = installed_game.clone(); + refreshed_game.refresh_installed_mods(); + refreshed_game.refresh_executable()?; - handle.emit_safe(events::FoundInstalledGame()); + if let Some(installed_games_state) = handle + .app_state() + .installed_games + .get(&installed_game.provider) + { + let mut installed_games = installed_games_state.get_data()?; + installed_games.insert(refreshed_game.id.clone(), refreshed_game.clone()); + update_installed_games_state(handle, &installed_game.provider, installed_games); + } Ok(()) } @@ -382,23 +390,31 @@ async fn fetch_remote_games() -> Result> { Ok(remote_games::get().await?) } +fn update_installed_games_state( + handle: &AppHandle, + provider_id: &ProviderId, + installed_games: HashMap, +) { + if let Some(mutex) = handle.app_state().installed_games.get(provider_id) { + update_state(installed_games.clone(), mutex); + } + handle.emit_safe(events::FoundInstalledGame()); +} + +fn update_owned_games_state( + handle: &AppHandle, + provider_id: &ProviderId, + owned_games: HashMap, +) { + if let Some(mutex) = handle.app_state().owned_games.get(provider_id) { + update_state(owned_games.clone(), mutex); + } + handle.emit_safe(events::FoundOwnedGame()); +} + #[tauri::command] #[specta::specta] async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Result { - let update_installed_games_state = |installed_games: HashMap| { - if let Some(mutex) = handle.app_state().installed_games.get(&provider_id) { - update_state(installed_games.clone(), mutex); - } - handle.emit_safe(events::FoundInstalledGame()); - }; - - let update_owned_games_state = |owned_games: HashMap| { - if let Some(mutex) = handle.app_state().owned_games.get(&provider_id) { - update_state(owned_games.clone(), mutex); - } - handle.emit_safe(events::FoundOwnedGame()); - }; - let mut cache = ProviderCache::new(provider_id); let mut installed_games = HashMap::::new(); @@ -412,8 +428,8 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul } else { installed_games = cache.data.installed_games.clone(); owned_games = cache.data.owned_games.clone(); - update_installed_games_state(installed_games.clone()); - update_owned_games_state(owned_games.clone()); + update_installed_games_state(&handle, &provider_id, installed_games.clone()); + update_owned_games_state(&handle, &provider_id, owned_games.clone()); } let provider = provider::get_provider(provider_id)?; @@ -423,18 +439,18 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul |game: InstalledGame| { installed_games_without_cache.insert(game.id.clone(), game.clone()); installed_games.insert(game.id.clone(), game); - update_installed_games_state(installed_games.clone()); + update_installed_games_state(&handle, &provider_id, installed_games.clone()); }, |game: OwnedGame| { owned_games_without_cache.insert(game.global_id.clone(), game.clone()); owned_games.insert(game.global_id.clone(), game); - update_owned_games_state(owned_games.clone()); + update_owned_games_state(&handle, &provider_id, owned_games.clone()); }, ) .await?; - update_installed_games_state(installed_games_without_cache.clone()); - update_owned_games_state(owned_games_without_cache.clone()); + update_installed_games_state(&handle, &provider_id, installed_games_without_cache.clone()); + update_owned_games_state(&handle, &provider_id, owned_games_without_cache.clone()); cache .set_data(ProviderData { @@ -460,8 +476,14 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result { let installed_game = manual_provider::add_game(&normalized_path)?; let game_name = installed_game.name.clone(); + if let Some(installed_games_state) = handle.app_state().installed_games.get(&ProviderId::Manual) + { + let mut installed_games = installed_games_state.get_data()?; + installed_games.insert(installed_game.id.clone(), installed_game.clone()); + update_installed_games_state(&handle, &installed_game.provider, installed_games); + } + handle.emit_safe(events::SelectInstalledGame(installed_game.id.clone())); - handle.emit_safe(events::FoundInstalledGame()); analytics::send_event(analytics::Event::ManuallyAddGame, &game_name).await; @@ -473,7 +495,15 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result { async fn remove_game(installed_game: InstalledGame, handle: AppHandle) -> Result { manual_provider::remove_game(&installed_game.executable.path)?; - handle.emit_safe(events::GameRemoved(installed_game.id)); + if let Some(installed_games_state) = handle + .app_state() + .installed_games + .get(&installed_game.provider) + { + let mut installed_games = installed_games_state.get_data()?; + installed_games.remove(&installed_game.id); + update_installed_games_state(&handle, &installed_game.provider, installed_games); + } Ok(()) } diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 53db974b..100b3617 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -263,7 +263,6 @@ errorRaised: ErrorRaised, executedProviderCommand: ExecutedProviderCommand, foundInstalledGame: FoundInstalledGame, foundOwnedGame: FoundOwnedGame, -gameRemoved: GameRemoved, selectInstalledGame: SelectInstalledGame, syncLocalMods: SyncLocalMods, syncModLoaders: SyncModLoaders, @@ -273,7 +272,6 @@ errorRaised: "error-raised", executedProviderCommand: "executed-provider-command", foundInstalledGame: "found-installed-game", foundOwnedGame: "found-owned-game", -gameRemoved: "game-removed", selectInstalledGame: "select-installed-game", syncLocalMods: "sync-local-mods", syncModLoaders: "sync-mod-loaders", @@ -301,7 +299,6 @@ export type FoundOwnedGame = [] export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } export type GameMode = "VR" | "Flat" -export type GameRemoved = string export type InstalledGame = { id: string; name: string; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } export type LocalMod = { data: LocalModData; common: CommonModData } export type LocalModData = { path: string; manifest: Manifest | null } diff --git a/frontend/hooks/use-game-drop-event.ts b/frontend/hooks/use-game-drop-event.ts index dc3988b1..cac926e8 100644 --- a/frontend/hooks/use-game-drop-event.ts +++ b/frontend/hooks/use-game-drop-event.ts @@ -6,20 +6,6 @@ import { useEffect } from "react"; export function useGameDropEvent() { const [executeAddGame] = useAsyncCommand(commands.addGame); - // TODO: might not need this once I fix cache invalidation. - // TODO: remove game on frontend. - // useAppEvent(events.gameRemoved, (gameId) => { - // setProviderData((previousInstalledGames) => { - // // Mutating the inner value because we're doing some cursed thing for performance. - // delete previousInstalledGames[gameId]; - - // // But creating a new object for the outer structure, to count as a new reference. - // return { - // ...previousInstalledGames, - // }; - // }); - // }); - useEffect(() => { const unlistenPromise = getCurrentWebview().onDragDropEvent((event) => { if (event.payload.type === "drop") { From 772c2e751359a375622d60bc81f4c6e4ddd27a02 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 20 Aug 2024 01:39:57 +0200 Subject: [PATCH 202/255] sort engines per game --- .../components/owned-games/owned-games-columns.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index abff316e..27e04d13 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -73,13 +73,15 @@ const appType: TableColumnBase = { ), }; -// TODO: somehow take into account all engines function getEngine(game: ProcessedOwnedGame) { - if (!game.remoteData) return null; - - if (!game.remoteData.engines) return null; - - return game.remoteData.engines[0] ?? null; + return ( + // The remote game database can have multiple engines assigned to a game. + // Usually that's for games that had their engine versions change during the game's lifespan. + // For now we're just picking the latest one and displaying that the table, + // but maybe later we'll want to somehow display all versions, + // because for some games you can get an older version that's compatible with more mods. + game.remoteData?.engines?.sort(sortGamesByEngine)?.reverse()?.[0] ?? null + ); } const engine: TableColumnBase = { From 2248e4207506bf4f2f987f2d9ebc4e148f9cb101 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 20 Aug 2024 01:49:05 +0200 Subject: [PATCH 203/255] you know what that's not a todo anymore --- backend/rai-pal-core/src/game_mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/rai-pal-core/src/game_mod.rs b/backend/rai-pal-core/src/game_mod.rs index c913ca9e..468a46bf 100644 --- a/backend/rai-pal-core/src/game_mod.rs +++ b/backend/rai-pal-core/src/game_mod.rs @@ -17,5 +17,5 @@ pub struct CommonModData { pub engine: Option, pub unity_backend: Option, pub engine_version_range: Option, - pub loader_id: String, // TODO make enum + pub loader_id: String, } From 0f5d513e0e080d8aa7d65b4c0f90c6caa6221cbe Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 22 Aug 2024 19:47:44 +0200 Subject: [PATCH 204/255] add gamepass games testing data --- test-data/xbox-gamepass-games.json | 3316 ++++++++++++++++++++++++++++ 1 file changed, 3316 insertions(+) create mode 100644 test-data/xbox-gamepass-games.json diff --git a/test-data/xbox-gamepass-games.json b/test-data/xbox-gamepass-games.json new file mode 100644 index 00000000..ef765d94 --- /dev/null +++ b/test-data/xbox-gamepass-games.json @@ -0,0 +1,3316 @@ +[ + { + "productTitle": "A Little to the Left", + "productId": "9NLDDF97GTJ0", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.51954.13709503452579203.2424d951-5f62-4cd0-816f-1d45c87c1dc3.2de5e46c-0bcf-4646-add2-15db414fd1fd" + ] + }, + "releaseDate": "2024-02-15", + "storePage": "https://www.xbox.com/en-us/games/store/a-little-to-the-left/9NLDDF97GTJ0" + }, + { + "productTitle": "A Plague Tale: Requiem - Windows", + "productId": "9N97RC576957", + "images": {}, + "releaseDate": "2022-10-18", + "storePage": "https://www.xbox.com/en-us/games/store/a-plague-tale-requiem-windows/9N97RC576957" + }, + { + "productTitle": "Against the Storm", + "productId": "9NRLRJPV4HWL", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.62188.14385363172001343.ef67463b-a065-4ebb-ae31-992199a7c91f.dc35cf6e-81ef-420e-ac79-4203eab68205" + ] + }, + "releaseDate": "2023-12-08", + "storePage": "https://www.xbox.com/en-us/games/store/against-the-storm/9NRLRJPV4HWL" + }, + { + "productTitle": "Age of Empires Definitive Edition", + "productId": "9NJWTJSVGVLJ", + "images": {}, + "releaseDate": "2019-08-19", + "storePage": "https://www.xbox.com/en-us/games/store/age-of-empires-definitive-edition/9NJWTJSVGVLJ" + }, + { + "productTitle": "Age of Empires II: Definitive Edition", + "productId": "9N42SSSX2MTG", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.35554.13991012152837663.1297136a-f273-41f1-947f-59044c848c55.01305b76-9358-458a-9db9-f6aea8339462" + ] + }, + "releaseDate": "2023-01-17", + "storePage": "https://www.xbox.com/en-us/games/store/age-of-empires-ii-definitive-edition/9N42SSSX2MTG" + }, + { + "productTitle": "Age of Empires III: Definitive Edition", + "productId": "9N1HF804QXN4", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.25620.13905755391310011.6681c157-530b-4476-b20e-6cf142a9a94e.1437bcbf-1390-4dd3-a14a-ebe105129422" + ] + }, + "releaseDate": "2020-10-15", + "storePage": "https://www.xbox.com/en-us/games/store/age-of-empires-iii-definitive-edition/9N1HF804QXN4" + }, + { + "productTitle": "Age of Empires IV: Anniversary Edition", + "productId": "9N94NCGM1Q2N", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.39795.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.3005be1d-9924-42a5-8cd9-a774a33a3387", + "https://store-images.s-microsoft.com/image/apps.44152.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.e1de87d3-0066-4302-8a56-ae186825da13", + "https://store-images.s-microsoft.com/image/apps.53387.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.750bc72a-72f4-48ea-8e8d-3866ddaf3683" + ] + }, + "releaseDate": "2021-10-28", + "storePage": "https://www.xbox.com/en-us/games/store/age-of-empires-iv-anniversary-edition/9N94NCGM1Q2N" + }, + { + "productTitle": "Amnesia: The Bunker", + "productId": "9PC15H56NGJK", + "images": {}, + "releaseDate": "2023-06-06", + "storePage": "https://www.xbox.com/en-us/games/store/amnesia-the-bunker/9PC15H56NGJK" + }, + { + "productTitle": "Among Us", + "productId": "9NG07QJNK38J", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.16094.13589262686196899.16e3418a-cbf2-4748-9724-1c9dc9b7a0b9.476dcb12-abc8-433a-ac3c-858a44939d8f" + ] + }, + "releaseDate": "2021-12-14", + "storePage": "https://www.xbox.com/en-us/games/store/among-us/9NG07QJNK38J" + }, + { + "productTitle": "An Elder Scrolls Legend: Battlespire", + "productId": "9MVSRJWZBG9G", + "images": {}, + "releaseDate": "2022-08-18", + "storePage": "https://www.xbox.com/en-us/games/store/an-elder-scrolls-legend-battlespire/9MVSRJWZBG9G" + }, + { + "productTitle": "Another Crab's Treasure", + "productId": "9P97ZTRTH25W", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.52985.14077481160620630.1db41d01-0b54-4154-a1e1-f00cf31fab40.f4df0b06-9e1b-4eb6-9857-62fdd46ad8db" + ] + }, + "releaseDate": "2024-04-25", + "storePage": "https://www.xbox.com/en-us/games/store/another-crab-s-treasure/9P97ZTRTH25W" + }, + { + "productTitle": "Anuchard", + "productId": "9NZ02XZD806L", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.8003.14490665772853953.a70de13a-b9d0-41e7-bac1-9ce697912658.a45024e9-dd52-4cde-bab7-9781c38075f6" + ] + }, + "releaseDate": "2022-04-21", + "storePage": "https://www.xbox.com/en-us/games/store/anuchard/9NZ02XZD806L" + }, + { + "productTitle": "Arcade Paradise", + "productId": "9N2FQCGWH32D", + "images": {}, + "releaseDate": "2022-08-11", + "storePage": "https://www.xbox.com/en-us/games/store/arcade-paradise/9N2FQCGWH32D" + }, + { + "productTitle": "ARK: Survival Ascended", + "productId": "9P33VJGVPHVP", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.3955.14545480955348978.971a18b6-ebe3-437f-af65-4ba072de8964.7c7c9bba-d6fe-42e3-83fc-bb2f6aeff2cd" + ] + }, + "releaseDate": "2023-11-21", + "storePage": "https://www.xbox.com/en-us/games/store/ark-survival-ascended/9P33VJGVPHVP" + }, + { + "productTitle": "ARK: Ultimate Survivor Edition", + "productId": "9P686C1GJ91L", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.56109.14624535533178035.0b67d5f1-b944-4b48-abe7-9bb2f8f41684.fc9cdb42-f0e3-47fa-8d1c-23a4a8ca931c" + ] + }, + "releaseDate": "2021-05-27", + "storePage": "https://www.xbox.com/en-us/games/store/ark-ultimate-survivor-edition/9P686C1GJ91L" + }, + { + "productTitle": "Arx Fatalis", + "productId": "9NXQKPGMHH9G", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/arx-fatalis/9NXQKPGMHH9G" + }, + { + "productTitle": "As Dusk Falls", + "productId": "9NR7XDNVP5SW", + "images": {}, + "releaseDate": "2022-07-19", + "storePage": "https://www.xbox.com/en-us/games/store/as-dusk-falls/9NR7XDNVP5SW" + }, + { + "productTitle": "Ashes of the Singularity: Escalation", + "productId": "9PD4G4N5HT9H", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.20495.14161170943848382.2f684838-f6f6-46ef-b508-9c52ff9b96b8.f0aea258-d005-4272-9d4c-62884ee2a084" + ] + }, + "releaseDate": "2022-09-13", + "storePage": "https://www.xbox.com/en-us/games/store/ashes-of-the-singularity-escalation/9PD4G4N5HT9H" + }, + { + "productTitle": "ASTRONEER", + "productId": "9NBLGGH43KZB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.20760.13510798887933723.c3a2d497-e717-463e-a426-2c119e62b161.23ddcdac-1498-48db-b0d9-489ed87a5e33", + "https://store-images.s-microsoft.com/image/apps.7065.13510798887933723.57e43f19-4066-429e-b1a2-caea56e427b4.062ba478-f5b0-4cf3-92ba-73edf71889e7" + ] + }, + "releaseDate": "2019-02-06", + "storePage": "https://www.xbox.com/en-us/games/store/astroneer/9NBLGGH43KZB" + }, + { + "productTitle": "Atlas Fallen: Reign of Sand (Windows)", + "productId": "9NCGTG3KR2W9", + "images": {}, + "releaseDate": "2024-08-22", + "storePage": "https://www.xbox.com/en-us/games/store/atlas-fallen-reign-of-sand-windows/9NCGTG3KR2W9" + }, + { + "productTitle": "Atomic Heart (Windows)", + "productId": "9N9KXP8RRPB5", + "images": {}, + "releaseDate": "2023-02-21", + "storePage": "https://www.xbox.com/en-us/games/store/atomic-heart-windows/9N9KXP8RRPB5" + }, + { + "productTitle": "BATTLETECH", + "productId": "9NQVDQS2BC10", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.31850.13762247899293053.a620912f-d2e0-44a1-9cd1-d02f95ffa814.a0f221c6-a620-4cf9-85f5-c6aa88bb56e7" + ] + }, + "releaseDate": "2020-06-11", + "storePage": "https://www.xbox.com/en-us/games/store/battletech/9NQVDQS2BC10" + }, + { + "productTitle": "Battletoads", + "productId": "9N7GCF5SGCXC", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.42322.14065499269907016.249670e2-cad9-48bb-aa0f-309d712ede80.974ad9ad-99b2-4d84-abfc-91a9ed643f06" + ] + }, + "releaseDate": "2020-08-20", + "storePage": "https://www.xbox.com/en-us/games/store/battletoads/9N7GCF5SGCXC" + }, + { + "productTitle": "Ben 10: Power Trip", + "productId": "9NJWFF2KHL6H", + "images": {}, + "releaseDate": "2020-10-09", + "storePage": "https://www.xbox.com/en-us/games/store/ben-10-power-trip/9NJWFF2KHL6H" + }, + { + "productTitle": "BlazBlue: Cross Tag Battle Special Edition", + "productId": "9NFWDRBZXDL9", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.53583.13586724043256738.3809e00e-03ca-4046-bce4-167a34f4611d.21a2671a-7184-42c5-a2ea-d84d03bcdeba" + ] + }, + "releaseDate": "2023-04-27", + "storePage": "https://www.xbox.com/en-us/games/store/blazblue-cross-tag-battle-special-edition/9NFWDRBZXDL9" + }, + { + "productTitle": "Bleeding Edge", + "productId": "9NX6XGVJ0J3D", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.10811.14431087147384961.13dc1a18-3532-477b-b2d2-772256efc040.87d93a78-9f25-423f-86e7-694f51d12e03" + ] + }, + "releaseDate": "2020-03-24", + "storePage": "https://www.xbox.com/en-us/games/store/bleeding-edge/9NX6XGVJ0J3D" + }, + { + "productTitle": "Bloodstained: Ritual of the Night", + "productId": "9MWB2BFF0SPD", + "images": {}, + "releaseDate": "2019-09-19", + "storePage": "https://www.xbox.com/en-us/games/store/bloodstained-ritual-of-the-night/9MWB2BFF0SPD" + }, + { + "productTitle": "Bluey: The Videogame", + "productId": "9N2J0FGV30DX", + "images": {}, + "releaseDate": "2023-11-17", + "storePage": "https://www.xbox.com/en-us/games/store/bluey-the-videogame/9N2J0FGV30DX" + }, + { + "productTitle": "Botany Manor", + "productId": "9PLP9LSKB6WV", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.41526.14313562065097595.e2df373c-7c5d-4185-9834-210dcde167fd.3f955fb9-a5c4-40a6-ad3b-a1d845f4bcfc" + ] + }, + "releaseDate": "2024-04-09", + "storePage": "https://www.xbox.com/en-us/games/store/botany-manor/9PLP9LSKB6WV" + }, + { + "productTitle": "Broforce", + "productId": "9P03ZQMBMV65", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.42766.14468359839778606.8334cc11-289e-49d6-9e23-c95c3d31090a.31aca589-8a6c-4646-a224-0cd0caea8f7a", + "https://store-images.s-microsoft.com/image/apps.8680.14468359839778606.8334cc11-289e-49d6-9e23-c95c3d31090a.126b026f-761e-4820-9e28-ec1e3141cb21", + "https://store-images.s-microsoft.com/image/apps.6736.14468359839778606.b9e6f982-23f2-4c58-a436-66ba564129a1.3a7f9a20-6844-44bf-bbb9-72ef8eb4d298" + ] + }, + "releaseDate": "2019-06-09", + "storePage": "https://www.xbox.com/en-us/games/store/broforce/9P03ZQMBMV65" + }, + { + "productTitle": "Broken Age", + "productId": "9MZZNL8J2MSZ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.17222.13865165192974158.ad4349c4-8b53-4bb2-98c5-d7851e817572.a6468260-1f4a-4512-8c86-16e338727b8e" + ] + }, + "releaseDate": "2017-06-23", + "storePage": "https://www.xbox.com/en-us/games/store/broken-age/9MZZNL8J2MSZ" + }, + { + "productTitle": "Brotato", + "productId": "9P9VNSQK1W3K", + "images": {}, + "releaseDate": "2024-01-30", + "storePage": "https://www.xbox.com/en-us/games/store/brotato/9P9VNSQK1W3K" + }, + { + "productTitle": "Brothers: a Tale of Two Sons", + "productId": "9PJ42FRWTGH1", + "images": {}, + "releaseDate": "2019-06-09", + "storePage": "https://www.xbox.com/en-us/games/store/brothers-a-tale-of-two-sons/9PJ42FRWTGH1" + }, + { + "productTitle": "Call of Duty®: Modern Warfare® III - Standard Edition", + "productId": "9P697QF6GSVV", + "images": {}, + "releaseDate": "2024-07-24", + "storePage": "https://www.xbox.com/en-us/games/store/call-of-duty-modern-warfare-iii-standard-edition/9P697QF6GSVV" + }, + { + "productTitle": "Call of the Wild: The Angler™", + "productId": "9NDC5LJS839S", + "images": {}, + "releaseDate": "2023-08-30", + "storePage": "https://www.xbox.com/en-us/games/store/call-of-the-wild-the-angler/9NDC5LJS839S" + }, + { + "productTitle": "Car Mechanic Simulator 2021", + "productId": "9NH019ZFFHTV", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.11628.13635623008017579.c3c49040-6ffd-4834-b97d-bf656fa40ffa.2a60277d-e755-4a3d-b9bc-f729f040a7f8" + ] + }, + "releaseDate": "2023-06-01", + "storePage": "https://www.xbox.com/en-us/games/store/car-mechanic-simulator-2021/9NH019ZFFHTV" + }, + { + "productTitle": "Cassette Beasts", + "productId": "9N82SNQTZVMQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.29648.14053398568595271.6df710ab-5b0b-4a3d-8691-4e7b0afae807.9acf59c5-6252-43d1-a1b9-b62fadc00697" + ] + }, + "releaseDate": "2023-04-26", + "storePage": "https://www.xbox.com/en-us/games/store/cassette-beasts/9N82SNQTZVMQ" + }, + { + "productTitle": "Celeste", + "productId": "BWMQL2RPWBHB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.36676.71633162879241707.c31376fa-ee25-41f1-a3fa-174e27920c1e.aa1251ba-296e-470d-b0c0-9edc2a54738f" + ] + }, + "releaseDate": "2018-01-26", + "storePage": "https://www.xbox.com/en-us/games/store/celeste/BWMQL2RPWBHB" + }, + { + "productTitle": "Chants of Sennaar (Windows)", + "productId": "9N6FWNVHQNGD", + "images": {}, + "releaseDate": "2024-05-15", + "storePage": "https://www.xbox.com/en-us/games/store/chants-of-sennaar-windows/9N6FWNVHQNGD" + }, + { + "productTitle": "Chivalry 2", + "productId": "9N7CJX93ZGWN", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.51634.14071745200459129.f6415fab-b460-4210-a974-f5c4ed9bcf0e.b23277b9-2d4b-491c-901c-0bd035a566d2" + ] + }, + "releaseDate": "2021-06-08", + "storePage": "https://www.xbox.com/en-us/games/store/chivalry-2/9N7CJX93ZGWN" + }, + { + "productTitle": "Cities: Skylines - Windows 10 Edition", + "productId": "9NWVC7XP3PFD", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.40907.14442149246756025.a14b1d5d-9c03-4960-96fe-1939536380ec.27e81689-ac74-4ba1-87bd-5c6885038b41", + "https://store-images.s-microsoft.com/image/apps.34644.14442149246756025.c1fe1fbf-dc9a-408c-9e9b-8f66f48cc8fd.0d109c7e-7940-4e12-822b-149a47d8a9f2", + "https://store-images.s-microsoft.com/image/apps.53780.14442149246756025.c8cd7bd6-7ead-4b47-9601-caf6e439fe94.ae31ce96-9ecb-4238-acbb-fc49be4f5770" + ] + }, + "releaseDate": "2017-05-19", + "storePage": "https://www.xbox.com/en-us/games/store/cities-skylines-windows-10-edition/9NWVC7XP3PFD" + }, + { + "productTitle": "Cities: Skylines II - PC Edition", + "productId": "9PGZ346PSLN0", + "images": {}, + "releaseDate": "2023-10-24", + "storePage": "https://www.xbox.com/en-us/games/store/cities-skylines-ii-pc-edition/9PGZ346PSLN0" + }, + { + "productTitle": "Citizen Sleeper", + "productId": "9N6F97F9WGL0", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.10588.14019812399166283.dc5d064e-3693-46fa-896f-9287938c5df4.9066278e-60b2-4859-bcf7-64b239159dd8" + ] + }, + "releaseDate": "2022-05-05", + "storePage": "https://www.xbox.com/en-us/games/store/citizen-sleeper/9N6F97F9WGL0" + }, + { + "productTitle": "Clone Drone in the Danger Zone", + "productId": "9NKHKBQJSSC3", + "images": {}, + "releaseDate": "2023-11-08", + "storePage": "https://www.xbox.com/en-us/games/store/clone-drone-in-the-danger-zone/9NKHKBQJSSC3" + }, + { + "productTitle": "Close to the Sun.", + "productId": "9P4CBGC2HJG1", + "images": {}, + "releaseDate": "2024-01-03", + "storePage": "https://www.xbox.com/en-us/games/store/close-to-the-sun/9P4CBGC2HJG1" + }, + { + "productTitle": "Cocoon", + "productId": "9N3FPS4LDHCR", + "images": {}, + "releaseDate": "2023-09-29", + "storePage": "https://www.xbox.com/en-us/games/store/cocoon/9N3FPS4LDHCR" + }, + { + "productTitle": "Common'hood", + "productId": "9N234330NRND", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.21244.13960116824316263.0d45a6c2-7697-4178-9bb2-fc474428c6bf.8d45b30e-18d4-4d11-b27a-b8b982d445e2" + ] + }, + "releaseDate": "2023-07-11", + "storePage": "https://www.xbox.com/en-us/games/store/common-hood/9N234330NRND" + }, + { + "productTitle": "Conan Exiles", + "productId": "C2X6ZCNKN2WR", + "images": {}, + "releaseDate": "2018-05-08", + "storePage": "https://www.xbox.com/en-us/games/store/conan-exiles/C2X6ZCNKN2WR" + }, + { + "productTitle": "Control Ultimate Edition", + "productId": "9P7LVXNVQ6K7", + "images": {}, + "releaseDate": "2024-03-13", + "storePage": "https://www.xbox.com/en-us/games/store/control-ultimate-edition/9P7LVXNVQ6K7" + }, + { + "productTitle": "Cooking Simulator Windows", + "productId": "9PLGBZWN65RG", + "images": {}, + "releaseDate": "2022-08-11", + "storePage": "https://www.xbox.com/en-us/games/store/cooking-simulator-windows/9PLGBZWN65RG" + }, + { + "productTitle": "Coral Island", + "productId": "9N1T1MQ92PVS", + "images": {}, + "releaseDate": "2022-10-11", + "storePage": "https://www.xbox.com/en-us/games/store/coral-island/9N1T1MQ92PVS" + }, + { + "productTitle": "Crackdown 3", + "productId": "9NXR6469DM2P", + "images": {}, + "releaseDate": "2019-02-15", + "storePage": "https://www.xbox.com/en-us/games/store/crackdown-3/9NXR6469DM2P" + }, + { + "productTitle": "Crash Bandicoot™ N. Sane Trilogy", + "productId": "9NJ2FD5HJ7SB", + "images": {}, + "releaseDate": "2024-05-07", + "storePage": "https://www.xbox.com/en-us/games/store/crash-bandicoot-n-sane-trilogy/9NJ2FD5HJ7SB" + }, + { + "productTitle": "Creatures of Ava", + "productId": "9NV5LTSPHQD2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.7817.14400608729854013.f3e97c2f-202d-48ee-b6f7-8667ef1177d0.35bb725f-c98f-420c-b1ea-d964f53260dd" + ] + }, + "releaseDate": "2024-08-07", + "storePage": "https://www.xbox.com/en-us/games/store/creatures-of-ava/9NV5LTSPHQD2" + }, + { + "productTitle": "Cricket 24: The Official Game Of The Ashes", + "productId": "9NKF2SZ630ZH", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.56481.13662804336614394.63dd49dd-f93b-4b67-b597-bace2d4550c2.7db77c31-f8c6-4c2a-af2b-b0d556f53a33" + ] + }, + "releaseDate": "2024-06-26", + "storePage": "https://www.xbox.com/en-us/games/store/cricket-24-the-official-game-of-the-ashes/9NKF2SZ630ZH" + }, + { + "productTitle": "Crusader Kings III", + "productId": "9N7GG222GTTH", + "images": {}, + "releaseDate": "2020-09-01", + "storePage": "https://www.xbox.com/en-us/games/store/crusader-kings-iii/9N7GG222GTTH" + }, + { + "productTitle": "Darkest Dungeon PC", + "productId": "9PKXZHKXNH8C", + "images": {}, + "releaseDate": "2021-06-10", + "storePage": "https://www.xbox.com/en-us/games/store/darkest-dungeon-pc/9PKXZHKXNH8C" + }, + { + "productTitle": "Day of the Tentacle Remastered", + "productId": "9NKK6CX54183", + "images": {}, + "releaseDate": "2020-10-29", + "storePage": "https://www.xbox.com/en-us/games/store/day-of-the-tentacle-remastered/9NKK6CX54183" + }, + { + "productTitle": "Dead by Daylight Windows", + "productId": "9NMS4SFNBGBH", + "images": {}, + "releaseDate": "2019-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/dead-by-daylight-windows/9NMS4SFNBGBH" + }, + { + "productTitle": "Dead Cells", + "productId": "9NKVX66J0ZSK", + "images": {}, + "releaseDate": "2019-09-05", + "storePage": "https://www.xbox.com/en-us/games/store/dead-cells/9NKVX66J0ZSK" + }, + { + "productTitle": "Death's Door", + "productId": "9MXKWW4K9LP2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.37438.13892871097033903.6bf68087-15c2-4acb-aa8d-2a9356aea7ff.e6624c21-964f-4cd0-85bd-650a80e2b348" + ] + }, + "releaseDate": "2021-07-20", + "storePage": "https://www.xbox.com/en-us/games/store/death-s-door/9MXKWW4K9LP2" + }, + { + "productTitle": "DEATHLOOP", + "productId": "9P5Z4530318L", + "images": {}, + "releaseDate": "2022-09-20", + "storePage": "https://www.xbox.com/en-us/games/store/deathloop/9P5Z4530318L" + }, + { + "productTitle": "Deep Rock Galactic", + "productId": "9NHFVWX1V7QJ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.6443.13626568325427111.5219f295-f38f-4199-b81a-6fe1b4e11f8e.a4c752e0-e0ca-425d-a406-f6dd80224cb6", + "https://store-images.s-microsoft.com/image/apps.3401.13626568325427111.5219f295-f38f-4199-b81a-6fe1b4e11f8e.04cdaabe-3894-4fd9-9936-e42e63a0c1fb", + "https://store-images.s-microsoft.com/image/apps.30568.13626568325427111.5219f295-f38f-4199-b81a-6fe1b4e11f8e.78dfe433-7c35-4e36-9c97-b6680a9eaae0" + ] + }, + "releaseDate": "2020-05-13", + "storePage": "https://www.xbox.com/en-us/games/store/deep-rock-galactic/9NHFVWX1V7QJ" + }, + { + "productTitle": "Depersonalization", + "productId": "9N70SM8985W1", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.8559.14003683450151848.fb1907ac-3deb-42b0-a8a8-456541334591.73cb0279-93e8-474c-bb68-016a643567e7" + ] + }, + "releaseDate": "2024-06-12", + "storePage": "https://www.xbox.com/en-us/games/store/depersonalization/9N70SM8985W1" + }, + { + "productTitle": "Descenders", + "productId": "C37XBX7DCBZ0", + "images": {}, + "releaseDate": "2019-05-07", + "storePage": "https://www.xbox.com/en-us/games/store/descenders/C37XBX7DCBZ0" + }, + { + "productTitle": "Dicey Dungeons", + "productId": "9PC4C9NLP3ZD", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.56965.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.235fb5e7-53f2-4190-9a23-2128d77a706f", + "https://store-images.s-microsoft.com/image/apps.12908.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.554821a2-7c2f-4bb1-90a7-ebf9faa1fb09", + "https://store-images.s-microsoft.com/image/apps.61023.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.72c8260e-d75a-4581-ae25-05c5121312af" + ] + }, + "releaseDate": "2021-11-11", + "storePage": "https://www.xbox.com/en-us/games/store/dicey-dungeons/9PC4C9NLP3ZD" + }, + { + "productTitle": "DIRT 5", + "productId": "9PJGM0T0827V", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.18388.14216887906907763.b5352caa-b411-460d-acb5-a427d0106d4b.8e4aea4f-80ba-487d-8508-e71b5b770ca8" + ] + }, + "releaseDate": "2020-11-06", + "storePage": "https://www.xbox.com/en-us/games/store/dirt-5/9PJGM0T0827V" + }, + { + "productTitle": "Dishonored 2", + "productId": "9MW4RJDRSF78", + "images": {}, + "releaseDate": "2019-10-03", + "storePage": "https://www.xbox.com/en-us/games/store/dishonored-2/9MW4RJDRSF78" + }, + { + "productTitle": "Dishonored® Definitive Edition (PC)", + "productId": "9P1N07XDL1D4", + "images": {}, + "releaseDate": "2021-03-12", + "storePage": "https://www.xbox.com/en-us/games/store/dishonored-definitive-edition-pc/9P1N07XDL1D4" + }, + { + "productTitle": "Dishonored®: Death of the Outsider™ (PC)", + "productId": "9MVF0PGV94F7", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/dishonored-death-of-the-outsider-pc/9MVF0PGV94F7" + }, + { + "productTitle": "Disney Dreamlight Valley", + "productId": "9NSF0BGH8D86", + "images": {}, + "releaseDate": "2022-09-06", + "storePage": "https://www.xbox.com/en-us/games/store/disney-dreamlight-valley/9NSF0BGH8D86" + }, + { + "productTitle": "Disneyland Adventures", + "productId": "9N6Z8DQXSQWH", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.36743.14005003576279990.6d131376-9483-463d-a248-92512222c6ef.9a9fc862-02c0-4cad-8c8c-e05fdc7b0159", + "https://store-images.s-microsoft.com/image/apps.27453.14005003576279990.95d8f6e5-c971-4c8d-82b2-c4c14f380c05.8bc92089-08e1-4da1-99b8-46cc666c6d17" + ] + }, + "releaseDate": "2017-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/disneyland-adventures/9N6Z8DQXSQWH" + }, + { + "productTitle": "DOOM + DOOM II", + "productId": "9P46M5JQ2PTF", + "images": {}, + "releaseDate": "2024-08-08", + "storePage": "https://www.xbox.com/en-us/games/store/doom-doom-ii/9P46M5JQ2PTF" + }, + { + "productTitle": "DOOM 3", + "productId": "9NSL68D814GC", + "images": {}, + "releaseDate": "2019-07-26", + "storePage": "https://www.xbox.com/en-us/games/store/doom-3/9NSL68D814GC" + }, + { + "productTitle": "DOOM 64", + "productId": "9MXND4PQLK3W", + "images": {}, + "releaseDate": "2020-03-20", + "storePage": "https://www.xbox.com/en-us/games/store/doom-64/9MXND4PQLK3W" + }, + { + "productTitle": "DOOM Eternal Standard Edition (PC)", + "productId": "9PK09BL31FK1", + "images": {}, + "releaseDate": "2020-12-01", + "storePage": "https://www.xbox.com/en-us/games/store/doom-eternal-standard-edition-pc/9PK09BL31FK1" + }, + { + "productTitle": "Dordogne (Windows)", + "productId": "9N3GDLVDMXG4", + "images": {}, + "releaseDate": "2023-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/dordogne-windows/9N3GDLVDMXG4" + }, + { + "productTitle": "Dune: Spice Wars", + "productId": "9N46JZZNGS3P", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.14182.13993061156496216.a99e7cae-2efa-4deb-9406-c5b487cfc7b9.1226ede8-0879-44fc-8b26-5a3c25c0d74d", + "https://store-images.s-microsoft.com/image/apps.19171.13993061156496216.a99e7cae-2efa-4deb-9406-c5b487cfc7b9.02e1db17-970c-4ed5-a2fc-ae22313ff4f3", + "https://store-images.s-microsoft.com/image/apps.49263.13993061156496216.a99e7cae-2efa-4deb-9406-c5b487cfc7b9.fc6ad6aa-ef4f-4bf9-b60c-caf5191bd010" + ] + }, + "releaseDate": "2022-11-17", + "storePage": "https://www.xbox.com/en-us/games/store/dune-spice-wars/9N46JZZNGS3P" + }, + { + "productTitle": "Dungeons 4 (Win)", + "productId": "9ND9BBMDVD2C", + "images": {}, + "releaseDate": "2023-11-09", + "storePage": "https://www.xbox.com/en-us/games/store/dungeons-4-win/9ND9BBMDVD2C" + }, + { + "productTitle": "Dungeons Of Hinterberg", + "productId": "9PGX472J0RJP", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.15852.14242993966939702.499a01a3-a942-4425-8ee4-75c57cba3d55.cbc8a434-fe19-4287-986d-c4e5eac094b5" + ] + }, + "releaseDate": "2024-07-18", + "storePage": "https://www.xbox.com/en-us/games/store/dungeons-of-hinterberg/9PGX472J0RJP" + }, + { + "productTitle": "Dyson Sphere Program (Game Preview)", + "productId": "9MTX4JNKL3FS", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.5260.13804098040618061.c0d518e1-bda9-40c4-9606-e4164969da5c.ee919cda-6aa7-4347-9be8-1ecc049c3c6b" + ] + }, + "releaseDate": "2022-10-13", + "storePage": "https://www.xbox.com/en-us/games/store/dyson-sphere-program-game-preview/9MTX4JNKL3FS" + }, + { + "productTitle": "Eiyuden Chronicle: Hundred Heroes", + "productId": "9N8Z1ZL33LM9", + "images": {}, + "releaseDate": "2024-04-23", + "storePage": "https://www.xbox.com/en-us/games/store/eiyuden-chronicle-hundred-heroes/9N8Z1ZL33LM9" + }, + { + "productTitle": "Escape Academy", + "productId": "9P3NT9H51RMR", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.24434.14539026038241714.3df5a7c0-8dab-4179-87d8-320dbb169675.8863ffde-6cd7-433d-a36c-ff26eef2de53" + ] + }, + "releaseDate": "2022-07-14", + "storePage": "https://www.xbox.com/en-us/games/store/escape-academy/9P3NT9H51RMR" + }, + { + "productTitle": "EVERSPACE™ 2", + "productId": "9PFX7F33KVG8", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.58392.14196602045405435.162a3492-f482-45e9-8022-a849e99a6850.78818d2c-b90c-44db-b94a-f0581cd93b44" + ] + }, + "releaseDate": "2023-08-15", + "storePage": "https://www.xbox.com/en-us/games/store/everspace-2/9PFX7F33KVG8" + }, + { + "productTitle": "Evil West (Windows)", + "productId": "9PC49MD70881", + "images": {}, + "releaseDate": "2024-03-21", + "storePage": "https://www.xbox.com/en-us/games/store/evil-west-windows/9PC49MD70881" + }, + { + "productTitle": "Exoprimal", + "productId": "9NMFRHJX5JCZ", + "images": {}, + "releaseDate": "2023-07-14", + "storePage": "https://www.xbox.com/en-us/games/store/exoprimal/9NMFRHJX5JCZ" + }, + { + "productTitle": "F1® Manager 2023", + "productId": "9P80FVDCXJKB", + "images": {}, + "releaseDate": "2023-07-31", + "storePage": "https://www.xbox.com/en-us/games/store/f1-manager-2023/9P80FVDCXJKB" + }, + { + "productTitle": "Fallout", + "productId": "9N42CT1J5WGW", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/fallout/9N42CT1J5WGW" + }, + { + "productTitle": "Fallout 2", + "productId": "9P1JS86M9SXH", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/fallout-2/9P1JS86M9SXH" + }, + { + "productTitle": "Fallout 3: Game of the Year Edition", + "productId": "9NBZ9JF6TFMD", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/fallout-3-game-of-the-year-edition/9NBZ9JF6TFMD" + }, + { + "productTitle": "Fallout 4 (PC)", + "productId": "9P71MB9QCF77", + "images": {}, + "releaseDate": "2021-03-11", + "storePage": "https://www.xbox.com/en-us/games/store/fallout-4-pc/9P71MB9QCF77" + }, + { + "productTitle": "Fallout 76 (PC)", + "productId": "9NKGNMNK3K3Z", + "images": {}, + "releaseDate": "2020-07-09", + "storePage": "https://www.xbox.com/en-us/games/store/fallout-76-pc/9NKGNMNK3K3Z" + }, + { + "productTitle": "Fallout Tactics", + "productId": "9NDV7FRVD7ML", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/fallout-tactics/9NDV7FRVD7ML" + }, + { + "productTitle": "Fallout: New Vegas Ultimate Edition", + "productId": "9MZR11JRF7BX", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/fallout-new-vegas-ultimate-edition/9MZR11JRF7BX" + }, + { + "productTitle": "Farming Simulator 22 PC", + "productId": "9NBBCKL3LTRH", + "images": {}, + "releaseDate": "2022-05-19", + "storePage": "https://www.xbox.com/en-us/games/store/farming-simulator-22-pc/9NBBCKL3LTRH" + }, + { + "productTitle": "Figment: Journey Into the Mind", + "productId": "BS0P7HLFPPP0", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.24627.69486693469012885.88f5a3fe-4612-4ba3-97cd-7004863b32a2.b3dc333e-3a17-4388-8259-807ff20e5a45" + ] + }, + "releaseDate": "2022-11-16", + "storePage": "https://www.xbox.com/en-us/games/store/figment-journey-into-the-mind/BS0P7HLFPPP0" + }, + { + "productTitle": "Firewatch", + "productId": "BQQKG9H2STC0", + "images": {}, + "releaseDate": "2016-09-21", + "storePage": "https://www.xbox.com/en-us/games/store/firewatch/BQQKG9H2STC0" + }, + { + "productTitle": "Firework (Windows)", + "productId": "9P57NK5V2137", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.50088.14578697293977714.1a77ecb0-1d3a-4ac5-bb7b-6bd079a70772.563009a4-6645-4330-8a8e-c8c601af823e" + ] + }, + "releaseDate": "2024-06-04", + "storePage": "https://www.xbox.com/en-us/games/store/firework-windows/9P57NK5V2137" + }, + { + "productTitle": "Flintlock: The Siege of Dawn", + "productId": "9PBBQHX6V3PJ", + "images": {}, + "releaseDate": "2024-07-18", + "storePage": "https://www.xbox.com/en-us/games/store/flintlock-the-siege-of-dawn/9PBBQHX6V3PJ" + }, + { + "productTitle": "Flock", + "productId": "9N6DGNBPNRNN", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.45309.14020382961984479.ef4aaad0-42be-418f-ac4e-3b83d39eb75d.d671ab8b-0d29-42d3-af3c-e76ee0dc0f44" + ] + }, + "releaseDate": "2024-07-16", + "storePage": "https://www.xbox.com/en-us/games/store/flock/9N6DGNBPNRNN" + }, + { + "productTitle": "Football Manager 2024", + "productId": "9P4CZQNRXW34", + "images": {}, + "releaseDate": "2023-11-06", + "storePage": "https://www.xbox.com/en-us/games/store/football-manager-2024/9P4CZQNRXW34" + }, + { + "productTitle": "Football Manager 2024 Console", + "productId": "9N7GJJ2WTPBZ", + "images": {}, + "releaseDate": "2023-11-06", + "storePage": "https://www.xbox.com/en-us/games/store/football-manager-2024-console/9N7GJJ2WTPBZ" + }, + { + "productTitle": "Forager", + "productId": "9P5SFDNW6V13", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.51841.14633670794554222.de759f39-78b3-4b60-b445-e58e94c40e36.2015dd36-6136-44d2-a936-204b36909001" + ] + }, + "releaseDate": "2020-07-16", + "storePage": "https://www.xbox.com/en-us/games/store/forager/9P5SFDNW6V13" + }, + { + "productTitle": "Forza Horizon 4 Standard Edition", + "productId": "9PNJXVCVWD4K", + "images": {}, + "releaseDate": "2018-10-02", + "storePage": "https://www.xbox.com/en-us/games/store/forza-horizon-4-standard-edition/9PNJXVCVWD4K" + }, + { + "productTitle": "Forza Horizon 5 Standard Edition", + "productId": "9NKX70BBCDRN", + "images": {}, + "releaseDate": "2021-11-09", + "storePage": "https://www.xbox.com/en-us/games/store/forza-horizon-5-standard-edition/9NKX70BBCDRN" + }, + { + "productTitle": "Forza Motorsport Standard Edition", + "productId": "9PLKVSWR299F", + "images": {}, + "releaseDate": "2023-10-10", + "storePage": "https://www.xbox.com/en-us/games/store/forza-motorsport-standard-edition/9PLKVSWR299F" + }, + { + "productTitle": "Frog Detective: The Entire Mystery", + "productId": "9N0M3GVB0KNN", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.13877.13922992293403127.db53b854-7ad3-4927-b3c0-bf615d8f5828.35ef2af6-f248-4018-bdd2-b9c6eca8f60b" + ] + }, + "releaseDate": "2023-10-26", + "storePage": "https://www.xbox.com/en-us/games/store/frog-detective-the-entire-mystery/9N0M3GVB0KNN" + }, + { + "productTitle": "From Space", + "productId": "9PLK75782446", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.63601.14311843146455225.858b9bb0-aedd-46ab-907b-4002100e6620.8518d6d1-7f8a-4b1d-bbdf-5a5e5039426c" + ] + }, + "releaseDate": "2023-10-12", + "storePage": "https://www.xbox.com/en-us/games/store/from-space/9PLK75782446" + }, + { + "productTitle": "Frostpunk", + "productId": "9NS0KH25D76X", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.16667.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.d2ad71e3-3304-4350-a1c8-057cec5f66ce", + "https://store-images.s-microsoft.com/image/apps.42272.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.5809f73b-9f62-4a84-9638-d51dd81d19d1", + "https://store-images.s-microsoft.com/image/apps.13736.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.6ff1d8a5-34e5-4431-810d-79e15b0949d1", + "https://store-images.s-microsoft.com/image/apps.13213.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.a0403dd8-33f7-4194-a426-ad7af55bfcbb" + ] + }, + "releaseDate": "2018-04-24", + "storePage": "https://www.xbox.com/en-us/games/store/frostpunk/9NS0KH25D76X" + }, + { + "productTitle": "Full Throttle Remastered", + "productId": "9P3ZRGNQVC7D", + "images": {}, + "releaseDate": "2020-10-29", + "storePage": "https://www.xbox.com/en-us/games/store/full-throttle-remastered/9P3ZRGNQVC7D" + }, + { + "productTitle": "Galacticare", + "productId": "9PB14LD018SM", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.39620.14128015953067804.7fd76ab5-1221-4cac-a680-9923f2892e8f.0714099e-c78c-4557-a26d-fdd98f91f97f" + ] + }, + "releaseDate": "2024-05-23", + "storePage": "https://www.xbox.com/en-us/games/store/galacticare/9PB14LD018SM" + }, + { + "productTitle": "Gang Beasts", + "productId": "BPQZT43FWD49", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.2195.68150164172276526.ddc374d7-ef5e-43b9-940a-bbc04440bb33.864a4f4c-c733-4795-99b0-feeb5c430a7d" + ] + }, + "releaseDate": "2019-03-27", + "storePage": "https://www.xbox.com/en-us/games/store/gang-beasts/BPQZT43FWD49" + }, + { + "productTitle": "Gears 5 Game of the Year Edition", + "productId": "9P4KMR76PLLQ", + "images": {}, + "releaseDate": "2020-12-15", + "storePage": "https://www.xbox.com/en-us/games/store/gears-5-game-of-the-year-edition/9P4KMR76PLLQ" + }, + { + "productTitle": "Gears of War 4", + "productId": "9NBLGGH4PBBM", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.13820.13510798887356280.a2ea1869-0646-4f51-9e83-872f8f095611.112a351e-c46e-4982-82c4-0a7f30eb5f0a", + "https://store-images.s-microsoft.com/image/apps.44874.13510798887356280.46f5654e-693f-48f8-a3b5-07417484c87f.609a0785-8749-4b07-a598-277003f6caa6" + ] + }, + "releaseDate": "2016-10-11", + "storePage": "https://www.xbox.com/en-us/games/store/gears-of-war-4/9NBLGGH4PBBM" + }, + { + "productTitle": "Gears of War: Ultimate Edition for Windows 10", + "productId": "9NBLGGH3SHM5", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.936.13510798884671596.4c8c9281-f2f0-4965-bceb-3aac094fbfde.535c7e2e-fdba-47cf-81ff-4ff6da934736", + "https://store-images.s-microsoft.com/image/apps.14627.13510798884671596.9fa4dfcf-ff55-4219-8640-701060a5b394.52798d56-9ec9-41b7-b34b-ad4c533e0cb2" + ] + }, + "releaseDate": "2016-02-01", + "storePage": "https://www.xbox.com/en-us/games/store/gears-of-war-ultimate-edition-for-windows-10/9NBLGGH3SHM5" + }, + { + "productTitle": "Gears Tactics", + "productId": "9NN3HCKW5TPC", + "images": {}, + "releaseDate": "2020-11-09", + "storePage": "https://www.xbox.com/en-us/games/store/gears-tactics/9NN3HCKW5TPC" + }, + { + "productTitle": "Generation Zero®", + "productId": "C20WW4W29FQ1", + "images": {}, + "releaseDate": "2019-03-26", + "storePage": "https://www.xbox.com/en-us/games/store/generation-zero/C20WW4W29FQ1" + }, + { + "productTitle": "Genesis Noir: Windows Edition", + "productId": "9MWGGC7JH35B", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.27867.14234812946294583.310a0a84-edb2-482c-a55c-b54922972168.2b56a84c-5a52-43fc-9e4e-e70fda0c62ff" + ] + }, + "releaseDate": "2021-03-26", + "storePage": "https://www.xbox.com/en-us/games/store/genesis-noir-windows-edition/9MWGGC7JH35B" + }, + { + "productTitle": "Ghostwire: Tokyo", + "productId": "9PKP39CL0C8D", + "images": {}, + "releaseDate": "2023-04-12", + "storePage": "https://www.xbox.com/en-us/games/store/ghostwire-tokyo/9PKP39CL0C8D" + }, + { + "productTitle": "Go Mecha Ball", + "productId": "9N9C9KTPXL3X", + "images": {}, + "releaseDate": "2024-01-25", + "storePage": "https://www.xbox.com/en-us/games/store/go-mecha-ball/9N9C9KTPXL3X" + }, + { + "productTitle": "Goat Simulator 3: Windows Edition", + "productId": "9PDS2N82QNXG", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.17530.14148334348309617.4b019a90-50f6-4c6f-9032-f4dfa4f42e29.53d4ce5e-593a-4864-8d08-787cf2c0b682" + ] + }, + "releaseDate": "2023-12-07", + "storePage": "https://www.xbox.com/en-us/games/store/goat-simulator-3-windows-edition/9PDS2N82QNXG" + }, + { + "productTitle": "Goat Simulator Windows 10", + "productId": "9MXWKHJ3VZZH", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.18709.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.a0a35f5e-7e38-4e7d-8c27-3fb0ab7b3b34", + "https://store-images.s-microsoft.com/image/apps.57569.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.2b2b6463-eeee-4036-9f2c-e11c1275c44e", + "https://store-images.s-microsoft.com/image/apps.38067.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.4ab1a5bf-ab1b-4fd4-b5f2-17d9f2c41d75", + "https://store-images.s-microsoft.com/image/apps.43069.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.4de2226b-1301-43ad-9ce1-c25f6616a319" + ] + }, + "releaseDate": "2018-10-25", + "storePage": "https://www.xbox.com/en-us/games/store/goat-simulator-windows-10/9MXWKHJ3VZZH" + }, + { + "productTitle": "Golf With Your Friends (Windows Version)", + "productId": "9MVK5W0HMRP7", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.11186.13862246495458326.a7005640-1d45-4dba-a6e1-d326964693f6.e4e5f966-a084-46c0-9ac7-f313940a6179", + "https://store-images.s-microsoft.com/image/apps.8970.13862246495458326.a7005640-1d45-4dba-a6e1-d326964693f6.51c20617-d896-4576-8204-77e7bdec1d3a", + "https://store-images.s-microsoft.com/image/apps.56679.13862246495458326.a7005640-1d45-4dba-a6e1-d326964693f6.ea6f152b-4ae2-4f6c-a0ac-dfc7354948e6" + ] + }, + "releaseDate": "2020-07-23", + "storePage": "https://www.xbox.com/en-us/games/store/golf-with-your-friends-windows-version/9MVK5W0HMRP7" + }, + { + "productTitle": "Gotham Knights", + "productId": "BT3611GR00CQ", + "images": {}, + "releaseDate": "2022-10-21", + "storePage": "https://www.xbox.com/en-us/games/store/gotham-knights/BT3611GR00CQ" + }, + { + "productTitle": "Grim Fandango Remastered", + "productId": "9PC288TN7R8K", + "images": {}, + "releaseDate": "2020-10-29", + "storePage": "https://www.xbox.com/en-us/games/store/grim-fandango-remastered/9PC288TN7R8K" + }, + { + "productTitle": "Gris", + "productId": "9NHHP2H0ZP98", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.16509.13625693263060421.b5379d86-b985-4508-ad2a-8af4b40a9fcd.9f6b666c-8235-428e-877c-7a934c7b91c5" + ] + }, + "releaseDate": "2020-01-23", + "storePage": "https://www.xbox.com/en-us/games/store/gris/9NHHP2H0ZP98" + }, + { + "productTitle": "Grounded", + "productId": "9PJTHRNVH62H", + "images": {}, + "releaseDate": "2022-09-27", + "storePage": "https://www.xbox.com/en-us/games/store/grounded/9PJTHRNVH62H" + }, + { + "productTitle": "Guilty Gear -Strive-", + "productId": "9MZDL6L34KF2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.24149.13872214727680763.7401cf68-944c-4d38-9d71-4d4226492658.5927ff02-cead-4082-8ec5-1a0bbcb37ae9" + ] + }, + "releaseDate": "2023-03-07", + "storePage": "https://www.xbox.com/en-us/games/store/guilty-gear-strive/9MZDL6L34KF2" + }, + { + "productTitle": "Halo Infinite (Campaign)", + "productId": "9NP1P1WFS0LB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.53406.13727851868390641.ccc2d91d-118b-47bc-b87a-a5cc449f8e8e.7ee44eda-d274-45ab-8ac2-402528eb4fa3" + ] + }, + "releaseDate": "2021-12-08", + "storePage": "https://www.xbox.com/en-us/games/store/halo-infinite-campaign/9NP1P1WFS0LB" + }, + { + "productTitle": "Halo Wars 2: Standard Edition", + "productId": "9NBLGGH515BD", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.7936.13510798887619155.1152921504720025064.9e7079a2-4bc6-4c9a-867f-39e6b36173e5" + ] + }, + "releaseDate": "2017-02-21", + "storePage": "https://www.xbox.com/en-us/games/store/halo-wars-2-standard-edition/9NBLGGH515BD" + }, + { + "productTitle": "Halo Wars: Definitive Edition (PC)", + "productId": "9NBLGGH5WLR0", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.14537.13510798886375925.9bd66dab-d786-4b2d-8430-c52a460e4c68.cf157a04-7002-406b-87c8-0c0dd7a28c01", + "https://store-images.s-microsoft.com/image/apps.17031.13510798886375925.503ddab4-90c9-437e-8523-284e28216fa3.98a8e319-db4b-4e0e-aa97-f15db2721fc4" + ] + }, + "releaseDate": "2017-04-20", + "storePage": "https://www.xbox.com/en-us/games/store/halo-wars-definitive-edition-pc/9NBLGGH5WLR0" + }, + { + "productTitle": "Halo: Spartan Assault", + "productId": "9WZDNCRFHWFH", + "images": { + "Logo": [ + "https://store-images.microsoft.com/image/apps.23036.9007199266246750.14557479-98a0-41f6-9639-0c3082dda909.2ed89777-a91a-470b-8936-16fc814d22ba" + ] + }, + "releaseDate": "2013-07-08", + "storePage": "https://www.xbox.com/en-us/games/store/halo-spartan-assault/9WZDNCRFHWFH" + }, + { + "productTitle": "Halo: Spartan Strike", + "productId": "9WZDNCRFJBFJ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.51077.9007199266252681.2f2dda9a-782c-43aa-a406-8488cabb6e7c.451a956b-e7de-44e1-975e-9e24712eccd7" + ] + }, + "releaseDate": "2014-11-25", + "storePage": "https://www.xbox.com/en-us/games/store/halo-spartan-strike/9WZDNCRFJBFJ" + }, + { + "productTitle": "Halo: The Master Chief Collection", + "productId": "9NTM9HXNLSZX", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.25919.14011015795942652.ca67db1b-d21e-47e9-bbb4-5ece2ce3f774.c71a2431-5ef1-4c32-92fa-22cca6162053" + ] + }, + "releaseDate": "2019-12-03", + "storePage": "https://www.xbox.com/en-us/games/store/halo-the-master-chief-collection/9NTM9HXNLSZX" + }, + { + "productTitle": "Harold Halibut", + "productId": "9PBV5F2DBNC6", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.27737.14116268439808247.4e8906b5-f1d2-4d47-b73d-ad01e2b3edef.d852ade0-d913-4e6e-b48c-2bc25bfb1507" + ] + }, + "releaseDate": "2024-04-16", + "storePage": "https://www.xbox.com/en-us/games/store/harold-halibut/9PBV5F2DBNC6" + }, + { + "productTitle": "Hauntii", + "productId": "9N9DVL82PR0D", + "images": {}, + "releaseDate": "2024-05-23", + "storePage": "https://www.xbox.com/en-us/games/store/hauntii/9N9DVL82PR0D" + }, + { + "productTitle": "Have a Nice Death", + "productId": "9PF1ZX4HHGSW", + "images": {}, + "releaseDate": "2023-12-05", + "storePage": "https://www.xbox.com/en-us/games/store/have-a-nice-death/9PF1ZX4HHGSW" + }, + { + "productTitle": "Headbangers: Rhythm Royale", + "productId": "9NGRWJ03GR1N", + "images": {}, + "releaseDate": "2023-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/headbangers-rhythm-royale/9NGRWJ03GR1N" + }, + { + "productTitle": "Hell Let Loose", + "productId": "9N44WK3WV2HJ", + "images": {}, + "releaseDate": "2021-10-05", + "storePage": "https://www.xbox.com/en-us/games/store/hell-let-loose/9N44WK3WV2HJ" + }, + { + "productTitle": "Hellblade: Senua's Sacrifice", + "productId": "9NCLP4LV5K7Z", + "images": {}, + "releaseDate": "2018-04-11", + "storePage": "https://www.xbox.com/en-us/games/store/hellblade-senua-s-sacrifice/9NCLP4LV5K7Z" + }, + { + "productTitle": "Hello Neighbor 2", + "productId": "9N961B11FJ4W", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.33773.13538643730533052.bd974e41-d70f-4894-a349-7d0e6056033d.381dcaa3-dd59-4505-aca0-8da4f63533a5" + ] + }, + "releaseDate": "2022-12-06", + "storePage": "https://www.xbox.com/en-us/games/store/hello-neighbor-2/9N961B11FJ4W" + }, + { + "productTitle": "Hi-Fi RUSH", + "productId": "9NFTC552K3GJ", + "images": {}, + "releaseDate": "2023-01-25", + "storePage": "https://www.xbox.com/en-us/games/store/hi-fi-rush/9NFTC552K3GJ" + }, + { + "productTitle": "Hollow Knight: Voidheart Edition", + "productId": "9MW9469V91LM", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.45475.13847644057609868.a4a91f76-8d1c-4e19-aa78-f4d27d2818fb.6bfdce99-7440-4f6a-9bfb-2c89da4e90f6" + ] + }, + "releaseDate": "2018-09-25", + "storePage": "https://www.xbox.com/en-us/games/store/hollow-knight-voidheart-edition/9MW9469V91LM" + }, + { + "productTitle": "Homestead Arcana", + "productId": "9N7THWLZZBWR", + "images": {}, + "releaseDate": "2023-04-21", + "storePage": "https://www.xbox.com/en-us/games/store/homestead-arcana/9N7THWLZZBWR" + }, + { + "productTitle": "HOT WHEELS UNLEASHED™ 2 - Turbocharged", + "productId": "9MWDKL3SD6D9", + "images": {}, + "releaseDate": "2023-10-19", + "storePage": "https://www.xbox.com/en-us/games/store/hot-wheels-unleashed-2-turbocharged/9MWDKL3SD6D9" + }, + { + "productTitle": "House Flipper", + "productId": "9NBFGKQLMV33", + "images": {}, + "releaseDate": "2020-02-26", + "storePage": "https://www.xbox.com/en-us/games/store/house-flipper/9NBFGKQLMV33" + }, + { + "productTitle": "Human Fall Flat", + "productId": "BSMZH25V6V46", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.39663.69811231537758929.242607a4-709e-46fd-84b6-9cff16c7c474.c80dcbaf-de9c-46e7-bbef-f9a991ce9015" + ] + }, + "releaseDate": "2017-05-12", + "storePage": "https://www.xbox.com/en-us/games/store/human-fall-flat/BSMZH25V6V46" + }, + { + "productTitle": "Humanity", + "productId": "9PNW4CC69T4B", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.54681.14340778445303609.99c3ca9e-2f2d-46b2-9909-ee0ddb61f6f4.e2662600-b506-40f1-bc0c-943f53247714" + ] + }, + "releaseDate": "2024-05-30", + "storePage": "https://www.xbox.com/en-us/games/store/humanity/9PNW4CC69T4B" + }, + { + "productTitle": "HUMANKIND™", + "productId": "9PM7HXJ92D6W", + "images": {}, + "releaseDate": "2021-08-17", + "storePage": "https://www.xbox.com/en-us/games/store/humankind/9PM7HXJ92D6W" + }, + { + "productTitle": "Hypnospace Outlaw", + "productId": "9PM3NVB3PXG0", + "images": {}, + "releaseDate": "2020-08-27", + "storePage": "https://www.xbox.com/en-us/games/store/hypnospace-outlaw/9PM3NVB3PXG0" + }, + { + "productTitle": "Indivisible", + "productId": "9N3KCLT53VDZ", + "images": {}, + "releaseDate": "2020-02-26", + "storePage": "https://www.xbox.com/en-us/games/store/indivisible/9N3KCLT53VDZ" + }, + { + "productTitle": "Injustice™ 2 - Standard Edition", + "productId": "9PHT4W7WBBDQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.50533.14224988712834177.817dbe6f-fd0b-46a4-85d4-8b775d647535.e7931731-2c2e-4ae1-ab9a-5d94370191cf", + "https://store-images.s-microsoft.com/image/apps.41641.14224988712834177.06da9e7c-b0fa-4b49-b429-b8e270b2969e.157e803c-3783-487c-b677-d91c47051655", + "https://store-images.s-microsoft.com/image/apps.24684.14224988712834177.6a033f3a-4c67-4cfc-9306-c7084af4a455.ed601ff0-98a1-4cf3-98a8-7a89db8e0b43" + ] + }, + "releaseDate": "2017-11-14", + "storePage": "https://www.xbox.com/en-us/games/store/injustice-2-standard-edition/9PHT4W7WBBDQ" + }, + { + "productTitle": "Inkulinati", + "productId": "9P5D8B393ZZ4", + "images": {}, + "releaseDate": "2024-02-22", + "storePage": "https://www.xbox.com/en-us/games/store/inkulinati/9P5D8B393ZZ4" + }, + { + "productTitle": "INSIDE", + "productId": "C17GQF31D617", + "images": {}, + "releaseDate": "2016-06-29", + "storePage": "https://www.xbox.com/en-us/games/store/inside/C17GQF31D617" + }, + { + "productTitle": "Insurgency: Sandstorm (Windows)", + "productId": "9NN46PGWPJ98", + "images": {}, + "releaseDate": "2023-07-11", + "storePage": "https://www.xbox.com/en-us/games/store/insurgency-sandstorm-windows/9NN46PGWPJ98" + }, + { + "productTitle": "Isonzo (Windows)", + "productId": "9NPSL9GSPQGT", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.22655.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.44aedc83-c5cb-4251-82bd-401385134668", + "https://store-images.s-microsoft.com/image/apps.53693.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.ca5ecae9-7f69-48f8-8820-054fae6ee7e3", + "https://store-images.s-microsoft.com/image/apps.56035.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.da26e3f4-1245-475b-ba41-185f648148f7" + ] + }, + "releaseDate": "2024-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/isonzo-windows/9NPSL9GSPQGT" + }, + { + "productTitle": "Journey To The Savage Planet: Employee Of The Month", + "productId": "9NXBGSSKG538", + "images": {}, + "releaseDate": "2024-07-03", + "storePage": "https://www.xbox.com/en-us/games/store/journey-to-the-savage-planet-employee-of-the-month/9NXBGSSKG538" + }, + { + "productTitle": "Jurassic World Evolution 2", + "productId": "9MWHMJ0SRBXV", + "images": {}, + "releaseDate": "2021-11-09", + "storePage": "https://www.xbox.com/en-us/games/store/jurassic-world-evolution-2/9MWHMJ0SRBXV" + }, + { + "productTitle": "Jusant", + "productId": "9PJB1ZRJDCBQ", + "images": {}, + "releaseDate": "2023-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/jusant/9PJB1ZRJDCBQ" + }, + { + "productTitle": "Keplerth", + "productId": "9MT2FXTBCNDG", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.40127.13821329994604169.93645c5e-df5b-4052-8008-c8c8f59491a5.878f4dc1-aa7a-4f2b-8a55-007e9b8bcd28" + ] + }, + "releaseDate": "2024-06-20", + "storePage": "https://www.xbox.com/en-us/games/store/keplerth/9MT2FXTBCNDG" + }, + { + "productTitle": "Killer Instinct: Anniversary Edition", + "productId": "9N04NS8TP202", + "images": {}, + "releaseDate": "2023-11-28", + "storePage": "https://www.xbox.com/en-us/games/store/killer-instinct-anniversary-edition/9N04NS8TP202" + }, + { + "productTitle": "Kona II: Brume", + "productId": "9MWG18BH5ML7", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.62716.13844667147142160.362497bb-868e-416f-b78d-359043e116a5.b3f4e3cb-dc70-495e-b8af-b12f5848ccb8" + ] + }, + "releaseDate": "2023-10-18", + "storePage": "https://www.xbox.com/en-us/games/store/kona-ii-brume/9MWG18BH5ML7" + }, + { + "productTitle": "Kunitsu-Gami: Path of the Goddess", + "productId": "9PCWXX0MS15S", + "images": {}, + "releaseDate": "2024-07-19", + "storePage": "https://www.xbox.com/en-us/games/store/kunitsu-gami-path-of-the-goddess/9PCWXX0MS15S" + }, + { + "productTitle": "LEGO® Star Wars™: The Skywalker Saga", + "productId": "BRMKDCZT0C4L", + "images": {}, + "releaseDate": "2019-07-22", + "storePage": "https://www.xbox.com/en-us/games/store/lego-star-wars-the-skywalker-saga/BRMKDCZT0C4L" + }, + { + "productTitle": "Let's Build a Zoo", + "productId": "9P8N66DTG10T", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.55678.14084512162357210.27ebb692-271e-428b-ad4f-97b26dd42942.a88540be-456e-4e1f-8052-7def4e2f0f64" + ] + }, + "releaseDate": "2022-09-29", + "storePage": "https://www.xbox.com/en-us/games/store/let-s-build-a-zoo/9P8N66DTG10T" + }, + { + "productTitle": "Lies of P", + "productId": "9PCM4CMTPPGC", + "images": {}, + "releaseDate": "2023-09-18", + "storePage": "https://www.xbox.com/en-us/games/store/lies-of-p/9PCM4CMTPPGC" + }, + { + "productTitle": "Lightyear Frontier (Game Preview)", + "productId": "9NDX2927SND9", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.32170.13610342535970070.70bc8d1f-a634-410d-bc3a-32ab84987744.d02d600e-cee6-4b66-9114-aa2b536bd1bd" + ] + }, + "releaseDate": "2024-03-19", + "storePage": "https://www.xbox.com/en-us/games/store/lightyear-frontier-game-preview/9NDX2927SND9" + }, + { + "productTitle": "Like a Dragon Gaiden: The Man Who Erased His Name", + "productId": "9PCMWNDPPBFZ", + "images": {}, + "releaseDate": "2023-11-09", + "storePage": "https://www.xbox.com/en-us/games/store/like-a-dragon-gaiden-the-man-who-erased-his-name/9PCMWNDPPBFZ" + }, + { + "productTitle": "Like a Dragon: Ishin!", + "productId": "9N4BH9FLLMWD", + "images": {}, + "releaseDate": "2023-02-21", + "storePage": "https://www.xbox.com/en-us/games/store/like-a-dragon-ishin/9N4BH9FLLMWD" + }, + { + "productTitle": "Lil Gator Game", + "productId": "9N4FHWK9HWDK", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.3542.13988697165671034.93a854a2-fda8-401c-b449-b344b289e811.87ab1bdf-3a11-4c71-a005-08a43d1262be" + ] + }, + "releaseDate": "2023-10-10", + "storePage": "https://www.xbox.com/en-us/games/store/lil-gator-game/9N4FHWK9HWDK" + }, + { + "productTitle": "LIMBO", + "productId": "9PNG83MDD6SH", + "images": {}, + "releaseDate": "2021-07-01", + "storePage": "https://www.xbox.com/en-us/games/store/limbo/9PNG83MDD6SH" + }, + { + "productTitle": "Little Kitty, Big City", + "productId": "9NF5S7MLM8XT", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.64698.13605545843678606.ba639605-7305-422e-9637-2411fb07e5f6.5d284d89-4bb5-4098-87e7-0df89bf04b85" + ] + }, + "releaseDate": "2024-05-09", + "storePage": "https://www.xbox.com/en-us/games/store/little-kitty-big-city/9NF5S7MLM8XT" + }, + { + "productTitle": "Lonely Mountains: Downhill", + "productId": "9MV6MCVLT8GR", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.12781.13794437146560212.1c2132e1-8e75-4ecb-8f54-2474cd20e67a.5919e234-9c11-4357-9878-ed4de87e7c08" + ] + }, + "releaseDate": "2019-10-23", + "storePage": "https://www.xbox.com/en-us/games/store/lonely-mountains-downhill/9MV6MCVLT8GR" + }, + { + "productTitle": "Loop Hero", + "productId": "9NWNQC8H80RV", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.35738.14445738564377947.babca878-ccaa-48f3-b55f-6477a548f887.b80befda-9a9e-4f0c-9675-62c8116a38ba" + ] + }, + "releaseDate": "2023-04-04", + "storePage": "https://www.xbox.com/en-us/games/store/loop-hero/9NWNQC8H80RV" + }, + { + "productTitle": "Lords of the Fallen", + "productId": "9NP4C0X8MDK7", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.5568.13730158504430842.8679d8d3-c2c8-4039-88f0-2b52a1d48d71.36f0806f-c0d6-4f42-a99d-9ac9ad280c22" + ] + }, + "releaseDate": "2024-05-30", + "storePage": "https://www.xbox.com/en-us/games/store/lords-of-the-fallen/9NP4C0X8MDK7" + }, + { + "productTitle": "Mafia: Definitive Edition", + "productId": "9N24WGZTP92S", + "images": {}, + "releaseDate": "2024-08-13", + "storePage": "https://www.xbox.com/en-us/games/store/mafia-definitive-edition/9N24WGZTP92S" + }, + { + "productTitle": "Magical Delicacy", + "productId": "9PCRBQG481Q1", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.54876.14168840589167806.4bdcbd00-4f61-4a59-a056-60b8c974464e.4d166b88-8ca2-4797-8722-aa721059223f" + ] + }, + "releaseDate": "2024-07-16", + "storePage": "https://www.xbox.com/en-us/games/store/magical-delicacy/9PCRBQG481Q1" + }, + { + "productTitle": "Maneater", + "productId": "9P5B81KVDGP1", + "images": {}, + "releaseDate": "2020-05-22", + "storePage": "https://www.xbox.com/en-us/games/store/maneater/9P5B81KVDGP1" + }, + { + "productTitle": "Manor Lords (Game Preview)", + "productId": "9P5F966564FS", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.1429.14574664570876265.471d597a-3551-49d3-8539-0d6889ee7e31.f6d656cb-455e-472f-912b-b0c840a72e32" + ] + }, + "releaseDate": "2023-10-25", + "storePage": "https://www.xbox.com/en-us/games/store/manor-lords-game-preview/9P5F966564FS" + }, + { + "productTitle": "Maquette", + "productId": "9NW7M71V29DT", + "images": {}, + "releaseDate": "2023-07-19", + "storePage": "https://www.xbox.com/en-us/games/store/maquette/9NW7M71V29DT" + }, + { + "productTitle": "McPixel 3", + "productId": "9PP2WW5TQ7MS", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.47411.14336879122555401.4c30f6b3-d0ef-4997-95dd-4b1a894b1874.d1504ef0-c644-4a5a-bc14-8de6d4275480" + ] + }, + "releaseDate": "2022-11-14", + "storePage": "https://www.xbox.com/en-us/games/store/mcpixel-3/9PP2WW5TQ7MS" + }, + { + "productTitle": "MechWarrior 5: Mercenaries", + "productId": "9PB86W3JK8Z5", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.16435.14123304312086404.5dc09435-a0e3-402c-ba22-f58dbbaccd21.d9e9842c-e315-4cfe-84a3-6dc5635b01f4" + ] + }, + "releaseDate": "2021-05-27", + "storePage": "https://www.xbox.com/en-us/games/store/mechwarrior-5-mercenaries/9PB86W3JK8Z5" + }, + { + "productTitle": "Medieval Dynasty", + "productId": "9PDDP6ML6XHF", + "images": {}, + "releaseDate": "2022-10-06", + "storePage": "https://www.xbox.com/en-us/games/store/medieval-dynasty/9PDDP6ML6XHF" + }, + { + "productTitle": "Merge & Blade", + "productId": "9NW2XNZLVSWW", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.37425.14453287039354162.0e8e83c6-3769-4771-93f6-cee431e621af.6bce7e6c-4779-4155-b12d-42429e83a792" + ] + }, + "releaseDate": "2023-02-28", + "storePage": "https://www.xbox.com/en-us/games/store/merge-blade/9NW2XNZLVSWW" + }, + { + "productTitle": "Microsoft Flight Simulator Standard 40th Anniversary Edition", + "productId": "9PMQDM08SNK9", + "images": {}, + "releaseDate": "2022-11-11", + "storePage": "https://www.xbox.com/en-us/games/store/microsoft-flight-simulator-standard-40th-anniversary-edition/9PMQDM08SNK9" + }, + { + "productTitle": "Microsoft Solitaire Collection", + "productId": "9WZDNCRFHWD2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.61752.9007199266246761.cb02291f-d0d9-48a7-8735-9a5e71951992.3bbb538a-866f-4148-b947-9d4695becaf9", + "https://store-images.s-microsoft.com/image/apps.13360.9007199266246761.cb02291f-d0d9-48a7-8735-9a5e71951992.ab38da93-df62-4b71-9831-ddc8afb96d7b", + "https://store-images.s-microsoft.com/image/apps.3809.9007199266246761.cb02291f-d0d9-48a7-8735-9a5e71951992.38e4cfe6-dc30-4f0e-9cb5-4f7fa3c17abf", + "https://store-images.s-microsoft.com/image/apps.35142.9007199266246761.ca6040cb-54be-4f0a-bc9e-c59364f681cb.044ba279-4cbf-4c63-828a-e747e398b428" + ] + }, + "releaseDate": "2012-07-28", + "storePage": "https://www.xbox.com/en-us/games/store/microsoft-solitaire-collection/9WZDNCRFHWD2" + }, + { + "productTitle": "Middle-earth™: Shadow of War™", + "productId": "9PDV8FKWP3B4", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.11136.14146895813128195.1152921504736926530.47c08185-64bc-49ff-9bb7-67105c1618af" + ] + }, + "releaseDate": "2017-10-10", + "storePage": "https://www.xbox.com/en-us/games/store/middle-earth-shadow-of-war/9PDV8FKWP3B4" + }, + { + "productTitle": "Minecraft Dungeons for Windows + Launcher", + "productId": "9NB6BVL3MTG4", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.45275.13523218592070531.6730b169-a75f-4b46-bbd7-32b2a54f767e.5c7d8539-533f-4dea-9cd0-16ae3cc9f9ae" + ] + }, + "releaseDate": "2021-11-02", + "storePage": "https://www.xbox.com/en-us/games/store/minecraft-dungeons-for-windows-launcher/9NB6BVL3MTG4" + }, + { + "productTitle": "Minecraft Legends for Windows + Launcher", + "productId": "9NM395CH685J", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.62581.13695729085627777.1297136a-f273-41f1-947f-59044c848c55.3752a76f-6741-4954-a6d9-143f1fd4a540" + ] + }, + "releaseDate": "2023-04-18", + "storePage": "https://www.xbox.com/en-us/games/store/minecraft-legends-for-windows-launcher/9NM395CH685J" + }, + { + "productTitle": "Minecraft Preview for Windows", + "productId": "9P5X4QVLC2XR", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.303.14635563885955208.abc71742-2e92-43db-a63f-168beecfbc1b.e7b60ba4-3c00-4ff5-8040-0a5a7b62ae42", + "https://store-images.s-microsoft.com/image/apps.54746.14635563885955208.8d3b1dbf-00e2-4afb-9745-44725e0bec69.910a05e9-09ae-463b-82fe-a45de89df0da" + ] + }, + "releaseDate": "2022-02-09", + "storePage": "https://www.xbox.com/en-us/games/store/minecraft-preview-for-windows/9P5X4QVLC2XR" + }, + { + "productTitle": "Minecraft: Java & Bedrock Edition for PC", + "productId": "9NXP44L49SHJ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.2726.14492077886571533.be42f4bd-887b-4430-8ed0-622341b4d2b0.b7314828-2896-431a-b863-1e3de670a5b2" + ] + }, + "releaseDate": "2022-06-06", + "storePage": "https://www.xbox.com/en-us/games/store/minecraft-java-bedrock-edition-for-pc/9NXP44L49SHJ" + }, + { + "productTitle": "Mineko's Night Market", + "productId": "9NBPNW2JQNCD", + "images": {}, + "releaseDate": "2023-10-26", + "storePage": "https://www.xbox.com/en-us/games/store/mineko-s-night-market/9NBPNW2JQNCD" + }, + { + "productTitle": "Monster Hunter Rise", + "productId": "9N1VP8WDQK4D", + "images": {}, + "releaseDate": "2023-01-20", + "storePage": "https://www.xbox.com/en-us/games/store/monster-hunter-rise/9N1VP8WDQK4D" + }, + { + "productTitle": "Monster Sanctuary (Windows Version)", + "productId": "9PBWWQGXVMKC", + "images": {}, + "releaseDate": "2020-12-08", + "storePage": "https://www.xbox.com/en-us/games/store/monster-sanctuary-windows-version/9PBWWQGXVMKC" + }, + { + "productTitle": "Moonlighter", + "productId": "9P8XJRLCLH2P", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.16047.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.3c6fae59-0c13-4991-85d7-2cad65972390", + "https://store-images.s-microsoft.com/image/apps.13741.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.727fa7f1-1eea-42b3-9147-f3d4082d2abd", + "https://store-images.s-microsoft.com/image/apps.37262.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.7e5212da-ad9a-4843-88f4-4b1d7c65a62b" + ] + }, + "releaseDate": "2018-05-29", + "storePage": "https://www.xbox.com/en-us/games/store/moonlighter/9P8XJRLCLH2P" + }, + { + "productTitle": "Mortal Kombat 11", + "productId": "BTC0L0BW6LWC", + "images": {}, + "releaseDate": "2019-04-23", + "storePage": "https://www.xbox.com/en-us/games/store/mortal-kombat-11/BTC0L0BW6LWC" + }, + { + "productTitle": "Mount & Blade II: Bannerlord", + "productId": "9PDHWZ7X3P03", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.32729.14149597270613176.7ab8db21-d435-4f1c-8c3a-236ab836bd6b.21f8ad4a-fd25-4016-ba6f-8ce3e6a45470" + ] + }, + "releaseDate": "2022-10-25", + "storePage": "https://www.xbox.com/en-us/games/store/mount-blade-ii-bannerlord/9PDHWZ7X3P03" + }, + { + "productTitle": "Moving Out 2", + "productId": "9P88K6NQW12H", + "images": {}, + "releaseDate": "2023-08-15", + "storePage": "https://www.xbox.com/en-us/games/store/moving-out-2/9P88K6NQW12H" + }, + { + "productTitle": "My Friend Peppa Pig", + "productId": "9NDJLXD2X2DM", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.1107.13613420443671332.a6ea2e8e-4acd-4934-b589-2d8cfaba7189.f867a517-25f5-4493-b7e5-b437c38d5cb7" + ] + }, + "releaseDate": "2021-10-22", + "storePage": "https://www.xbox.com/en-us/games/store/my-friend-peppa-pig/9NDJLXD2X2DM" + }, + { + "productTitle": "My Time At Portia", + "productId": "9NBLSN1JP7TH", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.10534.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.5fd1a78b-0493-47d8-99b5-1a81030b0b13", + "https://store-images.s-microsoft.com/image/apps.14704.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.43051e1b-0b6a-437b-9971-0465eff1c84f", + "https://store-images.s-microsoft.com/image/apps.50248.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.12f4b9c5-7114-40ec-b7aa-e8aaa65198d4" + ] + }, + "releaseDate": "2019-07-04", + "storePage": "https://www.xbox.com/en-us/games/store/my-time-at-portia/9NBLSN1JP7TH" + }, + { + "productTitle": "My Time at Sandrock", + "productId": "9N15RZTXDNPG", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.60105.13907683889228979.59937977-1a57-4871-afde-66c690b605c2.19b6d7df-3cc1-4632-a596-8af5f8323ca2" + ] + }, + "releaseDate": "2023-11-02", + "storePage": "https://www.xbox.com/en-us/games/store/my-time-at-sandrock/9N15RZTXDNPG" + }, + { + "productTitle": "Neon Abyss", + "productId": "9PLWSGHFQ4PS", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.53006.14309576365758777.eb7fccef-6a93-40da-ba63-6d85df214f6b.cc2b7e42-6563-4d43-9ad7-57f02834effb" + ] + }, + "releaseDate": "2020-07-14", + "storePage": "https://www.xbox.com/en-us/games/store/neon-abyss/9PLWSGHFQ4PS" + }, + { + "productTitle": "Neon White", + "productId": "9MTGVHF37DFK", + "images": {}, + "releaseDate": "2024-07-11", + "storePage": "https://www.xbox.com/en-us/games/store/neon-white/9MTGVHF37DFK" + }, + { + "productTitle": "New Super Lucky's Tale", + "productId": "9MZN3SMXN824", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.61243.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.3a28d03e-d249-47fa-93ba-84e107bee662", + "https://store-images.s-microsoft.com/image/apps.22238.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.f9bd296d-956c-4dbe-8d7e-8ea0a6a6a66a", + "https://store-images.s-microsoft.com/image/apps.50333.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.d210b5ed-90b8-492c-b511-0af94cd2ee5c", + "https://store-images.s-microsoft.com/image/apps.49611.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.3a5dfee9-dce9-4509-83de-33538ed3e11b" + ] + }, + "releaseDate": "2020-08-21", + "storePage": "https://www.xbox.com/en-us/games/store/new-super-lucky-s-tale/9MZN3SMXN824" + }, + { + "productTitle": "Ni no Kuni Wrath of the White Witch™ Remastered", + "productId": "9P7SL78VHVMF", + "images": {}, + "releaseDate": "2022-09-15", + "storePage": "https://www.xbox.com/en-us/games/store/ni-no-kuni-wrath-of-the-white-witch-remastered/9P7SL78VHVMF" + }, + { + "productTitle": "Ni no Kuni™ II: Revenant Kingdom - The Prince's Edition", + "productId": "9N732VFPMWKT", + "images": {}, + "releaseDate": "2023-03-21", + "storePage": "https://www.xbox.com/en-us/games/store/ni-no-kuni-ii-revenant-kingdom-the-prince-s-edition/9N732VFPMWKT" + }, + { + "productTitle": "Nickelodeon All-Star Brawl 2", + "productId": "9PN0LC4CNLPT", + "images": {}, + "releaseDate": "2023-11-14", + "storePage": "https://www.xbox.com/en-us/games/store/nickelodeon-all-star-brawl-2/9PN0LC4CNLPT" + }, + { + "productTitle": "NINJA GAIDEN 3: Razor's Edge", + "productId": "9N27DBP8GNNB", + "images": {}, + "releaseDate": "2021-06-10", + "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden-3-razor-s-edge/9N27DBP8GNNB" + }, + { + "productTitle": "NINJA GAIDEN Σ", + "productId": "9NZ5QW71X49G", + "images": {}, + "releaseDate": "2021-06-10", + "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden/9NZ5QW71X49G" + }, + { + "productTitle": "NINJA GAIDEN Σ2", + "productId": "9PGSC3PW4N8Z", + "images": {}, + "releaseDate": "2021-06-10", + "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden-2/9PGSC3PW4N8Z" + }, + { + "productTitle": "NINJA GAIDEN: Master Collection", + "productId": "9NCG3X89KRLD", + "images": {}, + "releaseDate": "2021-06-10", + "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden-master-collection/9NCG3X89KRLD" + }, + { + "productTitle": "No Man's Sky", + "productId": "BQVQTL3PCH05", + "images": {}, + "releaseDate": "2018-07-24", + "storePage": "https://www.xbox.com/en-us/games/store/no-man-s-sky/BQVQTL3PCH05" + }, + { + "productTitle": "No More Heroes 3 Windows", + "productId": "9P8XNG742KC9", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.40045.14605058070453668.4499a7ea-181a-4664-9cf0-b22383d6e8ff.c65f205f-e2d2-463c-9864-21a02ee34710" + ] + }, + "releaseDate": "2022-10-11", + "storePage": "https://www.xbox.com/en-us/games/store/no-more-heroes-3-windows/9P8XNG742KC9" + }, + { + "productTitle": "OCTOPATH TRAVELER", + "productId": "9N9606CC950J", + "images": {}, + "releaseDate": "2021-03-25", + "storePage": "https://www.xbox.com/en-us/games/store/octopath-traveler/9N9606CC950J" + }, + { + "productTitle": "OCTOPATH TRAVELER II", + "productId": "9N2X3VZW8QNN", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.46680.13943511541832179.8333d72c-e2d4-431c-934c-ef55bcf6c5f1.82dbb158-ac97-41c6-aad2-d66dc231c6f3" + ] + }, + "releaseDate": "2024-06-06", + "storePage": "https://www.xbox.com/en-us/games/store/octopath-traveler-ii/9N2X3VZW8QNN" + }, + { + "productTitle": "Open Roads", + "productId": "9NRRSLCGR62S", + "images": {}, + "releaseDate": "2024-03-28", + "storePage": "https://www.xbox.com/en-us/games/store/open-roads/9NRRSLCGR62S" + }, + { + "productTitle": "Orcs Must Die! 3", + "productId": "9NCWF7RRR52G", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.63869.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.de6bc83d-3a1e-49d4-9d5a-060819c106ab", + "https://store-images.s-microsoft.com/image/apps.10496.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.f8fa556a-9afd-40bb-9358-3eb9cda4b22f", + "https://store-images.s-microsoft.com/image/apps.49794.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.77da806e-e5cf-45e0-a9ba-9776abedb579" + ] + }, + "releaseDate": "2021-07-23", + "storePage": "https://www.xbox.com/en-us/games/store/orcs-must-die-3/9NCWF7RRR52G" + }, + { + "productTitle": "Ori and the Blind Forest: Definitive Edition", + "productId": "9NBLGGH1Z6FB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.27342.13510798886186647.20955cc6-ff98-4c47-a277-a39034c80e48.46c8ac27-5378-452b-a633-10a503a92d96", + "https://store-images.s-microsoft.com/image/apps.56463.13510798886186647.e6e27e80-a0e4-4365-a31b-5c4a7b6b91a8.9b1ed462-08c2-43bc-bf97-98ce43ad61be" + ] + }, + "releaseDate": "2016-03-30", + "storePage": "https://www.xbox.com/en-us/games/store/ori-and-the-blind-forest-definitive-edition/9NBLGGH1Z6FB" + }, + { + "productTitle": "Ori and the Will of the Wisps", + "productId": "9N8CD0XZKLP4", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.19662.14047496556148589.9fda5cef-7995-4dbb-a626-66d2ab3feb4f.9868c8ea-682b-49bd-a35e-b38fd3eb0607" + ] + }, + "releaseDate": "2020-03-11", + "storePage": "https://www.xbox.com/en-us/games/store/ori-and-the-will-of-the-wisps/9N8CD0XZKLP4" + }, + { + "productTitle": "Overcooked! 2", + "productId": "9PGB72NFG5JN", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.17977.14184096619580431.16c3e5f6-74be-48c7-9949-1a76b080c9d9.be69e859-f4d8-470e-8518-ecea1f8c9bb9", + "https://store-images.s-microsoft.com/image/apps.19689.14184096619580431.16c3e5f6-74be-48c7-9949-1a76b080c9d9.a886b652-399a-4f35-ba96-537fcec2085c", + "https://store-images.s-microsoft.com/image/apps.6816.14184096619580431.16c3e5f6-74be-48c7-9949-1a76b080c9d9.4b8e6c46-2acc-41b5-aab5-be3b9356f6c2" + ] + }, + "releaseDate": "2020-04-02", + "storePage": "https://www.xbox.com/en-us/games/store/overcooked-2/9PGB72NFG5JN" + }, + { + "productTitle": "Palworld (Game Preview)", + "productId": "9NKV34XDW014", + "images": {}, + "releaseDate": "2024-01-19", + "storePage": "https://www.xbox.com/en-us/games/store/palworld-game-preview/9NKV34XDW014" + }, + { + "productTitle": "PAW Patrol Mighty Pups Save Adventure Bay", + "productId": "9N3TF03KNTBD", + "images": {}, + "releaseDate": "2020-11-06", + "storePage": "https://www.xbox.com/en-us/games/store/paw-patrol-mighty-pups-save-adventure-bay/9N3TF03KNTBD" + }, + { + "productTitle": "PAW Patrol World", + "productId": "9N2VDS259QP1", + "images": {}, + "releaseDate": "2023-09-29", + "storePage": "https://www.xbox.com/en-us/games/store/paw-patrol-world/9N2VDS259QP1" + }, + { + "productTitle": "PAW Patrol: Grand Prix", + "productId": "9MWBT3HFCZ3Z", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.63863.13842132658396836.fba80705-9bc9-45ad-84f9-621f75fe99ec.7890a3e7-98b4-4d58-a917-b04dd7960388" + ] + }, + "releaseDate": "2022-09-30", + "storePage": "https://www.xbox.com/en-us/games/store/paw-patrol-grand-prix/9MWBT3HFCZ3Z" + }, + { + "productTitle": "PAYDAY 3", + "productId": "9NPZVDCH73SX", + "images": {}, + "releaseDate": "2023-09-21", + "storePage": "https://www.xbox.com/en-us/games/store/payday-3/9NPZVDCH73SX" + }, + { + "productTitle": "Pentiment", + "productId": "9NX6K9HN4F4K", + "images": {}, + "releaseDate": "2022-11-15", + "storePage": "https://www.xbox.com/en-us/games/store/pentiment/9NX6K9HN4F4K" + }, + { + "productTitle": "Persona 3 Reload", + "productId": "9NKK6Z0K3RH2", + "images": {}, + "releaseDate": "2024-02-02", + "storePage": "https://www.xbox.com/en-us/games/store/persona-3-reload/9NKK6Z0K3RH2" + }, + { + "productTitle": "Persona 5 Tactica", + "productId": "9P07F616XR9R", + "images": {}, + "releaseDate": "2023-11-17", + "storePage": "https://www.xbox.com/en-us/games/store/persona-5-tactica/9P07F616XR9R" + }, + { + "productTitle": "Phoenix Point", + "productId": "9P1P5Q3BNM7J", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.13928.14507726714197033.ea391b48-d8cb-4724-a6cb-765168bd5161.77ebbbdb-6d75-44ac-b4b6-bcfbec78f9b5", + "https://store-images.s-microsoft.com/image/apps.55491.14507726714197033.2905aa3c-57a0-457d-a5be-f0eea3e80cf3.0aff42ef-12ed-46f4-ae01-3423c446506b", + "https://store-images.s-microsoft.com/image/apps.56306.14507726714197033.2905aa3c-57a0-457d-a5be-f0eea3e80cf3.cbea4fc4-0504-4fdf-8452-c8af2670d40c" + ] + }, + "releaseDate": "2019-12-19", + "storePage": "https://www.xbox.com/en-us/games/store/phoenix-point/9P1P5Q3BNM7J" + }, + { + "productTitle": "Phoenix Wright: Ace Attorney Trilogy", + "productId": "C4R4RB3SB1NN", + "images": {}, + "releaseDate": "2019-04-09", + "storePage": "https://www.xbox.com/en-us/games/store/phoenix-wright-ace-attorney-trilogy/C4R4RB3SB1NN" + }, + { + "productTitle": "Pillars of Eternity 2: Deadfire - Ultimate Edition (PC)", + "productId": "9N8N7NZSVTG3", + "images": {}, + "releaseDate": "2021-03-25", + "storePage": "https://www.xbox.com/en-us/games/store/pillars-of-eternity-2-deadfire-ultimate-edition-pc/9N8N7NZSVTG3" + }, + { + "productTitle": "Pillars of Eternity: Definitive Edition", + "productId": "9N1P6T7ZQ2KF", + "images": {}, + "releaseDate": "2020-03-10", + "storePage": "https://www.xbox.com/en-us/games/store/pillars-of-eternity-definitive-edition/9N1P6T7ZQ2KF" + }, + { + "productTitle": "Planet of Lana", + "productId": "9MXK2RSQJQND", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.60012.13893421366981179.51ad56f7-1d70-465a-9fc2-517da8c59416.262a3d6d-b2cd-47a7-b308-784e913d328f" + ] + }, + "releaseDate": "2023-05-23", + "storePage": "https://www.xbox.com/en-us/games/store/planet-of-lana/9MXK2RSQJQND" + }, + { + "productTitle": "PlateUp!", + "productId": "9P2HHT3VS7MP", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.53054.14557765520174668.1718d940-8154-42aa-b7e5-83e812dac193.d269caed-82e9-4709-a743-a84fc3aef3d5" + ] + }, + "releaseDate": "2024-02-15", + "storePage": "https://www.xbox.com/en-us/games/store/plateup/9P2HHT3VS7MP" + }, + { + "productTitle": "PowerWash Simulator", + "productId": "9NHDJC0NW20M", + "images": {}, + "releaseDate": "2022-07-14", + "storePage": "https://www.xbox.com/en-us/games/store/powerwash-simulator/9NHDJC0NW20M" + }, + { + "productTitle": "Prey", + "productId": "9PBC1QFBW563", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.33621.14126121726701460.448f0d1c-b127-4b9d-b41d-b4025f0487ad.77ba10be-afdf-4d44-b0ae-376ca9940930" + ] + }, + "releaseDate": "2019-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/prey/9PBC1QFBW563" + }, + { + "productTitle": "Psychonauts (Windows 10)", + "productId": "9NCT87FKQ4GM", + "images": {}, + "releaseDate": "2021-05-13", + "storePage": "https://www.xbox.com/en-us/games/store/psychonauts-windows-10/9NCT87FKQ4GM" + }, + { + "productTitle": "Psychonauts 2", + "productId": "9NBR2VXT87SJ", + "images": {}, + "releaseDate": "2021-08-25", + "storePage": "https://www.xbox.com/en-us/games/store/psychonauts-2/9NBR2VXT87SJ" + }, + { + "productTitle": "Quake", + "productId": "9P1Z43KRNQD4", + "images": {}, + "releaseDate": "2021-08-19", + "storePage": "https://www.xbox.com/en-us/games/store/quake/9P1Z43KRNQD4" + }, + { + "productTitle": "Quake 4", + "productId": "9P2JXK37PFLZ", + "images": {}, + "releaseDate": "2022-08-18", + "storePage": "https://www.xbox.com/en-us/games/store/quake-4/9P2JXK37PFLZ" + }, + { + "productTitle": "Quake II", + "productId": "9P7L9H478GGV", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.53217.14105366677060737.98d9bc7f-d623-4c29-b01d-326bd6f11a1a.19bc2dda-8723-4174-a91e-553cacb2a159" + ] + }, + "releaseDate": "2023-08-10", + "storePage": "https://www.xbox.com/en-us/games/store/quake-ii/9P7L9H478GGV" + }, + { + "productTitle": "Quake III Arena", + "productId": "9NWNLS28ZG37", + "images": {}, + "releaseDate": "2021-08-19", + "storePage": "https://www.xbox.com/en-us/games/store/quake-iii-arena/9NWNLS28ZG37" + }, + { + "productTitle": "Quantum Break", + "productId": "9NBLGGH6H0RV", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.58987.13510798886714035.b2865d36-6481-42f1-b535-9300f0971c58.be79ec74-9c21-4c54-804b-392877794836" + ] + }, + "releaseDate": "2016-04-05", + "storePage": "https://www.xbox.com/en-us/games/store/quantum-break/9NBLGGH6H0RV" + }, + { + "productTitle": "RAGE 2 (PC)", + "productId": "9P2J7WHV0K4N", + "images": {}, + "releaseDate": "2019-11-14", + "storePage": "https://www.xbox.com/en-us/games/store/rage-2-pc/9P2J7WHV0K4N" + }, + { + "productTitle": "Rainbow Billy: The Curse of the Leviathan", + "productId": "9PMGFL6KM0T2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.47882.14293952320453711.7b0495b8-be6b-4fbc-9d4c-95bf880b7637.e11628b9-391e-48d0-b70b-9e82e499dc7f" + ] + }, + "releaseDate": "2021-10-05", + "storePage": "https://www.xbox.com/en-us/games/store/rainbow-billy-the-curse-of-the-leviathan/9PMGFL6KM0T2" + }, + { + "productTitle": "ReCore", + "productId": "9NBLGGH1Z6FQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.20903.13510798886186651.ca0f6ee8-825b-4bf1-aeb5-07d6bcff9e1a.739d4082-f1c1-4cdd-9777-735275015c71", + "https://store-images.s-microsoft.com/image/apps.33940.13510798886186651.318d51ee-64f7-4e1c-a7fc-377134776500.e0a2b514-cb92-4ccf-95f7-6d09171aa9c7", + "https://store-images.s-microsoft.com/image/apps.20246.13510798886186651.52fa185c-aa0e-4455-bd24-ca7050c32d23.e272595f-5aa6-4362-b92b-94b4244af6a9", + "https://store-images.s-microsoft.com/image/apps.8347.13510798886186651.4d9ba866-a3bb-4ec5-9791-5b5380b509df.defe5b86-8663-4638-a26c-9716b7838b82" + ] + }, + "releaseDate": "2016-09-13", + "storePage": "https://www.xbox.com/en-us/games/store/recore/9NBLGGH1Z6FQ" + }, + { + "productTitle": "Redfall", + "productId": "9P8JRMWRQP4H", + "images": {}, + "releaseDate": "2023-05-02", + "storePage": "https://www.xbox.com/en-us/games/store/redfall/9P8JRMWRQP4H" + }, + { + "productTitle": "Remnant II® - Standard Edition", + "productId": "9P9278ZMGQLJ", + "images": {}, + "releaseDate": "2023-07-25", + "storePage": "https://www.xbox.com/en-us/games/store/remnant-ii-standard-edition/9P9278ZMGQLJ" + }, + { + "productTitle": "Remnant: From the Ashes", + "productId": "9PBHXGWZTS2N", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.23721.14118342467613503.328c9673-d2e4-481d-871f-02b381f9ae5e.77290461-1e87-48ea-9546-3fab7e7d378c" + ] + }, + "releaseDate": "2019-08-20", + "storePage": "https://www.xbox.com/en-us/games/store/remnant-from-the-ashes/9PBHXGWZTS2N" + }, + { + "productTitle": "RESIDENT EVIL 2", + "productId": "BWMH951M3G3P", + "images": {}, + "releaseDate": "2019-01-25", + "storePage": "https://www.xbox.com/en-us/games/store/resident-evil-2/BWMH951M3G3P" + }, + { + "productTitle": "RESIDENT EVIL 3 for Windows", + "productId": "9P7T44TTDL7M", + "images": {}, + "releaseDate": "2024-02-13", + "storePage": "https://www.xbox.com/en-us/games/store/resident-evil-3-for-windows/9P7T44TTDL7M" + }, + { + "productTitle": "Return to Castle Wolfenstein", + "productId": "9N1WT4X26SHW", + "images": {}, + "releaseDate": "2022-08-18", + "storePage": "https://www.xbox.com/en-us/games/store/return-to-castle-wolfenstein/9N1WT4X26SHW" + }, + { + "productTitle": "Return to Grace", + "productId": "9MWZF0Q94B8L", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.14673.13834568726702397.4f9f6429-a07d-45b4-ae57-230b11267429.9a3b548c-ac74-4c27-b118-95bd88132385" + ] + }, + "releaseDate": "2024-02-20", + "storePage": "https://www.xbox.com/en-us/games/store/return-to-grace/9MWZF0Q94B8L" + }, + { + "productTitle": "Return to Monkey Island", + "productId": "9PC4R8N1N2T6", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.32252.14176324986442763.11fa95be-f98f-4be1-a416-9571cd1286df.850d22ab-9787-4dee-b0de-3e4d59b1dc35" + ] + }, + "releaseDate": "2022-11-08", + "storePage": "https://www.xbox.com/en-us/games/store/return-to-monkey-island/9PC4R8N1N2T6" + }, + { + "productTitle": "Rise of Nations: Extended Edition", + "productId": "9NS84HCWZD8B", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.62608.14372382618520757.c9c606c7-aefc-4941-b075-041b8dd7e99b.9cd83749-7566-45fe-8fdf-90e0eb704ff2", + "https://store-images.s-microsoft.com/image/apps.20096.14372382618520757.bc08dd7e-a1fe-4dab-96b6-179b7e7179a4.5aa2d2e6-e1a6-4c0c-8ab2-e1b906d1d0d4" + ] + }, + "releaseDate": "2017-09-14", + "storePage": "https://www.xbox.com/en-us/games/store/rise-of-nations-extended-edition/9NS84HCWZD8B" + }, + { + "productTitle": "Rise of the Tomb Raider", + "productId": "9NBLGGH6CRSZ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.45334.13510798886621078.3f3ca8cc-9e57-4af9-9251-f2ed8ba5e3ab.09c6a44c-aff8-4140-939c-e17b701d1ff8", + "https://store-images.s-microsoft.com/image/apps.65159.13510798886621078.29b02068-cffe-4bc6-a3dd-668fc485009c.5c061555-1d91-4d6c-a2b3-b58398437fca" + ] + }, + "releaseDate": "2016-01-22", + "storePage": "https://www.xbox.com/en-us/games/store/rise-of-the-tomb-raider/9NBLGGH6CRSZ" + }, + { + "productTitle": "Robin Hood - Sherwood Builders", + "productId": "9P7LD2NMMMRN", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.61951.14105414348544973.9bef7109-ae4f-4d2d-840a-a27f3acfe32a.af473551-09b3-4c01-bca5-8bc958c55946" + ] + }, + "releaseDate": "2024-06-27", + "storePage": "https://www.xbox.com/en-us/games/store/robin-hood-sherwood-builders/9P7LD2NMMMRN" + }, + { + "productTitle": "Roboquest", + "productId": "9P47S7NJGWZL", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.4681.14593591481307987.72e4b0a6-f3d5-43bf-bcbf-7412b16dca48.7a62f094-7b6d-499f-b2b1-99ba3cf11e5b" + ] + }, + "releaseDate": "2023-11-07", + "storePage": "https://www.xbox.com/en-us/games/store/roboquest/9P47S7NJGWZL" + }, + { + "productTitle": "Rollerdrome", + "productId": "9PH4TQ1T0VRZ", + "images": {}, + "releaseDate": "2023-11-28", + "storePage": "https://www.xbox.com/en-us/games/store/rollerdrome/9PH4TQ1T0VRZ" + }, + { + "productTitle": "Rolling Hills: Make Sushi, Make Friends", + "productId": "9N491626R5XP", + "images": {}, + "releaseDate": "2024-06-04", + "storePage": "https://www.xbox.com/en-us/games/store/rolling-hills-make-sushi-make-friends/9N491626R5XP" + }, + { + "productTitle": "Rush: A DisneyPixar Adventure", + "productId": "9P3PL76N0KWZ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.27934.14538559069860396.166f30a2-711b-4aa1-bac7-d64318783f52.1156487a-3ded-4170-b904-27f2d0596154", + "https://store-images.s-microsoft.com/image/apps.22130.14538559069860396.3cff3543-5cdd-4262-a28f-0b1a128c2ba4.0f7d02d7-549a-418e-9c80-830fa296a6f0" + ] + }, + "releaseDate": "2017-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/rush-a-disneypixar-adventure/9P3PL76N0KWZ" + }, + { + "productTitle": "Sandrock Online", + "productId": "9P838V2M40NV", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.9287.14099938228729765.8d5a9e65-d0cf-4c5b-9131-eaba39ee8b29.3fa90856-57b8-4318-a8fa-103d6125d865" + ] + }, + "releaseDate": "2024-06-15", + "storePage": "https://www.xbox.com/en-us/games/store/sandrock-online/9P838V2M40NV" + }, + { + "productTitle": "Scorn", + "productId": "9NM3TNRPQXLR", + "images": {}, + "releaseDate": "2022-10-14", + "storePage": "https://www.xbox.com/en-us/games/store/scorn/9NM3TNRPQXLR" + }, + { + "productTitle": "Sea of Stars", + "productId": "9NLLTTJZH40L", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.21103.13704965593711325.c8ed22ec-c56d-4ecd-bbbf-e9f6934161c4.7af47ffa-9b22-44e3-a65e-3fa2aaf99fe1" + ] + }, + "releaseDate": "2023-08-29", + "storePage": "https://www.xbox.com/en-us/games/store/sea-of-stars/9NLLTTJZH40L" + }, + { + "productTitle": "Sea of Thieves: 2024 Edition", + "productId": "9P2N57MC619K", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.56766.14554784103656548.1bd22c11-ff12-4b02-9b49-1355a5fc9de6.39a78b6a-b180-4000-92eb-149e78325cb5" + ] + }, + "releaseDate": "2018-03-20", + "storePage": "https://www.xbox.com/en-us/games/store/sea-of-thieves-2024-edition/9P2N57MC619K" + }, + { + "productTitle": "Senua’s Saga: Hellblade II", + "productId": "9PMBB7NGHV95", + "images": {}, + "releaseDate": "2024-05-21", + "storePage": "https://www.xbox.com/en-us/games/store/senua-s-saga-hellblade-ii/9PMBB7NGHV95" + }, + { + "productTitle": "Serious Sam: Siberian Mayhem", + "productId": "9P8X7236WM5P", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.37390.14549842084824317.93984916-8beb-46f0-913b-55c1288d3f80.94893e3d-a6d1-489e-a6e1-04d42954a274" + ] + }, + "releaseDate": "2023-05-16", + "storePage": "https://www.xbox.com/en-us/games/store/serious-sam-siberian-mayhem/9P8X7236WM5P" + }, + { + "productTitle": "Shadow of the Tomb Raider Definitive Edition", + "productId": "BNQQ3WVBNZCQ", + "images": {}, + "releaseDate": "2019-11-05", + "storePage": "https://www.xbox.com/en-us/games/store/shadow-of-the-tomb-raider-definitive-edition/BNQQ3WVBNZCQ" + }, + { + "productTitle": "Shadowrun Returns PC", + "productId": "9NF0RBL8SZL6", + "images": {}, + "releaseDate": "2023-05-09", + "storePage": "https://www.xbox.com/en-us/games/store/shadowrun-returns-pc/9NF0RBL8SZL6" + }, + { + "productTitle": "Shadowrun: Dragonfall - Director's Cut PC", + "productId": "9NMCRMS6WN78", + "images": {}, + "releaseDate": "2023-05-09", + "storePage": "https://www.xbox.com/en-us/games/store/shadowrun-dragonfall-director-s-cut-pc/9NMCRMS6WN78" + }, + { + "productTitle": "Shadowrun: Hong Kong - Extended Edition PC", + "productId": "9NK2DT3K7DTF", + "images": {}, + "releaseDate": "2023-05-09", + "storePage": "https://www.xbox.com/en-us/games/store/shadowrun-hong-kong-extended-edition-pc/9NK2DT3K7DTF" + }, + { + "productTitle": "Slay The Spire", + "productId": "9MZQR8317S3B", + "images": {}, + "releaseDate": "2019-06-09", + "storePage": "https://www.xbox.com/en-us/games/store/slay-the-spire/9MZQR8317S3B" + }, + { + "productTitle": "Slayers X: Terminal Aftermath: Vengance of the Slayer", + "productId": "9P2Q0J0GW1FJ", + "images": {}, + "releaseDate": "2023-06-01", + "storePage": "https://www.xbox.com/en-us/games/store/slayers-x-terminal-aftermath-vengance-of-the-slayer/9P2Q0J0GW1FJ" + }, + { + "productTitle": "Slime Rancher 2", + "productId": "9PHFJ0N31NV1", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.11126.14232893733292770.c4910fc1-e043-4370-be7c-79114ae9c0cf.e483936f-2b1f-4c66-99bd-7316b5920794" + ] + }, + "releaseDate": "2022-09-22", + "storePage": "https://www.xbox.com/en-us/games/store/slime-rancher-2/9PHFJ0N31NV1" + }, + { + "productTitle": "Sniper Elite 5", + "productId": "9PP8Q82H79LC", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.58335.14329012547000484.7cb39222-264a-4c98-a0f1-007c4e95f1e1.e2e964df-d308-4d33-9ec7-8588bc433477" + ] + }, + "releaseDate": "2022-05-26", + "storePage": "https://www.xbox.com/en-us/games/store/sniper-elite-5/9PP8Q82H79LC" + }, + { + "productTitle": "SnowRunner (Windows 10)", + "productId": "9NP6WL1XQDBW", + "images": {}, + "releaseDate": "2021-05-18", + "storePage": "https://www.xbox.com/en-us/games/store/snowrunner-windows-10/9NP6WL1XQDBW" + }, + { + "productTitle": "Soccer Story", + "productId": "9PJ1045MHZJ0", + "images": {}, + "releaseDate": "2022-11-29", + "storePage": "https://www.xbox.com/en-us/games/store/soccer-story/9PJ1045MHZJ0" + }, + { + "productTitle": "Solar Ash", + "productId": "9NWLPG23T46V", + "images": {}, + "releaseDate": "2023-09-14", + "storePage": "https://www.xbox.com/en-us/games/store/solar-ash/9NWLPG23T46V" + }, + { + "productTitle": "Somerville", + "productId": "9N1PS56BR6VK", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.2904.13901545943501690.6f65c9ca-e6b9-46e0-bfef-3d4b7f211abf.19b8f144-e64c-4830-bcec-cd4b3a2bc697" + ] + }, + "releaseDate": "2022-11-15", + "storePage": "https://www.xbox.com/en-us/games/store/somerville/9N1PS56BR6VK" + }, + { + "productTitle": "Space Engineers", + "productId": "9NLV3X229LG1", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.2918.13700230312728802.7afc83a6-4afb-4b07-84b4-f40e24213a93.b98f6584-05fa-49ef-8ff1-bee034061ed7" + ] + }, + "releaseDate": "2020-04-15", + "storePage": "https://www.xbox.com/en-us/games/store/space-engineers/9NLV3X229LG1" + }, + { + "productTitle": "SpiderHeck", + "productId": "9N0TRF57SMQH", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.21835.13918689285493336.4bf1a4e7-a4e7-44dd-bf65-ae9d46e2f2e2.86640b7f-c3a6-4078-99e1-0ffdf59fd3d4" + ] + }, + "releaseDate": "2022-09-22", + "storePage": "https://www.xbox.com/en-us/games/store/spiderheck/9N0TRF57SMQH" + }, + { + "productTitle": "Spirit of the North: Enhanced Edition", + "productId": "9MVL42NJFVZ2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.1065.13861734152045967.56f8a6b3-4b54-46c1-82f0-aa8892021972.4c293164-b69e-4ad0-bc7f-7ceda0a57e64" + ] + }, + "releaseDate": "2023-12-01", + "storePage": "https://www.xbox.com/en-us/games/store/spirit-of-the-north-enhanced-edition/9MVL42NJFVZ2" + }, + { + "productTitle": "Spiritfarer®: Farewell Edition", + "productId": "9NG5L58FD3X5", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.11221.13581632098060782.3a95693e-c954-45c8-b6a8-bf6251679426.8f1df679-3858-460b-bb35-46a68776eaae", + "https://store-images.s-microsoft.com/image/apps.27271.13581632098060782.3a95693e-c954-45c8-b6a8-bf6251679426.42bc9146-067c-4cc8-be10-7bea0e993b48", + "https://store-images.s-microsoft.com/image/apps.65385.13581632098060782.3a95693e-c954-45c8-b6a8-bf6251679426.1908cfbc-e441-47a8-9d57-b0208938692c", + "https://store-images.s-microsoft.com/image/apps.51598.13581632098060782.9aea914f-fc5f-474f-a052-eac22427e863.b65a9c2f-8511-4520-bfb0-b8f3cf37de41" + ] + }, + "releaseDate": "2020-08-18", + "storePage": "https://www.xbox.com/en-us/games/store/spiritfarer-farewell-edition/9NG5L58FD3X5" + }, + { + "productTitle": "Spirittea", + "productId": "9PPK59BXLD4N", + "images": {}, + "releaseDate": "2023-11-13", + "storePage": "https://www.xbox.com/en-us/games/store/spirittea/9PPK59BXLD4N" + }, + { + "productTitle": "SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated", + "productId": "9PKQX8PCHNH2", + "images": {}, + "releaseDate": "2024-02-06", + "storePage": "https://www.xbox.com/en-us/games/store/spongebob-squarepants-battle-for-bikini-bottom-rehydrated/9PKQX8PCHNH2" + }, + { + "productTitle": "Starbound", + "productId": "9MTSBWPWPQVQ", + "images": {}, + "releaseDate": "2020-12-08", + "storePage": "https://www.xbox.com/en-us/games/store/starbound/9MTSBWPWPQVQ" + }, + { + "productTitle": "Stardew Valley", + "productId": "9MWR1NC6VQ6L", + "images": {}, + "releaseDate": "2021-12-02", + "storePage": "https://www.xbox.com/en-us/games/store/stardew-valley/9MWR1NC6VQ6L" + }, + { + "productTitle": "Starfield", + "productId": "9NCJSXWZTP88", + "images": {}, + "releaseDate": "2023-09-06", + "storePage": "https://www.xbox.com/en-us/games/store/starfield/9NCJSXWZTP88" + }, + { + "productTitle": "State of Decay 2: Juggernaut Edition", + "productId": "9NT4X7P8B9NB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.43642.14425140369408817.14846606-f5bc-4fb1-b355-26ef6a25e847.281240fb-379d-4800-9b0a-b36b5935daa7" + ] + }, + "releaseDate": "2018-05-22", + "storePage": "https://www.xbox.com/en-us/games/store/state-of-decay-2-juggernaut-edition/9NT4X7P8B9NB" + }, + { + "productTitle": "SteamWorld Build", + "productId": "9MVRDC1BW8TQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.63454.13858202694912107.53904b7d-bf97-47b6-a406-1a093f06954b.0b3dc3f3-712f-4026-b33e-df76038b7d04" + ] + }, + "releaseDate": "2023-12-01", + "storePage": "https://www.xbox.com/en-us/games/store/steamworld-build/9MVRDC1BW8TQ" + }, + { + "productTitle": "SteamWorld Dig 2", + "productId": "9P45LLRNDP1R", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.754.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.7bdaa22e-e7fc-4ab6-aaa3-40b48fe9da8d", + "https://store-images.s-microsoft.com/image/apps.61224.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.39fb7745-dc89-409e-8b20-4bec528fd4ac", + "https://store-images.s-microsoft.com/image/apps.54682.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.ac2b0e7b-6e4b-468e-96de-a04143a4ba6b", + "https://store-images.s-microsoft.com/image/apps.8433.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.d0c1263d-37b9-4a0c-9809-afe66d536ba6" + ] + }, + "releaseDate": "2018-11-21", + "storePage": "https://www.xbox.com/en-us/games/store/steamworld-dig-2/9P45LLRNDP1R" + }, + { + "productTitle": "Stellaris", + "productId": "9NXQPGMR917R", + "images": {}, + "releaseDate": "2019-10-09", + "storePage": "https://www.xbox.com/en-us/games/store/stellaris/9NXQPGMR917R" + }, + { + "productTitle": "Still Wakes the Deep", + "productId": "9N88DFRX8WCJ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.9370.14049385901429569.1b471d6f-67fc-4289-a4a1-f821ac6594e6.4a82d733-4ab1-4800-a7a9-726158deca80" + ] + }, + "releaseDate": "2024-06-18", + "storePage": "https://www.xbox.com/en-us/games/store/still-wakes-the-deep/9N88DFRX8WCJ" + }, + { + "productTitle": "Sunset Overdrive", + "productId": "9NNLBL0T2Z43", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.36649.13736301732248840.1e2d854a-e5e9-4c32-b8a1-2630937d19b9.f8d37f47-d33a-4408-93f2-1aa6857e771e" + ] + }, + "releaseDate": "2018-11-16", + "storePage": "https://www.xbox.com/en-us/games/store/sunset-overdrive/9NNLBL0T2Z43" + }, + { + "productTitle": "Super Lucky's Tale", + "productId": "9PLMGFWCFZ9G", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.18265.14315077775214047.0aff2cf3-0ff7-4629-8ad6-722a2d8dac54.8bbbd953-eac8-44fb-ac0f-b3abffb2a7c4" + ] + }, + "releaseDate": "2017-11-07", + "storePage": "https://www.xbox.com/en-us/games/store/super-lucky-s-tale/9PLMGFWCFZ9G" + }, + { + "productTitle": "SUPERHOT: MIND CONTROL DELETE", + "productId": "9NRH78B682L8", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.3858.14383048766618347.734b0c9a-e030-4976-bf99-73f141752531.08f6c65c-abce-4c54-bd0e-ef73b94e8b17" + ] + }, + "releaseDate": "2020-07-16", + "storePage": "https://www.xbox.com/en-us/games/store/superhot-mind-control-delete/9NRH78B682L8" + }, + { + "productTitle": "Superliminal", + "productId": "9NVR4ZQKNBSB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.13828.14393569011623061.b29fd711-0008-450d-88a9-21d006202686.f1d07399-e50d-4d80-9255-20edce3b1277" + ] + }, + "releaseDate": "2020-07-07", + "storePage": "https://www.xbox.com/en-us/games/store/superliminal/9NVR4ZQKNBSB" + }, + { + "productTitle": "Tales of Arise (Windows)", + "productId": "9PJ1T02FGC3B", + "images": {}, + "releaseDate": "2024-02-20", + "storePage": "https://www.xbox.com/en-us/games/store/tales-of-arise-windows/9PJ1T02FGC3B" + }, + { + "productTitle": "Tchia", + "productId": "9NK4WRQX5ZC5", + "images": {}, + "releaseDate": "2024-07-11", + "storePage": "https://www.xbox.com/en-us/games/store/tchia/9NK4WRQX5ZC5" + }, + { + "productTitle": "Techtonica (Game Preview)", + "productId": "9NR1RVDK9T78", + "images": {}, + "releaseDate": "2023-07-18", + "storePage": "https://www.xbox.com/en-us/games/store/techtonica-game-preview/9NR1RVDK9T78" + }, + { + "productTitle": "Teenage Mutant Ninja Turtles: Shredder's Revenge", + "productId": "9NS3673HVH41", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.52487.14375592271313618.8101bdfc-97e9-473f-8ca0-07fc83b1846b.b47a3bfe-dbb6-497e-ae52-194d08f3ca14" + ] + }, + "releaseDate": "2022-06-16", + "storePage": "https://www.xbox.com/en-us/games/store/teenage-mutant-ninja-turtles-shredder-s-revenge/9NS3673HVH41" + }, + { + "productTitle": "Tell Me Why: Chapters 1-3", + "productId": "9NF83PRZK6K3", + "images": {}, + "releaseDate": "2020-08-27", + "storePage": "https://www.xbox.com/en-us/games/store/tell-me-why-chapters-1-3/9NF83PRZK6K3" + }, + { + "productTitle": "Terra Invicta (Game Preview)", + "productId": "9PB0GLGXQZ83", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.4276.14128659347127760.611a70ab-c4a0-44f5-bbe1-82cf10127bba.fcb80a03-efe5-44ff-a317-4e533e7717f0" + ] + }, + "releaseDate": "2024-03-19", + "storePage": "https://www.xbox.com/en-us/games/store/terra-invicta-game-preview/9PB0GLGXQZ83" + }, + { + "productTitle": "The Bard's Tale ARPG : Remastered and Resnarkled", + "productId": "9PN3VDFTB5HZ", + "images": {}, + "releaseDate": "2020-06-18", + "storePage": "https://www.xbox.com/en-us/games/store/the-bard-s-tale-arpg-remastered-and-resnarkled/9PN3VDFTB5HZ" + }, + { + "productTitle": "The Bard's Tale IV: Director's Cut", + "productId": "C2B4T86TXLRS", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.36316.65351109767529701.defb4d0d-acab-4fd9-8208-7283068f991e.6b97d62c-22a0-40e7-8e31-6d156a3fd775" + ] + }, + "releaseDate": "2019-08-27", + "storePage": "https://www.xbox.com/en-us/games/store/the-bard-s-tale-iv-director-s-cut/C2B4T86TXLRS" + }, + { + "productTitle": "The Bard's Tale Trilogy", + "productId": "9MVN4ND41DD3", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.55499.13855942306543540.f07392fd-5f64-460d-82f5-27790455d1e0.212ecde0-cef2-4aa2-8f20-e0b42caaaa40" + ] + }, + "releaseDate": "2019-08-13", + "storePage": "https://www.xbox.com/en-us/games/store/the-bard-s-tale-trilogy/9MVN4ND41DD3" + }, + { + "productTitle": "The Big Con", + "productId": "9P01R01ZJ9BX", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.4418.14465388396342523.28ec13a2-04a9-4247-986a-5d1303ace16b.409cfd37-7ffa-4deb-81e1-f7e175cd192d" + ] + }, + "releaseDate": "2021-08-31", + "storePage": "https://www.xbox.com/en-us/games/store/the-big-con/9P01R01ZJ9BX" + }, + { + "productTitle": "The Callisto Protocol™ for Xbox One", + "productId": "9P33X3C755SK", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.25791.13899734166918467.3f3aa4b8-07e8-448a-a5a2-f2a9dbcf9c7c.d6195f2c-d1c6-43b1-b6c4-972e36debfb6" + ] + }, + "releaseDate": "2022-12-03", + "storePage": "https://www.xbox.com/en-us/games/store/the-callisto-protocol-for-xbox-one/9P33X3C755SK" + }, + { + "productTitle": "The Case of the Golden Idol", + "productId": "9NBH78WD7XPQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.2707.13517632720763203.9431a067-e43c-4a7c-8792-a79a71e66ccb.9843519e-7e80-48f9-80f3-a6347ef8c91c" + ] + }, + "releaseDate": "2024-07-09", + "storePage": "https://www.xbox.com/en-us/games/store/the-case-of-the-golden-idol/9NBH78WD7XPQ" + }, + { + "productTitle": "The Elder Scrolls Adventures: Redguard", + "productId": "9PFXKRLVWJ0B", + "images": {}, + "releaseDate": "2022-08-18", + "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-adventures-redguard/9PFXKRLVWJ0B" + }, + { + "productTitle": "The Elder Scrolls III: Morrowind Game of the Year Edition (PC)", + "productId": "9PP7XSG5LDH1", + "images": {}, + "releaseDate": "2021-03-12", + "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-iii-morrowind-game-of-the-year-edition-pc/9PP7XSG5LDH1" + }, + { + "productTitle": "The Elder Scrolls IV: Oblivion Game of the Year Edition (PC)", + "productId": "9P2J5D12GJL5", + "images": {}, + "releaseDate": "2021-03-12", + "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-iv-oblivion-game-of-the-year-edition-pc/9P2J5D12GJL5" + }, + { + "productTitle": "The Elder Scrolls V: Skyrim Special Edition (PC)", + "productId": "9P03JGQ4S1GC", + "images": {}, + "releaseDate": "2021-03-11", + "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-v-skyrim-special-edition-pc/9P03JGQ4S1GC" + }, + { + "productTitle": "The Evil Within (PC)", + "productId": "9MX8R81JW1B5", + "images": {}, + "releaseDate": "2021-03-12", + "storePage": "https://www.xbox.com/en-us/games/store/the-evil-within-pc/9MX8R81JW1B5" + }, + { + "productTitle": "The Evil Within® 2 (PC)", + "productId": "9NT0NT8JQMQN", + "images": {}, + "releaseDate": "2021-06-13", + "storePage": "https://www.xbox.com/en-us/games/store/the-evil-within-2-pc/9NT0NT8JQMQN" + }, + { + "productTitle": "The Gunk", + "productId": "9P008L2LS87F", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.38178.14466083566107896.f1b98327-0240-4097-b759-cc5bd89ee66e.c08f0078-5fb3-4eaf-b154-c6c8c9a3ab6f" + ] + }, + "releaseDate": "2021-12-16", + "storePage": "https://www.xbox.com/en-us/games/store/the-gunk/9P008L2LS87F" + }, + { + "productTitle": "The Lamplighters League - PC Edition", + "productId": "9PG4M7W805RB", + "images": {}, + "releaseDate": "2023-10-03", + "storePage": "https://www.xbox.com/en-us/games/store/the-lamplighters-league-pc-edition/9PG4M7W805RB" + }, + { + "productTitle": "The Last Case of Benedict Fox: Definitive Edition", + "productId": "9PMNGB89CLJ2", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.26733.14290343103192837.c78c2314-95c1-46e6-900b-b8b53f190827.3b392fd5-9c80-421d-aff3-28addbfc4fae" + ] + }, + "releaseDate": "2023-04-27", + "storePage": "https://www.xbox.com/en-us/games/store/the-last-case-of-benedict-fox-definitive-edition/9PMNGB89CLJ2" + }, + { + "productTitle": "The Outer Worlds", + "productId": "9MWD2Z8L1FBQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.29393.13841339086540201.963451fc-271b-4371-9180-313f491b5562.2696ebda-4e41-4a47-8cfc-f2ab1e82476e", + "https://store-images.s-microsoft.com/image/apps.25689.13841339086540201.963451fc-271b-4371-9180-313f491b5562.e6e5cfee-b6e5-443a-8c29-7c91c9404e8d", + "https://store-images.s-microsoft.com/image/apps.17407.13841339086540201.963451fc-271b-4371-9180-313f491b5562.d93b411a-1220-4014-b2aa-2942efec3eea" + ] + }, + "releaseDate": "2019-10-25", + "storePage": "https://www.xbox.com/en-us/games/store/the-outer-worlds/9MWD2Z8L1FBQ" + }, + { + "productTitle": "The Rewinder", + "productId": "9PJ2HR6WGRND", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.5779.14220055173742695.54d9b731-9a91-40c2-8bc9-07801594b8df.dc5a023c-94a6-47a9-bb4f-6b984b1a82fd" + ] + }, + "releaseDate": "2024-04-29", + "storePage": "https://www.xbox.com/en-us/games/store/the-rewinder/9PJ2HR6WGRND" + }, + { + "productTitle": "The Walking Dead: Season 1", + "productId": "9NBLGGH4VXRW", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.21157.13510798887515946.26524538-cf92-428e-87ed-0f3fd2d67fc6.757cfb00-4f34-4c0e-8b1b-c6095389ea23", + "https://store-images.s-microsoft.com/image/apps.16092.13510798887515946.49e886bf-61bb-414c-8ee3-370d4e1f3220.47ff32ad-b531-4c88-8d1d-a3be1440270d", + "https://store-images.s-microsoft.com/image/apps.3658.13510798887515946.177c6d77-ffd5-4e77-9cf8-a8a727c41061.9f62a0d2-8555-4130-b2ab-7063fd3f69b1" + ] + }, + "releaseDate": "2017-02-23", + "storePage": "https://www.xbox.com/en-us/games/store/the-walking-dead-season-1/9NBLGGH4VXRW" + }, + { + "productTitle": "The Walking Dead: Season 2", + "productId": "9NBLGGH4VXS7", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.19277.13510798887515952.489b3e77-0968-4440-a2db-bd3d035fcf01.0221d9d1-18ec-4c50-883a-f1f315ae6671", + "https://store-images.s-microsoft.com/image/apps.9551.13510798887515952.8eb5b712-9b6b-4525-b71f-2b90091b04c6.f4e39eae-75d7-45ed-a2dd-0b3ad63001e2", + "https://store-images.s-microsoft.com/image/apps.52190.13510798887515952.1d5a71a3-f079-4d0c-9ff9-addad48658fd.1b47df41-4556-40bb-9475-483318831d3d" + ] + }, + "releaseDate": "2017-03-08", + "storePage": "https://www.xbox.com/en-us/games/store/the-walking-dead-season-2/9NBLGGH4VXS7" + }, + { + "productTitle": "The Walking Dead: The Final Season", + "productId": "9NL9XP529G4Q", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.18846.13715445583677913.34eb4509-87e7-4b84-95b4-f140459f5a92.0ac0fe8a-1a46-4b45-b099-cb67f97f33e1", + "https://store-images.s-microsoft.com/image/apps.10330.13715445583677913.9255e94f-f6ef-43ee-96cc-014db1f03269.4ccf1cfa-4330-4333-b808-6d71c79f5efe" + ] + }, + "releaseDate": "2018-08-14", + "storePage": "https://www.xbox.com/en-us/games/store/the-walking-dead-the-final-season/9NL9XP529G4Q" + }, + { + "productTitle": "theHunter: Call of the Wild™ - Windows 10", + "productId": "9NQV7C0G1040", + "images": {}, + "releaseDate": "2021-11-30", + "storePage": "https://www.xbox.com/en-us/games/store/thehunter-call-of-the-wild-windows-10/9NQV7C0G1040" + }, + { + "productTitle": "Thirsty Suitors", + "productId": "9PLS01JRJCWB", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.46663.14307611151014007.4b05f350-c598-4742-9e65-e2a06d52c9d0.aab543ea-db24-4e2d-93f6-d3ac21719096" + ] + }, + "releaseDate": "2023-11-02", + "storePage": "https://www.xbox.com/en-us/games/store/thirsty-suitors/9PLS01JRJCWB" + }, + { + "productTitle": "This War of Mine: Final Cut", + "productId": "9MT6TG9CXR2H", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.48284.13818178861591472.06d4cfd1-e581-4b7f-8268-7ed2cfca3f35.c16f3c09-e1b5-4bb2-924e-4f06235ae319" + ] + }, + "releaseDate": "2022-05-10", + "storePage": "https://www.xbox.com/en-us/games/store/this-war-of-mine-final-cut/9MT6TG9CXR2H" + }, + { + "productTitle": "Those Who Remain.", + "productId": "9NFC3G481KKQ", + "images": {}, + "releaseDate": "2024-01-16", + "storePage": "https://www.xbox.com/en-us/games/store/those-who-remain/9NFC3G481KKQ" + }, + { + "productTitle": "Tin Hearts", + "productId": "9MZSWZD5TDZP", + "images": {}, + "releaseDate": "2023-05-16", + "storePage": "https://www.xbox.com/en-us/games/store/tin-hearts/9MZSWZD5TDZP" + }, + { + "productTitle": "Tomb Raider: Definitive Edition", + "productId": "BQXTS0SX4W0N", + "images": {}, + "releaseDate": "2014-01-28", + "storePage": "https://www.xbox.com/en-us/games/store/tomb-raider-definitive-edition/BQXTS0SX4W0N" + }, + { + "productTitle": "Torment: Tides of Numenera", + "productId": "9NC0071DJ6XC", + "images": {}, + "releaseDate": "2019-06-27", + "storePage": "https://www.xbox.com/en-us/games/store/torment-tides-of-numenera/9NC0071DJ6XC" + }, + { + "productTitle": "Totally Accurate Battle Simulator", + "productId": "9PC4RWP34M2D", + "images": {}, + "releaseDate": "2019-12-20", + "storePage": "https://www.xbox.com/en-us/games/store/totally-accurate-battle-simulator/9PC4RWP34M2D" + }, + { + "productTitle": "Totally Reliable Delivery Service", + "productId": "9NZG72SH3H4W", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.2372.14481391283536320.2e278a9d-b63d-454a-a60e-ac81b25b445c.e798630b-ee6c-4d88-b047-007f3499d117" + ] + }, + "releaseDate": "2020-04-01", + "storePage": "https://www.xbox.com/en-us/games/store/totally-reliable-delivery-service/9NZG72SH3H4W" + }, + { + "productTitle": "Trailmakers", + "productId": "9NSFGM8J6MBJ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.17055.14364758607471359.6218d836-661b-4c35-bf90-504a0c7f3e9d.2a8bb3cb-195b-4d99-ae3b-34c98816e12c", + "https://store-images.s-microsoft.com/image/apps.11782.14364758607471359.6218d836-661b-4c35-bf90-504a0c7f3e9d.d52009f8-d84d-4d68-92cc-d55bba2db6e9", + "https://store-images.s-microsoft.com/image/apps.25596.14364758607471359.6218d836-661b-4c35-bf90-504a0c7f3e9d.c312ad3d-6957-4d8e-85b1-7a7d5e568f86" + ] + }, + "releaseDate": "2019-09-18", + "storePage": "https://www.xbox.com/en-us/games/store/trailmakers/9NSFGM8J6MBJ" + }, + { + "productTitle": "TUNIC", + "productId": "9NLRT31Z4RWM", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.39322.13702044937897358.8701ab78-da18-4c36-8c1e-3d4e6dfd60c9.a0be6178-25eb-43e3-9a52-170445da58fc" + ] + }, + "releaseDate": "2022-03-16", + "storePage": "https://www.xbox.com/en-us/games/store/tunic/9NLRT31Z4RWM" + }, + { + "productTitle": "Turbo Golf Racing", + "productId": "9N6781PMXC02", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.13479.14023533452078841.712f8f21-7efa-4130-9c82-a55506b403bb.5ce8027d-6c76-440e-b319-adaa3c696062" + ] + }, + "releaseDate": "2024-04-04", + "storePage": "https://www.xbox.com/en-us/games/store/turbo-golf-racing/9N6781PMXC02" + }, + { + "productTitle": "Turnip Boy Robs a Bank", + "productId": "9NDT1MS39FXZ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.61861.13607962435826086.cd471fe6-3dd8-4df9-a01c-9b94312c7c3b.a2e6940c-8bb9-4485-a593-392e842e9469" + ] + }, + "releaseDate": "2024-01-18", + "storePage": "https://www.xbox.com/en-us/games/store/turnip-boy-robs-a-bank/9NDT1MS39FXZ" + }, + { + "productTitle": "Unpacking", + "productId": "9NH5HN11FG4M", + "images": {}, + "releaseDate": "2021-11-02", + "storePage": "https://www.xbox.com/en-us/games/store/unpacking/9NH5HN11FG4M" + }, + { + "productTitle": "Valheim (Game Preview)", + "productId": "9NCBL78CG9N7", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.45431.13571084888216164.36662f68-6598-4726-a32e-049a0335e9dc.423ac20f-fb8c-4977-a41e-8f541a29692a" + ] + }, + "releaseDate": "2022-09-16", + "storePage": "https://www.xbox.com/en-us/games/store/valheim-game-preview/9NCBL78CG9N7" + }, + { + "productTitle": "Vampire Survivors", + "productId": "9PD5BM2Z8C4L", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.57401.14160661575041057.2c4811ab-1f9a-403e-9d3b-601b0ce1905e.1b317d02-7e77-4468-a6e9-29a5ab534b03" + ] + }, + "releaseDate": "2022-10-20", + "storePage": "https://www.xbox.com/en-us/games/store/vampire-survivors/9PD5BM2Z8C4L" + }, + { + "productTitle": "Warhammer 40,000: Boltgun - Windows", + "productId": "9N41VHRQ5X8N", + "images": {}, + "releaseDate": "2024-03-05", + "storePage": "https://www.xbox.com/en-us/games/store/warhammer-40-000-boltgun-windows/9N41VHRQ5X8N" + }, + { + "productTitle": "Warhammer 40,000: Darktide", + "productId": "9NT3WC6RKBVQ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.48074.14421726920549205.4ed1a8ed-1549-4013-8769-b57c45ca99b5.daa0830c-a776-4941-80a0-dae56f440920" + ] + }, + "releaseDate": "2023-10-04", + "storePage": "https://www.xbox.com/en-us/games/store/warhammer-40-000-darktide/9NT3WC6RKBVQ" + }, + { + "productTitle": "Wartales", + "productId": "9NWQ686JB33G", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.41667.14440655325358467.1eec354a-75c3-4191-9e5f-a63d24496e1a.49692cc8-5cdb-4588-825f-d6ca9096e5a0", + "https://store-images.s-microsoft.com/image/apps.62118.14440655325358467.1eec354a-75c3-4191-9e5f-a63d24496e1a.50d2d518-455a-4b1e-ab42-2c96abc96f13", + "https://store-images.s-microsoft.com/image/apps.61095.14440655325358467.1eec354a-75c3-4191-9e5f-a63d24496e1a.46b5dc82-a216-42db-b5f0-46f1978fef4f" + ] + }, + "releaseDate": "2023-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/wartales/9NWQ686JB33G" + }, + { + "productTitle": "Wasteland 2: Director's Cut", + "productId": "C521HDXRTS7F", + "images": {}, + "releaseDate": "2015-10-13", + "storePage": "https://www.xbox.com/en-us/games/store/wasteland-2-director-s-cut/C521HDXRTS7F" + }, + { + "productTitle": "Wasteland 3 (PC)", + "productId": "9NLT5XR52ZS7", + "images": {}, + "releaseDate": "2020-08-28", + "storePage": "https://www.xbox.com/en-us/games/store/wasteland-3-pc/9NLT5XR52ZS7" + }, + { + "productTitle": "Wasteland Remastered", + "productId": "9NGH1FK0RJGL", + "images": {}, + "releaseDate": "2020-02-25", + "storePage": "https://www.xbox.com/en-us/games/store/wasteland-remastered/9NGH1FK0RJGL" + }, + { + "productTitle": "We Happy Few", + "productId": "9NBLGGH5342P", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.43826.13510798887680222.3c51bb2a-c94b-499f-8ece-ee87047564ad.2b815bbb-ab5e-4c29-83df-e4f35f6ee645" + ] + }, + "releaseDate": "2018-08-10", + "storePage": "https://www.xbox.com/en-us/games/store/we-happy-few/9NBLGGH5342P" + }, + { + "productTitle": "While the Iron's Hot", + "productId": "9P2F4C1XFZJ4", + "images": {}, + "releaseDate": "2023-11-09", + "storePage": "https://www.xbox.com/en-us/games/store/while-the-iron-s-hot/9P2F4C1XFZJ4" + }, + { + "productTitle": "Wo Long: Fallen Dynasty", + "productId": "9N9X9PC8V9CP", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.46001.13524128328401524.c8089ad9-5e75-4246-83e8-2dac88f04afd.9a8d6174-1791-45bf-b366-9360daf09b20" + ] + }, + "releaseDate": "2023-03-03", + "storePage": "https://www.xbox.com/en-us/games/store/wo-long-fallen-dynasty/9N9X9PC8V9CP" + }, + { + "productTitle": "Wolfenstein 3D", + "productId": "9P7Z1D3N8KR7", + "images": {}, + "releaseDate": "2022-08-18", + "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-3d/9P7Z1D3N8KR7" + }, + { + "productTitle": "Wolfenstein II: Standard Edition", + "productId": "9NDBKK9G0FHL", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.58313.13547327457112687.7b875df9-17c8-48e1-985b-69b5b77ac928.6f02e5e5-e6ab-4794-b72a-189d236470bf" + ] + }, + "releaseDate": "2019-06-09", + "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-ii-standard-edition/9NDBKK9G0FHL" + }, + { + "productTitle": "Wolfenstein: The New Order (PC)", + "productId": "9P75CBJ9WT9W", + "images": {}, + "releaseDate": "2021-03-12", + "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-the-new-order-pc/9P75CBJ9WT9W" + }, + { + "productTitle": "Wolfenstein: The Old Blood (PC)", + "productId": "9PBB4QHMSDKR", + "images": {}, + "releaseDate": "2021-03-12", + "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-the-old-blood-pc/9PBB4QHMSDKR" + }, + { + "productTitle": "Wolfenstein: Youngblood (PC)", + "productId": "9PHFTS44F99K", + "images": {}, + "releaseDate": "2020-02-06", + "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-youngblood-pc/9PHFTS44F99K" + }, + { + "productTitle": "World War Z: Aftermath", + "productId": "9PBF1FL7K192", + "images": {}, + "releaseDate": "2021-09-21", + "storePage": "https://www.xbox.com/en-us/games/store/world-war-z-aftermath/9PBF1FL7K192" + }, + { + "productTitle": "Wreckfest", + "productId": "9NG06CSMM97P", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.11207.13589258961846020.5e95ec4c-44cb-4b39-8217-927890b74c94.85c0251e-bca8-4e59-a1bc-b858f5deafef" + ] + }, + "releaseDate": "2021-02-18", + "storePage": "https://www.xbox.com/en-us/games/store/wreckfest/9NG06CSMM97P" + }, + { + "productTitle": "Yakuza 0 for Windows 10", + "productId": "9PD0BJRBLRJM", + "images": {}, + "releaseDate": "2020-02-26", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-0-for-windows-10/9PD0BJRBLRJM" + }, + { + "productTitle": "Yakuza 3 Remastered for Windows 10", + "productId": "9NC4QMRHCNZK", + "images": {}, + "releaseDate": "2021-01-28", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-3-remastered-for-windows-10/9NC4QMRHCNZK" + }, + { + "productTitle": "Yakuza 4 Remastered for Windows 10", + "productId": "9NWZTB9JQG9S", + "images": {}, + "releaseDate": "2021-01-28", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-4-remastered-for-windows-10/9NWZTB9JQG9S" + }, + { + "productTitle": "Yakuza 5 Remastered for Windows 10", + "productId": "9MVX1V7W5SW8", + "images": {}, + "releaseDate": "2021-01-28", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-5-remastered-for-windows-10/9MVX1V7W5SW8" + }, + { + "productTitle": "Yakuza 6: The Song of Life for Windows 10", + "productId": "9N9WWM5JXCBZ", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.23934.13524393444409042.28107174-a805-4723-b41e-351c639200dc.cacfecef-3017-4a32-bede-4c095b1b65b2" + ] + }, + "releaseDate": "2021-03-25", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-6-the-song-of-life-for-windows-10/9N9WWM5JXCBZ" + }, + { + "productTitle": "Yakuza Kiwami 2 for Windows 10", + "productId": "9MZNFNN3XJ3F", + "images": {}, + "releaseDate": "2020-07-29", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-kiwami-2-for-windows-10/9MZNFNN3XJ3F" + }, + { + "productTitle": "Yakuza Kiwami for Windows 10", + "productId": "9P40SC5DQ9K0", + "images": {}, + "releaseDate": "2020-04-22", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-kiwami-for-windows-10/9P40SC5DQ9K0" + }, + { + "productTitle": "Yakuza: Like a Dragon", + "productId": "9NXCSWCQTNFG", + "images": {}, + "releaseDate": "2020-11-10", + "storePage": "https://www.xbox.com/en-us/games/store/yakuza-like-a-dragon/9NXCSWCQTNFG" + }, + { + "productTitle": "You Suck at Parking® Complete Edition", + "productId": "9NCF3MRQ8480", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.30782.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.28590e12-c674-4ee9-b2cc-27f882ceb1da", + "https://store-images.s-microsoft.com/image/apps.29397.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.febc89ee-56c2-40f2-b2dd-fe5189f20a40", + "https://store-images.s-microsoft.com/image/apps.26279.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.302a189f-f969-4c38-9218-83a3815fc490" + ] + }, + "releaseDate": "2022-09-14", + "storePage": "https://www.xbox.com/en-us/games/store/you-suck-at-parking-complete-edition/9NCF3MRQ8480" + }, + { + "productTitle": "Zombie Army 4: Dead War", + "productId": "9PLSCHRN5715", + "images": {}, + "releaseDate": "2020-02-04", + "storePage": "https://www.xbox.com/en-us/games/store/zombie-army-4-dead-war/9PLSCHRN5715" + }, + { + "productTitle": "Zoo Tycoon: Ultimate Animal Collection", + "productId": "9PJ06TZX4NMH", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.8354.14226270511206590.6a01761e-3000-4be3-a1eb-b82f4a4e5d9e.716d4869-5b12-4a47-8a21-91cc917c2c77" + ] + }, + "releaseDate": "2017-10-31", + "storePage": "https://www.xbox.com/en-us/games/store/zoo-tycoon-ultimate-animal-collection/9PJ06TZX4NMH" + } +] From 5d916d7a039dfe70918b55af2a8023d6281c3ea7 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 22 Aug 2024 20:08:16 +0200 Subject: [PATCH 205/255] find gamepass games from test data --- .vscode/settings.json | 1 + .../src/providers/xbox_provider.rs | 58 ++++++++++++++++++- .../owned-games/owned-games-columns.tsx | 2 +- 3 files changed, 58 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4cc30a30..ed130655 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,6 +13,7 @@ "epicgames", "flashbang", "gamemaker", + "Gamepass", "globbed", "globwalk", "hasher", diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index bb1ea4c0..caf597e3 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -1,8 +1,10 @@ #![cfg(target_os = "windows")] -use std::path::PathBuf; +use std::path::{Path, PathBuf}; use log::error; +use rai_pal_proc_macros::serializable_struct; +use serde::{Deserialize, Serialize}; use winreg::{ enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}, RegKey, @@ -30,11 +32,37 @@ impl ProviderStatic for Xbox { } } +#[serializable_struct] +struct XboxGamepassGame { + product_title: String, + product_id: String, + images: Option, + release_date: String, + store_page: String, +} + +impl XboxGamepassGame { + fn get_release_date(&self) -> Option { + Some( + self.release_date + .parse::>() + .ok()? + .timestamp(), + ) + } +} + +#[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, Debug)] +#[serde(rename_all = "PascalCase")] +struct XboxGamepassImages { + logo: Option>, +} + impl ProviderActions for Xbox { async fn get_games( &self, mut installed_callback: TInstalledCallback, - mut _owned_callback: TOwnedCallback, + mut owned_callback: TOwnedCallback, ) -> Result where TInstalledCallback: FnMut(InstalledGame) + Send + Sync, @@ -103,6 +131,32 @@ impl ProviderActions for Xbox { } } + let json_path = + Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/xbox-gamepass-games.json"); + + //load json + let games: Vec = + serde_json::from_str(&std::fs::read_to_string(json_path)?)?; + + // call owned game callback for each game + for game in games { + let mut owned_game = OwnedGame::new(&game.product_id, *Self::ID, &game.product_title); + + if let Some(release_date) = game.get_release_date() { + owned_game.set_release_date(release_date); + } + + if let Some(image_url) = game + .images + .and_then(|images| images.logo) + .and_then(|logos| logos.first().cloned()) + { + owned_game.set_thumbnail_url(&image_url); + } + + owned_callback(owned_game); + } + Ok(()) } } diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index 27e04d13..3dc84171 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -50,7 +50,7 @@ const provider: TableColumnBase = { getSortValue: (game) => game.provider, getFilterValue: (game) => game.provider, filterOptions: providerFilterOptions, - unavailableValues: ["Manual", "Xbox"], + unavailableValues: ["Manual"], renderCell: (game) => ( From e0b3b6d4a814ff1019516b0f967c22a2d8397984 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 22 Aug 2024 20:21:20 +0200 Subject: [PATCH 206/255] add box art too --- .../src/providers/xbox_provider.rs | 17 +- test-data/xbox-gamepass-games.json | 1688 +++++++++++++++-- 2 files changed, 1505 insertions(+), 200 deletions(-) diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index caf597e3..6f22fc09 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -18,6 +18,8 @@ use crate::{ result::Result, }; +use super::provider_command::{ProviderCommand, ProviderCommandAction}; + #[derive(Clone)] pub struct Xbox {} @@ -56,6 +58,7 @@ impl XboxGamepassGame { #[serde(rename_all = "PascalCase")] struct XboxGamepassImages { logo: Option>, + box_art: Option>, } impl ProviderActions for Xbox { @@ -134,22 +137,28 @@ impl ProviderActions for Xbox { let json_path = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/xbox-gamepass-games.json"); - //load json let games: Vec = serde_json::from_str(&std::fs::read_to_string(json_path)?)?; - // call owned game callback for each game for game in games { let mut owned_game = OwnedGame::new(&game.product_id, *Self::ID, &game.product_title); + owned_game.add_provider_command( + ProviderCommandAction::OpenInBrowser, + ProviderCommand::String(format!( + "https://www.microsoft.com/store/productId/{}", + game.product_id, + )), + ); + if let Some(release_date) = game.get_release_date() { owned_game.set_release_date(release_date); } if let Some(image_url) = game .images - .and_then(|images| images.logo) - .and_then(|logos| logos.first().cloned()) + .and_then(|images| images.logo.or(images.box_art)) + .and_then(|image_urls| image_urls.first().cloned()) { owned_game.set_thumbnail_url(&image_url); } diff --git a/test-data/xbox-gamepass-games.json b/test-data/xbox-gamepass-games.json index ef765d94..f430c64b 100644 --- a/test-data/xbox-gamepass-games.json +++ b/test-data/xbox-gamepass-games.json @@ -5,6 +5,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.51954.13709503452579203.2424d951-5f62-4cd0-816f-1d45c87c1dc3.2de5e46c-0bcf-4646-add2-15db414fd1fd" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3242.13709503452579203.be476149-e3b1-482b-8d59-cec951aebeac.871aaa92-b00b-4133-96f6-f3305eaf7af9" ] }, "releaseDate": "2024-02-15", @@ -13,7 +16,11 @@ { "productTitle": "A Plague Tale: Requiem - Windows", "productId": "9N97RC576957", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60562.13537574391772742.e387dd56-e35c-40fb-bc0c-c0c1decef3a1.1de59474-dc66-4ad3-8050-ee622224a589" + ] + }, "releaseDate": "2022-10-18", "storePage": "https://www.xbox.com/en-us/games/store/a-plague-tale-requiem-windows/9N97RC576957" }, @@ -23,6 +30,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.62188.14385363172001343.ef67463b-a065-4ebb-ae31-992199a7c91f.dc35cf6e-81ef-420e-ac79-4203eab68205" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.42434.14385363172001343.ef67463b-a065-4ebb-ae31-992199a7c91f.10e29e9e-39f2-40fe-853d-4cba1737f00d" ] }, "releaseDate": "2023-12-08", @@ -31,7 +41,11 @@ { "productTitle": "Age of Empires Definitive Edition", "productId": "9NJWTJSVGVLJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61945.13672427983916579.274b1ffd-9cde-4bef-9a3e-6f37073d5ed0.edb3f732-9767-4571-8947-4bf839a08f2e" + ] + }, "releaseDate": "2019-08-19", "storePage": "https://www.xbox.com/en-us/games/store/age-of-empires-definitive-edition/9NJWTJSVGVLJ" }, @@ -39,6 +53,9 @@ "productTitle": "Age of Empires II: Definitive Edition", "productId": "9N42SSSX2MTG", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64988.13991012152837663.1297136a-f273-41f1-947f-59044c848c55.fdc562b7-3eca-4753-b608-fd91ef8a6f39" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.35554.13991012152837663.1297136a-f273-41f1-947f-59044c848c55.01305b76-9358-458a-9db9-f6aea8339462" ] @@ -52,6 +69,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.25620.13905755391310011.6681c157-530b-4476-b20e-6cf142a9a94e.1437bcbf-1390-4dd3-a14a-ebe105129422" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20857.13905755391310011.6681c157-530b-4476-b20e-6cf142a9a94e.7a973f79-cd9c-4851-85e3-66e88fd18dd6" ] }, "releaseDate": "2020-10-15", @@ -65,6 +85,9 @@ "https://store-images.s-microsoft.com/image/apps.39795.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.3005be1d-9924-42a5-8cd9-a774a33a3387", "https://store-images.s-microsoft.com/image/apps.44152.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.e1de87d3-0066-4302-8a56-ae186825da13", "https://store-images.s-microsoft.com/image/apps.53387.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.750bc72a-72f4-48ea-8e8d-3866ddaf3683" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20558.14235977975261210.592375c9-78a4-4653-8c7f-a8e510e6c26a.f4f5408e-cd13-44d7-80c1-830ab0019d3a" ] }, "releaseDate": "2021-10-28", @@ -73,7 +96,11 @@ { "productTitle": "Amnesia: The Bunker", "productId": "9PC15H56NGJK", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11008.14112953128044526.ba95d4f9-17d4-4076-a135-073ccafc4d57.452d50b1-628a-4cb6-b06b-2da42440dad6" + ] + }, "releaseDate": "2023-06-06", "storePage": "https://www.xbox.com/en-us/games/store/amnesia-the-bunker/9PC15H56NGJK" }, @@ -81,6 +108,9 @@ "productTitle": "Among Us", "productId": "9NG07QJNK38J", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21162.13589262686196899.16e3418a-cbf2-4748-9724-1c9dc9b7a0b9.14afafe9-1b03-4df0-95ad-12e2712a3b53" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.16094.13589262686196899.16e3418a-cbf2-4748-9724-1c9dc9b7a0b9.476dcb12-abc8-433a-ac3c-858a44939d8f" ] @@ -91,7 +121,11 @@ { "productTitle": "An Elder Scrolls Legend: Battlespire", "productId": "9MVSRJWZBG9G", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22619.13857302790153363.c220e79b-1a05-411e-880c-e0187d84cb85.09361148-3648-4d68-8c97-8ddb30d9ec65" + ] + }, "releaseDate": "2022-08-18", "storePage": "https://www.xbox.com/en-us/games/store/an-elder-scrolls-legend-battlespire/9MVSRJWZBG9G" }, @@ -99,6 +133,9 @@ "productTitle": "Another Crab's Treasure", "productId": "9P97ZTRTH25W", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.32404.14077481160620630.1db41d01-0b54-4154-a1e1-f00cf31fab40.8c7bfed3-d183-4a98-ac33-8d9bdf0fa83f" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.52985.14077481160620630.1db41d01-0b54-4154-a1e1-f00cf31fab40.f4df0b06-9e1b-4eb6-9857-62fdd46ad8db" ] @@ -112,6 +149,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.8003.14490665772853953.a70de13a-b9d0-41e7-bac1-9ce697912658.a45024e9-dd52-4cde-bab7-9781c38075f6" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.24784.14490665772853953.a70de13a-b9d0-41e7-bac1-9ce697912658.cd557027-a57d-4cbe-957c-f421f7308950" ] }, "releaseDate": "2022-04-21", @@ -120,7 +160,11 @@ { "productTitle": "Arcade Paradise", "productId": "9N2FQCGWH32D", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.19827.13957312526507243.94fe35e3-4bb7-4224-8eee-d723937ca03f.d6008586-869c-4d5e-bc81-9ead0e87c4d1" + ] + }, "releaseDate": "2022-08-11", "storePage": "https://www.xbox.com/en-us/games/store/arcade-paradise/9N2FQCGWH32D" }, @@ -130,6 +174,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.3955.14545480955348978.971a18b6-ebe3-437f-af65-4ba072de8964.7c7c9bba-d6fe-42e3-83fc-bb2f6aeff2cd" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.28808.14545480955348978.c66022f5-e4e3-4713-8508-d8bd11df0814.6790feb5-a50e-42a7-83b4-076a5c1b170e" ] }, "releaseDate": "2023-11-21", @@ -141,6 +188,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.56109.14624535533178035.0b67d5f1-b944-4b48-abe7-9bb2f8f41684.fc9cdb42-f0e3-47fa-8d1c-23a4a8ca931c" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.14842.14624535533178035.dd996182-c788-4a1e-894e-493c31d70096.ec4feced-77b1-4210-86e9-8fca51aa6826" ] }, "releaseDate": "2021-05-27", @@ -149,14 +199,22 @@ { "productTitle": "Arx Fatalis", "productId": "9NXQKPGMHH9G", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57110.14495213989606263.a0bd1390-9948-45f8-a75b-39231ab81047.b6cfd660-b3bd-4fb5-bcd0-672d62c4eb8f" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/arx-fatalis/9NXQKPGMHH9G" }, { "productTitle": "As Dusk Falls", "productId": "9NR7XDNVP5SW", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46746.14387733153613072.28665954-14dc-4229-8e3c-0257e25089cb.46b89faa-6b2f-433b-aefc-16e5063ea2af" + ] + }, "releaseDate": "2022-07-19", "storePage": "https://www.xbox.com/en-us/games/store/as-dusk-falls/9NR7XDNVP5SW" }, @@ -166,6 +224,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.20495.14161170943848382.2f684838-f6f6-46ef-b508-9c52ff9b96b8.f0aea258-d005-4272-9d4c-62884ee2a084" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39483.14161170943848382.2f684838-f6f6-46ef-b508-9c52ff9b96b8.966e86ea-7aca-42f0-ba8e-473a2ca075ee" ] }, "releaseDate": "2022-09-13", @@ -178,6 +239,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.20760.13510798887933723.c3a2d497-e717-463e-a426-2c119e62b161.23ddcdac-1498-48db-b0d9-489ed87a5e33", "https://store-images.s-microsoft.com/image/apps.7065.13510798887933723.57e43f19-4066-429e-b1a2-caea56e427b4.062ba478-f5b0-4cf3-92ba-73edf71889e7" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64849.13510798887933723.57e43f19-4066-429e-b1a2-caea56e427b4.860c35a4-ccbf-413e-9574-1c7c8826d6c6" ] }, "releaseDate": "2019-02-06", @@ -186,14 +250,22 @@ { "productTitle": "Atlas Fallen: Reign of Sand (Windows)", "productId": "9NCGTG3KR2W9", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40302.13563971826346196.3d957cff-bc47-48aa-b98f-be2691a13f70.1ac68b3c-a12c-4ab2-822c-8e4a5cfd6f16" + ] + }, "releaseDate": "2024-08-22", "storePage": "https://www.xbox.com/en-us/games/store/atlas-fallen-reign-of-sand-windows/9NCGTG3KR2W9" }, { "productTitle": "Atomic Heart (Windows)", "productId": "9N9KXP8RRPB5", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.24332.13535329055099418.082ed7bb-5194-4ea8-9fa9-c54f61a9ec1d.9d860267-4459-424b-912a-2b6b4b08e807" + ] + }, "releaseDate": "2023-02-21", "storePage": "https://www.xbox.com/en-us/games/store/atomic-heart-windows/9N9KXP8RRPB5" }, @@ -203,6 +275,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.31850.13762247899293053.a620912f-d2e0-44a1-9cd1-d02f95ffa814.a0f221c6-a620-4cf9-85f5-c6aa88bb56e7" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.24530.13762247899293053.a620912f-d2e0-44a1-9cd1-d02f95ffa814.89d9e9b4-4781-40c1-9885-93543e1401d8" ] }, "releaseDate": "2020-06-11", @@ -214,6 +289,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.42322.14065499269907016.249670e2-cad9-48bb-aa0f-309d712ede80.974ad9ad-99b2-4d84-abfc-91a9ed643f06" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.14695.14065499269907016.670ddf59-3954-4cfa-927c-60562b664545.56c9f977-b0a8-4b8e-8644-609b768fbc51" ] }, "releaseDate": "2020-08-20", @@ -222,7 +300,11 @@ { "productTitle": "Ben 10: Power Trip", "productId": "9NJWFF2KHL6H", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30849.13672727399820228.e1322d27-4961-46da-9c7b-c310d3e28cb1.90cdc8cc-0bdd-4b06-ba46-71549ba3bf46" + ] + }, "releaseDate": "2020-10-09", "storePage": "https://www.xbox.com/en-us/games/store/ben-10-power-trip/9NJWFF2KHL6H" }, @@ -230,6 +312,9 @@ "productTitle": "BlazBlue: Cross Tag Battle Special Edition", "productId": "9NFWDRBZXDL9", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47399.13586724043256738.3809e00e-03ca-4046-bce4-167a34f4611d.681d75dc-e4a0-4262-ac44-05c2c458a394" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.53583.13586724043256738.3809e00e-03ca-4046-bce4-167a34f4611d.21a2671a-7184-42c5-a2ea-d84d03bcdeba" ] @@ -243,6 +328,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.10811.14431087147384961.13dc1a18-3532-477b-b2d2-772256efc040.87d93a78-9f25-423f-86e7-694f51d12e03" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5290.14431087147384961.13dc1a18-3532-477b-b2d2-772256efc040.6fab8e78-8a3d-4b85-a5b1-33f32aeb8ea3" ] }, "releaseDate": "2020-03-24", @@ -251,14 +339,22 @@ { "productTitle": "Bloodstained: Ritual of the Night", "productId": "9MWB2BFF0SPD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27614.13842595231656181.79361d33-7a18-4554-8a50-66b60d3712e6.5935dc34-dc7d-4375-95c1-c77037813383" + ] + }, "releaseDate": "2019-09-19", "storePage": "https://www.xbox.com/en-us/games/store/bloodstained-ritual-of-the-night/9MWB2BFF0SPD" }, { "productTitle": "Bluey: The Videogame", "productId": "9N2J0FGV30DX", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46896.13951667472045163.3fb7085f-1bf8-4c11-9c65-272ecae540f9.6b9e6f68-3468-4e6b-af6e-bb138f574374" + ] + }, "releaseDate": "2023-11-17", "storePage": "https://www.xbox.com/en-us/games/store/bluey-the-videogame/9N2J0FGV30DX" }, @@ -266,6 +362,9 @@ "productTitle": "Botany Manor", "productId": "9PLP9LSKB6WV", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.7606.14313562065097595.e2df373c-7c5d-4185-9834-210dcde167fd.fa326db7-f61e-4cd5-9634-ffc7b92db771" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.41526.14313562065097595.e2df373c-7c5d-4185-9834-210dcde167fd.3f955fb9-a5c4-40a6-ad3b-a1d845f4bcfc" ] @@ -281,6 +380,9 @@ "https://store-images.s-microsoft.com/image/apps.42766.14468359839778606.8334cc11-289e-49d6-9e23-c95c3d31090a.31aca589-8a6c-4646-a224-0cd0caea8f7a", "https://store-images.s-microsoft.com/image/apps.8680.14468359839778606.8334cc11-289e-49d6-9e23-c95c3d31090a.126b026f-761e-4820-9e28-ec1e3141cb21", "https://store-images.s-microsoft.com/image/apps.6736.14468359839778606.b9e6f982-23f2-4c58-a436-66ba564129a1.3a7f9a20-6844-44bf-bbb9-72ef8eb4d298" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61871.14468359839778606.b9e6f982-23f2-4c58-a436-66ba564129a1.a2290043-5ee9-4e2d-896b-cd3b7c79c2ce" ] }, "releaseDate": "2019-06-09", @@ -292,6 +394,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.17222.13865165192974158.ad4349c4-8b53-4bb2-98c5-d7851e817572.a6468260-1f4a-4512-8c86-16e338727b8e" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11626.13865165192974158.d8663e1a-4fc7-48f9-8dc8-1aac98e6c023.a328448b-9ca7-4f54-932d-e6524a93fd94" ] }, "releaseDate": "2017-06-23", @@ -300,28 +405,44 @@ { "productTitle": "Brotato", "productId": "9P9VNSQK1W3K", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34767.14130976257579640.bd7a2231-2a21-4516-807a-46a50286744a.614cc94b-88ac-4943-bbbd-b73979590c69" + ] + }, "releaseDate": "2024-01-30", "storePage": "https://www.xbox.com/en-us/games/store/brotato/9P9VNSQK1W3K" }, { "productTitle": "Brothers: a Tale of Two Sons", "productId": "9PJ42FRWTGH1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21773.14219310217385892.49f83f17-40c4-462f-ad58-3e7283b37f7a.2e634bed-9d4b-4ddb-9e99-bf1a09fc3703" + ] + }, "releaseDate": "2019-06-09", "storePage": "https://www.xbox.com/en-us/games/store/brothers-a-tale-of-two-sons/9PJ42FRWTGH1" }, { "productTitle": "Call of Duty®: Modern Warfare® III - Standard Edition", "productId": "9P697QF6GSVV", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33315.14623575291286193.52ecceb7-ac9f-47e8-a29f-30ab63f33131.7bc98157-0f0d-4804-b524-5ea660d3c50b" + ] + }, "releaseDate": "2024-07-24", "storePage": "https://www.xbox.com/en-us/games/store/call-of-duty-modern-warfare-iii-standard-edition/9P697QF6GSVV" }, { "productTitle": "Call of the Wild: The Angler™", "productId": "9NDC5LJS839S", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40298.13546622578028181.ca6f2004-2229-49ec-83ec-b4fad4124702.4d161737-5ec7-42cb-bd11-7b026650fc46" + ] + }, "releaseDate": "2023-08-30", "storePage": "https://www.xbox.com/en-us/games/store/call-of-the-wild-the-angler/9NDC5LJS839S" }, @@ -329,6 +450,9 @@ "productTitle": "Car Mechanic Simulator 2021", "productId": "9NH019ZFFHTV", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.38130.13635623008017579.c3c49040-6ffd-4834-b97d-bf656fa40ffa.6544fd7d-ac5e-4a61-98cf-f05e9ff3c106" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.11628.13635623008017579.c3c49040-6ffd-4834-b97d-bf656fa40ffa.2a60277d-e755-4a3d-b9bc-f729f040a7f8" ] @@ -340,6 +464,9 @@ "productTitle": "Cassette Beasts", "productId": "9N82SNQTZVMQ", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62701.14053398568595271.6df710ab-5b0b-4a3d-8691-4e7b0afae807.822f5b1c-c1d8-4c97-8e96-2798c10f3fa8" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.29648.14053398568595271.6df710ab-5b0b-4a3d-8691-4e7b0afae807.9acf59c5-6252-43d1-a1b9-b62fadc00697" ] @@ -353,6 +480,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.36676.71633162879241707.c31376fa-ee25-41f1-a3fa-174e27920c1e.aa1251ba-296e-470d-b0c0-9edc2a54738f" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.7117.71633162879241707.7cf18b3b-9fa5-486f-9a68-067f06d50bf1.3bb742ae-b2ed-4066-bf27-ea50d614ce8c" ] }, "releaseDate": "2018-01-26", @@ -361,7 +491,11 @@ { "productTitle": "Chants of Sennaar (Windows)", "productId": "9N6FWNVHQNGD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.43602.14019132985152487.acce0d33-e53b-464e-94c1-c4bba3e2edbd.9599f7b5-9eda-4bff-897a-1628af364bc9" + ] + }, "releaseDate": "2024-05-15", "storePage": "https://www.xbox.com/en-us/games/store/chants-of-sennaar-windows/9N6FWNVHQNGD" }, @@ -371,6 +505,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.51634.14071745200459129.f6415fab-b460-4210-a974-f5c4ed9bcf0e.b23277b9-2d4b-491c-901c-0bd035a566d2" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51715.14071745200459129.f6415fab-b460-4210-a974-f5c4ed9bcf0e.1e14dfd5-c275-43ec-8fe1-033a88f883e0" ] }, "releaseDate": "2021-06-08", @@ -384,6 +521,9 @@ "https://store-images.s-microsoft.com/image/apps.40907.14442149246756025.a14b1d5d-9c03-4960-96fe-1939536380ec.27e81689-ac74-4ba1-87bd-5c6885038b41", "https://store-images.s-microsoft.com/image/apps.34644.14442149246756025.c1fe1fbf-dc9a-408c-9e9b-8f66f48cc8fd.0d109c7e-7940-4e12-822b-149a47d8a9f2", "https://store-images.s-microsoft.com/image/apps.53780.14442149246756025.c8cd7bd6-7ead-4b47-9601-caf6e439fe94.ae31ce96-9ecb-4238-acbb-fc49be4f5770" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.26616.14442149246756025.95cc7c09-6f27-48f0-b539-fbd6dedebd08.f505a3b8-2416-4124-a5b1-481281d4e2af" ] }, "releaseDate": "2017-05-19", @@ -392,7 +532,11 @@ { "productTitle": "Cities: Skylines II - PC Edition", "productId": "9PGZ346PSLN0", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40541.14241982748923031.b7ab82d8-956b-4d85-b739-c1cd07cb25df.8996f92a-d276-4066-82cc-bee08083b900" + ] + }, "releaseDate": "2023-10-24", "storePage": "https://www.xbox.com/en-us/games/store/cities-skylines-ii-pc-edition/9PGZ346PSLN0" }, @@ -400,6 +544,9 @@ "productTitle": "Citizen Sleeper", "productId": "9N6F97F9WGL0", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40632.14019812399166283.dc5d064e-3693-46fa-896f-9287938c5df4.84bc91b9-20c2-4405-aebc-450d031b55c6" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.10588.14019812399166283.dc5d064e-3693-46fa-896f-9287938c5df4.9066278e-60b2-4859-bcf7-64b239159dd8" ] @@ -410,21 +557,33 @@ { "productTitle": "Clone Drone in the Danger Zone", "productId": "9NKHKBQJSSC3", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.10871.13656707570024266.6eb12281-8416-458c-8123-d1d704e3a0c1.673f1bce-d5ef-4702-ab43-747ff9ed44c2" + ] + }, "releaseDate": "2023-11-08", "storePage": "https://www.xbox.com/en-us/games/store/clone-drone-in-the-danger-zone/9NKHKBQJSSC3" }, { "productTitle": "Close to the Sun.", "productId": "9P4CBGC2HJG1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22388.14595907930500938.5be7a9d2-50a5-4db6-a29a-6f0807bbdfc1.99736f39-0af3-4f60-b054-101ac600ce9c" + ] + }, "releaseDate": "2024-01-03", "storePage": "https://www.xbox.com/en-us/games/store/close-to-the-sun/9P4CBGC2HJG1" }, { "productTitle": "Cocoon", "productId": "9N3FPS4LDHCR", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30735.13933554322251706.0a9bd242-c253-4ad3-882f-a5699d708be5.259c1ea8-80a0-455a-98eb-ba1219b63577" + ] + }, "releaseDate": "2023-09-29", "storePage": "https://www.xbox.com/en-us/games/store/cocoon/9N3FPS4LDHCR" }, @@ -432,6 +591,9 @@ "productTitle": "Common'hood", "productId": "9N234330NRND", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.14082.13960116824316263.0d45a6c2-7697-4178-9bb2-fc474428c6bf.634caee4-166d-4d0e-a215-cfccc3ee66c5" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.21244.13960116824316263.0d45a6c2-7697-4178-9bb2-fc474428c6bf.8d45b30e-18d4-4d11-b27a-b8b982d445e2" ] @@ -442,42 +604,66 @@ { "productTitle": "Conan Exiles", "productId": "C2X6ZCNKN2WR", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3114.66261947870001438.2cfbc23b-426c-43d9-9ab1-9f2dcbb1afb6.188d91aa-c142-4455-ae41-89c6ad9493c4" + ] + }, "releaseDate": "2018-05-08", "storePage": "https://www.xbox.com/en-us/games/store/conan-exiles/C2X6ZCNKN2WR" }, { "productTitle": "Control Ultimate Edition", "productId": "9P7LVXNVQ6K7", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34632.14105328782956010.49f773af-c1ba-43ab-a4d2-d9b330f79b47.e75a7d01-760e-4ed4-a908-eb0b44ecb3c5" + ] + }, "releaseDate": "2024-03-13", "storePage": "https://www.xbox.com/en-us/games/store/control-ultimate-edition/9P7LVXNVQ6K7" }, { "productTitle": "Cooking Simulator Windows", "productId": "9PLGBZWN65RG", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12734.14318332024941603.bcd56dc7-63bc-4d56-bf05-e25c65cd0318.ecaeef8d-f8fb-497f-a0bb-a3c93face31c" + ] + }, "releaseDate": "2022-08-11", "storePage": "https://www.xbox.com/en-us/games/store/cooking-simulator-windows/9PLGBZWN65RG" }, { "productTitle": "Coral Island", "productId": "9N1T1MQ92PVS", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29498.13965383722089887.db70e3c6-249c-431b-af22-61e3c106e18e.0276da19-7004-406e-a88b-4ea9b80cdc84" + ] + }, "releaseDate": "2022-10-11", "storePage": "https://www.xbox.com/en-us/games/store/coral-island/9N1T1MQ92PVS" }, { "productTitle": "Crackdown 3", "productId": "9NXR6469DM2P", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63949.14494915233617130.8bc2d647-9563-4ed3-9081-f4a771cfa3a6.6504c19a-15a5-40a6-9231-343598749956" + ] + }, "releaseDate": "2019-02-15", "storePage": "https://www.xbox.com/en-us/games/store/crackdown-3/9NXR6469DM2P" }, { "productTitle": "Crash Bandicoot™ N. Sane Trilogy", "productId": "9NJ2FD5HJ7SB", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.26340.13619069964366497.5db0830a-5ca2-4c6f-9968-5e84b3538655.96717e5d-78fd-4997-915e-d6f3a7f786eb" + ] + }, "releaseDate": "2024-05-07", "storePage": "https://www.xbox.com/en-us/games/store/crash-bandicoot-n-sane-trilogy/9NJ2FD5HJ7SB" }, @@ -487,6 +673,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.7817.14400608729854013.f3e97c2f-202d-48ee-b6f7-8667ef1177d0.35bb725f-c98f-420c-b1ea-d964f53260dd" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.26874.14400608729854013.f3e97c2f-202d-48ee-b6f7-8667ef1177d0.b6ddef52-3108-42a3-99ed-e76791f5a626" ] }, "releaseDate": "2024-08-07", @@ -498,6 +687,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.56481.13662804336614394.63dd49dd-f93b-4b67-b597-bace2d4550c2.7db77c31-f8c6-4c2a-af2b-b0d556f53a33" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58935.13662804336614394.63dd49dd-f93b-4b67-b597-bace2d4550c2.26dbe4d6-f7d0-4e9e-a21d-d5ade4bdc93b" ] }, "releaseDate": "2024-06-26", @@ -506,35 +698,55 @@ { "productTitle": "Crusader Kings III", "productId": "9N7GG222GTTH", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30214.14065406176999862.d433bba3-dfb8-463a-bd60-0c7bd30829d8.e80712b3-f7ba-4e91-9d7f-9ef969747827" + ] + }, "releaseDate": "2020-09-01", "storePage": "https://www.xbox.com/en-us/games/store/crusader-kings-iii/9N7GG222GTTH" }, { "productTitle": "Darkest Dungeon PC", "productId": "9PKXZHKXNH8C", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37617.14258054630843024.c4853382-6786-4714-bf42-f8d48a2d58e3.feff6027-f9a9-4e48-8cc6-b688d8cef05e" + ] + }, "releaseDate": "2021-06-10", "storePage": "https://www.xbox.com/en-us/games/store/darkest-dungeon-pc/9PKXZHKXNH8C" }, { "productTitle": "Day of the Tentacle Remastered", "productId": "9NKK6CX54183", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18669.13659998887820416.ac97c487-e49c-4236-a48f-681c4095040e.27089192-fc55-4fcc-910d-aebc79555211" + ] + }, "releaseDate": "2020-10-29", "storePage": "https://www.xbox.com/en-us/games/store/day-of-the-tentacle-remastered/9NKK6CX54183" }, { "productTitle": "Dead by Daylight Windows", "productId": "9NMS4SFNBGBH", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51458.13756572830160292.a0be61ed-4aae-47f9-8a44-c8be54b53f15.99bffbd4-1291-4b7a-b1d3-8a27e7c592d7" + ] + }, "releaseDate": "2019-10-31", "storePage": "https://www.xbox.com/en-us/games/store/dead-by-daylight-windows/9NMS4SFNBGBH" }, { "productTitle": "Dead Cells", "productId": "9NKVX66J0ZSK", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.28912.13719691835186674.79361d33-7a18-4554-8a50-66b60d3712e6.c6a6a941-82c2-43b3-ba3e-c53428df00a6" + ] + }, "releaseDate": "2019-09-05", "storePage": "https://www.xbox.com/en-us/games/store/dead-cells/9NKVX66J0ZSK" }, @@ -544,6 +756,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.37438.13892871097033903.6bf68087-15c2-4acb-aa8d-2a9356aea7ff.e6624c21-964f-4cd0-85bd-650a80e2b348" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46691.13892871097033903.6bf68087-15c2-4acb-aa8d-2a9356aea7ff.27e499ae-a36b-4609-80a1-95acc4e4da90" ] }, "releaseDate": "2021-07-20", @@ -552,7 +767,11 @@ { "productTitle": "DEATHLOOP", "productId": "9P5Z4530318L", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5858.14634955238674857.649b7ff9-0dfc-4951-9b65-c5d815215da6.90208516-ba3b-47a9-a130-ef94cf860f5b" + ] + }, "releaseDate": "2022-09-20", "storePage": "https://www.xbox.com/en-us/games/store/deathloop/9P5Z4530318L" }, @@ -564,6 +783,9 @@ "https://store-images.s-microsoft.com/image/apps.6443.13626568325427111.5219f295-f38f-4199-b81a-6fe1b4e11f8e.a4c752e0-e0ca-425d-a406-f6dd80224cb6", "https://store-images.s-microsoft.com/image/apps.3401.13626568325427111.5219f295-f38f-4199-b81a-6fe1b4e11f8e.04cdaabe-3894-4fd9-9936-e42e63a0c1fb", "https://store-images.s-microsoft.com/image/apps.30568.13626568325427111.5219f295-f38f-4199-b81a-6fe1b4e11f8e.78dfe433-7c35-4e36-9c97-b6680a9eaae0" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.10760.13626568325427111.b79d00fc-6d85-4196-a23a-681bd2582706.2d473f1f-89ae-4ce6-b3cf-589697268fd1" ] }, "releaseDate": "2020-05-13", @@ -575,6 +797,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.8559.14003683450151848.fb1907ac-3deb-42b0-a8a8-456541334591.73cb0279-93e8-474c-bb68-016a643567e7" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27811.14003683450151848.fb1907ac-3deb-42b0-a8a8-456541334591.10f3670e-8429-4d48-a32c-5817385cc543" ] }, "releaseDate": "2024-06-12", @@ -583,7 +808,11 @@ { "productTitle": "Descenders", "productId": "C37XBX7DCBZ0", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22806.65934155925401073.332e7c23-85a6-43b3-a586-2f915e27a737.f779bef0-3997-4eba-94f0-7b88eb3a74b4" + ] + }, "releaseDate": "2019-05-07", "storePage": "https://www.xbox.com/en-us/games/store/descenders/C37XBX7DCBZ0" }, @@ -595,6 +824,9 @@ "https://store-images.s-microsoft.com/image/apps.56965.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.235fb5e7-53f2-4190-9a23-2128d77a706f", "https://store-images.s-microsoft.com/image/apps.12908.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.554821a2-7c2f-4bb1-90a7-ebf9faa1fb09", "https://store-images.s-microsoft.com/image/apps.61023.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.72c8260e-d75a-4581-ae25-05c5121312af" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27476.14176621031001937.302a4c64-8f4d-435d-8b6d-fcd963ff70e6.59fb0946-5c13-432a-9412-eb3814a2f376" ] }, "releaseDate": "2021-11-11", @@ -606,6 +838,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.18388.14216887906907763.b5352caa-b411-460d-acb5-a427d0106d4b.8e4aea4f-80ba-487d-8508-e71b5b770ca8" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57632.14216887906907763.b5352caa-b411-460d-acb5-a427d0106d4b.6eee667c-5c9b-4fec-a070-261c100702cf" ] }, "releaseDate": "2020-11-06", @@ -614,28 +849,44 @@ { "productTitle": "Dishonored 2", "productId": "9MW4RJDRSF78", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.10911.13846412966040921.9e60d32b-6c69-44a3-9f94-dcaf3d33e79c.45af2576-b58c-40e4-85d1-8efd66230aa0" + ] + }, "releaseDate": "2019-10-03", "storePage": "https://www.xbox.com/en-us/games/store/dishonored-2/9MW4RJDRSF78" }, { "productTitle": "Dishonored® Definitive Edition (PC)", "productId": "9P1N07XDL1D4", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59694.14508572287351047.d9747a4e-f49b-47c0-9e3b-c3c28841843b.540d0f45-6cb5-4c1b-9452-3125f5f23d2c" + ] + }, "releaseDate": "2021-03-12", "storePage": "https://www.xbox.com/en-us/games/store/dishonored-definitive-edition-pc/9P1N07XDL1D4" }, { "productTitle": "Dishonored®: Death of the Outsider™ (PC)", "productId": "9MVF0PGV94F7", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.45510.13794616599414674.01dbccf9-8cab-4020-87f5-ed2a8f4d7474.91f9464f-14d9-4580-90ab-66611eae3780" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/dishonored-death-of-the-outsider-pc/9MVF0PGV94F7" }, { "productTitle": "Disney Dreamlight Valley", "productId": "9NSF0BGH8D86", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62890.14365104417622257.42e17a74-81d1-4e35-8c38-a935ba30ef21.80948ce2-63b2-49df-9e97-4ab247b81f10" + ] + }, "releaseDate": "2022-09-06", "storePage": "https://www.xbox.com/en-us/games/store/disney-dreamlight-valley/9NSF0BGH8D86" }, @@ -646,6 +897,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.36743.14005003576279990.6d131376-9483-463d-a248-92512222c6ef.9a9fc862-02c0-4cad-8c8c-e05fdc7b0159", "https://store-images.s-microsoft.com/image/apps.27453.14005003576279990.95d8f6e5-c971-4c8d-82b2-c4c14f380c05.8bc92089-08e1-4da1-99b8-46cc666c6d17" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.38755.14005003576279990.0e4e6d67-22da-40e5-b520-630686e37930.302b7455-6387-4813-8177-5e2844e8b61f" ] }, "releaseDate": "2017-10-31", @@ -654,35 +908,55 @@ { "productTitle": "DOOM + DOOM II", "productId": "9P46M5JQ2PTF", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.65308.14594598903877048.bbb5dc7a-5386-4439-89d6-a5136ac0725b.eea5c189-9a6c-4a48-bb66-6965091e5968" + ] + }, "releaseDate": "2024-08-08", "storePage": "https://www.xbox.com/en-us/games/store/doom-doom-ii/9P46M5JQ2PTF" }, { "productTitle": "DOOM 3", "productId": "9NSL68D814GC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60652.14361385044335696.50e1eb97-e01a-40d6-839c-7082e07b25b3.470b5116-eb1e-4467-b925-703e307c0297" + ] + }, "releaseDate": "2019-07-26", "storePage": "https://www.xbox.com/en-us/games/store/doom-3/9NSL68D814GC" }, { "productTitle": "DOOM 64", "productId": "9MXND4PQLK3W", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46055.13886780434132750.58497d0f-3220-4d2f-a7ff-96dcff27bc5f.4aac1ddb-3d94-42df-a4bb-cb2dc420c7fb" + ] + }, "releaseDate": "2020-03-20", "storePage": "https://www.xbox.com/en-us/games/store/doom-64/9MXND4PQLK3W" }, { "productTitle": "DOOM Eternal Standard Edition (PC)", "productId": "9PK09BL31FK1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.447.14272227869653628.a5b2ad6e-df4e-4a36-a057-d3a2b0ab4d8f.d8fd679b-53ae-4d59-b01b-70776a80921c" + ] + }, "releaseDate": "2020-12-01", "storePage": "https://www.xbox.com/en-us/games/store/doom-eternal-standard-edition-pc/9PK09BL31FK1" }, { "productTitle": "Dordogne (Windows)", "productId": "9N3GDLVDMXG4", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2352.13937153328708967.e0263059-dd80-41cf-9596-f8862f937254.fcf5e909-7e91-4d48-a18b-04ab0b17a937" + ] + }, "releaseDate": "2023-06-13", "storePage": "https://www.xbox.com/en-us/games/store/dordogne-windows/9N3GDLVDMXG4" }, @@ -694,6 +968,9 @@ "https://store-images.s-microsoft.com/image/apps.14182.13993061156496216.a99e7cae-2efa-4deb-9406-c5b487cfc7b9.1226ede8-0879-44fc-8b26-5a3c25c0d74d", "https://store-images.s-microsoft.com/image/apps.19171.13993061156496216.a99e7cae-2efa-4deb-9406-c5b487cfc7b9.02e1db17-970c-4ed5-a2fc-ae22313ff4f3", "https://store-images.s-microsoft.com/image/apps.49263.13993061156496216.a99e7cae-2efa-4deb-9406-c5b487cfc7b9.fc6ad6aa-ef4f-4bf9-b60c-caf5191bd010" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.816.13993061156496216.c5c83445-c83d-441f-8d79-a05fa134dcd7.3d0e51e4-383f-45ec-9349-4c81f6915cba" ] }, "releaseDate": "2022-11-17", @@ -702,7 +979,11 @@ { "productTitle": "Dungeons 4 (Win)", "productId": "9ND9BBMDVD2C", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.14451.13548174819423968.b4d28a4d-eed0-4368-b3e6-1fa2f980e67d.0cbfb614-1cf9-4d53-916a-10bee0935dee" + ] + }, "releaseDate": "2023-11-09", "storePage": "https://www.xbox.com/en-us/games/store/dungeons-4-win/9ND9BBMDVD2C" }, @@ -710,6 +991,9 @@ "productTitle": "Dungeons Of Hinterberg", "productId": "9PGX472J0RJP", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.55827.14242993966939702.499a01a3-a942-4425-8ee4-75c57cba3d55.9ccb2d88-cfe5-43de-b2c4-85ab99270fd6" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.15852.14242993966939702.499a01a3-a942-4425-8ee4-75c57cba3d55.cbc8a434-fe19-4287-986d-c4e5eac094b5" ] @@ -721,6 +1005,9 @@ "productTitle": "Dyson Sphere Program (Game Preview)", "productId": "9MTX4JNKL3FS", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51430.13804098040618061.c0d518e1-bda9-40c4-9606-e4164969da5c.31f23165-3111-44f3-af4e-9bac33130b2a" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.5260.13804098040618061.c0d518e1-bda9-40c4-9606-e4164969da5c.ee919cda-6aa7-4347-9be8-1ecc049c3c6b" ] @@ -731,7 +1018,11 @@ { "productTitle": "Eiyuden Chronicle: Hundred Heroes", "productId": "9N8Z1ZL33LM9", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61711.13556919803691894.87ef516e-a908-4d0f-8db2-ac932ea8385c.272356c9-2135-4f73-aa67-eca43d9252ba" + ] + }, "releaseDate": "2024-04-23", "storePage": "https://www.xbox.com/en-us/games/store/eiyuden-chronicle-hundred-heroes/9N8Z1ZL33LM9" }, @@ -739,6 +1030,9 @@ "productTitle": "Escape Academy", "productId": "9P3NT9H51RMR", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36185.14539026038241714.3df5a7c0-8dab-4179-87d8-320dbb169675.ff1883d1-013f-48be-b132-95b25879904a" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.24434.14539026038241714.3df5a7c0-8dab-4179-87d8-320dbb169675.8863ffde-6cd7-433d-a36c-ff26eef2de53" ] @@ -752,6 +1046,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.58392.14196602045405435.162a3492-f482-45e9-8022-a849e99a6850.78818d2c-b90c-44db-b94a-f0581cd93b44" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.38476.14196602045405435.7133ef2d-c7dc-4526-8901-f6f46aa70c98.d797ae34-5c2a-4d67-b8de-75666eec376e" ] }, "releaseDate": "2023-08-15", @@ -760,77 +1057,121 @@ { "productTitle": "Evil West (Windows)", "productId": "9PC49MD70881", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4211.14176554647910182.b03fa26e-38ab-4eae-a31e-457e38d3b885.931e36a8-9260-4fcf-833a-72600108d150" + ] + }, "releaseDate": "2024-03-21", "storePage": "https://www.xbox.com/en-us/games/store/evil-west-windows/9PC49MD70881" }, { "productTitle": "Exoprimal", "productId": "9NMFRHJX5JCZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47090.13688853552204440.93d09086-dc9f-460d-9894-9391f5f31afe.af1e49f8-80ba-4e02-bee6-1f4be2f7a2e7" + ] + }, "releaseDate": "2023-07-14", "storePage": "https://www.xbox.com/en-us/games/store/exoprimal/9NMFRHJX5JCZ" }, { "productTitle": "F1® Manager 2023", "productId": "9P80FVDCXJKB", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51525.14097399029008383.aba7dcca-0477-400a-adf1-c028557c44db.bab789de-9b43-4076-8780-ef7780f8c56c" + ] + }, "releaseDate": "2023-07-31", "storePage": "https://www.xbox.com/en-us/games/store/f1-manager-2023/9P80FVDCXJKB" }, { "productTitle": "Fallout", "productId": "9N42CT1J5WGW", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12360.13991296281172164.911bd54e-5f10-4b33-9849-cdf702cd4309.68d83f10-2d37-432f-b0d0-f8bdbb378116" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/fallout/9N42CT1J5WGW" }, { "productTitle": "Fallout 2", "productId": "9P1JS86M9SXH", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.7062.14505928851806264.bdce1e6f-6028-442f-838e-6c8088bf2f93.6455dbe3-77ef-4007-9e13-ea4b5621bb70" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/fallout-2/9P1JS86M9SXH" }, { "productTitle": "Fallout 3: Game of the Year Edition", "productId": "9NBZ9JF6TFMD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41379.13574127358458005.65070c14-0cf2-44ab-b4fc-c66107fdb092.cce18af1-9211-41b8-b277-30a198525bc8" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/fallout-3-game-of-the-year-edition/9NBZ9JF6TFMD" }, { "productTitle": "Fallout 4 (PC)", "productId": "9P71MB9QCF77", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39982.14613388726525330.ccebbfd9-01aa-43e4-b204-dee87aaf3bf7.40fd0f9a-f75c-47fa-9d13-9b349254781f" + ] + }, "releaseDate": "2021-03-11", "storePage": "https://www.xbox.com/en-us/games/store/fallout-4-pc/9P71MB9QCF77" }, { "productTitle": "Fallout 76 (PC)", "productId": "9NKGNMNK3K3Z", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21164.13657086471689364.007cb2f1-112f-4f83-975e-7483972b7a5a.cc23fcd9-5df9-48e5-8a6e-7b370c6c93bd" + ] + }, "releaseDate": "2020-07-09", "storePage": "https://www.xbox.com/en-us/games/store/fallout-76-pc/9NKGNMNK3K3Z" }, { "productTitle": "Fallout Tactics", "productId": "9NDV7FRVD7ML", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.49983.13611473418794607.9806bdd1-c446-4376-bb6e-95bf0a16329e.4aef2efe-2dad-4531-ae5c-bc28163c885d" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/fallout-tactics/9NDV7FRVD7ML" }, { "productTitle": "Fallout: New Vegas Ultimate Edition", "productId": "9MZR11JRF7BX", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27780.13869736752294987.ca050464-c72a-476d-941d-c1c814c4213d.9965bd56-a20a-4fc1-86ce-73d4750a8816" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/fallout-new-vegas-ultimate-edition/9MZR11JRF7BX" }, { "productTitle": "Farming Simulator 22 PC", "productId": "9NBBCKL3LTRH", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5097.13516489167520418.22b76ab9-a8f0-4921-9cf6-55645b8540e5.60efc8b3-f361-4219-8348-50f6d9d136f4" + ] + }, "releaseDate": "2022-05-19", "storePage": "https://www.xbox.com/en-us/games/store/farming-simulator-22-pc/9NBBCKL3LTRH" }, @@ -838,6 +1179,9 @@ "productTitle": "Figment: Journey Into the Mind", "productId": "BS0P7HLFPPP0", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21865.69486693469012885.88f5a3fe-4612-4ba3-97cd-7004863b32a2.a2d1789a-fe31-41ac-a8dc-451335a5464a" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.24627.69486693469012885.88f5a3fe-4612-4ba3-97cd-7004863b32a2.b3dc333e-3a17-4388-8259-807ff20e5a45" ] @@ -848,7 +1192,11 @@ { "productTitle": "Firewatch", "productId": "BQQKG9H2STC0", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40478.68688977722932617.c18986e0-354d-49e5-a689-33d52a7432cb.15d49e14-f3c9-4949-b807-62a02521442b" + ] + }, "releaseDate": "2016-09-21", "storePage": "https://www.xbox.com/en-us/games/store/firewatch/BQQKG9H2STC0" }, @@ -856,6 +1204,9 @@ "productTitle": "Firework (Windows)", "productId": "9P57NK5V2137", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6473.14578697293977714.1a77ecb0-1d3a-4ac5-bb7b-6bd079a70772.e71b5986-2160-4281-ac8e-4844bffb562f" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.50088.14578697293977714.1a77ecb0-1d3a-4ac5-bb7b-6bd079a70772.563009a4-6645-4330-8a8e-c8c601af823e" ] @@ -866,7 +1217,11 @@ { "productTitle": "Flintlock: The Siege of Dawn", "productId": "9PBBQHX6V3PJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64404.14126049473853317.736749ac-218e-4bab-8add-af9a80f33804.30d308e0-abc2-411b-98e7-ad4056ae15d8" + ] + }, "releaseDate": "2024-07-18", "storePage": "https://www.xbox.com/en-us/games/store/flintlock-the-siege-of-dawn/9PBBQHX6V3PJ" }, @@ -876,6 +1231,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.45309.14020382961984479.ef4aaad0-42be-418f-ac4e-3b83d39eb75d.d671ab8b-0d29-42d3-af3c-e76ee0dc0f44" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.10733.14020382961984479.ef4aaad0-42be-418f-ac4e-3b83d39eb75d.20ab7cf3-5c69-4ffb-859b-ac90414c24b6" ] }, "releaseDate": "2024-07-16", @@ -884,14 +1242,22 @@ { "productTitle": "Football Manager 2024", "productId": "9P4CZQNRXW34", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34882.14595211424650301.3f5b9cf7-e0fe-4f44-8a6c-3a829d7a5561.e0427e76-6378-4847-88e9-1bcd9b70e805" + ] + }, "releaseDate": "2023-11-06", "storePage": "https://www.xbox.com/en-us/games/store/football-manager-2024/9P4CZQNRXW34" }, { "productTitle": "Football Manager 2024 Console", "productId": "9N7GJJ2WTPBZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39689.14065042993795106.481a54a3-96a1-4426-85ce-63c7ba75f93d.a2c2c548-f4ff-4228-aae0-ad0053ff4994" + ] + }, "releaseDate": "2023-11-06", "storePage": "https://www.xbox.com/en-us/games/store/football-manager-2024-console/9N7GJJ2WTPBZ" }, @@ -901,6 +1267,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.51841.14633670794554222.de759f39-78b3-4b60-b445-e58e94c40e36.2015dd36-6136-44d2-a936-204b36909001" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54794.14633670794554222.de759f39-78b3-4b60-b445-e58e94c40e36.d6339749-1d11-43fa-a4a2-a2c8313dd664" ] }, "releaseDate": "2020-07-16", @@ -909,21 +1278,33 @@ { "productTitle": "Forza Horizon 4 Standard Edition", "productId": "9PNJXVCVWD4K", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2050.14343301090572358.2000000000007864205.da7d6a7f-5e66-439b-82e9-e5c23f17f739" + ] + }, "releaseDate": "2018-10-02", "storePage": "https://www.xbox.com/en-us/games/store/forza-horizon-4-standard-edition/9PNJXVCVWD4K" }, { "productTitle": "Forza Horizon 5 Standard Edition", "productId": "9NKX70BBCDRN", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18975.13718773309227929.bebdcc0e-1ed5-4778-8732-f4ef65a2f445.125d6b3b-492f-4e5f-8037-7ade230c8224" + ] + }, "releaseDate": "2021-11-09", "storePage": "https://www.xbox.com/en-us/games/store/forza-horizon-5-standard-edition/9NKX70BBCDRN" }, { "productTitle": "Forza Motorsport Standard Edition", "productId": "9PLKVSWR299F", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4206.14311721322459352.08838dcd-1049-42ef-a004-b13ad1d41946.9657386a-652e-45b5-a08b-0583c5e0db8c" + ] + }, "releaseDate": "2023-10-10", "storePage": "https://www.xbox.com/en-us/games/store/forza-motorsport-standard-edition/9PLKVSWR299F" }, @@ -933,6 +1314,10 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.13877.13922992293403127.db53b854-7ad3-4927-b3c0-bf615d8f5828.35ef2af6-f248-4018-bdd2-b9c6eca8f60b" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.49185.13922992293403127.604ddd79-ca8b-4c63-a3a3-a1e58c3771c2.ce3ced18-8771-4c4a-a320-482435b78f66", + "https://store-images.s-microsoft.com/image/apps.48384.13922992293403127.604ddd79-ca8b-4c63-a3a3-a1e58c3771c2.4a26eedb-f8cf-462f-9a5b-9dfba8c38539" ] }, "releaseDate": "2023-10-26", @@ -942,6 +1327,9 @@ "productTitle": "From Space", "productId": "9PLK75782446", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.14489.14311843146455225.858b9bb0-aedd-46ab-907b-4002100e6620.55c0c783-f5f5-49e8-9063-cffebe9b4144" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.63601.14311843146455225.858b9bb0-aedd-46ab-907b-4002100e6620.8518d6d1-7f8a-4b1d-bbdf-5a5e5039426c" ] @@ -958,6 +1346,9 @@ "https://store-images.s-microsoft.com/image/apps.42272.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.5809f73b-9f62-4a84-9638-d51dd81d19d1", "https://store-images.s-microsoft.com/image/apps.13736.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.6ff1d8a5-34e5-4431-810d-79e15b0949d1", "https://store-images.s-microsoft.com/image/apps.13213.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.a0403dd8-33f7-4194-a426-ad7af55bfcbb" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46316.14372914980969275.d331a64f-b3f1-4a83-91cf-cb9cce9ce027.3a45ff6e-5530-461f-a048-45380f6673ba" ] }, "releaseDate": "2018-04-24", @@ -966,7 +1357,11 @@ { "productTitle": "Full Throttle Remastered", "productId": "9P3ZRGNQVC7D", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.7896.14598891268352765.09cb1dd7-f055-4038-983d-2721763eedbe.0bab6c1b-43ce-423d-86ae-ced85f951431" + ] + }, "releaseDate": "2020-10-29", "storePage": "https://www.xbox.com/en-us/games/store/full-throttle-remastered/9P3ZRGNQVC7D" }, @@ -976,6 +1371,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.39620.14128015953067804.7fd76ab5-1221-4cac-a680-9923f2892e8f.0714099e-c78c-4557-a26d-fdd98f91f97f" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20186.14128015953067804.05ced0c1-bfbb-4adb-8b40-8c27d6023343.fd661ed1-d3e7-4720-a02d-276761031bf5" ] }, "releaseDate": "2024-05-23", @@ -985,6 +1383,9 @@ "productTitle": "Gang Beasts", "productId": "BPQZT43FWD49", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27333.68150164172276526.ddc374d7-ef5e-43b9-940a-bbc04440bb33.fa908ac2-c1a8-4d1b-9652-c977565a8111" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.2195.68150164172276526.ddc374d7-ef5e-43b9-940a-bbc04440bb33.864a4f4c-c733-4795-99b0-feeb5c430a7d" ] @@ -995,7 +1396,11 @@ { "productTitle": "Gears 5 Game of the Year Edition", "productId": "9P4KMR76PLLQ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.9672.14591801423393397.e1044226-28d7-42f6-a357-7102f7d1a4b3.5554c17b-3189-46a1-93fb-2005d1d08e7e" + ] + }, "releaseDate": "2020-12-15", "storePage": "https://www.xbox.com/en-us/games/store/gears-5-game-of-the-year-edition/9P4KMR76PLLQ" }, @@ -1006,6 +1411,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.13820.13510798887356280.a2ea1869-0646-4f51-9e83-872f8f095611.112a351e-c46e-4982-82c4-0a7f30eb5f0a", "https://store-images.s-microsoft.com/image/apps.44874.13510798887356280.46f5654e-693f-48f8-a3b5-07417484c87f.609a0785-8749-4b07-a598-277003f6caa6" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27107.13510798887356280.e9581154-ba55-457f-9b5f-4285b6036ba9.852cd1b9-b6db-430f-a640-b02d32c72c05" ] }, "releaseDate": "2016-10-11", @@ -1018,6 +1426,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.936.13510798884671596.4c8c9281-f2f0-4965-bceb-3aac094fbfde.535c7e2e-fdba-47cf-81ff-4ff6da934736", "https://store-images.s-microsoft.com/image/apps.14627.13510798884671596.9fa4dfcf-ff55-4219-8640-701060a5b394.52798d56-9ec9-41b7-b34b-ad4c533e0cb2" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59505.13510798884671596.352e98f8-31aa-4a32-9db9-94782043e1b8.c448a596-e629-4138-9403-ff5019f870f2" ] }, "releaseDate": "2016-02-01", @@ -1026,14 +1437,22 @@ { "productTitle": "Gears Tactics", "productId": "9NN3HCKW5TPC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2270.13750744755532010.7748d323-597f-440a-94e4-9c030198efa6.39a3aebc-6a07-4d8a-83e3-597bd117ff7b" + ] + }, "releaseDate": "2020-11-09", "storePage": "https://www.xbox.com/en-us/games/store/gears-tactics/9NN3HCKW5TPC" }, { "productTitle": "Generation Zero®", "productId": "C20WW4W29FQ1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5248.65743914527603622.b98c7b82-aeb0-44e7-8071-19a17867fd8c.23de469b-d409-404e-882b-54f1a741e3d5" + ] + }, "releaseDate": "2019-03-26", "storePage": "https://www.xbox.com/en-us/games/store/generation-zero/C20WW4W29FQ1" }, @@ -1041,6 +1460,9 @@ "productTitle": "Genesis Noir: Windows Edition", "productId": "9MWGGC7JH35B", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47660.14234812946294583.310a0a84-edb2-482c-a55c-b54922972168.5e4dc17c-f718-434b-af30-e18465dd00f1" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.27867.14234812946294583.310a0a84-edb2-482c-a55c-b54922972168.2b56a84c-5a52-43fc-9e4e-e70fda0c62ff" ] @@ -1051,14 +1473,22 @@ { "productTitle": "Ghostwire: Tokyo", "productId": "9PKP39CL0C8D", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17401.14258547668150351.c20c8953-e19e-40f6-8081-ab904c694484.4265c5ba-ab6a-4b8f-b7ad-c190b0da7603" + ] + }, "releaseDate": "2023-04-12", "storePage": "https://www.xbox.com/en-us/games/store/ghostwire-tokyo/9PKP39CL0C8D" }, { "productTitle": "Go Mecha Ball", "productId": "9N9C9KTPXL3X", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.9990.13539888958789801.44d77d96-f9aa-4d39-a2eb-04eea51ed883.77b0f09b-36d6-4370-98b3-0c409f4440fd" + ] + }, "releaseDate": "2024-01-25", "storePage": "https://www.xbox.com/en-us/games/store/go-mecha-ball/9N9C9KTPXL3X" }, @@ -1068,6 +1498,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.17530.14148334348309617.4b019a90-50f6-4c6f-9032-f4dfa4f42e29.53d4ce5e-593a-4864-8d08-787cf2c0b682" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36241.14148334348309617.4b019a90-50f6-4c6f-9032-f4dfa4f42e29.fbf153eb-74bf-49d8-98d0-b4fd9dacb358" ] }, "releaseDate": "2023-12-07", @@ -1082,6 +1515,9 @@ "https://store-images.s-microsoft.com/image/apps.57569.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.2b2b6463-eeee-4036-9f2c-e11c1275c44e", "https://store-images.s-microsoft.com/image/apps.38067.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.4ab1a5bf-ab1b-4fd4-b5f2-17d9f2c41d75", "https://store-images.s-microsoft.com/image/apps.43069.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.4de2226b-1301-43ad-9ce1-c25f6616a319" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.8445.13882037073203566.da1afb62-bb11-43df-b6aa-9b0deb8f35d9.3af8252b-c1de-4414-b8ea-f9bc5962b9ea" ] }, "releaseDate": "2018-10-25", @@ -1095,6 +1531,9 @@ "https://store-images.s-microsoft.com/image/apps.11186.13862246495458326.a7005640-1d45-4dba-a6e1-d326964693f6.e4e5f966-a084-46c0-9ac7-f313940a6179", "https://store-images.s-microsoft.com/image/apps.8970.13862246495458326.a7005640-1d45-4dba-a6e1-d326964693f6.51c20617-d896-4576-8204-77e7bdec1d3a", "https://store-images.s-microsoft.com/image/apps.56679.13862246495458326.a7005640-1d45-4dba-a6e1-d326964693f6.ea6f152b-4ae2-4f6c-a0ac-dfc7354948e6" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6387.13862246495458326.cf5e01bc-715d-42eb-ae23-68f6a922a8e0.0650b279-08f6-4183-a06c-c43f24d2f2f3" ] }, "releaseDate": "2020-07-23", @@ -1103,14 +1542,22 @@ { "productTitle": "Gotham Knights", "productId": "BT3611GR00CQ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.13036.70676690581893559.a37ccc27-65ef-4e47-856a-9fcdd0c1017f.141ebcea-4b89-40c5-bdf4-8d5d7b27d2cb" + ] + }, "releaseDate": "2022-10-21", "storePage": "https://www.xbox.com/en-us/games/store/gotham-knights/BT3611GR00CQ" }, { "productTitle": "Grim Fandango Remastered", "productId": "9PC288TN7R8K", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29044.14111995464148770.3579d82c-235a-4089-9783-e7a375fa5964.628e0b56-fb2b-4f29-9f67-68c5122de399" + ] + }, "releaseDate": "2020-10-29", "storePage": "https://www.xbox.com/en-us/games/store/grim-fandango-remastered/9PC288TN7R8K" }, @@ -1118,6 +1565,9 @@ "productTitle": "Gris", "productId": "9NHHP2H0ZP98", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.878.13625693263060421.b5379d86-b985-4508-ad2a-8af4b40a9fcd.ddb40d9c-68c7-4271-a2f5-745346872d49" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.16509.13625693263060421.b5379d86-b985-4508-ad2a-8af4b40a9fcd.9f6b666c-8235-428e-877c-7a934c7b91c5" ] @@ -1128,7 +1578,11 @@ { "productTitle": "Grounded", "productId": "9PJTHRNVH62H", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.43675.14280109286674604.0f240f37-6e7f-43b4-bd81-aabc884bc103.0aabbba3-e5f5-4665-9eac-7a9c36f80430" + ] + }, "releaseDate": "2022-09-27", "storePage": "https://www.xbox.com/en-us/games/store/grounded/9PJTHRNVH62H" }, @@ -1136,6 +1590,9 @@ "productTitle": "Guilty Gear -Strive-", "productId": "9MZDL6L34KF2", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23229.13872214727680763.7401cf68-944c-4d38-9d71-4d4226492658.647cd6b0-15f4-4751-b80e-0510082498d3" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.24149.13872214727680763.7401cf68-944c-4d38-9d71-4d4226492658.5927ff02-cead-4082-8ec5-1a0bbcb37ae9" ] @@ -1147,6 +1604,9 @@ "productTitle": "Halo Infinite (Campaign)", "productId": "9NP1P1WFS0LB", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.56579.13727851868390641.c9cc5f66-aff8-406c-af6b-440838730be0.0dee39b3-efb2-4425-8f1f-087c111ff9b2" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.53406.13727851868390641.ccc2d91d-118b-47bc-b87a-a5cc449f8e8e.7ee44eda-d274-45ab-8ac2-402528eb4fa3" ] @@ -1160,6 +1620,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.7936.13510798887619155.1152921504720025064.9e7079a2-4bc6-4c9a-867f-39e6b36173e5" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6988.13510798887619155.1152921504738974806.c79207fe-4a44-4acc-81ba-2fcd916fa119" ] }, "releaseDate": "2017-02-21", @@ -1172,6 +1635,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.14537.13510798886375925.9bd66dab-d786-4b2d-8430-c52a460e4c68.cf157a04-7002-406b-87c8-0c0dd7a28c01", "https://store-images.s-microsoft.com/image/apps.17031.13510798886375925.503ddab4-90c9-437e-8523-284e28216fa3.98a8e319-db4b-4e0e-aa97-f15db2721fc4" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58465.13510798886375925.94ada305-93e5-4286-aed9-8433e1438065.4c5b585f-9e9b-48df-92a9-6ca0287d934c" ] }, "releaseDate": "2017-04-20", @@ -1183,6 +1649,9 @@ "images": { "Logo": [ "https://store-images.microsoft.com/image/apps.23036.9007199266246750.14557479-98a0-41f6-9639-0c3082dda909.2ed89777-a91a-470b-8936-16fc814d22ba" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36305.9007199266246750.f909a15b-19f6-4a02-b196-304ded2b15b6.f39f0be0-7e9a-4342-8bfd-69eb34a4484a" ] }, "releaseDate": "2013-07-08", @@ -1194,6 +1663,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.51077.9007199266252681.2f2dda9a-782c-43aa-a406-8488cabb6e7c.451a956b-e7de-44e1-975e-9e24712eccd7" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47236.9007199266252681.b5374dc0-d930-4d35-9a0c-e06668602376.5155a0c1-9b4b-4106-a0c9-5354cd5b65ef" ] }, "releaseDate": "2014-11-25", @@ -1203,6 +1675,9 @@ "productTitle": "Halo: The Master Chief Collection", "productId": "9NTM9HXNLSZX", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39962.14415742612829493.9171a818-3c53-4dc7-a187-714bc0d9631d.8ada5595-cc0a-4d72-9999-103082312e1d" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.25919.14011015795942652.ca67db1b-d21e-47e9-bbb4-5ece2ce3f774.c71a2431-5ef1-4c32-92fa-22cca6162053" ] @@ -1216,6 +1691,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.27737.14116268439808247.4e8906b5-f1d2-4d47-b73d-ad01e2b3edef.d852ade0-d913-4e6e-b48c-2bc25bfb1507" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23612.14116268439808247.4e8906b5-f1d2-4d47-b73d-ad01e2b3edef.3440b780-aebe-47e7-bf44-6986b2fa9138" ] }, "releaseDate": "2024-04-16", @@ -1224,35 +1702,55 @@ { "productTitle": "Hauntii", "productId": "9N9DVL82PR0D", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61177.13534188749393159.6bee1793-dd42-4c8a-952d-a59bcfe8fcbd.58fe4b08-867b-4a01-bf07-16348d12dea6" + ] + }, "releaseDate": "2024-05-23", "storePage": "https://www.xbox.com/en-us/games/store/hauntii/9N9DVL82PR0D" }, { "productTitle": "Have a Nice Death", "productId": "9PF1ZX4HHGSW", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.55621.14213858983094140.57d02486-b6c6-428e-9161-a8d84f5e25da.f3b88029-e61e-4d4c-972f-771e29d7e28f" + ] + }, "releaseDate": "2023-12-05", "storePage": "https://www.xbox.com/en-us/games/store/have-a-nice-death/9PF1ZX4HHGSW" }, { "productTitle": "Headbangers: Rhythm Royale", "productId": "9NGRWJ03GR1N", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36253.13639985217330729.c06ddd38-2ab7-494c-a273-67cbd0be856f.e2b8d1fc-2d44-4db1-a13c-0078ae685864" + ] + }, "releaseDate": "2023-10-31", "storePage": "https://www.xbox.com/en-us/games/store/headbangers-rhythm-royale/9NGRWJ03GR1N" }, { "productTitle": "Hell Let Loose", "productId": "9N44WK3WV2HJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.19909.13994037977696381.94079d2c-56ff-4fe9-b539-854106c1d064.51f7c84b-3922-45df-9282-e0faa1c7deb4" + ] + }, "releaseDate": "2021-10-05", "storePage": "https://www.xbox.com/en-us/games/store/hell-let-loose/9N44WK3WV2HJ" }, { "productTitle": "Hellblade: Senua's Sacrifice", "productId": "9NCLP4LV5K7Z", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51441.13565840937352332.541ce357-b7b5-4070-802f-cc812adf891d.839b3729-56ed-4a82-b76c-858cc9e972bb" + ] + }, "releaseDate": "2018-04-11", "storePage": "https://www.xbox.com/en-us/games/store/hellblade-senua-s-sacrifice/9NCLP4LV5K7Z" }, @@ -1260,6 +1758,9 @@ "productTitle": "Hello Neighbor 2", "productId": "9N961B11FJ4W", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54060.13538643730533052.bd974e41-d70f-4894-a349-7d0e6056033d.6ac5ed6b-9551-46cc-907d-e8549abc5b34" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.33773.13538643730533052.bd974e41-d70f-4894-a349-7d0e6056033d.381dcaa3-dd59-4505-aca0-8da4f63533a5" ] @@ -1270,7 +1771,11 @@ { "productTitle": "Hi-Fi RUSH", "productId": "9NFTC552K3GJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40606.13592675470908447.79efa8be-9602-4911-867c-3b27d26ad414.de6abfbb-a945-4397-981e-fd70713911f7" + ] + }, "releaseDate": "2023-01-25", "storePage": "https://www.xbox.com/en-us/games/store/hi-fi-rush/9NFTC552K3GJ" }, @@ -1280,6 +1785,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.45475.13847644057609868.a4a91f76-8d1c-4e19-aa78-f4d27d2818fb.6bfdce99-7440-4f6a-9bfb-2c89da4e90f6" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47695.13847644057609868.a4a91f76-8d1c-4e19-aa78-f4d27d2818fb.090b8af1-1963-48b3-8c6d-1255f335fceb" ] }, "releaseDate": "2018-09-25", @@ -1288,21 +1796,33 @@ { "productTitle": "Homestead Arcana", "productId": "9N7THWLZZBWR", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29371.14057839366848438.3205b748-306a-493a-94f1-60de9c7722f6.db047dcc-d3f9-493e-ab0f-51ad6d33895b" + ] + }, "releaseDate": "2023-04-21", "storePage": "https://www.xbox.com/en-us/games/store/homestead-arcana/9N7THWLZZBWR" }, { "productTitle": "HOT WHEELS UNLEASHED™ 2 - Turbocharged", "productId": "9MWDKL3SD6D9", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59443.13840950600028206.a6c7ff57-33c0-43b9-9c1e-32120e1b8c8d.5da101a0-265e-40ac-a472-17ab9eac6195" + ] + }, "releaseDate": "2023-10-19", "storePage": "https://www.xbox.com/en-us/games/store/hot-wheels-unleashed-2-turbocharged/9MWDKL3SD6D9" }, { "productTitle": "House Flipper", "productId": "9NBFGKQLMV33", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46741.13518543789452586.33e180bb-4f0b-4a39-b1c8-cde6206c1eb3.63c679bb-4c3c-42c4-81bf-e3b3666a61b6" + ] + }, "releaseDate": "2020-02-26", "storePage": "https://www.xbox.com/en-us/games/store/house-flipper/9NBFGKQLMV33" }, @@ -1310,6 +1830,9 @@ "productTitle": "Human Fall Flat", "productId": "BSMZH25V6V46", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23210.69811231537758929.242607a4-709e-46fd-84b6-9cff16c7c474.af10e1b2-9576-42a4-968a-4aad138fafe9" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.39663.69811231537758929.242607a4-709e-46fd-84b6-9cff16c7c474.c80dcbaf-de9c-46e7-bbef-f9a991ce9015" ] @@ -1321,6 +1844,9 @@ "productTitle": "Humanity", "productId": "9PNW4CC69T4B", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20700.14340778445303609.99c3ca9e-2f2d-46b2-9909-ee0ddb61f6f4.22a27b0d-15d9-4274-9c4d-32129ce15e52" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.54681.14340778445303609.99c3ca9e-2f2d-46b2-9909-ee0ddb61f6f4.e2662600-b506-40f1-bc0c-943f53247714" ] @@ -1331,21 +1857,33 @@ { "productTitle": "HUMANKIND™", "productId": "9PM7HXJ92D6W", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20087.14298769618033048.ed4e3a9c-1486-458b-9f1e-dacd2c0a4ec0.ce666a89-91f4-4e7c-a69d-1128ddcc10c1" + ] + }, "releaseDate": "2021-08-17", "storePage": "https://www.xbox.com/en-us/games/store/humankind/9PM7HXJ92D6W" }, { "productTitle": "Hypnospace Outlaw", "productId": "9PM3NVB3PXG0", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33047.14305718799508027.42641e91-23d0-46ea-ba6f-12aa317fe516.cada2beb-935d-4df5-a23c-8f54d772d42f" + ] + }, "releaseDate": "2020-08-27", "storePage": "https://www.xbox.com/en-us/games/store/hypnospace-outlaw/9PM3NVB3PXG0" }, { "productTitle": "Indivisible", "productId": "9N3KCLT53VDZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29735.13518299802182489.415b0b15-4103-48f5-9879-4173d1952a78.954db8cc-d406-45c6-be93-13b305ddf9d7" + ] + }, "releaseDate": "2020-02-26", "storePage": "https://www.xbox.com/en-us/games/store/indivisible/9N3KCLT53VDZ" }, @@ -1357,6 +1895,9 @@ "https://store-images.s-microsoft.com/image/apps.50533.14224988712834177.817dbe6f-fd0b-46a4-85d4-8b775d647535.e7931731-2c2e-4ae1-ab9a-5d94370191cf", "https://store-images.s-microsoft.com/image/apps.41641.14224988712834177.06da9e7c-b0fa-4b49-b429-b8e270b2969e.157e803c-3783-487c-b677-d91c47051655", "https://store-images.s-microsoft.com/image/apps.24684.14224988712834177.6a033f3a-4c67-4cfc-9306-c7084af4a455.ed601ff0-98a1-4cf3-98a8-7a89db8e0b43" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.15492.14224988712834177.73c5008d-bf51-4106-a94b-bba49a40b9ed.a4fcaa5a-e794-40ea-b4c1-f4419206f7e1" ] }, "releaseDate": "2017-11-14", @@ -1365,21 +1906,33 @@ { "productTitle": "Inkulinati", "productId": "9P5D8B393ZZ4", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41430.14571252009478417.ff58eed9-6d91-43ac-8716-737ba1947830.58cb6133-61ca-40d6-89ec-1ecd075d88d9" + ] + }, "releaseDate": "2024-02-22", "storePage": "https://www.xbox.com/en-us/games/store/inkulinati/9P5D8B393ZZ4" }, { "productTitle": "INSIDE", "productId": "C17GQF31D617", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.26010.65290118777571754.27f1da0f-d581-4307-9bec-41016a2e5567.7b9d8bfe-920c-447d-a3f0-fa336b8d077f" + ] + }, "releaseDate": "2016-06-29", "storePage": "https://www.xbox.com/en-us/games/store/inside/C17GQF31D617" }, { "productTitle": "Insurgency: Sandstorm (Windows)", "productId": "9NN46PGWPJ98", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.28821.13745572220603193.c279b153-3473-4575-83e5-85da4fd6b853.509af29d-b139-4842-960c-8b3a03e91fa4" + ] + }, "releaseDate": "2023-07-11", "storePage": "https://www.xbox.com/en-us/games/store/insurgency-sandstorm-windows/9NN46PGWPJ98" }, @@ -1391,6 +1944,9 @@ "https://store-images.s-microsoft.com/image/apps.22655.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.44aedc83-c5cb-4251-82bd-401385134668", "https://store-images.s-microsoft.com/image/apps.53693.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.ca5ecae9-7f69-48f8-8820-054fae6ee7e3", "https://store-images.s-microsoft.com/image/apps.56035.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.da26e3f4-1245-475b-ba41-185f648148f7" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33463.13787553970953610.efdae53f-3dda-407f-a5a1-c31a28f45dc1.5647fc3b-7ae4-49b4-8ee5-3aed50bae4db" ] }, "releaseDate": "2024-06-13", @@ -1399,21 +1955,33 @@ { "productTitle": "Journey To The Savage Planet: Employee Of The Month", "productId": "9NXBGSSKG538", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.50521.14432850506259697.32c5ede7-5368-44d7-a0b8-7b8b1afff20e.86ac3a74-2789-464c-94b8-05eac3a2358a" + ] + }, "releaseDate": "2024-07-03", "storePage": "https://www.xbox.com/en-us/games/store/journey-to-the-savage-planet-employee-of-the-month/9NXBGSSKG538" }, { "productTitle": "Jurassic World Evolution 2", "productId": "9MWHMJ0SRBXV", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57135.13843646153700405.faf0a0ab-da0c-4a73-a182-1b5794b3f805.a540c175-d9d9-48ce-984f-cce5ab49a2d8" + ] + }, "releaseDate": "2021-11-09", "storePage": "https://www.xbox.com/en-us/games/store/jurassic-world-evolution-2/9MWHMJ0SRBXV" }, { "productTitle": "Jusant", "productId": "9PJB1ZRJDCBQ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54677.14215108845219593.24efa074-5329-4fb7-9ee7-875398d40686.d86ecb73-9324-42b2-8023-dcec8c4783b8" + ] + }, "releaseDate": "2023-10-31", "storePage": "https://www.xbox.com/en-us/games/store/jusant/9PJB1ZRJDCBQ" }, @@ -1423,6 +1991,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.40127.13821329994604169.93645c5e-df5b-4052-8008-c8c8f59491a5.878f4dc1-aa7a-4f2b-8a55-007e9b8bcd28" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.50333.13821329994604169.93645c5e-df5b-4052-8008-c8c8f59491a5.aa6f757c-a973-492b-b09e-c04dd9074f55" ] }, "releaseDate": "2024-06-20", @@ -1431,7 +2002,11 @@ { "productTitle": "Killer Instinct: Anniversary Edition", "productId": "9N04NS8TP202", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61867.13932214703798037.01f4a336-1152-4028-a595-8468f5ffb4a1.3da3e6fa-90de-49f4-8a11-5c155dacccd1" + ] + }, "releaseDate": "2023-11-28", "storePage": "https://www.xbox.com/en-us/games/store/killer-instinct-anniversary-edition/9N04NS8TP202" }, @@ -1439,6 +2014,9 @@ "productTitle": "Kona II: Brume", "productId": "9MWG18BH5ML7", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34928.13844667147142160.362497bb-868e-416f-b78d-359043e116a5.5dd78fff-9af6-41e6-bbcd-6810d4c343b6" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.62716.13844667147142160.362497bb-868e-416f-b78d-359043e116a5.b3f4e3cb-dc70-495e-b8af-b12f5848ccb8" ] @@ -1449,14 +2027,22 @@ { "productTitle": "Kunitsu-Gami: Path of the Goddess", "productId": "9PCWXX0MS15S", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51317.14165819607364549.40790d3a-f3e1-473e-81b4-61500e8b5087.a9264302-3ac6-4c93-a740-25d00ed0cf0a" + ] + }, "releaseDate": "2024-07-19", "storePage": "https://www.xbox.com/en-us/games/store/kunitsu-gami-path-of-the-goddess/9PCWXX0MS15S" }, { "productTitle": "LEGO® Star Wars™: The Skywalker Saga", "productId": "BRMKDCZT0C4L", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.7489.69776162813131649.5a0614cf-d90a-4580-90d2-d09e65459d75.24c8420c-5d5f-45f7-b495-59335a7ab2fb" + ] + }, "releaseDate": "2019-07-22", "storePage": "https://www.xbox.com/en-us/games/store/lego-star-wars-the-skywalker-saga/BRMKDCZT0C4L" }, @@ -1466,6 +2052,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.55678.14084512162357210.27ebb692-271e-428b-ad4f-97b26dd42942.a88540be-456e-4e1f-8052-7def4e2f0f64" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63900.14084512162357210.0d6eea09-167f-4aad-97d7-d4d17f848799.2a1722e7-328d-4bb3-b556-0d4acae1567b" ] }, "releaseDate": "2022-09-29", @@ -1474,7 +2063,11 @@ { "productTitle": "Lies of P", "productId": "9PCM4CMTPPGC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58819.14167207133116460.47e9afed-5648-49f3-aa78-034a762fbc26.613fed17-69cd-4ca8-bec7-7b0bd2218d78" + ] + }, "releaseDate": "2023-09-18", "storePage": "https://www.xbox.com/en-us/games/store/lies-of-p/9PCM4CMTPPGC" }, @@ -1484,6 +2077,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.32170.13610342535970070.70bc8d1f-a634-410d-bc3a-32ab84987744.d02d600e-cee6-4b66-9114-aa2b536bd1bd" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57362.13610342535970070.fb34dfda-5ccd-4768-9a7b-0f0c468853e1.7b1adc26-e416-4946-ad25-ecb5667cb4f8" ] }, "releaseDate": "2024-03-19", @@ -1492,14 +2088,22 @@ { "productTitle": "Like a Dragon Gaiden: The Man Who Erased His Name", "productId": "9PCMWNDPPBFZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40291.14166593464967828.5b4d87ef-26a6-4af4-bf96-c0c37c88dbb2.d16a5606-9c67-46e1-a979-b7092b10290a" + ] + }, "releaseDate": "2023-11-09", "storePage": "https://www.xbox.com/en-us/games/store/like-a-dragon-gaiden-the-man-who-erased-his-name/9PCMWNDPPBFZ" }, { "productTitle": "Like a Dragon: Ishin!", "productId": "9N4BH9FLLMWD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36545.13986316021730261.2a69ea94-8704-4fd3-951c-3403df80be07.e2fda78a-d7d1-496e-a952-b0794fc78268" + ] + }, "releaseDate": "2023-02-21", "storePage": "https://www.xbox.com/en-us/games/store/like-a-dragon-ishin/9N4BH9FLLMWD" }, @@ -1507,6 +2111,9 @@ "productTitle": "Lil Gator Game", "productId": "9N4FHWK9HWDK", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.55710.13988697165671034.93a854a2-fda8-401c-b449-b344b289e811.0bdbfb94-416a-44da-a806-40d0d32083a2" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.3542.13988697165671034.93a854a2-fda8-401c-b449-b344b289e811.87ab1bdf-3a11-4c71-a005-08a43d1262be" ] @@ -1517,7 +2124,11 @@ { "productTitle": "LIMBO", "productId": "9PNG83MDD6SH", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59639.14349397584144848.e2ddb78a-7e1b-4739-8df1-9ccec4985c50.070a33cf-df42-44da-85dd-4b4ed41b2b1b" + ] + }, "releaseDate": "2021-07-01", "storePage": "https://www.xbox.com/en-us/games/store/limbo/9PNG83MDD6SH" }, @@ -1527,6 +2138,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.64698.13605545843678606.ba639605-7305-422e-9637-2411fb07e5f6.5d284d89-4bb5-4098-87e7-0df89bf04b85" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23046.13605545843678606.ba639605-7305-422e-9637-2411fb07e5f6.bd9eb348-15e6-4bac-985b-175c9f44a105" ] }, "releaseDate": "2024-05-09", @@ -1536,6 +2150,9 @@ "productTitle": "Lonely Mountains: Downhill", "productId": "9MV6MCVLT8GR", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.53295.13794437146560212.1c2132e1-8e75-4ecb-8f54-2474cd20e67a.772f1641-c20b-43ed-8316-94d97f7527a2" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.12781.13794437146560212.1c2132e1-8e75-4ecb-8f54-2474cd20e67a.5919e234-9c11-4357-9878-ed4de87e7c08" ] @@ -1547,6 +2164,9 @@ "productTitle": "Loop Hero", "productId": "9NWNQC8H80RV", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12067.14445738564377947.babca878-ccaa-48f3-b55f-6477a548f887.23bbfaf2-fad8-4303-bd59-be0fd8f30734" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.35738.14445738564377947.babca878-ccaa-48f3-b55f-6477a548f887.b80befda-9a9e-4f0c-9675-62c8116a38ba" ] @@ -1558,6 +2178,9 @@ "productTitle": "Lords of the Fallen", "productId": "9NP4C0X8MDK7", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.53902.13730158504430842.8679d8d3-c2c8-4039-88f0-2b52a1d48d71.8572654a-00a8-4f1e-9d9d-e0bdfb4796d0" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.5568.13730158504430842.8679d8d3-c2c8-4039-88f0-2b52a1d48d71.36f0806f-c0d6-4f42-a99d-9ac9ad280c22" ] @@ -1568,7 +2191,11 @@ { "productTitle": "Mafia: Definitive Edition", "productId": "9N24WGZTP92S", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.53490.13963071041236391.f5d71f1c-c673-43c5-ad50-1d612db83882.2c99c532-479d-453b-80f0-722456283820" + ] + }, "releaseDate": "2024-08-13", "storePage": "https://www.xbox.com/en-us/games/store/mafia-definitive-edition/9N24WGZTP92S" }, @@ -1576,6 +2203,9 @@ "productTitle": "Magical Delicacy", "productId": "9PCRBQG481Q1", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27208.14168840589167806.4bdcbd00-4f61-4a59-a056-60b8c974464e.f3fa77ba-c80a-4e08-b6d2-1171d0223b51" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.54876.14168840589167806.4bdcbd00-4f61-4a59-a056-60b8c974464e.4d166b88-8ca2-4797-8722-aa721059223f" ] @@ -1586,7 +2216,11 @@ { "productTitle": "Maneater", "productId": "9P5B81KVDGP1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.16927.14572536018362984.944e7368-3c2f-4b4e-8072-fe5da70a10fa.7c793b5f-5802-41ff-a28a-09de56512b3e" + ] + }, "releaseDate": "2020-05-22", "storePage": "https://www.xbox.com/en-us/games/store/maneater/9P5B81KVDGP1" }, @@ -1596,6 +2230,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.1429.14574664570876265.471d597a-3551-49d3-8539-0d6889ee7e31.f6d656cb-455e-472f-912b-b0c840a72e32" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.56024.14574664570876265.471d597a-3551-49d3-8539-0d6889ee7e31.5b9ebe77-9630-4f00-b719-c0a464c338ce" ] }, "releaseDate": "2023-10-25", @@ -1604,7 +2241,11 @@ { "productTitle": "Maquette", "productId": "9NW7M71V29DT", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60526.14454715586223538.e79340a3-e2a9-45a0-b7a7-0b827c384715.e1c976ee-2c16-401f-9b6a-47022ee62ee2" + ] + }, "releaseDate": "2023-07-19", "storePage": "https://www.xbox.com/en-us/games/store/maquette/9NW7M71V29DT" }, @@ -1612,6 +2253,9 @@ "productTitle": "McPixel 3", "productId": "9PP2WW5TQ7MS", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39109.14336879122555401.4c30f6b3-d0ef-4997-95dd-4b1a894b1874.4156d823-b5bd-4532-a7b0-69147e4c8477" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.47411.14336879122555401.4c30f6b3-d0ef-4997-95dd-4b1a894b1874.d1504ef0-c644-4a5a-bc14-8de6d4275480" ] @@ -1625,6 +2269,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.16435.14123304312086404.5dc09435-a0e3-402c-ba22-f58dbbaccd21.d9e9842c-e315-4cfe-84a3-6dc5635b01f4" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1453.14123304312086404.5dc09435-a0e3-402c-ba22-f58dbbaccd21.e2b9a345-d6e3-4983-ad7d-2d2c5c192d1c" ] }, "releaseDate": "2021-05-27", @@ -1633,7 +2280,12 @@ { "productTitle": "Medieval Dynasty", "productId": "9PDDP6ML6XHF", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21853.14156112272410024.305e8482-2c5b-4228-abdb-396b9bfe447c.c92a0c3a-10af-4418-a1b2-11fbfa535f66", + "https://store-images.s-microsoft.com/image/apps.19781.14156112272410024.561899cb-32f5-403b-8341-36a17fdec2af.3fb37ec5-0491-4633-920e-5a2ef28059b6" + ] + }, "releaseDate": "2022-10-06", "storePage": "https://www.xbox.com/en-us/games/store/medieval-dynasty/9PDDP6ML6XHF" }, @@ -1641,6 +2293,9 @@ "productTitle": "Merge & Blade", "productId": "9NW2XNZLVSWW", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.48019.14453287039354162.0e8e83c6-3769-4771-93f6-cee431e621af.d8ad47b3-5b6a-47f7-b183-ebb6dd43ef80" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.37425.14453287039354162.0e8e83c6-3769-4771-93f6-cee431e621af.6bce7e6c-4779-4155-b12d-42429e83a792" ] @@ -1651,7 +2306,11 @@ { "productTitle": "Microsoft Flight Simulator Standard 40th Anniversary Edition", "productId": "9PMQDM08SNK9", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37945.14293123921570736.739af26b-0b56-4d3a-8d57-149d26c2cc05.9c568e6b-ca17-4dc8-9c75-efe33e27f910" + ] + }, "releaseDate": "2022-11-11", "storePage": "https://www.xbox.com/en-us/games/store/microsoft-flight-simulator-standard-40th-anniversary-edition/9PMQDM08SNK9" }, @@ -1664,6 +2323,9 @@ "https://store-images.s-microsoft.com/image/apps.13360.9007199266246761.cb02291f-d0d9-48a7-8735-9a5e71951992.ab38da93-df62-4b71-9831-ddc8afb96d7b", "https://store-images.s-microsoft.com/image/apps.3809.9007199266246761.cb02291f-d0d9-48a7-8735-9a5e71951992.38e4cfe6-dc30-4f0e-9cb5-4f7fa3c17abf", "https://store-images.s-microsoft.com/image/apps.35142.9007199266246761.ca6040cb-54be-4f0a-bc9e-c59364f681cb.044ba279-4cbf-4c63-828a-e747e398b428" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.35357.9007199266246761.ea1b2c5a-a27a-446f-ade9-736e01fc0bd3.a25c0236-3fbf-4bb2-98e3-79463adcd37d" ] }, "releaseDate": "2012-07-28", @@ -1675,6 +2337,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.11136.14146895813128195.1152921504736926530.47c08185-64bc-49ff-9bb7-67105c1618af" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1041.14146895813128195.1152921504736932926.b3b4137c-37ed-4268-8112-002922027d5f" ] }, "releaseDate": "2017-10-10", @@ -1686,6 +2351,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.45275.13523218592070531.6730b169-a75f-4b46-bbd7-32b2a54f767e.5c7d8539-533f-4dea-9cd0-16ae3cc9f9ae" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33021.13523218592070531.6730b169-a75f-4b46-bbd7-32b2a54f767e.2df266b3-50c4-4c43-84d8-f58edf052206" ] }, "releaseDate": "2021-11-02", @@ -1695,6 +2363,9 @@ "productTitle": "Minecraft Legends for Windows + Launcher", "productId": "9NM395CH685J", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.43083.13695729085627777.1297136a-f273-41f1-947f-59044c848c55.96136b17-8c70-4dce-9ca0-3ef59a1fd391" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.62581.13695729085627777.1297136a-f273-41f1-947f-59044c848c55.3752a76f-6741-4954-a6d9-143f1fd4a540" ] @@ -1709,6 +2380,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.303.14635563885955208.abc71742-2e92-43db-a63f-168beecfbc1b.e7b60ba4-3c00-4ff5-8040-0a5a7b62ae42", "https://store-images.s-microsoft.com/image/apps.54746.14635563885955208.8d3b1dbf-00e2-4afb-9745-44725e0bec69.910a05e9-09ae-463b-82fe-a45de89df0da" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59093.14635563885955208.3111e5ec-659e-41be-beec-f0dfb16dd9f1.3cd38d35-219a-424f-9a45-0a649145e1e3" ] }, "releaseDate": "2022-02-09", @@ -1720,6 +2394,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.2726.14492077886571533.be42f4bd-887b-4430-8ed0-622341b4d2b0.b7314828-2896-431a-b863-1e3de670a5b2" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54465.14492077886571533.be42f4bd-887b-4430-8ed0-622341b4d2b0.5054cf02-8b0f-47e2-9d15-7ddc81f63638" ] }, "releaseDate": "2022-06-06", @@ -1728,21 +2405,33 @@ { "productTitle": "Mineko's Night Market", "productId": "9NBPNW2JQNCD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18027.13513466192535313.e3ae04a8-2387-4802-9bbe-d39ebcd92dd6.1f6b5033-bae2-4b68-bd4b-58ddb9e64994" + ] + }, "releaseDate": "2023-10-26", "storePage": "https://www.xbox.com/en-us/games/store/mineko-s-night-market/9NBPNW2JQNCD" }, { "productTitle": "Monster Hunter Rise", "productId": "9N1VP8WDQK4D", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20430.13964127228191263.1e380cc1-7db3-433f-a0fb-1cfb65b83ff5.656026c4-5178-4926-ba85-728dd0bb5500" + ] + }, "releaseDate": "2023-01-20", "storePage": "https://www.xbox.com/en-us/games/store/monster-hunter-rise/9N1VP8WDQK4D" }, { "productTitle": "Monster Sanctuary (Windows Version)", "productId": "9PBWWQGXVMKC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34105.14110383629447010.17706117-8769-46af-985e-db557adb3449.f789760c-aea4-489f-bee5-c665a3cba833" + ] + }, "releaseDate": "2020-12-08", "storePage": "https://www.xbox.com/en-us/games/store/monster-sanctuary-windows-version/9PBWWQGXVMKC" }, @@ -1754,6 +2443,9 @@ "https://store-images.s-microsoft.com/image/apps.16047.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.3c6fae59-0c13-4991-85d7-2cad65972390", "https://store-images.s-microsoft.com/image/apps.13741.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.727fa7f1-1eea-42b3-9147-f3d4082d2abd", "https://store-images.s-microsoft.com/image/apps.37262.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.7e5212da-ad9a-4843-88f4-4b1d7c65a62b" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23038.14078999020725962.ddb83977-3b2d-4498-aa21-0a1bdeb1cddc.b1c79423-8a23-4943-804b-c5333d258492" ] }, "releaseDate": "2018-05-29", @@ -1762,7 +2454,11 @@ { "productTitle": "Mortal Kombat 11", "productId": "BTC0L0BW6LWC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63277.70804610839547354.8da93c46-fd13-4b16-8ebe-e8e02c53d93e.9d395244-d5c3-4d17-a83d-2ff95537c0f6" + ] + }, "releaseDate": "2019-04-23", "storePage": "https://www.xbox.com/en-us/games/store/mortal-kombat-11/BTC0L0BW6LWC" }, @@ -1772,6 +2468,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.32729.14149597270613176.7ab8db21-d435-4f1c-8c3a-236ab836bd6b.21f8ad4a-fd25-4016-ba6f-8ce3e6a45470" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44000.14149597270613176.7ab8db21-d435-4f1c-8c3a-236ab836bd6b.0dc1418d-4fcd-4bc7-9ae5-552f97c69e27" ] }, "releaseDate": "2022-10-25", @@ -1780,7 +2479,11 @@ { "productTitle": "Moving Out 2", "productId": "9P88K6NQW12H", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61624.14092419520193072.64e53d99-3172-4ca7-856b-dd313b69b944.4cfb64f3-ed9e-4d21-b873-244865b67ff4" + ] + }, "releaseDate": "2023-08-15", "storePage": "https://www.xbox.com/en-us/games/store/moving-out-2/9P88K6NQW12H" }, @@ -1788,6 +2491,9 @@ "productTitle": "My Friend Peppa Pig", "productId": "9NDJLXD2X2DM", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41714.13613420443671332.a6ea2e8e-4acd-4934-b589-2d8cfaba7189.2f819a75-49ec-4ddd-858c-0752a4ae517a" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.1107.13613420443671332.a6ea2e8e-4acd-4934-b589-2d8cfaba7189.f867a517-25f5-4493-b7e5-b437c38d5cb7" ] @@ -1803,6 +2509,9 @@ "https://store-images.s-microsoft.com/image/apps.10534.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.5fd1a78b-0493-47d8-99b5-1a81030b0b13", "https://store-images.s-microsoft.com/image/apps.14704.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.43051e1b-0b6a-437b-9971-0465eff1c84f", "https://store-images.s-microsoft.com/image/apps.50248.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.12f4b9c5-7114-40ec-b7aa-e8aaa65198d4" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.8924.13515009775401270.15247b3d-e864-489f-8938-00dc290228fa.ad129690-0dae-4df9-a39e-68bb7d8600dd" ] }, "releaseDate": "2019-07-04", @@ -1814,6 +2523,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.60105.13907683889228979.59937977-1a57-4871-afde-66c690b605c2.19b6d7df-3cc1-4632-a596-8af5f8323ca2" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.50888.13907683889228979.59937977-1a57-4871-afde-66c690b605c2.41dc39cf-d89c-48c5-81f3-d686030eb72e" ] }, "releaseDate": "2023-11-02", @@ -1823,6 +2535,9 @@ "productTitle": "Neon Abyss", "productId": "9PLWSGHFQ4PS", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.19663.14309576365758777.173ab21c-81bd-4a31-b5cc-0d6495ab6a15.28771244-a15d-42c8-8ae9-2f252b179210" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.53006.14309576365758777.eb7fccef-6a93-40da-ba63-6d85df214f6b.cc2b7e42-6563-4d43-9ad7-57f02834effb" ] @@ -1833,7 +2548,11 @@ { "productTitle": "Neon White", "productId": "9MTGVHF37DFK", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.52438.13813113706771512.d189482c-40c5-41c0-8eeb-62010002ac44.b00f1ab6-5133-4574-8d5a-01ee141ef86b" + ] + }, "releaseDate": "2024-07-11", "storePage": "https://www.xbox.com/en-us/games/store/neon-white/9MTGVHF37DFK" }, @@ -1846,6 +2565,9 @@ "https://store-images.s-microsoft.com/image/apps.22238.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.f9bd296d-956c-4dbe-8d7e-8ea0a6a6a66a", "https://store-images.s-microsoft.com/image/apps.50333.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.d210b5ed-90b8-492c-b511-0af94cd2ee5c", "https://store-images.s-microsoft.com/image/apps.49611.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.3a5dfee9-dce9-4509-83de-33538ed3e11b" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.42417.13867280688858311.8624d86c-7857-440e-9303-9897a29ba67e.42b5def2-8e7f-4ff7-a75b-72354e44d97e" ] }, "releaseDate": "2020-08-21", @@ -1854,56 +2576,88 @@ { "productTitle": "Ni no Kuni Wrath of the White Witch™ Remastered", "productId": "9P7SL78VHVMF", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57893.14101239125163632.01de9600-be68-4ca2-ad44-3bd38be94a52.4b2ed267-ccba-45eb-b8bd-97484e350d07" + ] + }, "releaseDate": "2022-09-15", "storePage": "https://www.xbox.com/en-us/games/store/ni-no-kuni-wrath-of-the-white-witch-remastered/9P7SL78VHVMF" }, { "productTitle": "Ni no Kuni™ II: Revenant Kingdom - The Prince's Edition", "productId": "9N732VFPMWKT", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61464.14006829741600892.0ff866dd-53ca-4875-b82a-a1e430a3ba20.165a49e5-7b2f-4f4c-a10b-00c7ee0a8a18" + ] + }, "releaseDate": "2023-03-21", "storePage": "https://www.xbox.com/en-us/games/store/ni-no-kuni-ii-revenant-kingdom-the-prince-s-edition/9N732VFPMWKT" }, { "productTitle": "Nickelodeon All-Star Brawl 2", "productId": "9PN0LC4CNLPT", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29212.14288058754217024.34c1b6b9-953f-418c-9ab0-c1ebd8ce9cbc.bc41e6ef-5fee-4474-8404-54acf0fa5a42" + ] + }, "releaseDate": "2023-11-14", "storePage": "https://www.xbox.com/en-us/games/store/nickelodeon-all-star-brawl-2/9PN0LC4CNLPT" }, { "productTitle": "NINJA GAIDEN 3: Razor's Edge", "productId": "9N27DBP8GNNB", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34045.13957002730398149.0cea4e4d-b211-438d-b3fc-78fd52485184.fc4f1171-49f7-4812-b943-3ed19812f720" + ] + }, "releaseDate": "2021-06-10", "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden-3-razor-s-edge/9N27DBP8GNNB" }, { "productTitle": "NINJA GAIDEN Σ", "productId": "9NZ5QW71X49G", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.19050.14486675416442203.186df2ad-99aa-4e4f-bcb4-cb37ca999946.df485081-ec17-460b-9e62-e385c1297574" + ] + }, "releaseDate": "2021-06-10", "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden/9NZ5QW71X49G" }, { "productTitle": "NINJA GAIDEN Σ2", "productId": "9PGSC3PW4N8Z", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62138.14245467679473898.001107c4-7d89-4b24-ae55-6960d7565280.fde9e16e-7907-4d7f-802e-22f2da8e8667" + ] + }, "releaseDate": "2021-06-10", "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden-2/9PGSC3PW4N8Z" }, { "productTitle": "NINJA GAIDEN: Master Collection", "productId": "9NCG3X89KRLD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.32420.13564615551113323.88b07054-b685-4f07-9cfe-222ba3ef0e25.e0794927-ed74-4388-989d-afb58a23721d" + ] + }, "releaseDate": "2021-06-10", "storePage": "https://www.xbox.com/en-us/games/store/ninja-gaiden-master-collection/9NCG3X89KRLD" }, { "productTitle": "No Man's Sky", "productId": "BQVQTL3PCH05", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30284.68818099466568894.214dba37-1f8b-4311-ad6e-ed28473c3221.d2343082-5059-4f2d-90fe-e0cc7b1b32e8" + ] + }, "releaseDate": "2018-07-24", "storePage": "https://www.xbox.com/en-us/games/store/no-man-s-sky/BQVQTL3PCH05" }, @@ -1911,6 +2665,9 @@ "productTitle": "No More Heroes 3 Windows", "productId": "9P8XNG742KC9", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.48625.14605058070453668.4499a7ea-181a-4664-9cf0-b22383d6e8ff.c76fc402-cd21-4618-9dd9-d93e64ec1c54" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.40045.14605058070453668.4499a7ea-181a-4664-9cf0-b22383d6e8ff.c65f205f-e2d2-463c-9864-21a02ee34710" ] @@ -1921,7 +2678,11 @@ { "productTitle": "OCTOPATH TRAVELER", "productId": "9N9606CC950J", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18141.13539010844025035.cd25451c-c47c-45c8-b378-724488a9e769.8071ec1d-5580-4953-94a4-08c603c7e808" + ] + }, "releaseDate": "2021-03-25", "storePage": "https://www.xbox.com/en-us/games/store/octopath-traveler/9N9606CC950J" }, @@ -1929,6 +2690,9 @@ "productTitle": "OCTOPATH TRAVELER II", "productId": "9N2X3VZW8QNN", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40638.13943511541832179.8333d72c-e2d4-431c-934c-ef55bcf6c5f1.da6bbbfa-fb24-44b5-90fa-7067f6fc44f6" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.46680.13943511541832179.8333d72c-e2d4-431c-934c-ef55bcf6c5f1.82dbb158-ac97-41c6-aad2-d66dc231c6f3" ] @@ -1939,7 +2703,11 @@ { "productTitle": "Open Roads", "productId": "9NRRSLCGR62S", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23447.14377662572858195.0cf67274-c7f3-43bc-8b24-87daf93a0fac.1f99b4c4-e10c-4291-ba47-d6e04910f759" + ] + }, "releaseDate": "2024-03-28", "storePage": "https://www.xbox.com/en-us/games/store/open-roads/9NRRSLCGR62S" }, @@ -1951,6 +2719,9 @@ "https://store-images.s-microsoft.com/image/apps.63869.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.de6bc83d-3a1e-49d4-9d5a-060819c106ab", "https://store-images.s-microsoft.com/image/apps.10496.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.f8fa556a-9afd-40bb-9358-3eb9cda4b22f", "https://store-images.s-microsoft.com/image/apps.49794.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.77da806e-e5cf-45e0-a9ba-9776abedb579" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6514.13555606646249745.b53381a4-c873-4035-90a6-ee8aee881644.d70f61c6-8ca8-4a0a-aa94-ede341f5a784" ] }, "releaseDate": "2021-07-23", @@ -1963,6 +2734,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.27342.13510798886186647.20955cc6-ff98-4c47-a277-a39034c80e48.46c8ac27-5378-452b-a633-10a503a92d96", "https://store-images.s-microsoft.com/image/apps.56463.13510798886186647.e6e27e80-a0e4-4365-a31b-5c4a7b6b91a8.9b1ed462-08c2-43bc-bf97-98ce43ad61be" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33006.13510798886186647.c0e11caa-fdaa-466b-aa26-f52ce4feba84.a944c023-cf1b-4b73-a42c-ef8948701f81" ] }, "releaseDate": "2016-03-30", @@ -1974,6 +2748,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.19662.14047496556148589.9fda5cef-7995-4dbb-a626-66d2ab3feb4f.9868c8ea-682b-49bd-a35e-b38fd3eb0607" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37519.14047496556148589.9fda5cef-7995-4dbb-a626-66d2ab3feb4f.c81b9aaa-f139-44ac-b9ca-0aa0dd0cbffb" ] }, "releaseDate": "2020-03-11", @@ -1987,6 +2764,9 @@ "https://store-images.s-microsoft.com/image/apps.17977.14184096619580431.16c3e5f6-74be-48c7-9949-1a76b080c9d9.be69e859-f4d8-470e-8518-ecea1f8c9bb9", "https://store-images.s-microsoft.com/image/apps.19689.14184096619580431.16c3e5f6-74be-48c7-9949-1a76b080c9d9.a886b652-399a-4f35-ba96-537fcec2085c", "https://store-images.s-microsoft.com/image/apps.6816.14184096619580431.16c3e5f6-74be-48c7-9949-1a76b080c9d9.4b8e6c46-2acc-41b5-aab5-be3b9356f6c2" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60458.14184096619580431.90f674bc-0c36-4602-85d7-e95340e27b11.11576800-4408-4d26-b761-dfd8b2f32d9d" ] }, "releaseDate": "2020-04-02", @@ -1995,21 +2775,33 @@ { "productTitle": "Palworld (Game Preview)", "productId": "9NKV34XDW014", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.7175.13654268679289325.5cd9109c-5095-44b3-a4a2-0bbf822058b7.87b86677-d67d-448a-87cd-86f759b976d8" + ] + }, "releaseDate": "2024-01-19", "storePage": "https://www.xbox.com/en-us/games/store/palworld-game-preview/9NKV34XDW014" }, { "productTitle": "PAW Patrol Mighty Pups Save Adventure Bay", "productId": "9N3TF03KNTBD", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3013.13996206863599819.e2c5aea7-cee9-4965-bcf2-983a449c260d.3492e484-91a4-4558-b189-66444c715f51" + ] + }, "releaseDate": "2020-11-06", "storePage": "https://www.xbox.com/en-us/games/store/paw-patrol-mighty-pups-save-adventure-bay/9N3TF03KNTBD" }, { "productTitle": "PAW Patrol World", "productId": "9N2VDS259QP1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.38510.13948993858025072.92023a0f-4cb5-4ee3-8396-0122fea8fafe.ea8c8de1-7a57-40ba-9bcd-d03c77b2560c" + ] + }, "releaseDate": "2023-09-29", "storePage": "https://www.xbox.com/en-us/games/store/paw-patrol-world/9N2VDS259QP1" }, @@ -2017,6 +2809,9 @@ "productTitle": "PAW Patrol: Grand Prix", "productId": "9MWBT3HFCZ3Z", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30417.13842132658396836.fba80705-9bc9-45ad-84f9-621f75fe99ec.63412d4a-24e5-449a-9622-75435adb7a73" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.63863.13842132658396836.fba80705-9bc9-45ad-84f9-621f75fe99ec.7890a3e7-98b4-4d58-a917-b04dd7960388" ] @@ -2027,28 +2822,44 @@ { "productTitle": "PAYDAY 3", "productId": "9NPZVDCH73SX", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39323.13779457877292855.4803a4b4-94cc-4b12-bf91-ad49bcb0c65c.2422005b-086c-453d-ba6b-57b2a1d25374" + ] + }, "releaseDate": "2023-09-21", "storePage": "https://www.xbox.com/en-us/games/store/payday-3/9NPZVDCH73SX" }, { "productTitle": "Pentiment", "productId": "9NX6K9HN4F4K", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25502.14431229486160986.b3655366-4704-41dd-bb1b-0ea3f2425df6.c8722871-999c-4dac-8691-5a97e501dcec" + ] + }, "releaseDate": "2022-11-15", "storePage": "https://www.xbox.com/en-us/games/store/pentiment/9NX6K9HN4F4K" }, { "productTitle": "Persona 3 Reload", "productId": "9NKK6Z0K3RH2", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59768.13660021874166335.cf99aaa0-1039-41d3-bafe-7239ec9e261c.219dd9bc-69b7-4f09-b013-d5e3092cf821" + ] + }, "releaseDate": "2024-02-02", "storePage": "https://www.xbox.com/en-us/games/store/persona-3-reload/9NKK6Z0K3RH2" }, { "productTitle": "Persona 5 Tactica", "productId": "9P07F616XR9R", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44242.14461424539776518.be5fa828-401b-4f0c-ac86-920d7dcbfada.d932d547-ff13-4f90-9344-d1b5e6fac6cf" + ] + }, "releaseDate": "2023-11-17", "storePage": "https://www.xbox.com/en-us/games/store/persona-5-tactica/9P07F616XR9R" }, @@ -2060,6 +2871,9 @@ "https://store-images.s-microsoft.com/image/apps.13928.14507726714197033.ea391b48-d8cb-4724-a6cb-765168bd5161.77ebbbdb-6d75-44ac-b4b6-bcfbec78f9b5", "https://store-images.s-microsoft.com/image/apps.55491.14507726714197033.2905aa3c-57a0-457d-a5be-f0eea3e80cf3.0aff42ef-12ed-46f4-ae01-3423c446506b", "https://store-images.s-microsoft.com/image/apps.56306.14507726714197033.2905aa3c-57a0-457d-a5be-f0eea3e80cf3.cbea4fc4-0504-4fdf-8452-c8af2670d40c" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.155.14507726714197033.ea391b48-d8cb-4724-a6cb-765168bd5161.3cfc32f8-f682-490e-9e59-cd6548a4c102" ] }, "releaseDate": "2019-12-19", @@ -2068,21 +2882,33 @@ { "productTitle": "Phoenix Wright: Ace Attorney Trilogy", "productId": "C4R4RB3SB1NN", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.24919.67362291782661543.eb0267ee-9235-487a-b697-5cc49c0703c1.09bceba4-8a47-408c-ae18-509fc2c3759b" + ] + }, "releaseDate": "2019-04-09", "storePage": "https://www.xbox.com/en-us/games/store/phoenix-wright-ace-attorney-trilogy/C4R4RB3SB1NN" }, { "productTitle": "Pillars of Eternity 2: Deadfire - Ultimate Edition (PC)", "productId": "9N8N7NZSVTG3", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.10942.14218490899188575.a8c726f9-aa48-4378-bee2-0dffc21a7089.4b82a2de-3303-4ebf-aa9e-168b159f6207" + ] + }, "releaseDate": "2021-03-25", "storePage": "https://www.xbox.com/en-us/games/store/pillars-of-eternity-2-deadfire-ultimate-edition-pc/9N8N7NZSVTG3" }, { "productTitle": "Pillars of Eternity: Definitive Edition", "productId": "9N1P6T7ZQ2KF", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21764.13901718808565748.bd4d392b-4244-482f-a55e-94b9251f086f.fba7b3c6-1891-46f8-81ed-c262baa017bb" + ] + }, "releaseDate": "2020-03-10", "storePage": "https://www.xbox.com/en-us/games/store/pillars-of-eternity-definitive-edition/9N1P6T7ZQ2KF" }, @@ -2092,6 +2918,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.60012.13893421366981179.51ad56f7-1d70-465a-9fc2-517da8c59416.262a3d6d-b2cd-47a7-b308-784e913d328f" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.49482.13893421366981179.51ad56f7-1d70-465a-9fc2-517da8c59416.6412d295-de04-414c-adc0-02a0d2f35a8b" ] }, "releaseDate": "2023-05-23", @@ -2101,6 +2930,9 @@ "productTitle": "PlateUp!", "productId": "9P2HHT3VS7MP", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6386.14557765520174668.1718d940-8154-42aa-b7e5-83e812dac193.d16628c9-c059-4d00-8535-63d2cfe4a1a5" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.53054.14557765520174668.1718d940-8154-42aa-b7e5-83e812dac193.d269caed-82e9-4709-a743-a84fc3aef3d5" ] @@ -2111,7 +2943,11 @@ { "productTitle": "PowerWash Simulator", "productId": "9NHDJC0NW20M", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60360.13631853399995812.7c8d5b79-31b8-46af-9143-329dfb697258.813651fd-f64f-4d40-a513-0584c3e6d6a5" + ] + }, "releaseDate": "2022-07-14", "storePage": "https://www.xbox.com/en-us/games/store/powerwash-simulator/9NHDJC0NW20M" }, @@ -2119,6 +2955,9 @@ "productTitle": "Prey", "productId": "9PBC1QFBW563", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11350.14126121726701460.448f0d1c-b127-4b9d-b41d-b4025f0487ad.50933228-c52d-4364-8e63-1994665568ce" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.33621.14126121726701460.448f0d1c-b127-4b9d-b41d-b4025f0487ad.77ba10be-afdf-4d44-b0ae-376ca9940930" ] @@ -2129,28 +2968,44 @@ { "productTitle": "Psychonauts (Windows 10)", "productId": "9NCT87FKQ4GM", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.28716.13561496157760288.f7bf4326-45d3-4a39-8977-2f5f5ce39a58.c5066da9-cb57-4091-9818-6f9811c23cf7" + ] + }, "releaseDate": "2021-05-13", "storePage": "https://www.xbox.com/en-us/games/store/psychonauts-windows-10/9NCT87FKQ4GM" }, { "productTitle": "Psychonauts 2", "productId": "9NBR2VXT87SJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17302.13578175979543723.424401c3-5602-4e35-abfc-c00f9156296a.e6d1e593-0006-4b73-886e-dd37b6626198" + ] + }, "releaseDate": "2021-08-25", "storePage": "https://www.xbox.com/en-us/games/store/psychonauts-2/9NBR2VXT87SJ" }, { "productTitle": "Quake", "productId": "9P1Z43KRNQD4", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.31797.14497943460299347.3ad06bb4-d442-43a2-99e0-f41399a5b03e.d1944e73-cd9b-4fd2-914c-4a4c3db63b39" + ] + }, "releaseDate": "2021-08-19", "storePage": "https://www.xbox.com/en-us/games/store/quake/9P1Z43KRNQD4" }, { "productTitle": "Quake 4", "productId": "9P2JXK37PFLZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58635.14561296657701490.8a3c58fd-37c6-4dd1-a53f-f41ff63c20a8.22556c8a-6247-4af8-8e54-bede1c363535" + ] + }, "releaseDate": "2022-08-18", "storePage": "https://www.xbox.com/en-us/games/store/quake-4/9P2JXK37PFLZ" }, @@ -2158,6 +3013,9 @@ "productTitle": "Quake II", "productId": "9P7L9H478GGV", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18071.14105366677060737.2503bfc2-efe7-4772-9a81-c5a231a5057d.3250d552-459e-4b9c-886d-ec3bebedcc98" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.53217.14105366677060737.98d9bc7f-d623-4c29-b01d-326bd6f11a1a.19bc2dda-8723-4174-a91e-553cacb2a159" ] @@ -2168,7 +3026,11 @@ { "productTitle": "Quake III Arena", "productId": "9NWNLS28ZG37", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29341.14446194801384982.3fae32b7-042d-4187-996b-b410a4650a54.56409594-243e-4827-8713-85ece1089d88" + ] + }, "releaseDate": "2021-08-19", "storePage": "https://www.xbox.com/en-us/games/store/quake-iii-arena/9NWNLS28ZG37" }, @@ -2178,6 +3040,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.58987.13510798886714035.b2865d36-6481-42f1-b535-9300f0971c58.be79ec74-9c21-4c54-804b-392877794836" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.381.13510798886714035.8e10fb20-1d7f-401b-b695-09f0851b5936.205769d8-417a-4eb8-9a7e-1546d7f0ab4f" ] }, "releaseDate": "2016-04-05", @@ -2186,7 +3051,11 @@ { "productTitle": "RAGE 2 (PC)", "productId": "9P2J7WHV0K4N", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25597.14561404876525623.2a22910b-625c-4317-ba57-221eb5b7e5b9.59ae8014-f78e-4cdf-94cc-9031c21d5e48" + ] + }, "releaseDate": "2019-11-14", "storePage": "https://www.xbox.com/en-us/games/store/rage-2-pc/9P2J7WHV0K4N" }, @@ -2196,6 +3065,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.47882.14293952320453711.7b0495b8-be6b-4fbc-9d4c-95bf880b7637.e11628b9-391e-48d0-b70b-9e82e499dc7f" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29645.14293952320453711.7b0495b8-be6b-4fbc-9d4c-95bf880b7637.aee8335d-6c09-4147-bf12-78be5fd5ecb2" ] }, "releaseDate": "2021-10-05", @@ -2210,6 +3082,9 @@ "https://store-images.s-microsoft.com/image/apps.33940.13510798886186651.318d51ee-64f7-4e1c-a7fc-377134776500.e0a2b514-cb92-4ccf-95f7-6d09171aa9c7", "https://store-images.s-microsoft.com/image/apps.20246.13510798886186651.52fa185c-aa0e-4455-bd24-ca7050c32d23.e272595f-5aa6-4362-b92b-94b4244af6a9", "https://store-images.s-microsoft.com/image/apps.8347.13510798886186651.4d9ba866-a3bb-4ec5-9791-5b5380b509df.defe5b86-8663-4638-a26c-9716b7838b82" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34726.13510798886186651.76cfa366-2ebc-44ea-984f-6bf954e4c742.3a35291d-d9c2-451a-ab83-e043aba71471" ] }, "releaseDate": "2016-09-13", @@ -2218,14 +3093,22 @@ { "productTitle": "Redfall", "productId": "9P8JRMWRQP4H", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5939.14091188428798620.2f105d2c-1b7f-4fd0-b12e-5483087f47d1.57847b73-9461-4b45-b70e-8cb1e89da909" + ] + }, "releaseDate": "2023-05-02", "storePage": "https://www.xbox.com/en-us/games/store/redfall/9P8JRMWRQP4H" }, { "productTitle": "Remnant II® - Standard Edition", "productId": "9P9278ZMGQLJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.45590.14081014349971267.d4f5e4f0-b6a4-4b3a-a03e-37c8a633409c.66323a15-debc-4bd7-8f3c-92152e243a89" + ] + }, "releaseDate": "2023-07-25", "storePage": "https://www.xbox.com/en-us/games/store/remnant-ii-standard-edition/9P9278ZMGQLJ" }, @@ -2233,6 +3116,9 @@ "productTitle": "Remnant: From the Ashes", "productId": "9PBHXGWZTS2N", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63497.14118342467613503.328c9673-d2e4-481d-871f-02b381f9ae5e.8b86b6e7-5a71-477b-9007-98695fd56101" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.23721.14118342467613503.328c9673-d2e4-481d-871f-02b381f9ae5e.77290461-1e87-48ea-9546-3fab7e7d378c" ] @@ -2243,21 +3129,33 @@ { "productTitle": "RESIDENT EVIL 2", "productId": "BWMH951M3G3P", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.38246.71571739681700792.c61fa2d7-3d69-4edf-8e51-accc41d47823.9197ae9d-181d-44ff-a98d-7f64086f509e" + ] + }, "releaseDate": "2019-01-25", "storePage": "https://www.xbox.com/en-us/games/store/resident-evil-2/BWMH951M3G3P" }, { "productTitle": "RESIDENT EVIL 3 for Windows", "productId": "9P7T44TTDL7M", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4880.14101200251439450.ecb966a9-f74c-4e59-85e5-40480fa1f7ad.196cb8b3-f704-471f-87d7-6cc5506a5958" + ] + }, "releaseDate": "2024-02-13", "storePage": "https://www.xbox.com/en-us/games/store/resident-evil-3-for-windows/9P7T44TTDL7M" }, { "productTitle": "Return to Castle Wolfenstein", "productId": "9N1WT4X26SHW", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29278.13967749296389194.10d4dd3f-5a58-4458-be2d-7f2ad1e13b24.b7d41663-a7d5-4bb3-a2c1-4d08cca207fa" + ] + }, "releaseDate": "2022-08-18", "storePage": "https://www.xbox.com/en-us/games/store/return-to-castle-wolfenstein/9N1WT4X26SHW" }, @@ -2265,6 +3163,9 @@ "productTitle": "Return to Grace", "productId": "9MWZF0Q94B8L", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2941.13834568726702397.4f9f6429-a07d-45b4-ae57-230b11267429.e38dc25e-18f6-4e25-8a7d-16ceee2f61d7" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.14673.13834568726702397.4f9f6429-a07d-45b4-ae57-230b11267429.9a3b548c-ac74-4c27-b118-95bd88132385" ] @@ -2276,6 +3177,9 @@ "productTitle": "Return to Monkey Island", "productId": "9PC4R8N1N2T6", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41133.14176324986442763.11fa95be-f98f-4be1-a416-9571cd1286df.bbee7d3d-c543-476f-8cfe-4e58d8977b81" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.32252.14176324986442763.11fa95be-f98f-4be1-a416-9571cd1286df.850d22ab-9787-4dee-b0de-3e4d59b1dc35" ] @@ -2290,6 +3194,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.62608.14372382618520757.c9c606c7-aefc-4941-b075-041b8dd7e99b.9cd83749-7566-45fe-8fdf-90e0eb704ff2", "https://store-images.s-microsoft.com/image/apps.20096.14372382618520757.bc08dd7e-a1fe-4dab-96b6-179b7e7179a4.5aa2d2e6-e1a6-4c0c-8ab2-e1b906d1d0d4" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36683.14372382618520757.4838e0da-8150-4c53-85e0-376821d93733.c2ae50e6-75c4-4eb9-88c7-38ca8124bb10" ] }, "releaseDate": "2017-09-14", @@ -2302,6 +3209,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.45334.13510798886621078.3f3ca8cc-9e57-4af9-9251-f2ed8ba5e3ab.09c6a44c-aff8-4140-939c-e17b701d1ff8", "https://store-images.s-microsoft.com/image/apps.65159.13510798886621078.29b02068-cffe-4bc6-a3dd-668fc485009c.5c061555-1d91-4d6c-a2b3-b58398437fca" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4120.13510798886621078.d9c26d6d-0bcd-412a-9ac7-49a02514c594.9cf7ffc4-fd94-4953-b05c-24c49e50a2c0" ] }, "releaseDate": "2016-01-22", @@ -2313,6 +3223,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.61951.14105414348544973.9bef7109-ae4f-4d2d-840a-a27f3acfe32a.af473551-09b3-4c01-bca5-8bc958c55946" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3458.14105414348544973.9bef7109-ae4f-4d2d-840a-a27f3acfe32a.21f26093-535f-4d70-ab16-aa32791369ae" ] }, "releaseDate": "2024-06-27", @@ -2322,6 +3235,9 @@ "productTitle": "Roboquest", "productId": "9P47S7NJGWZL", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47475.14593591481307987.1e2d6495-99f7-469f-afa9-16c05216b58f.a92545a2-db22-430c-aeeb-911d568f876f" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.4681.14593591481307987.72e4b0a6-f3d5-43bf-bcbf-7412b16dca48.7a62f094-7b6d-499f-b2b1-99ba3cf11e5b" ] @@ -2332,14 +3248,22 @@ { "productTitle": "Rollerdrome", "productId": "9PH4TQ1T0VRZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12037.14238209188187584.16998e2b-4b4b-441e-b9f8-cd3265cedfd9.e40fa62a-4a40-4343-915d-ef8422069d8f" + ] + }, "releaseDate": "2023-11-28", "storePage": "https://www.xbox.com/en-us/games/store/rollerdrome/9PH4TQ1T0VRZ" }, { "productTitle": "Rolling Hills: Make Sushi, Make Friends", "productId": "9N491626R5XP", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63128.13987004839193022.e60f93d4-33b6-450a-9e73-fd2c1a2733ce.98ab9867-d965-4c1b-94d4-742f78552cff" + ] + }, "releaseDate": "2024-06-04", "storePage": "https://www.xbox.com/en-us/games/store/rolling-hills-make-sushi-make-friends/9N491626R5XP" }, @@ -2350,6 +3274,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.27934.14538559069860396.166f30a2-711b-4aa1-bac7-d64318783f52.1156487a-3ded-4170-b904-27f2d0596154", "https://store-images.s-microsoft.com/image/apps.22130.14538559069860396.3cff3543-5cdd-4262-a28f-0b1a128c2ba4.0f7d02d7-549a-418e-9c80-830fa296a6f0" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54193.14538559069860396.375a4717-d4e1-4c14-b278-f4787b52d21a.8ccfcf77-d0bc-4895-a1e6-f70806a4a045" ] }, "releaseDate": "2017-10-31", @@ -2361,6 +3288,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.9287.14099938228729765.8d5a9e65-d0cf-4c5b-9131-eaba39ee8b29.3fa90856-57b8-4318-a8fa-103d6125d865" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.28428.14099938228729765.8d5a9e65-d0cf-4c5b-9131-eaba39ee8b29.90e33be6-7387-474f-8995-ebf190b13c23" ] }, "releaseDate": "2024-06-15", @@ -2369,7 +3299,11 @@ { "productTitle": "Scorn", "productId": "9NM3TNRPQXLR", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51381.13699799412731780.9f7b812e-456c-430e-8cec-380f1ca9e4a2.dd9f4725-f6e0-4fe4-9484-9d5f22682786" + ] + }, "releaseDate": "2022-10-14", "storePage": "https://www.xbox.com/en-us/games/store/scorn/9NM3TNRPQXLR" }, @@ -2377,6 +3311,9 @@ "productTitle": "Sea of Stars", "productId": "9NLLTTJZH40L", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.15983.13704965593711325.c8ed22ec-c56d-4ecd-bbbf-e9f6934161c4.d2575e67-38eb-47b6-a87d-b9ea9b55cfe1" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.21103.13704965593711325.c8ed22ec-c56d-4ecd-bbbf-e9f6934161c4.7af47ffa-9b22-44e3-a65e-3fa2aaf99fe1" ] @@ -2390,6 +3327,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.56766.14554784103656548.1bd22c11-ff12-4b02-9b49-1355a5fc9de6.39a78b6a-b180-4000-92eb-149e78325cb5" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29048.14554784103656548.1bd22c11-ff12-4b02-9b49-1355a5fc9de6.b467577d-e607-4610-bbb3-282354d02586" ] }, "releaseDate": "2018-03-20", @@ -2398,7 +3338,11 @@ { "productTitle": "Senua’s Saga: Hellblade II", "productId": "9PMBB7NGHV95", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57396.14301289549560004.6fe923e6-edd9-4677-9763-5ea1512de41b.a437513f-a4ef-400b-bfd7-bc73c8ecf1af" + ] + }, "releaseDate": "2024-05-21", "storePage": "https://www.xbox.com/en-us/games/store/senua-s-saga-hellblade-ii/9PMBB7NGHV95" }, @@ -2406,6 +3350,9 @@ "productTitle": "Serious Sam: Siberian Mayhem", "productId": "9P8X7236WM5P", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64730.14549842084824317.93984916-8beb-46f0-913b-55c1288d3f80.e5252212-da42-4ff5-b7b6-e97eb001d099" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.37390.14549842084824317.93984916-8beb-46f0-913b-55c1288d3f80.94893e3d-a6d1-489e-a6e1-04d42954a274" ] @@ -2416,42 +3363,66 @@ { "productTitle": "Shadow of the Tomb Raider Definitive Edition", "productId": "BNQQ3WVBNZCQ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41412.68112460555114547.f599eff6-c432-4510-af15-bfe339796812.6c84bc32-c1a0-4a5f-bfd3-08bee3ad6365" + ] + }, "releaseDate": "2019-11-05", "storePage": "https://www.xbox.com/en-us/games/store/shadow-of-the-tomb-raider-definitive-edition/BNQQ3WVBNZCQ" }, { "productTitle": "Shadowrun Returns PC", "productId": "9NF0RBL8SZL6", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.55573.14009816262451240.3e3808e2-1e94-4457-b77b-8450027fa25a.12a5baa8-dec7-4fe0-ba05-3b068d35b733" + ] + }, "releaseDate": "2023-05-09", "storePage": "https://www.xbox.com/en-us/games/store/shadowrun-returns-pc/9NF0RBL8SZL6" }, { "productTitle": "Shadowrun: Dragonfall - Director's Cut PC", "productId": "9NMCRMS6WN78", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.13822.13694560541988629.404a1929-0139-4389-915a-08adce5378f7.0bf83dd5-d37b-48e1-80ab-8bfd7e8e5b71" + ] + }, "releaseDate": "2023-05-09", "storePage": "https://www.xbox.com/en-us/games/store/shadowrun-dragonfall-director-s-cut-pc/9NMCRMS6WN78" }, { "productTitle": "Shadowrun: Hong Kong - Extended Edition PC", "productId": "9NK2DT3K7DTF", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.24618.13665130616065796.259fa9cc-1e13-4a07-940b-34efb8bf3b11.fcc6e0b8-20ae-487a-8dc3-b727186e68f3" + ] + }, "releaseDate": "2023-05-09", "storePage": "https://www.xbox.com/en-us/games/store/shadowrun-hong-kong-extended-edition-pc/9NK2DT3K7DTF" }, { "productTitle": "Slay The Spire", "productId": "9MZQR8317S3B", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17795.14612220527269160.ea029917-6726-4b37-a510-8449863efad4.b02e1597-5ccb-4d20-84de-4c53b702bcbb" + ] + }, "releaseDate": "2019-06-09", "storePage": "https://www.xbox.com/en-us/games/store/slay-the-spire/9MZQR8317S3B" }, { "productTitle": "Slayers X: Terminal Aftermath: Vengance of the Slayer", "productId": "9P2Q0J0GW1FJ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.50045.14553231729498821.e9cc3b13-c182-473c-8a24-a1a8ef58f202.543c1532-d2f3-4bed-a711-179e967cb4ee" + ] + }, "releaseDate": "2023-06-01", "storePage": "https://www.xbox.com/en-us/games/store/slayers-x-terminal-aftermath-vengance-of-the-slayer/9P2Q0J0GW1FJ" }, @@ -2461,6 +3432,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.11126.14232893733292770.c4910fc1-e043-4370-be7c-79114ae9c0cf.e483936f-2b1f-4c66-99bd-7316b5920794" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.65089.14232893733292770.c4910fc1-e043-4370-be7c-79114ae9c0cf.d736574b-a3ed-4925-a26b-c05b56e621a5" ] }, "releaseDate": "2022-09-22", @@ -2470,6 +3444,9 @@ "productTitle": "Sniper Elite 5", "productId": "9PP8Q82H79LC", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.28227.14329012547000484.584f0993-bf4d-4047-854d-bac80c1f8bf8.e7de3480-7471-4d8b-8745-bd02162add7b" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.58335.14329012547000484.7cb39222-264a-4c98-a0f1-007c4e95f1e1.e2e964df-d308-4d33-9ec7-8588bc433477" ] @@ -2480,21 +3457,33 @@ { "productTitle": "SnowRunner (Windows 10)", "productId": "9NP6WL1XQDBW", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.55989.13728552621924096.0f7a693b-b178-499b-ac11-0ea8578f8480.75503e8c-6c2f-46c4-b4ac-ca13ac1c9c0f" + ] + }, "releaseDate": "2021-05-18", "storePage": "https://www.xbox.com/en-us/games/store/snowrunner-windows-10/9NP6WL1XQDBW" }, { "productTitle": "Soccer Story", "productId": "9PJ1045MHZJ0", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.16567.14225521066737419.4d59d91e-770c-4a84-9fda-21fa57c19bbc.a99bcfc5-804f-4e1f-8e14-e27ad70afbc4" + ] + }, "releaseDate": "2022-11-29", "storePage": "https://www.xbox.com/en-us/games/store/soccer-story/9PJ1045MHZJ0" }, { "productTitle": "Solar Ash", "productId": "9NWLPG23T46V", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46590.14447139401506273.b065025b-66d2-462a-858d-58dcc2dcb52b.2f7ec4f8-98c5-4a2c-b86d-f703c20832df" + ] + }, "releaseDate": "2023-09-14", "storePage": "https://www.xbox.com/en-us/games/store/solar-ash/9NWLPG23T46V" }, @@ -2504,6 +3493,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.2904.13901545943501690.6f65c9ca-e6b9-46e0-bfef-3d4b7f211abf.19b8f144-e64c-4830-bcec-cd4b3a2bc697" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51382.13901545943501690.6f65c9ca-e6b9-46e0-bfef-3d4b7f211abf.087d7caa-7f19-43de-8558-dd8c3c559a27" ] }, "releaseDate": "2022-11-15", @@ -2513,6 +3505,9 @@ "productTitle": "Space Engineers", "productId": "9NLV3X229LG1", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.9842.13700230312728802.7afc83a6-4afb-4b07-84b4-f40e24213a93.d1ea4d67-7604-4fa5-a7b7-fd15b875814e" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.2918.13700230312728802.7afc83a6-4afb-4b07-84b4-f40e24213a93.b98f6584-05fa-49ef-8ff1-bee034061ed7" ] @@ -2524,6 +3519,9 @@ "productTitle": "SpiderHeck", "productId": "9N0TRF57SMQH", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.49869.13918689285493336.0819ed4c-c94e-42c7-bd95-af9916211f52.ee71f670-1904-4520-89fe-e3946aa7f270" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.21835.13918689285493336.4bf1a4e7-a4e7-44dd-bf65-ae9d46e2f2e2.86640b7f-c3a6-4078-99e1-0ffdf59fd3d4" ] @@ -2535,6 +3533,9 @@ "productTitle": "Spirit of the North: Enhanced Edition", "productId": "9MVL42NJFVZ2", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61959.13861734152045967.56f8a6b3-4b54-46c1-82f0-aa8892021972.2e5fbfd7-9c26-48ea-88ba-9044d55916dd" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.1065.13861734152045967.56f8a6b3-4b54-46c1-82f0-aa8892021972.4c293164-b69e-4ad0-bc7f-7ceda0a57e64" ] @@ -2551,6 +3552,9 @@ "https://store-images.s-microsoft.com/image/apps.27271.13581632098060782.3a95693e-c954-45c8-b6a8-bf6251679426.42bc9146-067c-4cc8-be10-7bea0e993b48", "https://store-images.s-microsoft.com/image/apps.65385.13581632098060782.3a95693e-c954-45c8-b6a8-bf6251679426.1908cfbc-e441-47a8-9d57-b0208938692c", "https://store-images.s-microsoft.com/image/apps.51598.13581632098060782.9aea914f-fc5f-474f-a052-eac22427e863.b65a9c2f-8511-4520-bfb0-b8f3cf37de41" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11046.13581632098060782.9aea914f-fc5f-474f-a052-eac22427e863.2b12f018-928c-4244-bada-52eff11c91a7" ] }, "releaseDate": "2020-08-18", @@ -2559,35 +3563,55 @@ { "productTitle": "Spirittea", "productId": "9PPK59BXLD4N", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.13831.14327532839373067.e3a24cb8-3eb5-47ad-8d1b-19797522f44c.553a1818-0cbe-4e82-be6c-e3b5ba737a78" + ] + }, "releaseDate": "2023-11-13", "storePage": "https://www.xbox.com/en-us/games/store/spirittea/9PPK59BXLD4N" }, { "productTitle": "SpongeBob SquarePants: Battle for Bikini Bottom - Rehydrated", "productId": "9PKQX8PCHNH2", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5700.14261811949763403.eb7f3a90-034e-4bdf-b293-c7e2b1bfadf4.e462348b-a280-4ec5-aed9-46d2b39d9057" + ] + }, "releaseDate": "2024-02-06", "storePage": "https://www.xbox.com/en-us/games/store/spongebob-squarepants-battle-for-bikini-bottom-rehydrated/9PKQX8PCHNH2" }, { "productTitle": "Starbound", "productId": "9MTSBWPWPQVQ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4073.13802186359317829.b9acdcf9-2e05-4328-812d-253b5ab5de76.57b01b45-19b8-4cb5-aac8-10dbabcd36f8" + ] + }, "releaseDate": "2020-12-08", "storePage": "https://www.xbox.com/en-us/games/store/starbound/9MTSBWPWPQVQ" }, { "productTitle": "Stardew Valley", "productId": "9MWR1NC6VQ6L", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60729.13838479673159593.08fca22c-85fe-467d-8f34-cca2715208c0.851da9d8-785c-41b3-914a-3b0888956c97" + ] + }, "releaseDate": "2021-12-02", "storePage": "https://www.xbox.com/en-us/games/store/stardew-valley/9MWR1NC6VQ6L" }, { "productTitle": "Starfield", "productId": "9NCJSXWZTP88", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1647.13567343664224659.1eb6fdf9-8a0b-4344-a135-ab17dfa3c609.39331391-9de2-48f8-8643-8eb1bd964383" + ] + }, "releaseDate": "2023-09-06", "storePage": "https://www.xbox.com/en-us/games/store/starfield/9NCJSXWZTP88" }, @@ -2597,6 +3621,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.43642.14425140369408817.14846606-f5bc-4fb1-b355-26ef6a25e847.281240fb-379d-4800-9b0a-b36b5935daa7" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62160.14425140369408817.14846606-f5bc-4fb1-b355-26ef6a25e847.e14fc031-2974-4b66-9f84-16cf8d0807e9" ] }, "releaseDate": "2018-05-22", @@ -2606,6 +3633,9 @@ "productTitle": "SteamWorld Build", "productId": "9MVRDC1BW8TQ", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.45290.13858202694912107.53904b7d-bf97-47b6-a406-1a093f06954b.b574bb06-00d6-4ef7-89be-31e3a1a3cf48" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.63454.13858202694912107.53904b7d-bf97-47b6-a406-1a093f06954b.0b3dc3f3-712f-4026-b33e-df76038b7d04" ] @@ -2622,6 +3652,9 @@ "https://store-images.s-microsoft.com/image/apps.61224.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.39fb7745-dc89-409e-8b20-4bec528fd4ac", "https://store-images.s-microsoft.com/image/apps.54682.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.ac2b0e7b-6e4b-468e-96de-a04143a4ba6b", "https://store-images.s-microsoft.com/image/apps.8433.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.d0c1263d-37b9-4a0c-9809-afe66d536ba6" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58215.14599425922253294.95904bbc-623a-4bdd-83de-0dcc69babd49.71f222da-6de4-4d02-8d6a-231a05e6b671" ] }, "releaseDate": "2018-11-21", @@ -2630,7 +3663,11 @@ { "productTitle": "Stellaris", "productId": "9NXQPGMR917R", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6834.14495165831263442.20e8e941-d5c0-4577-b5bd-c4b8a2c58715.dd0c47fa-1927-4735-913c-59412a28d084" + ] + }, "releaseDate": "2019-10-09", "storePage": "https://www.xbox.com/en-us/games/store/stellaris/9NXQPGMR917R" }, @@ -2640,6 +3677,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.9370.14049385901429569.1b471d6f-67fc-4289-a4a1-f821ac6594e6.4a82d733-4ab1-4800-a7a9-726158deca80" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.32401.14049385901429569.1b471d6f-67fc-4289-a4a1-f821ac6594e6.2e505891-64ef-4c03-b981-ec7127756146" ] }, "releaseDate": "2024-06-18", @@ -2651,6 +3691,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.36649.13736301732248840.1e2d854a-e5e9-4c32-b8a1-2630937d19b9.f8d37f47-d33a-4408-93f2-1aa6857e771e" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.19746.13736301732248840.1e2d854a-e5e9-4c32-b8a1-2630937d19b9.70b8421f-ec86-4d13-9b7a-f61055a25868" ] }, "releaseDate": "2018-11-16", @@ -2662,6 +3705,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.18265.14315077775214047.0aff2cf3-0ff7-4629-8ad6-722a2d8dac54.8bbbd953-eac8-44fb-ac0f-b3abffb2a7c4" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59988.14315077775214047.1727bea1-8d3c-4f02-ba4e-ca1614c98632.199d8c4c-652f-421f-a68c-f6c285885d03" ] }, "releaseDate": "2017-11-07", @@ -2673,6 +3719,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.3858.14383048766618347.734b0c9a-e030-4976-bf99-73f141752531.08f6c65c-abce-4c54-bd0e-ef73b94e8b17" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.24763.14383048766618347.734b0c9a-e030-4976-bf99-73f141752531.347d5269-0e81-483c-beed-f54d82584012" ] }, "releaseDate": "2020-07-16", @@ -2682,6 +3731,9 @@ "productTitle": "Superliminal", "productId": "9NVR4ZQKNBSB", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47663.14393569011623061.24d2b16b-20df-48f4-b265-623d2c0e948a.37ffa286-743f-4c55-9e7d-7c93def066a0" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.13828.14393569011623061.b29fd711-0008-450d-88a9-21d006202686.f1d07399-e50d-4d80-9255-20edce3b1277" ] @@ -2692,21 +3744,33 @@ { "productTitle": "Tales of Arise (Windows)", "productId": "9PJ1T02FGC3B", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22334.14220579343208919.30d737b4-d1cd-4f53-ae6f-df6cc7a21450.05363308-4a0b-47b5-916c-cf50ca08e960" + ] + }, "releaseDate": "2024-02-20", "storePage": "https://www.xbox.com/en-us/games/store/tales-of-arise-windows/9PJ1T02FGC3B" }, { "productTitle": "Tchia", "productId": "9NK4WRQX5ZC5", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29862.13667888518526652.393ec2ec-cfcf-4c3f-9526-8f76e651c1e3.56ee0e8e-fa28-4ffd-849c-6fa5c297280e" + ] + }, "releaseDate": "2024-07-11", "storePage": "https://www.xbox.com/en-us/games/store/tchia/9NK4WRQX5ZC5" }, { "productTitle": "Techtonica (Game Preview)", "productId": "9NR1RVDK9T78", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30698.13758483650312929.6e0b010e-d61b-4a3f-9188-5feb34880778.0dc3ac3d-3b2b-4ae5-a642-358d41d6f6ea" + ] + }, "releaseDate": "2023-07-18", "storePage": "https://www.xbox.com/en-us/games/store/techtonica-game-preview/9NR1RVDK9T78" }, @@ -2716,6 +3780,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.52487.14375592271313618.8101bdfc-97e9-473f-8ca0-07fc83b1846b.b47a3bfe-dbb6-497e-ae52-194d08f3ca14" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59000.14375592271313618.c7999e35-c8d7-49d4-b3fa-e5e1009423d7.a816f588-b6ba-46c0-8f39-54ca543455cf" ] }, "releaseDate": "2022-06-16", @@ -2724,7 +3791,11 @@ { "productTitle": "Tell Me Why: Chapters 1-3", "productId": "9NF83PRZK6K3", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.56500.13599353568798630.567fc0f9-a81e-456c-a9ee-55bb0bb153b5.a110b76d-abae-4dd7-a578-a796ea66ff53" + ] + }, "releaseDate": "2020-08-27", "storePage": "https://www.xbox.com/en-us/games/store/tell-me-why-chapters-1-3/9NF83PRZK6K3" }, @@ -2732,6 +3803,9 @@ "productTitle": "Terra Invicta (Game Preview)", "productId": "9PB0GLGXQZ83", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39082.14128659347127760.611a70ab-c4a0-44f5-bbe1-82cf10127bba.bbc5f4cf-8f3c-497a-aee5-394468c46fe4" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.4276.14128659347127760.611a70ab-c4a0-44f5-bbe1-82cf10127bba.fcb80a03-efe5-44ff-a317-4e533e7717f0" ] @@ -2742,7 +3816,11 @@ { "productTitle": "The Bard's Tale ARPG : Remastered and Resnarkled", "productId": "9PN3VDFTB5HZ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44758.14351919773829236.17768c0e-ff0d-4fe7-86a5-a0cdd0bfe3a6.697c7bb1-b26f-4759-a90b-d2dbac5e5b2e" + ] + }, "releaseDate": "2020-06-18", "storePage": "https://www.xbox.com/en-us/games/store/the-bard-s-tale-arpg-remastered-and-resnarkled/9PN3VDFTB5HZ" }, @@ -2750,6 +3828,9 @@ "productTitle": "The Bard's Tale IV: Director's Cut", "productId": "C2B4T86TXLRS", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34604.65351109767529701.defb4d0d-acab-4fd9-8208-7283068f991e.34d0241a-bbac-43d8-8e46-541283f89936" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.36316.65351109767529701.defb4d0d-acab-4fd9-8208-7283068f991e.6b97d62c-22a0-40e7-8e31-6d156a3fd775" ] @@ -2761,6 +3842,9 @@ "productTitle": "The Bard's Tale Trilogy", "productId": "9MVN4ND41DD3", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58193.13855942306543540.f07392fd-5f64-460d-82f5-27790455d1e0.be4aa1b8-dc12-4784-9111-96d6c245d360" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.55499.13855942306543540.f07392fd-5f64-460d-82f5-27790455d1e0.212ecde0-cef2-4aa2-8f20-e0b42caaaa40" ] @@ -2774,6 +3858,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.4418.14465388396342523.28ec13a2-04a9-4247-986a-5d1303ace16b.409cfd37-7ffa-4deb-81e1-f7e175cd192d" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1749.14465388396342523.f3be3027-1fd8-4a1e-9cb7-5194d8be4620.121676c8-fc98-4325-a9e3-c7212008d2c1" ] }, "releaseDate": "2021-08-31", @@ -2783,6 +3870,9 @@ "productTitle": "The Callisto Protocol™ for Xbox One", "productId": "9P33X3C755SK", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23409.13899734166918467.3f3aa4b8-07e8-448a-a5a2-f2a9dbcf9c7c.76deeaf0-0bdc-4ef6-abb2-950a71addfd3" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.25791.13899734166918467.3f3aa4b8-07e8-448a-a5a2-f2a9dbcf9c7c.d6195f2c-d1c6-43b1-b6c4-972e36debfb6" ] @@ -2796,6 +3886,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.2707.13517632720763203.9431a067-e43c-4a7c-8792-a79a71e66ccb.9843519e-7e80-48f9-80f3-a6347ef8c91c" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37949.13517632720763203.9431a067-e43c-4a7c-8792-a79a71e66ccb.932cb718-137c-4610-ac38-5b5f62f9f9e1" ] }, "releaseDate": "2024-07-09", @@ -2804,42 +3897,66 @@ { "productTitle": "The Elder Scrolls Adventures: Redguard", "productId": "9PFXKRLVWJ0B", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51057.14196134042192885.dae518aa-30ee-48cd-90b1-dd41fe82de5d.057fd442-7717-46e6-899b-50f4fd4afad1" + ] + }, "releaseDate": "2022-08-18", "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-adventures-redguard/9PFXKRLVWJ0B" }, { "productTitle": "The Elder Scrolls III: Morrowind Game of the Year Edition (PC)", "productId": "9PP7XSG5LDH1", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.9533.14329181907474580.fffa1d70-f0e3-45ee-b468-096880ec659e.4c8c178b-4fa3-4a88-9705-f8f16e28e8b6" + ] + }, "releaseDate": "2021-03-12", "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-iii-morrowind-game-of-the-year-edition-pc/9PP7XSG5LDH1" }, { "productTitle": "The Elder Scrolls IV: Oblivion Game of the Year Edition (PC)", "productId": "9P2J5D12GJL5", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.23347.14561494258435094.d6315fcc-92fc-49c5-ae5f-bcfe4b00d359.d5143502-3ae6-42d5-afe1-36ded10aec4c" + ] + }, "releaseDate": "2021-03-12", "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-iv-oblivion-game-of-the-year-edition-pc/9P2J5D12GJL5" }, { "productTitle": "The Elder Scrolls V: Skyrim Special Edition (PC)", "productId": "9P03JGQ4S1GC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4794.14468615562328340.fdd2a6d3-ed01-4e8e-805a-630a8e7dcd61.86ec042a-e701-477f-a9a3-3b041045512b" + ] + }, "releaseDate": "2021-03-11", "storePage": "https://www.xbox.com/en-us/games/store/the-elder-scrolls-v-skyrim-special-edition-pc/9P03JGQ4S1GC" }, { "productTitle": "The Evil Within (PC)", "productId": "9MX8R81JW1B5", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.49736.13894410513470682.4f7c3955-a1cd-4972-bbd3-e3440bb7249f.26cbdda6-3f47-4078-ad2f-e7927c07ffbd" + ] + }, "releaseDate": "2021-03-12", "storePage": "https://www.xbox.com/en-us/games/store/the-evil-within-pc/9MX8R81JW1B5" }, { "productTitle": "The Evil Within® 2 (PC)", "productId": "9NT0NT8JQMQN", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54557.14357901597980003.4edfb4b0-c97f-4a84-b9e9-4c5d04198929.7b2c3a5f-824f-4be2-8837-7744051dc162" + ] + }, "releaseDate": "2021-06-13", "storePage": "https://www.xbox.com/en-us/games/store/the-evil-within-2-pc/9NT0NT8JQMQN" }, @@ -2847,6 +3964,9 @@ "productTitle": "The Gunk", "productId": "9P008L2LS87F", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1452.14466083566107896.f1b98327-0240-4097-b759-cc5bd89ee66e.5da87010-64a5-4dfb-9396-5e88d1630886" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.38178.14466083566107896.f1b98327-0240-4097-b759-cc5bd89ee66e.c08f0078-5fb3-4eaf-b154-c6c8c9a3ab6f" ] @@ -2857,7 +3977,11 @@ { "productTitle": "The Lamplighters League - PC Edition", "productId": "9PG4M7W805RB", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.8051.14192406611771095.413a2018-3c6b-4e07-a33c-5351dde0be37.26f0ca9d-9b82-4ee5-9968-32cfc9fee4bb" + ] + }, "releaseDate": "2023-10-03", "storePage": "https://www.xbox.com/en-us/games/store/the-lamplighters-league-pc-edition/9PG4M7W805RB" }, @@ -2865,6 +3989,9 @@ "productTitle": "The Last Case of Benedict Fox: Definitive Edition", "productId": "9PMNGB89CLJ2", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.13802.14290343103192837.c78c2314-95c1-46e6-900b-b8b53f190827.3b4beef5-3fa4-44a0-9986-8047b7947fe4" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.26733.14290343103192837.c78c2314-95c1-46e6-900b-b8b53f190827.3b392fd5-9c80-421d-aff3-28addbfc4fae" ] @@ -2880,6 +4007,9 @@ "https://store-images.s-microsoft.com/image/apps.29393.13841339086540201.963451fc-271b-4371-9180-313f491b5562.2696ebda-4e41-4a47-8cfc-f2ab1e82476e", "https://store-images.s-microsoft.com/image/apps.25689.13841339086540201.963451fc-271b-4371-9180-313f491b5562.e6e5cfee-b6e5-443a-8c29-7c91c9404e8d", "https://store-images.s-microsoft.com/image/apps.17407.13841339086540201.963451fc-271b-4371-9180-313f491b5562.d93b411a-1220-4014-b2aa-2942efec3eea" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41558.13841339086540201.963451fc-271b-4371-9180-313f491b5562.f4b7ad82-6697-4e2c-992c-87f722850f17" ] }, "releaseDate": "2019-10-25", @@ -2889,6 +4019,9 @@ "productTitle": "The Rewinder", "productId": "9PJ2HR6WGRND", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25972.14220055173742695.54d9b731-9a91-40c2-8bc9-07801594b8df.dea1da2f-5518-4339-a902-7303b4ac87f2" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.5779.14220055173742695.54d9b731-9a91-40c2-8bc9-07801594b8df.dc5a023c-94a6-47a9-bb4f-6b984b1a82fd" ] @@ -2904,6 +4037,9 @@ "https://store-images.s-microsoft.com/image/apps.21157.13510798887515946.26524538-cf92-428e-87ed-0f3fd2d67fc6.757cfb00-4f34-4c0e-8b1b-c6095389ea23", "https://store-images.s-microsoft.com/image/apps.16092.13510798887515946.49e886bf-61bb-414c-8ee3-370d4e1f3220.47ff32ad-b531-4c88-8d1d-a3be1440270d", "https://store-images.s-microsoft.com/image/apps.3658.13510798887515946.177c6d77-ffd5-4e77-9cf8-a8a727c41061.9f62a0d2-8555-4130-b2ab-7063fd3f69b1" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64194.13510798887515946.1668a199-23eb-481d-a173-7ad712869c6c.2090f7e7-5832-43be-873b-1c14beb35ebc" ] }, "releaseDate": "2017-02-23", @@ -2917,6 +4053,9 @@ "https://store-images.s-microsoft.com/image/apps.19277.13510798887515952.489b3e77-0968-4440-a2db-bd3d035fcf01.0221d9d1-18ec-4c50-883a-f1f315ae6671", "https://store-images.s-microsoft.com/image/apps.9551.13510798887515952.8eb5b712-9b6b-4525-b71f-2b90091b04c6.f4e39eae-75d7-45ed-a2dd-0b3ad63001e2", "https://store-images.s-microsoft.com/image/apps.52190.13510798887515952.1d5a71a3-f079-4d0c-9ff9-addad48658fd.1b47df41-4556-40bb-9475-483318831d3d" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34948.13510798887515952.84f00534-c6a8-4035-b383-c011f47cdfcd.d1b2f98a-b899-4525-9337-c50836933345" ] }, "releaseDate": "2017-03-08", @@ -2929,6 +4068,9 @@ "Logo": [ "https://store-images.s-microsoft.com/image/apps.18846.13715445583677913.34eb4509-87e7-4b84-95b4-f140459f5a92.0ac0fe8a-1a46-4b45-b099-cb67f97f33e1", "https://store-images.s-microsoft.com/image/apps.10330.13715445583677913.9255e94f-f6ef-43ee-96cc-014db1f03269.4ccf1cfa-4330-4333-b808-6d71c79f5efe" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2945.13715445583677913.9255e94f-f6ef-43ee-96cc-014db1f03269.b12059bc-0310-44ec-81e8-7aa477f182c0" ] }, "releaseDate": "2018-08-14", @@ -2937,7 +4079,11 @@ { "productTitle": "theHunter: Call of the Wild™ - Windows 10", "productId": "9NQV7C0G1040", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62485.13762125458177399.e3dc12bf-b35c-48a4-ae96-9cd3eda2895e.425b2c07-41dc-474e-8239-2d02c451d1fd" + ] + }, "releaseDate": "2021-11-30", "storePage": "https://www.xbox.com/en-us/games/store/thehunter-call-of-the-wild-windows-10/9NQV7C0G1040" }, @@ -2945,6 +4091,9 @@ "productTitle": "Thirsty Suitors", "productId": "9PLS01JRJCWB", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61304.14307611151014007.4b05f350-c598-4742-9e65-e2a06d52c9d0.7587e44f-d555-4f1b-abb0-1c4697aba684" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.46663.14307611151014007.4b05f350-c598-4742-9e65-e2a06d52c9d0.aab543ea-db24-4e2d-93f6-d3ac21719096" ] @@ -2956,6 +4105,9 @@ "productTitle": "This War of Mine: Final Cut", "productId": "9MT6TG9CXR2H", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37303.13818178861591472.06d4cfd1-e581-4b7f-8268-7ed2cfca3f35.cd9123c5-f36e-4501-bf53-082666b3fa48" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.48284.13818178861591472.06d4cfd1-e581-4b7f-8268-7ed2cfca3f35.c16f3c09-e1b5-4bb2-924e-4f06235ae319" ] @@ -2966,35 +4118,55 @@ { "productTitle": "Those Who Remain.", "productId": "9NFC3G481KKQ", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54737.13601994020140855.ad75bf96-90c8-4901-8634-e92b50e70e62.1671c3de-6056-4fe1-90cf-658f56096bf5" + ] + }, "releaseDate": "2024-01-16", "storePage": "https://www.xbox.com/en-us/games/store/those-who-remain/9NFC3G481KKQ" }, { "productTitle": "Tin Hearts", "productId": "9MZSWZD5TDZP", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33152.13863817766354324.d0b7376f-2625-4548-96cd-a79d6e667bd2.686d3362-0881-4f9a-b324-e93919de575e" + ] + }, "releaseDate": "2023-05-16", "storePage": "https://www.xbox.com/en-us/games/store/tin-hearts/9MZSWZD5TDZP" }, { "productTitle": "Tomb Raider: Definitive Edition", "productId": "BQXTS0SX4W0N", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62760.68847167288522183.9fdea778-258f-40d6-9f9e-fab92915bc6d.8b72a483-cc36-481c-8955-b036d99c243e" + ] + }, "releaseDate": "2014-01-28", "storePage": "https://www.xbox.com/en-us/games/store/tomb-raider-definitive-edition/BQXTS0SX4W0N" }, { "productTitle": "Torment: Tides of Numenera", "productId": "9NC0071DJ6XC", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47967.13573916410389292.c37074d3-3b34-4830-9506-f6a100b0dfd2.53aff9eb-1489-488c-a2d3-f95e79ea2851" + ] + }, "releaseDate": "2019-06-27", "storePage": "https://www.xbox.com/en-us/games/store/torment-tides-of-numenera/9NC0071DJ6XC" }, { "productTitle": "Totally Accurate Battle Simulator", "productId": "9PC4RWP34M2D", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25383.14176345306313891.79ca8837-5397-4838-85b6-4a8a9720856c.db23320a-e9f6-4ed3-87e5-db4a5e82a6fc" + ] + }, "releaseDate": "2019-12-20", "storePage": "https://www.xbox.com/en-us/games/store/totally-accurate-battle-simulator/9PC4RWP34M2D" }, @@ -3004,6 +4176,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.2372.14481391283536320.2e278a9d-b63d-454a-a60e-ac81b25b445c.e798630b-ee6c-4d88-b047-007f3499d117" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57565.14481391283536320.2e278a9d-b63d-454a-a60e-ac81b25b445c.392440ba-2841-42da-9eae-3624c032300b" ] }, "releaseDate": "2020-04-01", @@ -3017,6 +4192,9 @@ "https://store-images.s-microsoft.com/image/apps.17055.14364758607471359.6218d836-661b-4c35-bf90-504a0c7f3e9d.2a8bb3cb-195b-4d99-ae3b-34c98816e12c", "https://store-images.s-microsoft.com/image/apps.11782.14364758607471359.6218d836-661b-4c35-bf90-504a0c7f3e9d.d52009f8-d84d-4d68-92cc-d55bba2db6e9", "https://store-images.s-microsoft.com/image/apps.25596.14364758607471359.6218d836-661b-4c35-bf90-504a0c7f3e9d.c312ad3d-6957-4d8e-85b1-7a7d5e568f86" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.36330.14364758607471359.5497a0ed-4b70-4e20-ac65-ae6509b7e4e7.2a0a6dcc-1da1-4b74-94b5-04d22d21d0ab" ] }, "releaseDate": "2019-09-18", @@ -3028,6 +4206,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.39322.13702044937897358.8701ab78-da18-4c36-8c1e-3d4e6dfd60c9.a0be6178-25eb-43e3-9a52-170445da58fc" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5223.13702044937897358.8701ab78-da18-4c36-8c1e-3d4e6dfd60c9.31c8ed6f-acf1-4cf2-9863-640fe319abc3" ] }, "releaseDate": "2022-03-16", @@ -3037,6 +4218,9 @@ "productTitle": "Turbo Golf Racing", "productId": "9N6781PMXC02", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11806.14023533452078841.712f8f21-7efa-4130-9c82-a55506b403bb.21ffd0a4-fbd3-4ffb-bebb-b92e0f183d13" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.13479.14023533452078841.712f8f21-7efa-4130-9c82-a55506b403bb.5ce8027d-6c76-440e-b319-adaa3c696062" ] @@ -3050,6 +4234,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.61861.13607962435826086.cd471fe6-3dd8-4df9-a01c-9b94312c7c3b.a2e6940c-8bb9-4485-a593-392e842e9469" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.35008.13607962435826086.cd471fe6-3dd8-4df9-a01c-9b94312c7c3b.de4afa21-6d5d-4f8d-a486-9dbd8ce67615" ] }, "releaseDate": "2024-01-18", @@ -3058,7 +4245,11 @@ { "productTitle": "Unpacking", "productId": "9NH5HN11FG4M", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1461.13636460453065260.a236863a-02a2-47fd-bfee-b7b301312a6e.adcf4c68-73b9-45a5-9304-0c3d43be83f8" + ] + }, "releaseDate": "2021-11-02", "storePage": "https://www.xbox.com/en-us/games/store/unpacking/9NH5HN11FG4M" }, @@ -3066,6 +4257,9 @@ "productTitle": "Valheim (Game Preview)", "productId": "9NCBL78CG9N7", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17630.13571084888216164.36662f68-6598-4726-a32e-049a0335e9dc.5b30b27f-c31e-48f4-b097-26de1b97bd84" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.45431.13571084888216164.36662f68-6598-4726-a32e-049a0335e9dc.423ac20f-fb8c-4977-a41e-8f541a29692a" ] @@ -3079,6 +4273,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.57401.14160661575041057.2c4811ab-1f9a-403e-9d3b-601b0ce1905e.1b317d02-7e77-4468-a6e9-29a5ab534b03" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60062.14160661575041057.92e444db-ebb1-4665-8e17-3322a7fae71d.e4e983fc-203e-4894-87ac-a7cd35993538" ] }, "releaseDate": "2022-10-20", @@ -3087,7 +4284,11 @@ { "productTitle": "Warhammer 40,000: Boltgun - Windows", "productId": "9N41VHRQ5X8N", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.32152.13723933157550422.dd3f6d8d-3fe0-4721-8bd9-d3c3d678a239.c6addb40-8693-4e0c-b525-15767ee5c2db" + ] + }, "releaseDate": "2024-03-05", "storePage": "https://www.xbox.com/en-us/games/store/warhammer-40-000-boltgun-windows/9N41VHRQ5X8N" }, @@ -3097,6 +4298,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.48074.14421726920549205.4ed1a8ed-1549-4013-8769-b57c45ca99b5.daa0830c-a776-4941-80a0-dae56f440920" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63850.14421726920549205.4ed1a8ed-1549-4013-8769-b57c45ca99b5.3868786e-671a-4db9-9cb4-3e62b46ba619" ] }, "releaseDate": "2023-10-04", @@ -3110,6 +4314,9 @@ "https://store-images.s-microsoft.com/image/apps.41667.14440655325358467.1eec354a-75c3-4191-9e5f-a63d24496e1a.49692cc8-5cdb-4588-825f-d6ca9096e5a0", "https://store-images.s-microsoft.com/image/apps.62118.14440655325358467.1eec354a-75c3-4191-9e5f-a63d24496e1a.50d2d518-455a-4b1e-ab42-2c96abc96f13", "https://store-images.s-microsoft.com/image/apps.61095.14440655325358467.1eec354a-75c3-4191-9e5f-a63d24496e1a.46b5dc82-a216-42db-b5f0-46f1978fef4f" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57743.14440655325358467.0a9794a6-3645-4db4-a85e-c611d041111a.80dc7cd7-d40f-455f-9676-f0cf0946ae88" ] }, "releaseDate": "2023-10-31", @@ -3118,21 +4325,33 @@ { "productTitle": "Wasteland 2: Director's Cut", "productId": "C521HDXRTS7F", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44620.67543493413768448.5fe0b603-cfee-4844-b8b0-07e502111713.94dd19f4-8574-474f-a329-6de47a1d8397" + ] + }, "releaseDate": "2015-10-13", "storePage": "https://www.xbox.com/en-us/games/store/wasteland-2-director-s-cut/C521HDXRTS7F" }, { "productTitle": "Wasteland 3 (PC)", "productId": "9NLT5XR52ZS7", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.31983.13700876625277388.8e8fb436-9b3b-4256-a65f-36b842163d85.1a7e6764-c416-4bdc-a625-8a7f69ad5bfe" + ] + }, "releaseDate": "2020-08-28", "storePage": "https://www.xbox.com/en-us/games/store/wasteland-3-pc/9NLT5XR52ZS7" }, { "productTitle": "Wasteland Remastered", "productId": "9NGH1FK0RJGL", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33255.13650100416089145.e9c63102-735a-40a7-b414-10693b469ff1.9d33c3ba-38af-4676-93e6-282f0280d212" + ] + }, "releaseDate": "2020-02-25", "storePage": "https://www.xbox.com/en-us/games/store/wasteland-remastered/9NGH1FK0RJGL" }, @@ -3142,6 +4361,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.43826.13510798887680222.3c51bb2a-c94b-499f-8ece-ee87047564ad.2b815bbb-ab5e-4c29-83df-e4f35f6ee645" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.40710.13510798887680222.3c51bb2a-c94b-499f-8ece-ee87047564ad.562d100c-0347-412e-a979-83c3b8e669e0" ] }, "releaseDate": "2018-08-10", @@ -3150,7 +4372,11 @@ { "productTitle": "While the Iron's Hot", "productId": "9P2F4C1XFZJ4", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2560.14559361984338231.8719ddd9-2cce-4bb0-b10c-9b499888b765.eac352fa-c847-4a0f-824c-a9406c64e81d" + ] + }, "releaseDate": "2023-11-09", "storePage": "https://www.xbox.com/en-us/games/store/while-the-iron-s-hot/9P2F4C1XFZJ4" }, @@ -3158,6 +4384,9 @@ "productTitle": "Wo Long: Fallen Dynasty", "productId": "9N9X9PC8V9CP", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27920.13524128328401524.c8089ad9-5e75-4246-83e8-2dac88f04afd.faaf652e-ff35-46d8-a7d2-cb548ecb56f4" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.46001.13524128328401524.c8089ad9-5e75-4246-83e8-2dac88f04afd.9a8d6174-1791-45bf-b366-9360daf09b20" ] @@ -3168,7 +4397,11 @@ { "productTitle": "Wolfenstein 3D", "productId": "9P7Z1D3N8KR7", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.35762.14103068553133050.2db8938c-844e-4b8f-bb62-aca2ce562342.96a79cc2-22cb-4478-9190-22ade0ee49bb" + ] + }, "releaseDate": "2022-08-18", "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-3d/9P7Z1D3N8KR7" }, @@ -3176,6 +4409,9 @@ "productTitle": "Wolfenstein II: Standard Edition", "productId": "9NDBKK9G0FHL", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2334.13547327457112687.7b875df9-17c8-48e1-985b-69b5b77ac928.b07958ce-fdc6-4387-9be1-6072dff8e439" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.58313.13547327457112687.7b875df9-17c8-48e1-985b-69b5b77ac928.6f02e5e5-e6ab-4794-b72a-189d236470bf" ] @@ -3186,28 +4422,44 @@ { "productTitle": "Wolfenstein: The New Order (PC)", "productId": "9P75CBJ9WT9W", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5170.14606505701293602.99503a0d-36fd-4980-925b-c678c931b40a.3ded090e-80be-4f5c-be93-9707bbf6ab81" + ] + }, "releaseDate": "2021-03-12", "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-the-new-order-pc/9P75CBJ9WT9W" }, { "productTitle": "Wolfenstein: The Old Blood (PC)", "productId": "9PBB4QHMSDKR", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20849.14122383886801714.65a75288-1d4b-4744-b3e8-5eb9e5357c0a.11ba4652-6dae-421d-aaa6-b7289c8822f5" + ] + }, "releaseDate": "2021-03-12", "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-the-old-blood-pc/9PBB4QHMSDKR" }, { "productTitle": "Wolfenstein: Youngblood (PC)", "productId": "9PHFTS44F99K", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22779.14232405978199420.10006ada-af2f-43d4-ab04-4e26289ccf76.4e74bdfd-2eb7-4e57-aa1d-88718d1d7911" + ] + }, "releaseDate": "2020-02-06", "storePage": "https://www.xbox.com/en-us/games/store/wolfenstein-youngblood-pc/9PHFTS44F99K" }, { "productTitle": "World War Z: Aftermath", "productId": "9PBF1FL7K192", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17991.14124816078460443.a6dec9dc-b4f7-4744-94f3-470e02e1dd63.3936d7d1-4df6-4563-ac93-3d64992d8218" + ] + }, "releaseDate": "2021-09-21", "storePage": "https://www.xbox.com/en-us/games/store/world-war-z-aftermath/9PBF1FL7K192" }, @@ -3215,6 +4467,9 @@ "productTitle": "Wreckfest", "productId": "9NG06CSMM97P", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64141.13589258961846020.5e95ec4c-44cb-4b39-8217-927890b74c94.add30f1a-d761-4638-87e4-16f77f0036a0" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.11207.13589258961846020.5e95ec4c-44cb-4b39-8217-927890b74c94.85c0251e-bca8-4e59-a1bc-b858f5deafef" ] @@ -3225,28 +4480,44 @@ { "productTitle": "Yakuza 0 for Windows 10", "productId": "9PD0BJRBLRJM", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.60688.14163943905070744.0448a0ad-df57-4343-bd68-4383f0e00abd.ca680055-5822-4f3a-9c57-6c85acc67c4c" + ] + }, "releaseDate": "2020-02-26", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-0-for-windows-10/9PD0BJRBLRJM" }, { "productTitle": "Yakuza 3 Remastered for Windows 10", "productId": "9NC4QMRHCNZK", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.21577.13574959248073944.2c5d4b1c-d52a-4c7d-a874-bacdecd5c96e.2658f7c2-5a85-4825-bc19-4fa590dc32db" + ] + }, "releaseDate": "2021-01-28", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-3-remastered-for-windows-10/9NC4QMRHCNZK" }, { "productTitle": "Yakuza 4 Remastered for Windows 10", "productId": "9NWZTB9JQG9S", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44004.14435749885115625.73b01862-e38c-412b-8997-c5f0297b47f8.b6cabede-1743-43ff-bc31-8f99bbafcf1d" + ] + }, "releaseDate": "2021-01-28", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-4-remastered-for-windows-10/9NWZTB9JQG9S" }, { "productTitle": "Yakuza 5 Remastered for Windows 10", "productId": "9MVX1V7W5SW8", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3163.13850789095968477.9ae87e98-4124-4b7d-9528-25cf65807843.5ec97c8d-41d6-4ecf-845a-9e6e36573f8f" + ] + }, "releaseDate": "2021-01-28", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-5-remastered-for-windows-10/9MVX1V7W5SW8" }, @@ -3254,6 +4525,9 @@ "productTitle": "Yakuza 6: The Song of Life for Windows 10", "productId": "9N9WWM5JXCBZ", "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.35958.13524393444409042.28107174-a805-4723-b41e-351c639200dc.61795991-9b4b-4e6c-815b-9ff7e3f7dd3b" + ], "Logo": [ "https://store-images.s-microsoft.com/image/apps.23934.13524393444409042.28107174-a805-4723-b41e-351c639200dc.cacfecef-3017-4a32-bede-4c095b1b65b2" ] @@ -3264,21 +4538,33 @@ { "productTitle": "Yakuza Kiwami 2 for Windows 10", "productId": "9MZNFNN3XJ3F", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62149.13871188202855056.7357988b-ca9f-46c3-93d0-c3f2d924f6b3.b344017a-ea6b-482c-8ec9-08a74e6259db" + ] + }, "releaseDate": "2020-07-29", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-kiwami-2-for-windows-10/9MZNFNN3XJ3F" }, { "productTitle": "Yakuza Kiwami for Windows 10", "productId": "9P40SC5DQ9K0", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3710.14598456430785461.91448404-9afb-4719-8755-cc83d023ef73.f4ba485f-e842-4ff9-bba8-315bf8bc0e5c" + ] + }, "releaseDate": "2020-04-22", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-kiwami-for-windows-10/9P40SC5DQ9K0" }, { "productTitle": "Yakuza: Like a Dragon", "productId": "9NXCSWCQTNFG", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.30664.14427542363794747.182f58ca-3a24-4a65-93bd-cdd320a35776.d7799370-aefe-44e7-8f83-4f8a5c363354" + ] + }, "releaseDate": "2020-11-10", "storePage": "https://www.xbox.com/en-us/games/store/yakuza-like-a-dragon/9NXCSWCQTNFG" }, @@ -3290,6 +4576,9 @@ "https://store-images.s-microsoft.com/image/apps.30782.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.28590e12-c674-4ee9-b2cc-27f882ceb1da", "https://store-images.s-microsoft.com/image/apps.29397.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.febc89ee-56c2-40f2-b2dd-fe5189f20a40", "https://store-images.s-microsoft.com/image/apps.26279.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.302a189f-f969-4c38-9218-83a3815fc490" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3557.13565037407534311.0d8dd6b7-ba76-442e-8a83-5547f7a8f00d.16736ce8-70a0-4c11-a9ef-9483c9a8f275" ] }, "releaseDate": "2022-09-14", @@ -3298,7 +4587,11 @@ { "productTitle": "Zombie Army 4: Dead War", "productId": "9PLSCHRN5715", - "images": {}, + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.15083.14307155302772688.6d2bb19d-e8cc-4826-bd21-920020654895.22cfc234-258a-4edf-b871-db3c9e4a7127" + ] + }, "releaseDate": "2020-02-04", "storePage": "https://www.xbox.com/en-us/games/store/zombie-army-4-dead-war/9PLSCHRN5715" }, @@ -3308,6 +4601,9 @@ "images": { "Logo": [ "https://store-images.s-microsoft.com/image/apps.8354.14226270511206590.6a01761e-3000-4be3-a1eb-b82f4a4e5d9e.716d4869-5b12-4a47-8a21-91cc917c2c77" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62724.14226270511206590.448f16df-2989-4b0e-baf3-2fba454ba5a8.6ffe63bf-d2e2-488e-adc6-729cbabf0c34" ] }, "releaseDate": "2017-10-31", From fd96f0727896f104ac918576b4b1389632efcd60 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Thu, 22 Aug 2024 20:25:22 +0200 Subject: [PATCH 207/255] add ea play games --- test-data/xbox-gamepass-games-eaplay.json | 1053 +++++++++++++++++++++ 1 file changed, 1053 insertions(+) create mode 100644 test-data/xbox-gamepass-games-eaplay.json diff --git a/test-data/xbox-gamepass-games-eaplay.json b/test-data/xbox-gamepass-games-eaplay.json new file mode 100644 index 00000000..2e75328b --- /dev/null +++ b/test-data/xbox-gamepass-games-eaplay.json @@ -0,0 +1,1053 @@ +[ + { + "productTitle": "EA SPORTS FC™ 24 Xbox Series X|S", + "productId": "9NN6QW1NPCKN", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27910.13743940396065041.b843213c-0751-4e6c-8c85-83412bf1f1aa.06d58833-0584-4440-9995-2d8023cf1ac1" + ] + }, + "releaseDate": "2023-07-05", + "storePage": "https://www.xbox.com/en-us/games/store/ea-sports-fc-24-xbox-series-x-s/9NN6QW1NPCKN" + }, + { + "productTitle": "EA SPORTS FC™ 24 Xbox One", + "productId": "9P5H37NXML9D", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27910.14573516887607725.f997e22d-6909-4f3c-a0ef-a32a87d41052.0559a578-2085-4949-8e2d-6126a9bbf236" + ] + }, + "releaseDate": "2023-07-05", + "storePage": "https://www.xbox.com/en-us/games/store/ea-sports-fc-24-xbox-one/9P5H37NXML9D" + }, + { + "productTitle": "Immortals of Aveum™", + "productId": "9NSD4HTWM8HT", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.52180.14365635808880980.edf427aa-8116-45aa-a2b6-5d977a5718f6.21ab7058-392e-491b-8abd-8f477ab6b947" + ] + }, + "releaseDate": "2023-08-22", + "storePage": "https://www.xbox.com/en-us/games/store/immortals-of-aveum/9NSD4HTWM8HT" + }, + { + "productTitle": "STAR WARS Jedi: Survivor™", + "productId": "9PGC82V0DXFS", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62419.14188092651145353.c3919981-fb28-4755-b504-a3b021220351.0a309985-7d9f-40e8-a002-7ece3c5968ae" + ] + }, + "releaseDate": "2023-04-28", + "storePage": "https://www.xbox.com/en-us/games/store/star-wars-jedi-survivor/9PGC82V0DXFS" + }, + { + "productTitle": "NHL® 24 Xbox Series X|S", + "productId": "9PCX1R3DMMWH", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22463.14165757424245482.23d3fd3a-21ba-449e-a075-66656029b285.efc4eb33-a4f3-4654-b591-b4c789886e91" + ] + }, + "releaseDate": "2023-10-06", + "storePage": "https://www.xbox.com/en-us/games/store/nhl-24-xbox-series-x-s/9PCX1R3DMMWH" + }, + { + "productTitle": "NHL® 24 Xbox One", + "productId": "9PFFWMFBFWP3", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54316.14201328446971610.ee79f261-2279-480b-baeb-d7f6571d57f9.df91848c-783d-4ad7-8149-a615045a639d" + ] + }, + "releaseDate": "2023-10-06", + "storePage": "https://www.xbox.com/en-us/games/store/nhl-24-xbox-one/9PFFWMFBFWP3" + }, + { + "productTitle": "EA SPORTS™ PGA TOUR™", + "productId": "9P822XLW9PB8", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.41074.14096393311858391.003b64c1-1a3b-4b4e-9c47-80d6ec287ead.089194ea-003a-4e38-beba-04f7d3312ff7" + ] + }, + "releaseDate": "2023-04-07", + "storePage": "https://www.xbox.com/en-us/games/store/ea-sports-pga-tour/9P822XLW9PB8" + }, + { + "productTitle": "Madden NFL 24 Xbox Series X|S", + "productId": "9N71WRL15FJ0", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.56646.14007699127863963.ed66961f-0d4b-4ffa-adc5-d94c708d1c39.950e448f-b69a-4954-a0a5-87732f360b1f" + ] + }, + "releaseDate": "2023-06-02", + "storePage": "https://www.xbox.com/en-us/games/store/madden-nfl-24-xbox-series-x-s/9N71WRL15FJ0" + }, + { + "productTitle": "Madden NFL 24 Xbox One", + "productId": "9P74C0WC1KW8", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.56646.14607478962043225.f32621d5-2d75-4100-92ec-199ede15b521.f8e70e03-d720-437c-8be4-f727dfd589d8" + ] + }, + "releaseDate": "2023-06-02", + "storePage": "https://www.xbox.com/en-us/games/store/madden-nfl-24-xbox-one/9P74C0WC1KW8" + }, + { + "productTitle": "F1® 23", + "productId": "9MTK0S8CQ0QV", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12182.13807378106780361.8a115783-cbb5-4535-8490-7cd4bfae3e22.50b77362-9fa8-4fcf-93a3-c5f07f5e96d6" + ] + }, + "releaseDate": "2023-06-16", + "storePage": "https://www.xbox.com/en-us/games/store/f1-23/9MTK0S8CQ0QV" + }, + { + "productTitle": "Super Mega Baseball™ 4", + "productId": "9N93V5M3TG4N", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2073.13544775904823019.d91cad4e-f16d-46e7-a43e-871f1ef1a3d4.1582bfc5-a415-48ff-884e-66e4ef00023b" + ] + }, + "releaseDate": "2023-06-02", + "storePage": "https://www.xbox.com/en-us/games/store/super-mega-baseball-4/9N93V5M3TG4N" + }, + { + "productTitle": "WILD HEARTS™ Standard Edition", + "productId": "9NTFPTBXDDT3", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54302.14419340246812518.6ed7971c-0390-4d30-8373-3724d60e305e.912414ba-1982-47f1-b45c-4d18360f89cf" + ] + }, + "releaseDate": "2023-02-17", + "storePage": "https://www.xbox.com/en-us/games/store/wild-hearts-standard-edition/9NTFPTBXDDT3" + }, + { + "productTitle": "Dead Space", + "productId": "9NLB6V0GNC9P", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.48189.13710698285394664.b69d40fa-3b9c-47c8-b252-b52cae59523c.cc9856d8-7a26-4f3c-b994-e655551b56bf" + ] + }, + "releaseDate": "2023-01-27", + "storePage": "https://www.xbox.com/en-us/games/store/dead-space/9NLB6V0GNC9P" + }, + { + "productTitle": "Need for Speed™ Unbound", + "productId": "9PP837L3Q75D", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.9206.14329152328871129.15deab2a-237c-449c-880e-7926330dab80.24447e74-0a60-4a99-b1bf-ef2aa6bb279b" + ] + }, + "releaseDate": "2022-12-02", + "storePage": "https://www.xbox.com/en-us/games/store/need-for-speed-unbound/9PP837L3Q75D" + }, + { + "productTitle": "EA SPORTS™ FIFA 23 Standard Edition Xbox Series X|S", + "productId": "9N4K3F9558RP", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.53985.13981706901537608.82cbb8a4-4b3e-4b23-a32a-ab7e825c9944.e72b5a89-72f7-465b-b4e0-a7ec94bb56a3" + ] + }, + "releaseDate": "2022-09-30", + "storePage": "https://www.xbox.com/en-us/games/store/ea-sports-fifa-23-standard-edition-xbox-series-x-s/9N4K3F9558RP" + }, + { + "productTitle": "EA SPORTS™ FIFA 23 Standard Edition Xbox One", + "productId": "9NDDMHZRZ0R6", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.32595.13550335257385479.4af075db-780e-4e36-9880-9b88a74dc6de.a68ced41-4299-41f2-8f6c-be05724fbf37" + ] + }, + "releaseDate": "2022-09-30", + "storePage": "https://www.xbox.com/en-us/games/store/ea-sports-fifa-23-standard-edition-xbox-one/9NDDMHZRZ0R6" + }, + { + "productTitle": "NHL® 23 Xbox Series X|S", + "productId": "9NV8BHF1N9F4", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25656.14403495887145177.0f61b992-e430-42c9-9a35-e19ca4088244.40f08e67-631d-48e6-9a55-ed2241077bb2" + ] + }, + "releaseDate": "2022-10-14", + "storePage": "https://www.xbox.com/en-us/games/store/nhl-23-xbox-series-x-s/9NV8BHF1N9F4" + }, + { + "productTitle": "NHL® 23 Xbox One", + "productId": "9N7KZFCFZD4W", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20767.14067156188308460.66622d24-12a6-4a59-81ed-51b34d5d2d16.2bd718de-10d4-4a9c-b19f-6bc5fc0471aa" + ] + }, + "releaseDate": "2022-10-14", + "storePage": "https://www.xbox.com/en-us/games/store/nhl-23-xbox-one/9N7KZFCFZD4W" + }, + { + "productTitle": "F1® 22 Xbox One", + "productId": "9NSDMZDFNLD4", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44089.14365296944784963.2a497d60-dea6-4261-ac2c-e43560e1456f.e3dcb106-7d37-4ef0-8085-c5bc6bb01633" + ] + }, + "releaseDate": "2022-07-01", + "storePage": "https://www.xbox.com/en-us/games/store/f1-22-xbox-one/9NSDMZDFNLD4" + }, + { + "productTitle": "F1® 22 Xbox Series X|S", + "productId": "9N79LGZV5GHB", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34300.14072678611968699.7bf9a7b5-b798-4e68-8485-176aed85a737.ac964de2-be85-467d-9b3e-e379ad831d6e" + ] + }, + "releaseDate": "2022-07-01", + "storePage": "https://www.xbox.com/en-us/games/store/f1-22-xbox-series-x-s/9N79LGZV5GHB" + }, + { + "productTitle": "Madden NFL 23 Xbox Series X|S", + "productId": "9MZKW7QMXQRV", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47418.13868426082182035.3116c0c2-bfa0-4232-a075-4d14ba5adfab.b6ae1aca-7053-4aeb-832c-f29947cd0067" + ] + }, + "releaseDate": "2022-08-19", + "storePage": "https://www.xbox.com/en-us/games/store/madden-nfl-23-xbox-series-x-s/9MZKW7QMXQRV" + }, + { + "productTitle": "Madden NFL 23 Xbox One", + "productId": "9P0NV2LSS99C", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.14999.14523016514306010.f789303b-5ec7-47a7-9e4f-d94c3fcd45b5.4a23a3c3-cb4e-481c-bb13-49f65bc15a76" + ] + }, + "releaseDate": "2022-08-19", + "storePage": "https://www.xbox.com/en-us/games/store/madden-nfl-23-xbox-one/9P0NV2LSS99C" + }, + { + "productTitle": "Battlefield™ 2042 Xbox Series X|S", + "productId": "9P0T51BDDWVT", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17520.14524595367279766.cf1e9796-ca30-403f-8373-36da51dafac7.36f3c13c-3d2e-4746-a91e-dc6ea8a51886" + ] + }, + "releaseDate": "2021-06-01", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-2042-xbox-series-x-s/9P0T51BDDWVT" + }, + { + "productTitle": "Battlefield™ 2042 Xbox One", + "productId": "9PD5BFNZ4V7K", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.17520.14160631264571868.4e2a2194-8ea4-4266-ba92-577ebe02fd6b.8020f65f-1343-4956-8f0a-a0b7e7ffeb37" + ] + }, + "releaseDate": "2021-11-19", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-2042-xbox-one/9PD5BFNZ4V7K" + }, + { + "productTitle": "The Sims™ 4 EA Play Edition", + "productId": "9PLFD17M47K3", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.29662.14318793375483754.bef3d00f-b454-4ca1-b55e-94fd2ae048e4.46331d6c-a378-4cc7-8684-b3ed472abb0d" + ] + }, + "releaseDate": "2022-10-18", + "storePage": "https://www.xbox.com/en-us/games/store/the-sims-4-ea-play-edition/9PLFD17M47K3" + }, + { + "productTitle": "GRID Legends", + "productId": "9NCT9L7NFHX7", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37650.13561500935514596.eddcbba6-93d0-42cc-93d4-0f33eaa8a4e8.4e5cf9ec-9275-420b-8fcf-7d14d91addff" + ], + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.16547.13561500935514596.eddcbba6-93d0-42cc-93d4-0f33eaa8a4e8.27f91a60-9107-46bd-a56b-23ff6d4c1501" + ] + }, + "releaseDate": "2022-02-25", + "storePage": "https://www.xbox.com/en-us/games/store/grid-legends/9NCT9L7NFHX7" + }, + { + "productTitle": "Lost in Random™", + "productId": "9NVRJS95FLM9", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57092.14393276044279732.41dd1f17-b490-46da-821f-ee63792ed90a.860d6901-f703-4d9c-89d7-240528cd607a" + ] + }, + "releaseDate": "2021-09-10", + "storePage": "https://www.xbox.com/en-us/games/store/lost-in-random/9NVRJS95FLM9" + }, + { + "productTitle": "Super Mega Baseball 3", + "productId": "9NP6V9LFVJ87", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12287.13728510900587088.c32ad4cb-c837-4a7f-ab8d-c3d9ca2cb384.15cf7c9c-94b9-441e-99f5-b58eb5e57040" + ] + }, + "releaseDate": "2020-05-13", + "storePage": "https://www.xbox.com/en-us/games/store/super-mega-baseball-3/9NP6V9LFVJ87" + }, + { + "productTitle": "Mass Effect™ Legendary Edition", + "productId": "9PKWHT7G60WQ", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.59262.14254372351363255.ac3906d1-13b6-4af0-a00a-e10c8a92007b.dac28bb8-f830-421f-9e92-08a9db8b19f8" + ] + }, + "releaseDate": "2021-05-14", + "storePage": "https://www.xbox.com/en-us/games/store/mass-effect-legendary-edition/9PKWHT7G60WQ" + }, + { + "productTitle": "It Takes Two - Digital Version", + "productId": "9NXVC0482QS5", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.4452.14488339386131194.84ca8b8a-582e-4d34-904e-8f1e60f71000.1164a903-9308-49c2-a477-3b887cffb341" + ] + }, + "releaseDate": "2021-03-26", + "storePage": "https://www.xbox.com/en-us/games/store/it-takes-two-digital-version/9NXVC0482QS5" + }, + { + "productTitle": "DiRT Rally 2.0", + "productId": "BRPGP6H8P26F", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.35251.69250389131421478.505d88bd-fe2e-4564-89a4-f3e4dc4a9732.4b6d6457-d804-410a-b6af-9f5de8f22893" + ] + }, + "releaseDate": "2019-02-26", + "storePage": "https://www.xbox.com/en-us/games/store/dirt-rally-2-0/BRPGP6H8P26F" + }, + { + "productTitle": "DIRT 5", + "productId": "9PJGM0T0827V", + "images": { + "Logo": [ + "https://store-images.s-microsoft.com/image/apps.18388.14216887906907763.b5352caa-b411-460d-acb5-a427d0106d4b.8e4aea4f-80ba-487d-8508-e71b5b770ca8" + ], + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57632.14216887906907763.b5352caa-b411-460d-acb5-a427d0106d4b.6eee667c-5c9b-4fec-a070-261c100702cf" + ] + }, + "releaseDate": "2020-11-06", + "storePage": "https://www.xbox.com/en-us/games/store/dirt-5/9PJGM0T0827V" + }, + { + "productTitle": "skate. (2007)", + "productId": "C3QWNCV55VLL", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.56436.66765638016841945.44eb6927-d62a-4346-a97d-4d1d0881b107.ac9661f7-1e16-4df1-bf81-119631e97f8b" + ] + }, + "releaseDate": "2010-01-20", + "storePage": "https://www.xbox.com/en-us/games/store/skate-2007/C3QWNCV55VLL" + }, + { + "productTitle": "UFC® 4", + "productId": "BPBV3PCB0X44", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44890.68458959458300043.df539657-64e3-4d17-a12b-abfee3e8f434.52abc444-6fc7-40fc-8f63-9f741151b714" + ] + }, + "releaseDate": "2020-08-14", + "storePage": "https://www.xbox.com/en-us/games/store/ufc-4/BPBV3PCB0X44" + }, + { + "productTitle": "Need for Speed™ Hot Pursuit Remastered", + "productId": "9NMBJQ0265ZK", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.54645.13695403561576988.ee93f06a-1e4b-49d1-aa54-9b9583915442.1a1438a8-4154-40ee-94bd-51deda46184d" + ] + }, + "releaseDate": "2020-11-06", + "storePage": "https://www.xbox.com/en-us/games/store/need-for-speed-hot-pursuit-remastered/9NMBJQ0265ZK" + }, + { + "productTitle": "Battlefield™ 1 Revolution", + "productId": "BPL68T0XK96W", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.39800.68596255437297164.99e6fb73-cd5e-440f-90c2-d8d2eb40a69d.5d9b9ea9-9816-4492-82df-fefa1a6c0f94" + ] + }, + "releaseDate": "2017-08-21", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-1-revolution/BPL68T0XK96W" + }, + { + "productTitle": "STAR WARS™: Squadrons", + "productId": "BV9CWVQWNS4P", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.49564.71371953440216666.508e0708-a814-4f11-8420-5f620fd8ce09.6a0698b5-ba6b-4f01-8338-015ad9537a91" + ] + }, + "releaseDate": "2020-10-02", + "storePage": "https://www.xbox.com/en-us/games/store/star-wars-squadrons/BV9CWVQWNS4P" + }, + { + "productTitle": "NHL® 94 REWIND", + "productId": "9PDGC1Z6ZHTP", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20105.14150624283207856.14599c31-25d3-4f59-9a9b-69b4f86ec0ce.bbd4ddad-9f86-47f4-956f-3d36a7c45b57" + ] + }, + "releaseDate": "2021-11-04", + "storePage": "https://www.xbox.com/en-us/games/store/nhl-94-rewind/9PDGC1Z6ZHTP" + }, + { + "productTitle": "STAR WARS Jedi: Fallen Order™", + "productId": "C2CSDTSCBZ0C", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.52300.65392999590663672.028b6875-f925-4d40-b3a1-e44db3b4fa32.7bcb3d0f-46fc-43ea-84d1-031bd0817da2" + ] + }, + "releaseDate": "2019-11-15", + "storePage": "https://www.xbox.com/en-us/games/store/star-wars-jedi-fallen-order/C2CSDTSCBZ0C" + }, + { + "productTitle": "EA SPORTS™ UFC® 3", + "productId": "C5DZH514BX37", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.16382.67187354709168902.a3bedf41-e05c-46af-b28a-9001abece0fc.2cad60ae-e348-4356-975d-594e00d1ab58" + ] + }, + "releaseDate": "2018-02-02", + "storePage": "https://www.xbox.com/en-us/games/store/ea-sports-ufc-3/C5DZH514BX37" + }, + { + "productTitle": "Need for Speed™ Heat", + "productId": "BRZZLBF5T245", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.46671.69435230515002378.477c7a96-5d17-45ec-95c2-a2739146b68d.f84cd83e-a0cc-42f8-87cb-4c8b0d664eb5" + ] + }, + "releaseDate": "2019-11-08", + "storePage": "https://www.xbox.com/en-us/games/store/need-for-speed-heat/BRZZLBF5T245" + }, + { + "productTitle": "Skate 3", + "productId": "BNKDKQXMXRR2", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25388.68005754082254855.39795a60-73cf-4461-87d9-7f112c30c43c.7d99d88b-5b61-4951-9de7-34e5ddad1df2" + ] + }, + "releaseDate": "2014-09-23", + "storePage": "https://www.xbox.com/en-us/games/store/skate-3/BNKDKQXMXRR2" + }, + { + "productTitle": "Titanfall® 2", + "productId": "C0X2HNVH08FB", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33826.65123785197113223.0191c6ed-9ff7-488b-b8cc-c338d3886461.43c5a5b6-584f-4b73-96a3-48c6648c4784" + ] + }, + "releaseDate": "2016-10-28", + "storePage": "https://www.xbox.com/en-us/games/store/titanfall-2/C0X2HNVH08FB" + }, + { + "productTitle": "Battlefield™ V", + "productId": "BZ2N7TQ0XCF2", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.242.64032621253256243.9745cf01-8239-4973-8193-31de18936f03.a8c3c497-3428-45cb-85b3-d84dcb2743bd" + ] + }, + "releaseDate": "2018-11-20", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-v/BZ2N7TQ0XCF2" + }, + { + "productTitle": "Dragon Age™: Inquisition", + "productId": "C47GZZBMR5WG", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1094.66474211586744867.e24f67e1-7195-4bf7-9758-84e7723c0673.ba5ac0c8-e5fb-42c8-a648-a81b5fe939ff" + ] + }, + "releaseDate": "2014-11-18", + "storePage": "https://www.xbox.com/en-us/games/store/dragon-age-inquisition/C47GZZBMR5WG" + }, + { + "productTitle": "A Way Out", + "productId": "BWVBNCMF22ZK", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64301.71718434425658872.697ca9fd-3b48-4708-b6bf-b97acc67c244.99b24b6e-51c0-4188-b0b4-819d89c0ed73" + ] + }, + "releaseDate": "2018-03-23", + "storePage": "https://www.xbox.com/en-us/games/store/a-way-out/BWVBNCMF22ZK" + }, + { + "productTitle": "Dragon Age: Origins", + "productId": "BS9SX4Q6XJRF", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25088.70226594498231256.17116041-5bab-4f35-9bd5-63b5de669a3f.3076712f-3ab7-4813-a935-b1f954d8e904" + ] + }, + "releaseDate": "2010-08-10", + "storePage": "https://www.xbox.com/en-us/games/store/dragon-age-origins/BS9SX4Q6XJRF" + }, + { + "productTitle": "Mirror's Edge™", + "productId": "BP96WRTVD7C1", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.26825.68416368999479584.89b36c57-6423-4e10-945f-b73fe790db76.f1fbf02c-a999-4ca9-9844-96d37528864c" + ] + }, + "releaseDate": "2010-06-22", + "storePage": "https://www.xbox.com/en-us/games/store/mirror-s-edge/BP96WRTVD7C1" + }, + { + "productTitle": "NBA LIVE 19", + "productId": "BVX4Z50ZBH5Q", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.31673.71143245537553871.23126cde-33bb-48f3-bee9-3b0e427e88ff.58f9f2f9-41ad-4feb-b298-fec6f37d064d" + ] + }, + "releaseDate": "2018-09-07", + "storePage": "https://www.xbox.com/en-us/games/store/nba-live-19/BVX4Z50ZBH5Q" + }, + { + "productTitle": "Crysis", + "productId": "BNN7BPDZ6GQB", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.5926.68016281092455761.8c631f2d-2803-4c39-b29c-715c90617345.b61b9721-abab-42b7-a7e9-3c1696324310" + ] + }, + "releaseDate": "2011-10-04", + "storePage": "https://www.xbox.com/en-us/games/store/crysis/BNN7BPDZ6GQB" + }, + { + "productTitle": "Plants vs. Zombies™ Garden Warfare 2", + "productId": "BNRH7BRC1D02", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.25500.68092588132505117.32378282-ea7e-40c4-a3a2-81703aa936d7.188e00bb-916b-4c65-9bb7-f1e5f2a829f9" + ] + }, + "releaseDate": "2016-02-23", + "storePage": "https://www.xbox.com/en-us/games/store/plants-vs-zombies-garden-warfare-2/BNRH7BRC1D02" + }, + { + "productTitle": "Dragon Age™ 2", + "productId": "C4G76555T4QN", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27687.66622812769222919.f72813e2-a2c0-4178-94a9-276818a15412.010d3b83-47e1-4b5d-8ef9-ce2d5b1062d6" + ] + }, + "releaseDate": "2011-03-08", + "storePage": "https://www.xbox.com/en-us/games/store/dragon-age-2/C4G76555T4QN" + }, + { + "productTitle": "BLACK™", + "productId": "BTCS0LP052HL", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33347.70793574977529715.aaba2fdf-8d2c-448d-839d-dc168291069b.8d23ae29-1f1b-4b69-b064-1054d014d69f" + ] + }, + "releaseDate": "2008-04-07", + "storePage": "https://www.xbox.com/en-us/games/store/black/BTCS0LP052HL" + }, + { + "productTitle": "Army of Two™", + "productId": "C1LM235H6FZ1", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.22801.64930031463159708.b90cc927-ab67-44df-b1bd-cff328823c5a.a859b195-62c1-4663-8376-4a8af8e88a0a" + ] + }, + "releaseDate": "2009-12-30", + "storePage": "https://www.xbox.com/en-us/games/store/army-of-two/C1LM235H6FZ1" + }, + { + "productTitle": "Feeding Frenzy", + "productId": "BRBRQCVTJG2D", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3660.69601674446930807.80bd09f6-7c0d-48cf-95be-ccf7f5530237.0394c9c6-20a5-4e31-9be1-934c1f0d8914" + ] + }, + "releaseDate": "2006-03-10", + "storePage": "https://www.xbox.com/en-us/games/store/feeding-frenzy/BRBRQCVTJG2D" + }, + { + "productTitle": "Bejeweled 3", + "productId": "BR7QJW8V9L2S", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57208.69586937988078931.d39c4bc9-0654-4448-b8d1-8bea7f1d67b8.1b36bce9-c74d-47a7-baa2-ccd3caa71169" + ] + }, + "releaseDate": "2011-10-19", + "storePage": "https://www.xbox.com/en-us/games/store/bejeweled-3/BR7QJW8V9L2S" + }, + { + "productTitle": "Zuma", + "productId": "C4SG06H48738", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11539.67411114035750393.2854ca19-b4a9-4344-8f1d-e8b2bc93c210.fb9a9f9f-4c21-4aa6-a29c-c9dbee60da7d" + ] + }, + "releaseDate": "2005-10-03", + "storePage": "https://www.xbox.com/en-us/games/store/zuma/C4SG06H48738" + }, + { + "productTitle": "Fe", + "productId": "BZW2R4STVDNK", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.37228.64467054462611390.5ec3df50-cb94-49e1-8de0-6751bede49a6.130733c7-b252-46a3-9b15-960908cdce07" + ] + }, + "releaseDate": "2018-02-16", + "storePage": "https://www.xbox.com/en-us/games/store/fe/BZW2R4STVDNK" + }, + { + "productTitle": "Dead Space (2008)", + "productId": "BRJLJ6RPLQTJ", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.9607.69768431406041041.e1386476-b377-413b-9457-1f5559dbb168.345050eb-2861-4fc1-9bdb-e7dcc7965eea" + ] + }, + "releaseDate": "2010-08-03", + "storePage": "https://www.xbox.com/en-us/games/store/dead-space-2008/BRJLJ6RPLQTJ" + }, + { + "productTitle": "FIGHT NIGHT CHAMPION", + "productId": "BQG162F04T2L", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.43877.69068534869269909.2e5bd713-07e4-4ab3-ab98-5c3b344e3c50.bee59007-7def-4791-b9e7-891669c1465d" + ] + }, + "releaseDate": "2010-04-26", + "storePage": "https://www.xbox.com/en-us/games/store/fight-night-champion/BQG162F04T2L" + }, + { + "productTitle": "Need for Speed™ Payback", + "productId": "C355T88BBX1S", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.58037.66406111980515345.32ef44be-5899-40c8-9e5d-80147558ea6a.ce6f3a61-abc1-492f-bfac-d87b5733f198" + ] + }, + "releaseDate": "2017-11-10", + "storePage": "https://www.xbox.com/en-us/games/store/need-for-speed-payback/C355T88BBX1S" + }, + { + "productTitle": "Plants vs. Zombies: Battle for Neighborville™", + "productId": "C4HZC7LJG6PX", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51083.66663660452837213.88feed53-4335-4b35-8a3a-476a0f0fd6ca.c4755ce8-cee4-4ca4-8f72-5e5bc6eae3de" + ] + }, + "releaseDate": "2019-10-18", + "storePage": "https://www.xbox.com/en-us/games/store/plants-vs-zombies-battle-for-neighborville/C4HZC7LJG6PX" + }, + { + "productTitle": "Dante's Inferno™", + "productId": "C0X6N5963CTW", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.31024.65125427675965946.9a11f22d-d015-4e5d-8fe2-d22c387be19c.2d19934c-0c07-4f87-8a6f-3732c94120c5" + ] + }, + "releaseDate": "2010-04-27", + "storePage": "https://www.xbox.com/en-us/games/store/dante-s-inferno/C0X6N5963CTW" + }, + { + "productTitle": "Battlefield™ Hardline", + "productId": "BZKZFMQG2K2K", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18974.63735777037085446.8fe8dc26-04d3-4d1f-9c78-cbcd6784657d.3230e1d1-d005-413b-b124-5371d4554393" + ] + }, + "releaseDate": "2015-03-17", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-hardline/BZKZFMQG2K2K" + }, + { + "productTitle": "Peggle", + "productId": "BSCCQL7DZ9KD", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.13698.70195604297907649.16687243-8913-4430-a865-c8a76aac240c.f3611d60-00a4-4834-9176-c126d99d0fbe" + ] + }, + "releaseDate": "2009-03-11", + "storePage": "https://www.xbox.com/en-us/games/store/peggle/BSCCQL7DZ9KD" + }, + { + "productTitle": "Mirror's Edge™ Catalyst", + "productId": "C48LBRJJCP2L", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.62830.66522486697599341.54595999-7800-48a6-8255-bf581c71e0dd.fdab5a16-85bd-4fa0-9c88-8ec2f16ced89" + ] + }, + "releaseDate": "2016-06-07", + "storePage": "https://www.xbox.com/en-us/games/store/mirror-s-edge-catalyst/C48LBRJJCP2L" + }, + { + "productTitle": "Need for Speed Rivals", + "productId": "C3VM0TMWNZ5M", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.47206.66828645796021226.1045dac2-bde6-4884-b5fc-6bc534a2d954.109e59fe-05a7-4e53-81dd-b604f93e3458" + ] + }, + "releaseDate": "2013-11-22", + "storePage": "https://www.xbox.com/en-us/games/store/need-for-speed-rivals/C3VM0TMWNZ5M" + }, + { + "productTitle": "Peggle 2", + "productId": "BNCZHKWRZ7BR", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.63323.67897516232762656.798d5423-ae25-4369-b9f2-33205af62a6f.a1c62ace-b09e-417f-913e-528d6f4ca5e6" + ] + }, + "releaseDate": "2013-12-09", + "storePage": "https://www.xbox.com/en-us/games/store/peggle-2/BNCZHKWRZ7BR" + }, + { + "productTitle": "Dead Space™ 3", + "productId": "BP73LMGB1DFD", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.11589.67829326247190973.f408c3de-64e7-4778-a833-d62cbf7f0fd1.16a5942f-1113-43b9-bad8-84389229b50b" + ] + }, + "releaseDate": "2013-02-06", + "storePage": "https://www.xbox.com/en-us/games/store/dead-space-3/BP73LMGB1DFD" + }, + { + "productTitle": "Battlefield 4", + "productId": "BP15SF17LH13", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.18274.67660042887481018.7de2bfcd-48ef-4a6c-bba4-e65d208d67ec.f299bd07-f6b3-4870-b5e6-786c0a4c3e92" + ] + }, + "releaseDate": "2013-11-22", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-4/BP15SF17LH13" + }, + { + "productTitle": "Burnout™ Paradise Remastered", + "productId": "BQMQ3K1BLV1T", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.172.69242235395687976.60c3c0b9-9cce-4803-b1e8-f6861422bd64.7054e884-e9fa-47d4-b0fc-4ddb37338b7e" + ] + }, + "releaseDate": "2018-03-16", + "storePage": "https://www.xbox.com/en-us/games/store/burnout-paradise-remastered/BQMQ3K1BLV1T" + }, + { + "productTitle": "Unravel Two", + "productId": "C4VKLMG1HLZW", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.6886.67435278791875206.d60b3a6b-61b2-4afb-9c4c-453efe4ef48e.5851cf69-55b2-4383-a019-fb601fb993db" + ] + }, + "releaseDate": "2018-06-09", + "storePage": "https://www.xbox.com/en-us/games/store/unravel-two/C4VKLMG1HLZW" + }, + { + "productTitle": "Plants vs. Zombies Garden Warfare", + "productId": "BTJ0T8C04ZBV", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57712.70921300667420253.8c8a7ac7-d0bd-46fb-a144-4c5ea316247c.b4f3a4a4-1e61-4685-8c7a-49ef7addd34c" + ] + }, + "releaseDate": "2014-02-25", + "storePage": "https://www.xbox.com/en-us/games/store/plants-vs-zombies-garden-warfare/BTJ0T8C04ZBV" + }, + { + "productTitle": "Mass Effect 2", + "productId": "C0Z1N477W100", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.53658.65104284338300891.dcd8a095-2ff3-4393-acfc-5bd52cf20770.9d28b9cc-902b-4c5d-b776-67da57da5336" + ] + }, + "releaseDate": "2010-01-26", + "storePage": "https://www.xbox.com/en-us/games/store/mass-effect-2/C0Z1N477W100" + }, + { + "productTitle": "Mass Effect™: Andromeda", + "productId": "BZPR04V49BMH", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.8041.63802047386749134.ad5f99e3-d1a2-49a5-bbb8-b299dc4073ec.526abbab-6137-45f8-a05b-8ace44165345" + ] + }, + "releaseDate": "2017-03-21", + "storePage": "https://www.xbox.com/en-us/games/store/mass-effect-andromeda/BZPR04V49BMH" + }, + { + "productTitle": "Anthem™", + "productId": "BP9JQBJM0FNW", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.20349.68414427103463856.1f5379b8-b0df-4559-8bfc-233157d35637.39dc7b97-e809-42eb-8946-86d996b4c7c1" + ] + }, + "releaseDate": "2019-02-22", + "storePage": "https://www.xbox.com/en-us/games/store/anthem/BP9JQBJM0FNW" + }, + { + "productTitle": "Unravel", + "productId": "C11KKHB5H7QJ", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.32707.65129518710082559.30d43137-919f-4215-820e-038b409fb968.7fd47ea5-1a58-42a2-bee6-1e1e371d9664" + ] + }, + "releaseDate": "2016-02-09", + "storePage": "https://www.xbox.com/en-us/games/store/unravel/C11KKHB5H7QJ" + }, + { + "productTitle": "Battlefield 3™", + "productId": "BRN6BHDHB58J", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.3615.69271430660548627.c90235de-725c-43d6-b777-19f7f75295cc.6234dc4a-c6f0-4036-adb3-34ab64f7d20a" + ] + }, + "releaseDate": "2011-11-01", + "storePage": "https://www.xbox.com/en-us/games/store/battlefield-3/BRN6BHDHB58J" + }, + { + "productTitle": "Dead Space™ 2", + "productId": "C2PB7STLJGS0", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12350.65552910726292335.3086e865-b330-4e23-8a9d-f940d5cff913.d5198f46-adfd-4181-a49e-ba3ae2b1834b" + ] + }, + "releaseDate": "2011-01-25", + "storePage": "https://www.xbox.com/en-us/games/store/dead-space-2/C2PB7STLJGS0" + }, + { + "productTitle": "Medal of Honor Airborne", + "productId": "C43H00X6KZRJ", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.64692.66974914511950569.ff702c97-4a02-4354-b453-9db00dc580cb.f50e78fb-1e60-4ce8-ac9f-69523f60008d" + ] + }, + "releaseDate": "2010-05-26", + "storePage": "https://www.xbox.com/en-us/games/store/medal-of-honor-airborne/C43H00X6KZRJ" + }, + { + "productTitle": "Zuma's Revenge!", + "productId": "BR9MPWXFBCRC", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.845.69624301364778958.b359ee80-4f71-4100-90a4-7fddcd0b18d4.c64fb52f-93be-40c8-8631-dcd93e54d3ff" + ] + }, + "releaseDate": "2012-07-11", + "storePage": "https://www.xbox.com/en-us/games/store/zuma-s-revenge/BR9MPWXFBCRC" + }, + { + "productTitle": "Mass Effect™ 3", + "productId": "C040H652PD98", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.61729.64611995315525881.f32f0f5b-8833-4bf4-afa8-9e589d13319f.11203dcf-fd64-4db5-a526-b477cb530ff3" + ] + }, + "releaseDate": "2012-03-06", + "storePage": "https://www.xbox.com/en-us/games/store/mass-effect-3/C040H652PD98" + }, + { + "productTitle": "Heavy Weapon", + "productId": "BZ910SG8ML8X", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.34873.64123032034140827.c6168420-6a8f-4a04-b63b-69f7e2a6f5d8.1f3bf9de-0902-4712-aa0e-ed618b8381e8" + ] + }, + "releaseDate": "2007-01-17", + "storePage": "https://www.xbox.com/en-us/games/store/heavy-weapon/BZ910SG8ML8X" + }, + { + "productTitle": "SSX", + "productId": "BWK0Q0RQMH7V", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.33011.71550297083306103.8d519f7c-6c18-44cf-afb7-526f535d1ddd.1f0d422c-77b5-47d4-8c09-ff54dfa28b9c" + ] + }, + "releaseDate": "2012-02-28", + "storePage": "https://www.xbox.com/en-us/games/store/ssx/BWK0Q0RQMH7V" + }, + { + "productTitle": "STAR WARS™ Battlefront™", + "productId": "BRXTM276DLPR", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.35224.69387117932718482.43200d88-4aa5-41bd-a24e-a2c1b87be409.97ada3cb-cdac-4329-93be-99fd4fa2576e" + ] + }, + "releaseDate": "2015-11-17", + "storePage": "https://www.xbox.com/en-us/games/store/star-wars-battlefront/BRXTM276DLPR" + }, + { + "productTitle": "Bejeweled 2", + "productId": "BTXM0C9C3B1S", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.16124.70598382198456945.98dc0f96-e263-4c13-88a2-34a4d4905937.dbdeef1b-619d-443c-b00a-48a80e617622" + ] + }, + "releaseDate": "2005-11-22", + "storePage": "https://www.xbox.com/en-us/games/store/bejeweled-2/BTXM0C9C3B1S" + }, + { + "productTitle": "Alice: Madness Returns", + "productId": "BSNZHRCKC13J", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12204.69866126975118433.0c8a5df6-972a-47b6-b4f0-58fcd7df8087.0e289cc1-ee53-4935-9dd8-18e8f0087112" + ] + }, + "releaseDate": "2011-06-14", + "storePage": "https://www.xbox.com/en-us/games/store/alice-madness-returns/BSNZHRCKC13J" + }, + { + "productTitle": "Crysis 2", + "productId": "BQBTGDT4P54J", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.44602.69065092223175795.fdcc1404-e33b-4bfd-8db8-c2f81c469354.cc2c2226-3fba-474b-afb1-bf76539fb29f" + ] + }, + "releaseDate": "2011-03-22", + "storePage": "https://www.xbox.com/en-us/games/store/crysis-2/BQBTGDT4P54J" + }, + { + "productTitle": "Feeding Frenzy 2", + "productId": "BQ192SFB694X", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.12104.68263670985474927.708f0eb3-9de2-4e05-8f6c-aab00619bb14.cfe159d6-3f81-4ba0-bc51-23e5b293b9da" + ] + }, + "releaseDate": "2008-09-17", + "storePage": "https://www.xbox.com/en-us/games/store/feeding-frenzy-2/BQ192SFB694X" + }, + { + "productTitle": "STAR WARS™ Battlefront™ II", + "productId": "C0GWTPD0S8S1", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.57852.64256825846959382.44b5bc43-437a-4414-83ca-b41ba9e7764a.6845daab-0518-41a7-b14a-525d8d79f571" + ] + }, + "releaseDate": "2017-11-17", + "storePage": "https://www.xbox.com/en-us/games/store/star-wars-battlefront-ii/C0GWTPD0S8S1" + }, + { + "productTitle": "Dead Space™ Ignition", + "productId": "C4GQQJJSZSZJ", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.1218.66616941329633673.ed23a5d1-2731-4da6-a036-6dcecee38b30.26f58588-9bd2-4d3a-9ff4-445d570109ad" + ] + }, + "releaseDate": "2010-10-13", + "storePage": "https://www.xbox.com/en-us/games/store/dead-space-ignition/C4GQQJJSZSZJ" + }, + { + "productTitle": "Need for Speed™", + "productId": "BXWJNW4170RM", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.27153.63922543011545658.b811c016-7bf5-44e1-8dbe-39de98149fe7.a5a67495-d9ff-4018-9126-e00cf7aacf52" + ] + }, + "releaseDate": "2015-11-03", + "storePage": "https://www.xbox.com/en-us/games/store/need-for-speed/BXWJNW4170RM" + }, + { + "productTitle": "Plants vs. Zombies", + "productId": "BR1D9CR82ZM8", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.45287.68871528329885281.e03a829d-faa0-4a31-a5d8-785bb8b52288.83384bc6-d8cc-45fd-8b43-fe6351009f66" + ] + }, + "releaseDate": "2010-07-27", + "storePage": "https://www.xbox.com/en-us/games/store/plants-vs-zombies/BR1D9CR82ZM8" + }, + { + "productTitle": "Sea of Solitude", + "productId": "C4060P46HH4D", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.2988.66899389918915343.3cdfd82d-2868-4f03-99bf-197a61c1cda4.5f445c31-8f82-4689-a504-411b84606add" + ] + }, + "releaseDate": "2019-07-05", + "storePage": "https://www.xbox.com/en-us/games/store/sea-of-solitude/C4060P46HH4D" + }, + { + "productTitle": "Crysis® 3", + "productId": "BNKKJL1VRR5P", + "images": { + "BoxArt": [ + "https://store-images.s-microsoft.com/image/apps.51500.68002394896064296.6f4dcac0-75a7-433c-801c-5087b895d814.9575de8c-6cbf-4df9-9e49-568d7a14958d" + ] + }, + "releaseDate": "2013-02-19", + "storePage": "https://www.xbox.com/en-us/games/store/crysis-3/BNKKJL1VRR5P" + } +] From 1f5610a1a92937273bd525fd232f772b4ea23d81 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 23 Aug 2024 13:11:13 +0200 Subject: [PATCH 208/255] normalize title in backend --- backend/rai-pal-core/src/game_title.rs | 41 +++++++++++++++++++ backend/rai-pal-core/src/installed_game.rs | 5 ++- backend/rai-pal-core/src/lib.rs | 1 + backend/rai-pal-core/src/owned_game.rs | 7 ++-- backend/rai-pal-core/src/remote_games.rs | 5 ++- backend/src/main.rs | 2 +- frontend/api/bindings.ts | 7 ++-- .../installed-games/installed-game-modal.tsx | 2 +- .../installed-games-columns.tsx | 6 +-- .../installed-games/installed-games-page.tsx | 7 +++- .../owned-games/owned-game-modal.tsx | 2 +- .../owned-games/owned-games-columns.tsx | 4 +- .../owned-games/owned-games-page.tsx | 7 +++- frontend/hooks/use-processed-owned-games.ts | 22 +++++++--- frontend/util/filter.ts | 11 +++-- 15 files changed, 98 insertions(+), 31 deletions(-) create mode 100644 backend/rai-pal-core/src/game_title.rs diff --git a/backend/rai-pal-core/src/game_title.rs b/backend/rai-pal-core/src/game_title.rs new file mode 100644 index 00000000..c8cb05e2 --- /dev/null +++ b/backend/rai-pal-core/src/game_title.rs @@ -0,0 +1,41 @@ +use lazy_regex::{regex, regex_replace_all}; +use rai_pal_proc_macros::serializable_struct; + +#[serializable_struct] +pub struct GameTitle { + pub display: String, + pub normalized: Vec, +} + +static DEMO_REGEX: &lazy_regex::Lazy = regex!(r"(?i).*[\((\s+)]demo\)?$"); +static BRACKETS_REGEX: &lazy_regex::Lazy = regex!(r"(?i).*[\((\s+)]demo\)?$"); + +impl GameTitle { + pub fn new(display: &str) -> Self { + Self { + display: display.to_string(), + normalized: get_normalized_titles(display), + } + } + + pub fn is_probably_demo(&self) -> bool { + DEMO_REGEX.is_match(&self.display.to_lowercase()) + } +} + +// Titles given by the game providers can have all sorts of trash. +// But we want to be able to use the titles to match some local and remote games. +// So we need to normalize the titles. +// Some ways of normalizing the titles work for some games/providers, some work for others. +// So we have a list of different normalization methods, so we can try each one later. +fn get_normalized_titles(title: &str) -> Vec { + vec![ + normalize_title(title), + normalize_title(&BRACKETS_REGEX.replace_all(title, "")), + normalize_title(&DEMO_REGEX.replace_all(title, "")), + ] +} + +fn normalize_title(title: &str) -> String { + regex_replace_all!(r"\W+", title, "").to_lowercase() +} diff --git a/backend/rai-pal-core/src/installed_game.rs b/backend/rai-pal-core/src/installed_game.rs index fc28f142..dcdfbf24 100644 --- a/backend/rai-pal-core/src/installed_game.rs +++ b/backend/rai-pal-core/src/installed_game.rs @@ -9,6 +9,7 @@ use rai_pal_proc_macros::serializable_struct; use crate::{ game_executable::GameExecutable, + game_title::GameTitle, mod_manifest, owned_game, paths::{self, glob_path, hash_path}, providers::{provider::ProviderId, provider_command::ProviderCommand}, @@ -18,7 +19,7 @@ use crate::{ #[serializable_struct] pub struct InstalledGame { pub id: String, - pub name: String, + pub title: GameTitle, pub provider: ProviderId, pub executable: GameExecutable, pub installed_mod_versions: InstalledModVersions, @@ -59,7 +60,7 @@ impl InstalledGame { let mut installed_game = Self { id: game_id, - name: name.to_string(), + title: GameTitle::new(name), provider: provider_id, installed_mod_versions: HashMap::default(), executable: GameExecutable::new(path)?, diff --git a/backend/rai-pal-core/src/lib.rs b/backend/rai-pal-core/src/lib.rs index 59b8b3b0..c10fd53b 100644 --- a/backend/rai-pal-core/src/lib.rs +++ b/backend/rai-pal-core/src/lib.rs @@ -8,6 +8,7 @@ pub mod game_engines; pub mod game_executable; pub mod game_mod; pub mod game_mode; +pub mod game_title; pub mod installed_game; pub mod local_mod; pub mod macros; diff --git a/backend/rai-pal-core/src/owned_game.rs b/backend/rai-pal-core/src/owned_game.rs index 4e700b75..ea55c7f1 100644 --- a/backend/rai-pal-core/src/owned_game.rs +++ b/backend/rai-pal-core/src/owned_game.rs @@ -5,6 +5,7 @@ use rai_pal_proc_macros::serializable_struct; use crate::{ app_type::AppType, game_mode::GameMode, + game_title::GameTitle, providers::{ provider::ProviderId, provider_command::{ProviderCommand, ProviderCommandAction}, @@ -16,7 +17,7 @@ pub struct OwnedGame { pub global_id: String, pub provider_game_id: String, pub provider: ProviderId, - pub name: String, + pub title: GameTitle, pub release_date: Option, pub thumbnail_url: Option, pub game_mode: Option, @@ -31,7 +32,7 @@ impl OwnedGame { global_id: get_global_id(provider, provider_game_id), provider_game_id: provider_game_id.to_string(), provider, - name: name.to_string(), + title: GameTitle::new(name), provider_commands: HashMap::default(), release_date: None, thumbnail_url: None, @@ -61,7 +62,7 @@ impl OwnedGame { } pub fn guess_app_type(&mut self) -> &mut Self { - self.app_type = Some(if self.name.to_lowercase().ends_with(" demo") { + self.app_type = Some(if self.title.is_probably_demo() { AppType::Demo } else { AppType::Game diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/rai-pal-core/src/remote_games.rs index d437109b..66f7d3ee 100644 --- a/backend/rai-pal-core/src/remote_games.rs +++ b/backend/rai-pal-core/src/remote_games.rs @@ -5,6 +5,7 @@ use rai_pal_proc_macros::serializable_struct; use crate::game_engines::game_engine::{ EngineBrand, EngineVersion, EngineVersionNumbers, GameEngine, }; +use crate::game_title::GameTitle; use crate::providers::provider::ProviderId; use crate::result::Result; @@ -31,7 +32,7 @@ struct GameDatabaseEntry { #[serializable_struct] pub struct RemoteGame { - pub title: Option, + pub title: Option, pub engines: Option>, pub provider_ids: HashMap>, } @@ -85,7 +86,7 @@ pub async fn get() -> Result> { .into_iter() .filter_map(|entry| { Some(RemoteGame { - title: entry.title, + title: entry.title.map(|title| GameTitle::new(&title)), engines: entry.engines.map(|engines| { engines .into_iter() diff --git a/backend/src/main.rs b/backend/src/main.rs index 9afb0526..cebdc1d3 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -474,7 +474,7 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result { let normalized_path = normalize_path(&path); let installed_game = manual_provider::add_game(&normalized_path)?; - let game_name = installed_game.name.clone(); + let game_name = installed_game.title.display.clone(); if let Some(installed_games_state) = handle.app_state().installed_games.get(&ProviderId::Manual) { diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 100b3617..4d4e0bca 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -299,19 +299,20 @@ export type FoundOwnedGame = [] export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } export type GameMode = "VR" | "Flat" -export type InstalledGame = { id: string; name: string; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } +export type GameTitle = { display: string; normalized: string[] } +export type InstalledGame = { id: string; title: GameTitle; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } export type LocalMod = { data: LocalModData; common: CommonModData } export type LocalModData = { path: string; manifest: Manifest | null } export type Manifest = { title: string | null; version: string; runnable: RunnableModData | null; engine: EngineBrand | null; engineVersionRange: EngineVersionRange | null; unityBackend: UnityScriptingBackend | null } export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } export type ModKind = "Installable" | "Runnable" export type ModLoaderData = { id: string; path: string; kind: ModKind } -export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; name: string; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } +export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" -export type RemoteGame = { title: string | null; engines: GameEngine[] | null; providerIds: { [key in ProviderId]: string[] } } +export type RemoteGame = { title: GameTitle | null; engines: GameEngine[] | null; providerIds: { [key in ProviderId]: string[] } } export type RemoteMod = { common: CommonModData; data: RemoteModData } export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } export type RunnableModData = { path: string; args: string[] } diff --git a/frontend/components/installed-games/installed-game-modal.tsx b/frontend/components/installed-games/installed-game-modal.tsx index 6ef1b44d..0c9639bc 100644 --- a/frontend/components/installed-games/installed-game-modal.tsx +++ b/frontend/components/installed-games/installed-game-modal.tsx @@ -143,7 +143,7 @@ export function InstalledGameModal(props: Props) { )} /> - {props.game.name} + {props.game.title.display} refreshGame(props.game)}> diff --git a/frontend/components/installed-games/installed-games-columns.tsx b/frontend/components/installed-games/installed-games-columns.tsx index 6996739d..4323d78e 100644 --- a/frontend/components/installed-games/installed-games-columns.tsx +++ b/frontend/components/installed-games/installed-games-columns.tsx @@ -48,7 +48,7 @@ const thumbnail: TableColumnBase = { const name: TableColumnBase = { hideInDetails: true, label: "Game", - getSortValue: (game) => game.name, + getSortValue: (game) => game.title.display, renderCell: (game) => ( = { {game.hasOutdatedMod && } - {game.name} + {game.title.display} @@ -177,7 +177,7 @@ const engine: TableColumnBase = { ), diff --git a/frontend/components/installed-games/installed-games-page.tsx b/frontend/components/installed-games/installed-games-page.tsx index f5c18359..f13862e3 100644 --- a/frontend/components/installed-games/installed-games-page.tsx +++ b/frontend/components/installed-games/installed-games-page.tsx @@ -29,8 +29,11 @@ function filterInstalledGame( search: string, ) { return ( - includesOneOf(search, [game.name]) && - filterGame(game, filter, installedGamesColumns) + includesOneOf(search, [ + ...game.title.normalized, + game.title.display, + game.ownedGame?.providerGameId, + ]) && filterGame(game, filter, installedGamesColumns) ); } diff --git a/frontend/components/owned-games/owned-game-modal.tsx b/frontend/components/owned-games/owned-game-modal.tsx index cda3733e..3968a563 100644 --- a/frontend/components/owned-games/owned-game-modal.tsx +++ b/frontend/components/owned-games/owned-game-modal.tsx @@ -28,7 +28,7 @@ export function OwnedGameModal(props: Props) { props.game.provider, )} /> - {props.game.name} + {props.game.title.display} } > diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index 3dc84171..86553512 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -36,9 +36,9 @@ const name: TableColumnBase = { label: "Game", width: undefined, hideInDetails: true, - getSortValue: (game) => game.name, + getSortValue: (game) => game.title.display, renderCell: (game) => ( - {game.name} + {game.title.display} ), }; diff --git a/frontend/components/owned-games/owned-games-page.tsx b/frontend/components/owned-games/owned-games-page.tsx index 25f85e58..04be9280 100644 --- a/frontend/components/owned-games/owned-games-page.tsx +++ b/frontend/components/owned-games/owned-games-page.tsx @@ -30,8 +30,11 @@ function filterOwnedGame( search: string, ) { return ( - includesOneOf(search, [game.name]) && - filterGame(game, filter, ownedGamesColumns) + includesOneOf(search, [ + game.title.display, + ...game.title.normalized, + game.providerGameId, + ]) && filterGame(game, filter, ownedGamesColumns) ); } diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index cb05333d..e9ee63b8 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -9,10 +9,6 @@ export interface ProcessedOwnedGame extends OwnedGame { remoteData?: RemoteGame; } -function normalizeTitle(title: string): string { - return title.replace(/\W+/g, "").toLowerCase(); -} - export function useProcessedOwnedGames() { const providerDataMap = useAtomValue(providerDataAtom); const remoteGames = useAtomValue(remoteGamesAtom); @@ -32,10 +28,14 @@ export function useProcessedOwnedGames() { } if (remoteGame.title) { - byTitle[normalizeTitle(remoteGame.title)] = remoteGame; + for (const normalizedTitle of remoteGame.title.normalized) { + byTitle[normalizedTitle] = remoteGame; + } } } + console.log("remoteGames", remoteGames); + return [byProvider, byTitle]; }, [remoteGames, providerDataMap]); @@ -57,6 +57,16 @@ export function useProcessedOwnedGames() { const processedOwnedGames: ProcessedOwnedGameRecord = useMemo(() => { const result: ProcessedOwnedGameRecord = {}; + function getRemoteDataByTitle(ownedGame: OwnedGame) { + for (const normalizedTitle of ownedGame.title.normalized) { + if (databaseGamesByTitle[normalizedTitle]) { + // We use the first normalized title we have that returns a result. + // That means the order returned from the backend matters (first has priority). + return databaseGamesByTitle[normalizedTitle]; + } + } + } + for (const providerData of Object.values(providerDataMap)) { for (const [gameId, ownedGame] of Object.entries( providerData.ownedGames, @@ -67,7 +77,7 @@ export function useProcessedOwnedGames() { const remoteData = databaseGamesByProvider[ownedGame.provider]?.[ ownedGame.providerGameId - ] ?? databaseGamesByTitle[normalizeTitle(ownedGame.name)]; + ] ?? getRemoteDataByTitle(ownedGame); result[gameId] = { ...ownedGame, diff --git a/frontend/util/filter.ts b/frontend/util/filter.ts index c0819dcb..3de7ce43 100644 --- a/frontend/util/filter.ts +++ b/frontend/util/filter.ts @@ -1,10 +1,15 @@ import { TableColumn } from "@components/table/table-head"; -export function includesIgnoreCase(term: string, text: string) { - return text.toLowerCase().includes(term.toLowerCase()); +export function includesIgnoreCase(term: string, text?: string) { + if (!text) return false; + + return text.toLowerCase().trim().includes(term.trim().toLowerCase()); } -export function includesOneOf(term: string | undefined, texts: string[]) { +export function includesOneOf( + term: string | undefined, + texts: (string | undefined)[], +) { if (!term) return true; return Boolean(texts.find((text) => includesIgnoreCase(term, text))); From 797b505427ba6503bb8696a45276754663b1ecec Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 23 Aug 2024 13:28:00 +0200 Subject: [PATCH 209/255] remove repeated normalized titles --- backend/rai-pal-core/src/game_title.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/backend/rai-pal-core/src/game_title.rs b/backend/rai-pal-core/src/game_title.rs index c8cb05e2..bd78f919 100644 --- a/backend/rai-pal-core/src/game_title.rs +++ b/backend/rai-pal-core/src/game_title.rs @@ -1,3 +1,5 @@ +use std::collections::HashSet; + use lazy_regex::{regex, regex_replace_all}; use rai_pal_proc_macros::serializable_struct; @@ -7,8 +9,8 @@ pub struct GameTitle { pub normalized: Vec, } -static DEMO_REGEX: &lazy_regex::Lazy = regex!(r"(?i).*[\((\s+)]demo\)?$"); -static BRACKETS_REGEX: &lazy_regex::Lazy = regex!(r"(?i).*[\((\s+)]demo\)?$"); +static DEMO_REGEX: &lazy_regex::Lazy = regex!(r"(?i)[\((\s+)]demo\)?$"); +static BRACKETS_REGEX: &lazy_regex::Lazy = regex!(r"\[.*?\]|\(.*?\)|\{.*?\}|<.*?>"); impl GameTitle { pub fn new(display: &str) -> Self { @@ -29,11 +31,21 @@ impl GameTitle { // Some ways of normalizing the titles work for some games/providers, some work for others. // So we have a list of different normalization methods, so we can try each one later. fn get_normalized_titles(title: &str) -> Vec { - vec![ + // Order is important here. First items will be attempted first. + let mut normalized_titles = vec![ normalize_title(title), - normalize_title(&BRACKETS_REGEX.replace_all(title, "")), normalize_title(&DEMO_REGEX.replace_all(title, "")), - ] + normalize_title(&BRACKETS_REGEX.replace_all(title, "")), + ]; + + let mut seen = HashSet::new(); + + // Remove duplicates without affecting the original order: + normalized_titles.retain(|normalized_title| { + !normalized_title.is_empty() && seen.insert(normalized_title.clone()) + }); + + normalized_titles } fn normalize_title(title: &str) -> String { From 9d2facc7e635c5b52232923c5cff78558330e81b Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 23 Aug 2024 13:35:56 +0200 Subject: [PATCH 210/255] another normalization method --- backend/rai-pal-core/src/game_title.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/rai-pal-core/src/game_title.rs b/backend/rai-pal-core/src/game_title.rs index bd78f919..23683701 100644 --- a/backend/rai-pal-core/src/game_title.rs +++ b/backend/rai-pal-core/src/game_title.rs @@ -11,6 +11,7 @@ pub struct GameTitle { static DEMO_REGEX: &lazy_regex::Lazy = regex!(r"(?i)[\((\s+)]demo\)?$"); static BRACKETS_REGEX: &lazy_regex::Lazy = regex!(r"\[.*?\]|\(.*?\)|\{.*?\}|<.*?>"); +static SEPARATORS_REGEX: &lazy_regex::Lazy = regex!(r"\s-\s.+"); impl GameTitle { pub fn new(display: &str) -> Self { @@ -36,6 +37,7 @@ fn get_normalized_titles(title: &str) -> Vec { normalize_title(title), normalize_title(&DEMO_REGEX.replace_all(title, "")), normalize_title(&BRACKETS_REGEX.replace_all(title, "")), + normalize_title(&SEPARATORS_REGEX.replace_all(title, "")), ]; let mut seen = HashSet::new(); From 7338742c17e8e2a0faf067d6acd221b79547b092 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 23 Aug 2024 14:14:34 +0200 Subject: [PATCH 211/255] more lax remote game engine version regex --- backend/rai-pal-core/src/remote_games.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/rai-pal-core/src/remote_games.rs index 66f7d3ee..579d6dc3 100644 --- a/backend/rai-pal-core/src/remote_games.rs +++ b/backend/rai-pal-core/src/remote_games.rs @@ -1,5 +1,6 @@ use std::collections::HashMap; +use lazy_regex::regex; use rai_pal_proc_macros::serializable_struct; use crate::game_engines::game_engine::{ @@ -53,11 +54,11 @@ fn engine_brand_from_string(brand: &str) -> Option { } // Version strings in PCGamingWiki can be all weird, so parsing is pretty lax here. -// We just split by dots and take the first numbers we find. +// We just find some numbers in the string separated by something (usually periods). fn parse_version(version: &str) -> Option { - let version_numbers = version - .split('.') - .filter_map(|part| part.parse::().ok()) + let version_numbers = regex!(r"\d+") + .find_iter(version) + .filter_map(|capture| capture.as_str().parse::().ok()) .take(2) .collect::>(); From 89deb68fb3c746f4bcaf95c851b2253a645920cd Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 23 Aug 2024 16:25:20 +0200 Subject: [PATCH 212/255] Add ubisoft provider --- .vscode/settings.json | 1 + backend/rai-pal-core/src/providers/mod.rs | 1 + .../rai-pal-core/src/providers/provider.rs | 5 + .../src/providers/ubisoft_provider.rs | 110 + .../src/providers/xbox_provider.rs | 4 +- frontend/api/bindings.ts | 2 +- .../components/badges/color-coded-badge.tsx | 1 + .../components/providers/provider-icon.tsx | 2 + frontend/util/common-filter-options.ts | 1 + test-data/ubisoft-plus-games.json | 2084 +++++++++++++++++ 10 files changed, 2208 insertions(+), 3 deletions(-) create mode 100644 backend/rai-pal-core/src/providers/ubisoft_provider.rs create mode 100644 test-data/ubisoft-plus-games.json diff --git a/.vscode/settings.json b/.vscode/settings.json index ed130655..7b2eeef1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -42,6 +42,7 @@ "subkey", "substr", "SYSTEMMODAL", + "ubisoft", "uevr", "ureq", "UUVR", diff --git a/backend/rai-pal-core/src/providers/mod.rs b/backend/rai-pal-core/src/providers/mod.rs index 7c69ccca..8b7d7a9f 100644 --- a/backend/rai-pal-core/src/providers/mod.rs +++ b/backend/rai-pal-core/src/providers/mod.rs @@ -5,4 +5,5 @@ pub mod manual_provider; pub mod provider; pub mod provider_command; pub mod steam_provider; +pub mod ubisoft_provider; pub mod xbox_provider; diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/rai-pal-core/src/providers/provider.rs index 5bb4bb3b..967031dc 100644 --- a/backend/rai-pal-core/src/providers/provider.rs +++ b/backend/rai-pal-core/src/providers/provider.rs @@ -17,6 +17,8 @@ use crate::{ serializable_enum, }; +use super::ubisoft_provider::Ubisoft; + serializable_enum!(ProviderId { Steam, Manual, @@ -24,6 +26,7 @@ serializable_enum!(ProviderId { Epic, Gog, Xbox, + Ubisoft, }); #[enum_dispatch] @@ -38,6 +41,7 @@ pub enum Provider { Gog, #[cfg(target_os = "windows")] Xbox, + Ubisoft, } type Map = [(ProviderId, fn() -> Result)]; @@ -51,6 +55,7 @@ const PROVIDERS: &Map = &[ create_map_entry::(), #[cfg(target_os = "windows")] create_map_entry::(), + create_map_entry::(), ]; #[enum_dispatch(Provider)] diff --git a/backend/rai-pal-core/src/providers/ubisoft_provider.rs b/backend/rai-pal-core/src/providers/ubisoft_provider.rs new file mode 100644 index 00000000..8e883683 --- /dev/null +++ b/backend/rai-pal-core/src/providers/ubisoft_provider.rs @@ -0,0 +1,110 @@ +#![cfg(target_os = "windows")] + +use std::path::{Path, PathBuf}; + +use log::error; +use rai_pal_proc_macros::serializable_struct; +use serde::{Deserialize, Serialize}; +use winreg::{ + enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}, + RegKey, +}; + +use crate::{ + installed_game::InstalledGame, + owned_game::OwnedGame, + paths::file_name_without_extension, + providers::provider::{ProviderActions, ProviderId, ProviderStatic}, + result::Result, +}; + +use super::provider_command::{ProviderCommand, ProviderCommandAction}; + +#[derive(Clone)] +pub struct Ubisoft {} + +impl ProviderStatic for Ubisoft { + const ID: &'static ProviderId = &ProviderId::Ubisoft; + + fn new() -> Result + where + Self: Sized, + { + Ok(Self {}) + } +} + +#[derive(Serialize, Deserialize, specta::Type, Clone, Debug)] +struct UbisoftPlusGame { + title: String, + id: String, + #[serde(rename = "MasterID")] + master_id: String, + image_link: String, + short_title: String, + release_date: String, + #[serde(rename = "partofSubscriptionOffer")] + part_of_subscription_offer: Vec, +} + +#[serializable_struct] +struct UbisoftPlusGameDatabase { + hits: Vec, +} + +impl UbisoftPlusGame { + fn get_release_date(&self) -> Option { + Some( + self.release_date + .parse::>() + .ok()? + .timestamp(), + ) + } +} + +#[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, Debug)] +#[serde(rename_all = "PascalCase")] +struct UbisoftGamepassImages { + logo: Option>, + box_art: Option>, +} + +impl ProviderActions for Ubisoft { + async fn get_games( + &self, + mut _installed_callback: TInstalledCallback, + mut owned_callback: TOwnedCallback, + ) -> Result + where + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, + TOwnedCallback: FnMut(OwnedGame) + Send + Sync, + { + let json_path = + Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/Ubisoft-plus-games.json"); + + let database: UbisoftPlusGameDatabase = + serde_json::from_str(&std::fs::read_to_string(json_path)?)?; + + for game in database.hits { + let mut owned_game = OwnedGame::new(&game.id, *Self::ID, &game.title); + + owned_game.add_provider_command( + ProviderCommandAction::OpenInBrowser, + ProviderCommand::String( + format!("https://store.ubisoft.com/us/a/{}.html", game.id,), + ), + ); + + if let Some(release_date) = game.get_release_date() { + owned_game.set_release_date(release_date); + } + + owned_game.set_thumbnail_url(&game.image_link); + + owned_callback(owned_game); + } + + Ok(()) + } +} diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index 6f22fc09..6bb8646e 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -134,8 +134,8 @@ impl ProviderActions for Xbox { } } - let json_path = - Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/xbox-gamepass-games.json"); + let json_path = Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../test-data/xbox-gamepass-games-eaplay.json"); let games: Vec = serde_json::from_str(&std::fs::read_to_string(json_path)?)?; diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 4d4e0bca..27f202e4 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -311,7 +311,7 @@ export type OwnedGame = { globalId: string; providerGameId: string; provider: Pr export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } -export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" +export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" | "Ubisoft" export type RemoteGame = { title: GameTitle | null; engines: GameEngine[] | null; providerIds: { [key in ProviderId]: string[] } } export type RemoteMod = { common: CommonModData; data: RemoteModData } export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } diff --git a/frontend/components/badges/color-coded-badge.tsx b/frontend/components/badges/color-coded-badge.tsx index d0f98194..b2226f81 100644 --- a/frontend/components/badges/color-coded-badge.tsx +++ b/frontend/components/badges/color-coded-badge.tsx @@ -97,6 +97,7 @@ export const ProviderBadge = CreateColorCodedBadge( Gog: "violet", Xbox: "green", Itch: "teal", + Ubisoft: "grape", }, providerFilterOptions, ); diff --git a/frontend/components/providers/provider-icon.tsx b/frontend/components/providers/provider-icon.tsx index 7c9d737f..968dced3 100644 --- a/frontend/components/providers/provider-icon.tsx +++ b/frontend/components/providers/provider-icon.tsx @@ -7,6 +7,7 @@ import { IconCircleLetterG, IconBrandXbox, IconBrandItch, + IconCircleLetterUFilled, } from "@tabler/icons-react"; type Props = { @@ -20,6 +21,7 @@ const providerIcons: Record = { Gog: IconCircleLetterG, Xbox: IconBrandXbox, Itch: IconBrandItch, + Ubisoft: IconCircleLetterUFilled, }; export function ProviderIcon(props: Props) { diff --git a/frontend/util/common-filter-options.ts b/frontend/util/common-filter-options.ts index bdaa5d67..93f05bbe 100644 --- a/frontend/util/common-filter-options.ts +++ b/frontend/util/common-filter-options.ts @@ -14,6 +14,7 @@ export const providerFilterOptions: FilterOption[] = [ { label: "GOG", value: "Gog" }, { label: "Xbox", value: "Xbox" }, { label: "Itch", value: "Itch" }, + { label: "Ubisoft", value: "Ubisoft" }, { label: "Manual", value: "Manual" }, ]; diff --git a/test-data/ubisoft-plus-games.json b/test-data/ubisoft-plus-games.json new file mode 100644 index 00000000..df529f2c --- /dev/null +++ b/test-data/ubisoft-plus-games.json @@ -0,0 +1,2084 @@ +{ + "hits": [ + { + "title": "Assassin's Creed Shadows Ultimate Edition", + "id": "660e5e3afbff4e2940488bd3", + "MasterID": "660e5e2efbff4e2940488bd2", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3dd77933/images/large/660e5e2efbff4e2940488bd2.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Shadows", + "release_date": "2024-11-12T15:45:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "660e5e3afbff4e2940488bd3" + }, + { + "title": "Star Wars Outlaws - Ultimate Edition", + "id": "65ba8a5726acf939e9e262bf", + "MasterID": "65ba950626acf939e9e262c1", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3b41bcee/images/large/65ba950626acf939e9e262c1.jpg?sw=300&sh=395&sm=fit", + "short_title": "Star Wars Outlaws", + "release_date": "2024-08-27T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "65ba8a5726acf939e9e262bf" + }, + { + "title": "Beyond Good & Evil 20th Anniversary Edition", + "id": "6512934e5024dc02a70b1d17", + "MasterID": "651293465024dc02a70b1d16", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwfa676c0f/images/large/651293465024dc02a70b1d16.jpg?sw=300&sh=395&sm=fit", + "short_title": "Beyond Good & Evil", + "release_date": "2024-06-25T05:01:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "6512934e5024dc02a70b1d17" + }, + { + "title": "BattleCore Arena", + "id": "6582c0ce54a8e0336185f421", + "MasterID": "6582c0c654a8e0336185f420", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw98d2a5cb/images/large/6582c0c654a8e0336185f420.jpg?sw=300&sh=395&sm=fit", + "short_title": "BattleCore Arena", + "release_date": "2024-06-06T14:00:00.000Z", + "partofSubscriptionOffer": [], + "objectID": "6582c0ce54a8e0336185f421" + }, + { + "title": "XDefiant", + "id": "60f03bb70d253c1a30f224bb", + "MasterID": "60f03a8c0d253c1a30f224ba", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2fba8336/images/large/60f03a8c0d253c1a30f224ba.jpg?sw=300&sh=395&sm=fit", + "short_title": "XDefiant", + "release_date": "2024-05-21T17:00:00.000Z", + "partofSubscriptionOffer": [], + "objectID": "60f03bb70d253c1a30f224bb" + }, + { + "title": "Valiant Hearts: Coming Home", + "id": "659e730929c01c38968dce09", + "MasterID": "659e72e729c01c38968dce08", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6b9a9048/images/large/659e72e729c01c38968dce08.jpg?sw=300&sh=395&sm=fit", + "short_title": "Valiant Hearts: Coming Home", + "release_date": "2024-03-07T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "659e730929c01c38968dce09" + }, + { + "title": "Skull and Bones Premium Edition", + "id": "6295125827efc536e38350a7", + "MasterID": "6295081027efc536e38350a1", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw4de2b2d7/images/large/6295081027efc536e38350a1.jpg?sw=300&sh=395&sm=fit", + "short_title": "Skull and Bones", + "release_date": "2024-02-13T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "6295125827efc536e38350a7" + }, + { + "title": "Prince of Persia The Lost Crown Deluxe Edition", + "id": "6408bde27ee83d203cf3bda6", + "MasterID": "6408bdb27ee83d203cf3bda4", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5708cccf/images/large/6408bdb27ee83d203cf3bda4.jpg?sw=300&sh=395&sm=fit", + "short_title": "Prince of Persia The Lost Crown", + "release_date": "2024-01-15T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "6408bde27ee83d203cf3bda6" + }, + { + "title": "Avatar: Frontiers of Pandora Ultimate Edition", + "id": "62714253f6b96417e4c7470e", + "MasterID": "62696eb7450cff23a031aabd", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwfe8f9357/images/large/62696eb7450cff23a031aabd.jpg?sw=300&sh=395&sm=fit", + "short_title": "Avatar: Frontiers of Pandora", + "release_date": "2023-12-07T05:01:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "62714253f6b96417e4c7470e" + }, + { + "title": "Assassin’s Creed Mirage Master Assassin Edition", + "id": "651293d65024dc02a70b1d1a", + "MasterID": "651293cd5024dc02a70b1d19", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwecf549bd/images/large/651293cd5024dc02a70b1d19.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Mirage", + "release_date": "2023-11-14T13:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "651293d65024dc02a70b1d1a" + }, + { + "title": "The Crew Motorfest Ultimate Edition", + "id": "6453c819b58f7130fdc17a01", + "MasterID": "6453c979b58f7130fdc17a0a", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5c1dafa7/images/large/6453c979b58f7130fdc17a0a.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Crew Motorfest", + "release_date": "2023-09-11T08:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "6453c819b58f7130fdc17a01" + }, + { + "title": "The Settlers: New Allies Deluxe Edition", + "id": "5d39a3f25cdf9a07a480a099", + "MasterID": "5d39a1c65cdf9a07a480a096", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw32a5b526/images/large/5d39a1c65cdf9a07a480a096.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers: New Allies", + "release_date": "2023-02-17T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5d39a3f25cdf9a07a480a099" + }, + { + "title": "The Settlers: New Allies", + "id": "5d39a3a05cdf9a07a480a098", + "MasterID": "5d39a1a75cdf9a07a480a095", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5d4d7290/images/large/5d39a1a75cdf9a07a480a095.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers: New Allies", + "release_date": "2023-02-17T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5d39a3a05cdf9a07a480a098" + }, + { + "title": "OddBallers", + "id": "61d8596f346ad04b3fa40605", + "MasterID": "61d8595a346ad04b3fa40604", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwcd91a901/images/large/61d8595a346ad04b3fa40604.jpg?sw=300&sh=395&sm=fit", + "short_title": "OddBallers", + "release_date": "2023-01-26T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "61d8596f346ad04b3fa40605" + }, + { + "title": "Rayman Jungle Run", + "id": "62bebd57e338a72e5df87169", + "MasterID": "62c7e362a2d84f27e54670a7", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd5799fa3/images/large/62c7e362a2d84f27e54670a7.png?sw=300&sh=395&sm=fit", + "short_title": "Rayman", + "release_date": "2022-12-22T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "62bebd57e338a72e5df87169" + }, + { + "title": "Rayman Fiesta Run", + "id": "62bebd57e338a72e5df87167", + "MasterID": "62c7e336a2d84f27e54670a6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw44a3ae34/images/large/62c7e336a2d84f27e54670a6.png?sw=300&sh=395&sm=fit", + "short_title": "Rayman", + "release_date": "2022-12-22T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "62bebd57e338a72e5df87167" + }, + { + "title": "Anno 1800 Definitive Annoversary Edition", + "id": "64f88c881dfa175f3d0b9e84", + "MasterID": "64f88c741dfa175f3d0b9e83", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw442489fe/images/large/64f88c741dfa175f3d0b9e83.jpg?sw=300&sh=395&sm=fit", + "short_title": "Anno 1800", + "release_date": "2022-10-17T13:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "64f88c881dfa175f3d0b9e84" + }, + { + "title": "Rabbids Party of Legends", + "id": "62ebea3745b2755930a849aa", + "MasterID": "624effdf50e7e27306220ca7", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw52494bbf/images/large/624effdf50e7e27306220ca7.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rabbids Party of Legends", + "release_date": "2022-10-13T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "62ebea3745b2755930a849aa" + }, + { + "title": "Far Cry 6 Game of the Year Edition", + "id": "62ebe9d145b2755930a849a8", + "MasterID": "62ebe9ca45b2755930a849a7", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw0f7e84e2/images/large/62ebe9ca45b2755930a849a7.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 6", + "release_date": "2022-10-06T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "62ebe9d145b2755930a849a8" + }, + { + "title": "Riders Republic Complete Edition", + "id": "64b559eff059084c739fb8bc", + "MasterID": "64b559e6f059084c739fb8bb", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw184448b4/images/large/64b559e6f059084c739fb8bb.jpg?sw=300&sh=395&sm=fit", + "short_title": "Riders Republic", + "release_date": "2022-08-25T07:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "64b559eff059084c739fb8bc" + }, + { + "title": "Assassin's Creed Valhalla Complete Edition", + "id": "616edba50d253c42d49fa64f", + "MasterID": "616edb950d253c42d49fa64e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw908d36e3/images/large/616edb950d253c42d49fa64e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Valhalla", + "release_date": "2022-03-10T13:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "616edba50d253c42d49fa64f" + }, + { + "title": "Tom Clancy’s Rainbow Six Extraction Deluxe Edition", + "id": "606c18b05cdf9a0880536b95", + "MasterID": "606c18645cdf9a0880536b94", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6e8e3b0f/images/large/606c18645cdf9a0880536b94.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy’s Rainbow Six Extraction", + "release_date": "2022-01-20T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "606c18b05cdf9a0880536b95" + }, + { + "title": "Tom Clancy’s Rainbow Six Extraction", + "id": "5cf6bc5639798c0b70a3b17d", + "MasterID": "5cf15f1b39798c0870c076e6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw8ba65e07/images/large/5cf15f1b39798c0870c076e6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy’s Rainbow Six Extraction", + "release_date": "2022-01-20T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5cf6bc5639798c0b70a3b17d" + }, + { + "title": "MONOPOLY Madness", + "id": "61444f175cdf9a0a3cfe1f03", + "MasterID": "61444efd5cdf9a0a3cfe1f02", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw67c72057/images/large/61444efd5cdf9a0a3cfe1f02.jpg?sw=300&sh=395&sm=fit", + "short_title": "MONOPOLY Madness", + "release_date": "2021-12-09T17:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "61444f175cdf9a0a3cfe1f03" + }, + { + "title": "Riders Republic Standard Edition", + "id": "5f2816af5cdf9a055850c797", + "MasterID": "5f2816a15cdf9a055850c796", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwfb44da29/images/large/5f2816a15cdf9a055850c796.jpg?sw=300&sh=395&sm=fit", + "short_title": "Riders Republic", + "release_date": "2021-10-28T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5f2816af5cdf9a055850c797" + }, + { + "title": "Discovery Tour: Viking Age", + "id": "613f1adb5cdf9a076026d08e", + "MasterID": "613f1bcb5cdf9a076026d090", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw622bcc57/images/large/613f1bcb5cdf9a076026d090.jpg?sw=300&sh=395&sm=fit", + "short_title": "Discovery Tour: Viking Age", + "release_date": "2021-10-19T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "613f1adb5cdf9a076026d08e" + }, + { + "title": "Far Cry 6", + "id": "5ecd2cac5cdf9a1528a8c1d2", + "MasterID": "5ecd2c925cdf9a1528a8c1d1", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7387f247/images/large/5ecd2c925cdf9a1528a8c1d1.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 6", + "release_date": "2021-10-07T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5ecd2cac5cdf9a1528a8c1d2" + }, + { + "title": "Tom Clancy's Ghost Recon Breakpoint Ultimate Edition", + "id": "6103c5850d253c28947aa6c5", + "MasterID": "6103c39d0d253c28947aa6c4", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwb9efdcfe/images/large/6103c39d0d253c28947aa6c4.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Ghost Recon Breakpoint", + "release_date": "2021-09-29T17:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "6103c5850d253c28947aa6c5" + }, + { + "title": "Watch Dogs Legion Deluxe Edition", + "id": "60c1d9380d253c133844ea17", + "MasterID": "60c1d9160d253c133844ea16", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw4954dda5/images/large/60c1d9160d253c133844ea16.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch Dogs Legion", + "release_date": "2021-08-05T09:00:00.000Z", + "partofSubscriptionOffer": [], + "objectID": "60c1d9380d253c133844ea17" + }, + { + "title": "The Crew 2 Gold Edition", + "id": "60c1d5790d253c133844ea14", + "MasterID": "60c1d5690d253c133844ea13", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2f7ccaa3/images/large/60c1d5690d253c133844ea13.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Crew 2", + "release_date": "2021-07-07T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "60c1d5790d253c133844ea14" + }, + { + "title": "Scott Pilgrim vs. The World: The Game – Complete Edition", + "id": "5f46839c5cdf9a0c2027ca81", + "MasterID": "5f4683875cdf9a0c2027ca80", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6c73d84c/images/large/5f4683875cdf9a0c2027ca80.jpg?sw=300&sh=395&sm=fit", + "short_title": "Scott Pilgrim vs. The World: The Game", + "release_date": "2021-01-14T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "5f46839c5cdf9a0c2027ca81" + }, + { + "title": "Immortals Fenyx Rising Gold Edition", + "id": "5f22ce060d253c0b04b0d9de", + "MasterID": "5f22cdec0d253c0b04b0d9dc", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw72c483ac/images/5f22cdec0d253c0b04b0d9dc.jpg?sw=300&sh=395&sm=fit", + "short_title": "Immortals Fenyx Rising", + "release_date": "2020-12-03T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5f22ce060d253c0b04b0d9de" + }, + { + "title": "Immortals Fenyx Rising", + "id": "5cec227839798c0870c07685", + "MasterID": "5cec210a39798c0870c07684", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwfe8b320f/images/5cec210a39798c0870c07684.jpg?sw=300&sh=395&sm=fit", + "short_title": "Immortals Fenyx Rising", + "release_date": "2020-12-03T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5cec227839798c0870c07685" + }, + { + "title": "Assassin's Creed Valhalla", + "id": "5e8353ff5cdf9a21c0b4e72e", + "MasterID": "5e849c6c5cdf9a21c0b4e731", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3edc2aad/images/large/5e849c6c5cdf9a21c0b4e731.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Valhalla", + "release_date": "2020-11-10T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5e8353ff5cdf9a21c0b4e72e" + }, + { + "title": "Watch Dogs Legion Ultimate Edition", + "id": "5ced3b6d39798c0870c076ba", + "MasterID": "5cec2d9939798c0870c0769a", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwc0decf30/images/large/5cec2d9939798c0870c0769a.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch Dogs Legion", + "release_date": "2020-10-29T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5ced3b6d39798c0870c076ba" + }, + { + "title": "Watch Dogs Legion", + "id": "5ced3b5c39798c0870c0769e", + "MasterID": "5cec2d5839798c0870c07698", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw30b772d6/images/large/5cec2d5839798c0870c07698.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch Dogs Legion", + "release_date": "2020-10-29T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5ced3b5c39798c0870c0769e" + }, + { + "title": "Trackmania Club Access 1 Year", + "id": "5e14dd765cdf9a1ec45ad821", + "MasterID": "5e8d98a35cdf9a12c868c890", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6f73c2d2/images/large/5e8d98a35cdf9a12c868c890.jpg?sw=300&sh=395&sm=fit", + "short_title": "Trackmania", + "release_date": "2020-07-01T15:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5e14dd765cdf9a1ec45ad821" + }, + { + "title": "Anno 1701 History Edition", + "id": "5ebc1d690d253c2420445276", + "MasterID": "5ebc1d290d253c2420445275", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw9b9b9f43/images/large/5ebc1d290d253c2420445275.png?sw=300&sh=395&sm=fit", + "short_title": "Anno 1701", + "release_date": "2020-06-25T16:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5ebc1d690d253c2420445276" + }, + { + "title": "Anno 1602 History Edition", + "id": "5ebc1be00d253c2420445273", + "MasterID": "5ebc1bc50d253c2420445272", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2d25804f/images/large/5ebc1bc50d253c2420445272.png?sw=300&sh=395&sm=fit", + "short_title": "Anno 1602", + "release_date": "2020-06-25T16:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5ebc1be00d253c2420445273" + }, + { + "title": "Anno 1503 History Edition", + "id": "5ebc19dc0d253c242044526f", + "MasterID": "5ebc19a30d253c242044526e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw410e817f/images/large/5ebc19a30d253c242044526e.png?sw=300&sh=395&sm=fit", + "short_title": "Anno 1503", + "release_date": "2020-06-25T16:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5ebc19dc0d253c242044526f" + }, + { + "title": "Anno 1404 History Edition", + "id": "5e29c66b5cdf9a03ec037ae8", + "MasterID": "5e29c6565cdf9a03ec037ae7", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw4e1b68a8/images/large/5e29c6565cdf9a03ec037ae7.png?sw=300&sh=395&sm=fit", + "short_title": "Anno 1404", + "release_date": "2020-06-25T16:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5e29c66b5cdf9a03ec037ae8" + }, + { + "title": "UNO Ultimate Edition", + "id": "5f747aa00d253c26a4cc81a2", + "MasterID": "5e29b8235cdf9a03ec037ae2", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw37986f02/images/large/5e29b8235cdf9a03ec037ae2.jpg?sw=300&sh=395&sm=fit", + "short_title": "UNO", + "release_date": "2020-03-17T13:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5f747aa00d253c26a4cc81a2" + }, + { + "title": "Tom Clancy’s The Division 2 Ultimate Edition", + "id": "5e15abb55cdf9a1ec45ad832", + "MasterID": "5e15ab9f5cdf9a1ec45ad831", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwebb4d74c/images/large/5e15ab9f5cdf9a1ec45ad831.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancys The Division 2", + "release_date": "2020-03-02T11:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5e15abb55cdf9a1ec45ad832" + }, + { + "title": "Tom Clancy's Ghost Recon Breakpoint", + "id": "5cc81f5f6b54a4cd3c0e9cff", + "MasterID": "5cc81f5f6b54a4cd3c0e9cfd", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw9daf65e5/images/large/5cc81f5f6b54a4cd3c0e9cfd.jpg?sw=300&sh=395&sm=fit", + "short_title": "Ghost Recon Breakpoint", + "release_date": "2019-10-04T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5cc81f5f6b54a4cd3c0e9cff" + }, + { + "title": "Discovery Tour: Ancient Greece by Ubisoft", + "id": "5d4041f35cdf9a07d09464ad", + "MasterID": "5d4040cd5cdf9a07d09464ac", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw028cddd9/images/large/5d4040cd5cdf9a07d09464ac.jpg?sw=300&sh=395&sm=fit", + "short_title": "Discovery Tour: Ancient Greece by Ubisoft", + "release_date": "2019-09-10T15:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5d4041f35cdf9a07d09464ad" + }, + { + "title": "Starlink: Battle for Atlas Deluxe Edition", + "id": "5cbf26fd6b54a4a1e3c4410a", + "MasterID": "5cbf26fd6b54a4a1e3c44108", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwc73fb11b/images/large/5cbf26fd6b54a4a1e3c44108.jpg?sw=300&sh=395&sm=fit", + "short_title": "Starlink: Battle for Atlas", + "release_date": "2019-04-30T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5cbf26fd6b54a4a1e3c4410a" + }, + { + "title": "Starlink: Battle for Atlas Digital Edition", + "id": "5cbf26fd6b54a4a1e3c44106", + "MasterID": "5cbf26fd6b54a4a1e3c44104", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwb66cafca/images/large/5cbf26fd6b54a4a1e3c44104.jpg?sw=300&sh=395&sm=fit", + "short_title": "Starlink: Battle for Atlas", + "release_date": "2019-04-30T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5cbf26fd6b54a4a1e3c44106" + }, + { + "title": "Anno 1800", + "id": "5b647010ef3aa548048c595a", + "MasterID": "5b647010ef3aa548048c5958", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwadee2f4e/images/large/5b647010ef3aa548048c5958.jpg?sw=300&sh=395&sm=fit", + "short_title": "Anno 1800", + "release_date": "2019-04-16T04:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5b647010ef3aa548048c595a" + }, + { + "title": "Assassin's Creed III Remastered", + "id": "5c878b92ca1a64c4785356f5", + "MasterID": "5c62f61dadc72438053897eb", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw017eb737/images/large/5c62f61dadc72438053897eb.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed III Remastered", + "release_date": "2019-03-29T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "5c878b92ca1a64c4785356f5" + }, + { + "title": "Trials® Rising Gold Edition", + "id": "5b647011ef3aa548048c596f", + "MasterID": "5b0e967a4e0165c827ee8dd2", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw89cb47bd/images/large/5b0e967a4e0165c827ee8dd2.jpg?sw=300&sh=395&sm=fit", + "short_title": "Trials Rising", + "release_date": "2019-02-26T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5b647011ef3aa548048c596f" + }, + { + "title": "Trials® Rising", + "id": "5b0e967a4e0165c827ee8de2", + "MasterID": "5b0e967a4e0165c827ee8de0", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6ef11d82/images/large/5b0e967a4e0165c827ee8de0.jpg?sw=300&sh=395&sm=fit", + "short_title": "Trials Rising", + "release_date": "2019-02-26T05:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5b0e967a4e0165c827ee8de2" + }, + { + "title": "Far Cry New Dawn Deluxe Edition", + "id": "5bfd4c29ca1a64ea70fe0ef5", + "MasterID": "5bfd4c28ca1a64ea70fe0ef3", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw61bda719/images/large/5bfd4c28ca1a64ea70fe0ef3.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry New Dawn", + "release_date": "2019-02-14T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5bfd4c29ca1a64ea70fe0ef5" + }, + { + "title": "Far Cry New Dawn", + "id": "5bfd4c28ca1a64ea70fe0ee5", + "MasterID": "5bf319696b54a4ddc91e8843", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw14ce6a59/images/large/5bf319696b54a4ddc91e8843.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry New Dawn", + "release_date": "2019-02-14T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5bfd4c28ca1a64ea70fe0ee5" + }, + { + "title": "THE SETTLERS 7 History Edition", + "id": "5be2b34388a7e3b8170265e1", + "MasterID": "5be2b34388a7e3b8170265df", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw27822e10/images/large/5be2b34388a7e3b8170265df.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers 7", + "release_date": "2018-11-15T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5be2b34388a7e3b8170265e1" + }, + { + "title": "THE SETTLERS Rise of an Empire History Edition", + "id": "5be2b34388a7e3b8170265dd", + "MasterID": "5be2b34388a7e3b8170265db", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw20ca0823/images/large/5be2b34388a7e3b8170265db.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers", + "release_date": "2018-11-15T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5be2b34388a7e3b8170265dd" + }, + { + "title": "THE SETTLERS Heritage of Kings History Edition", + "id": "5be2b34388a7e3b8170265d9", + "MasterID": "5be2b34288a7e3b8170265d7", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw84c225f4/images/large/5be2b34288a7e3b8170265d7.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers", + "release_date": "2018-11-15T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5be2b34388a7e3b8170265d9" + }, + { + "title": "The Settlers IV History Edition", + "id": "5be2b34288a7e3b8170265d5", + "MasterID": "5be2b34288a7e3b8170265d3", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw4a237556/images/large/5be2b34288a7e3b8170265d3.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers IV", + "release_date": "2018-11-15T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5be2b34288a7e3b8170265d5" + }, + { + "title": "THE SETTLERS III History Edition", + "id": "5be2b34288a7e3b8170265d1", + "MasterID": "5be2b34288a7e3b8170265cf", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd49c9ae4/images/large/5be2b34288a7e3b8170265cf.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers III", + "release_date": "2018-11-15T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5be2b34288a7e3b8170265d1" + }, + { + "title": "THE SETTLERS II Veni Vidi Vici History Edition", + "id": "5be2b34288a7e3b8170265cd", + "MasterID": "5be2b34288a7e3b8170265cb", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw76833b4c/images/large/5be2b34288a7e3b8170265cb.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers II", + "release_date": "2018-11-15T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5be2b34288a7e3b8170265cd" + }, + { + "title": "STEEP-X GAMES - GOLD EDITION", + "id": "5bcef1f2adc72489c0ae1a19", + "MasterID": "5ba265764e016529f4fc2177", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwddf5f25a/images/large/5ba265764e016529f4fc2177.jpg?sw=300&sh=395&sm=fit", + "short_title": "STEEP", + "release_date": "2018-10-30T16:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5bcef1f2adc72489c0ae1a19" + }, + { + "title": "Assassin's Creed Odyssey", + "id": "5afda5f888a7e34d25b50149", + "MasterID": "5afda5f788a7e34d25b5012f", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw77a3416f/images/large/5afda5f788a7e34d25b5012f.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Odyssey", + "release_date": "2018-10-02T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5afda5f888a7e34d25b50149" + }, + { + "title": "Assassin's Creed Odyssey Ultimate Edition", + "id": "5afda8aa6b54a4271407a877", + "MasterID": "5afda8aa6b54a4271407a875", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw889b9197/images/large/5afda8aa6b54a4271407a875.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Odyssey", + "release_date": "2018-10-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5afda8aa6b54a4271407a877" + }, + { + "title": "Transference", + "id": "5b647d704e016561abf01eb5", + "MasterID": "5b647010ef3aa548048c594c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw515c6f4d/images/large/5b647010ef3aa548048c594c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Transference", + "release_date": "2018-09-17T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5b647d704e016561abf01eb5" + }, + { + "title": "Tom Clancy's Ghost Recon Wildlands - Ultimate Edition", + "id": "5b969de9adc7244686b0b7f5", + "MasterID": "5b969c88ca1a64033f76fa29", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf0a00c1b/images/large/5b969c88ca1a64033f76fa29.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Ghost Recon Wildlands", + "release_date": "2018-09-17T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5b969de9adc7244686b0b7f5" + }, + { + "title": "The Settlers (1993) - History Edition", + "id": "5b647012ef3aa548048c597d", + "MasterID": "5b647012ef3aa548048c597b", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwc87300ce/images/large/5b647012ef3aa548048c597b.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Settlers (1993)", + "release_date": "2018-08-17T10:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5b647012ef3aa548048c597d" + }, + { + "title": "The Crew 2", + "id": "598c6a3e0c8ee469268b456a", + "MasterID": "598c6a3e0c8ee469268b4568", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw932cff55/images/large/598c6a3e0c8ee469268b4568.jpg?sw=300&sh=395&sm=fit", + "short_title": "The Crew 2", + "release_date": "2018-06-29T06:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "598c6a3e0c8ee469268b456a" + }, + { + "title": "Far Cry 5 Gold Edition", + "id": "5919a9526b54a4ba538b4567", + "MasterID": "591980f94e0165260a8b4568", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw9d1ff632/images/large/591980f94e0165260a8b4568.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 5", + "release_date": "2018-03-27T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5919a9526b54a4ba538b4567" + }, + { + "title": "Discovery Tour by Assassin's Creed Ancient Egypt", + "id": "5a7d728d0c8ee45b54018f25", + "MasterID": "5a7d728d0c8ee45b54018f23", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw42dec8af/images/large/5a7d728d0c8ee45b54018f23.jpg?sw=300&sh=395&sm=fit", + "short_title": "Discovery Tour by Assassin's Creed", + "release_date": "2018-02-20T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5a7d728d0c8ee45b54018f25" + }, + { + "title": "Ode", + "id": "5a16b08788a7e3d65873c4c1", + "MasterID": "5a16aed74e01658f462610a8", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwbef38bf9/images/large/5a16aed74e01658f462610a8.jpg?sw=300&sh=395&sm=fit", + "short_title": "Ode", + "release_date": "2017-11-26T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5a16b08788a7e3d65873c4c1" + }, + { + "title": "Assassin's Creed® Origins Gold Edition", + "id": "59245fb4adc724ef3f8b456e", + "MasterID": "59245fb4adc724ef3f8b456c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw0492e594/images/large/59245fb4adc724ef3f8b456c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Origins", + "release_date": "2017-10-26T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "59245fb4adc724ef3f8b456e" + }, + { + "title": "Assassin's Creed® Origins", + "id": "592450934e0165f46c8b456a", + "MasterID": "592450934e0165f46c8b4568", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7fe341f3/images/large/592450934e0165f46c8b4568.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Origins", + "release_date": "2017-10-26T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "592450934e0165f46c8b456a" + }, + { + "title": "South Park™: The Fractured but Whole™", + "id": "575ffdb5a3be1633568b4eaa", + "MasterID": "56c494ad88a7e300458b4d42", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd7a9e145/images/large/56c494ad88a7e300458b4d42.jpg?sw=300&sh=395&sm=fit", + "short_title": "South Park: The Fractured But Whole", + "release_date": "2017-10-17T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdb5a3be1633568b4eaa" + }, + { + "title": "South Park™: The Fractured but Whole™ Gold Edition", + "id": "57615171a3be1683708b468a", + "MasterID": "57556d5c6b54a4b35d8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3d8d5095/images/large/57556d5c6b54a4b35d8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "South Park: The Fractured but Whole", + "release_date": "2017-10-14T22:01:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "57615171a3be1683708b468a" + }, + { + "title": "For Honor", + "id": "659ea92329c01c38968dce1a", + "MasterID": "659ea90829c01c38968dce19", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw050c55b6/images/large/659ea90829c01c38968dce19.jpg?sw=300&sh=395&sm=fit", + "short_title": "For Honor", + "release_date": "2017-02-14T13:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "659ea92329c01c38968dce1a" + }, + { + "title": "For Honor – Ultimate Edition", + "id": "659ea88829c01c38968dce16", + "MasterID": "659ea86929c01c38968dce15", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5d35a83c/images/large/659ea86929c01c38968dce15.jpg?sw=300&sh=395&sm=fit", + "short_title": "For Honor", + "release_date": "2017-02-14T13:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "659ea88829c01c38968dce16" + }, + { + "title": "Uno", + "id": "57c1954c0c8ee43a4f8b4568", + "MasterID": "57c19450ef3aa52a768b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7044b5cb/images/large/57c19450ef3aa52a768b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "UNO", + "release_date": "2017-01-03T18:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "57c1954c0c8ee43a4f8b4568" + }, + { + "title": "Steep", + "id": "57615170a3be1683708b4688", + "MasterID": "57597f6a0c8ee468458b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw016d1c75/images/large/57597f6a0c8ee468458b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "STEEP", + "release_date": "2016-11-30T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "57615170a3be1683708b4688" + }, + { + "title": "Watch_Dogs® 2 - Gold Edition", + "id": "5761516fa3be1683708b467a", + "MasterID": "574d3e9a0c8ee4c65d8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf8ceeaf0/images/large/574d3e9a0c8ee4c65d8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch_Dogs 2", + "release_date": "2016-11-29T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5761516fa3be1683708b467a" + }, + { + "title": "Watch Dogs 2", + "id": "5761516fa3be1683708b466e", + "MasterID": "574d3a8aca1a64fb3b8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf5aa242b/images/large/574d3a8aca1a64fb3b8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch Dogs 2", + "release_date": "2016-11-29T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "5761516fa3be1683708b466e" + }, + { + "title": "Champions of Anteria", + "id": "5761516ea3be1683708b4660", + "MasterID": "573b05140c8ee4d51c8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwccbf9af3/images/large/573b05140c8ee4d51c8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Champions of Anteria", + "release_date": "2016-08-28T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5761516ea3be1683708b4660" + }, + { + "title": "Trials of the Blood Dragon", + "id": "5761516ba3be1683708b4634", + "MasterID": "5757fa3eadc724645b8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7e8c7b26/images/large/5757fa3eadc724645b8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Trials of The Blood Dragon", + "release_date": "2016-06-13T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "5761516ba3be1683708b4634" + }, + { + "title": "Trackmania Turbo", + "id": "575ffdbca3be1633568b4f1a", + "MasterID": "56c4948c88a7e300458b486e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw0f7a04b7/images/large/56c4948c88a7e300458b486e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Trackmania Turbo", + "release_date": "2016-03-24T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdbca3be1633568b4f1a" + }, + { + "title": "Tom Clancy's The Division Gold Edition", + "id": "575ffdb6a3be1633568b4ec2", + "MasterID": "56c494ad88a7e300458b4d60", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwc932f0e7/images/large/56c494ad88a7e300458b4d60.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's The Division", + "release_date": "2016-03-08T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdb6a3be1633568b4ec2" + }, + { + "title": "Tom Clancy's The Division", + "id": "575ffdb6a3be1633568b4ec0", + "MasterID": "56c494ad88a7e300458b4d62", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw440d8fae/images/large/56c494ad88a7e300458b4d62.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's The Division", + "release_date": "2016-03-08T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdb6a3be1633568b4ec0" + }, + { + "title": "Far Cry Primal Apex Edition", + "id": "575ffdd3a3be1633568b5022", + "MasterID": "56c4948588a7e300458b4760", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw04e8039d/images/large/56c4948588a7e300458b4760.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry Primal", + "release_date": "2016-03-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdd3a3be1633568b5022" + }, + { + "title": "Far Cry Primal", + "id": "575ffdd2a3be1633568b5018", + "MasterID": "56c4947a88a7e300458b45e8", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw1c437c7e/images/large/56c4947a88a7e300458b45e8.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry Primal", + "release_date": "2016-03-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdd2a3be1633568b5018" + }, + { + "title": "Assassin's Creed Chronicles: Russia", + "id": "57615163a3be1683708b45a0", + "MasterID": "57062ec488a7e316728b469e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3001abb8/images/large/57062ec488a7e316728b469e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Chronicles", + "release_date": "2016-02-25T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "57615163a3be1683708b45a0" + }, + { + "title": "Assassin's Creed Chronicles: India", + "id": "57615163a3be1683708b4596", + "MasterID": "56c4947f88a7e300458b4686", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwcca0105a/images/large/56c4947f88a7e300458b4686.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Chronicles", + "release_date": "2016-01-12T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "57615163a3be1683708b4596" + }, + { + "title": "Hungry Shark World", + "id": "62bebd56e338a72e5df87165", + "MasterID": "62cec0c151aa9379b071f7dc", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5cfc30d1/images/large/62cec0c151aa9379b071f7dc.png?sw=300&sh=395&sm=fit", + "short_title": "Hungry Shark World", + "release_date": "2015-12-22T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "62bebd56e338a72e5df87165" + }, + { + "title": "Tom Clancy's Rainbow Six Siege - Ultimate Edition", + "id": "659e672f29c01c38968dce05", + "MasterID": "65a97617228491422c9bf940", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw903a3700/images/large/65a97617228491422c9bf940.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Rainbow Six Siege", + "release_date": "2015-12-01T15:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "659e672f29c01c38968dce05" + }, + { + "title": "Tom Clancy's Rainbow Six Siege", + "id": "575ffdbaa3be1633568b4ef6", + "MasterID": "56c494ad88a7e300458b4d5a", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw63e24d90/images/large/56c494ad88a7e300458b4d5a.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Rainbow Six Siege", + "release_date": "2015-12-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdbaa3be1633568b4ef6" + }, + { + "title": "Assassin's Creed Syndicate Gold Edition", + "id": "575ffdd0a3be1633568b5006", + "MasterID": "56c4948288a7e300458b46ee", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwc19321b4/images/large/56c4948288a7e300458b46ee.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Syndicate", + "release_date": "2015-11-19T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdd0a3be1633568b5006" + }, + { + "title": "Assassin's Creed Syndicate", + "id": "575ffdd0a3be1633568b5000", + "MasterID": "56c4947988a7e300458b45c6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwed1dc9f4/images/large/56c4947988a7e300458b45c6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Syndicate", + "release_date": "2015-11-19T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdd0a3be1633568b5000" + }, + { + "title": "Anno 2205™ Ultimate edition", + "id": "57f37b640c8ee4ac7a8b4567", + "MasterID": "57f37acaca1a649a6e8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw1f431afa/images/large/57f37acaca1a649a6e8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Anno 2205", + "release_date": "2015-11-03T12:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "57f37b640c8ee4ac7a8b4567" + }, + { + "title": "Zombi", + "id": "575ffdb3a3be1633568b4e86", + "MasterID": "56c4948e88a7e300458b48a8", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3305acce/images/large/56c4948e88a7e300458b48a8.jpg?sw=300&sh=395&sm=fit", + "short_title": "Zombi", + "release_date": "2015-08-18T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdb3a3be1633568b4e86" + }, + { + "title": "Assassin's Creed Chronicles: China", + "id": "575ffd8fa3be1633568b4cf0", + "MasterID": "56c4947f88a7e300458b4682", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2020cb1a/images/large/56c4947f88a7e300458b4682.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Chronicles", + "release_date": "2015-04-21T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd8fa3be1633568b4cf0" + }, + { + "title": "Assassin's Creed Rogue Deluxe Edition", + "id": "575ffdb4a3be1633568b4e9a", + "MasterID": "56c4948288a7e300458b46da", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwb42fbb5f/images/large/56c4948288a7e300458b46da.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Rogue", + "release_date": "2015-03-10T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdb4a3be1633568b4e9a" + }, + { + "title": "Heroes of Might and Magic 3: Complete", + "id": "575ffd9ba3be1633568b4d8e", + "MasterID": "575ffd9ba3be1633568b4d8c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwca5abf82/images/large/575ffd9ba3be1633568b4d8c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Heroes of Might and Magic 3", + "release_date": "2015-02-28T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd9ba3be1633568b4d8e" + }, + { + "title": "Monopoly Plus", + "id": "59a6b2d788a7e33d638b4570", + "MasterID": "59ae6c7088a7e38f76eabdfd", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6429a91b/images/large/59ae6c7088a7e38f76eabdfd.jpg?sw=300&sh=395&sm=fit", + "short_title": "Monopoly Plus", + "release_date": "2014-11-26T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "59a6b2d788a7e33d638b4570" + }, + { + "title": "Far Cry 4 Gold Edition", + "id": "575ffd1ea3be1633568b4586", + "MasterID": "56c4948488a7e300458b474e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw50af203c/images/large/56c4948488a7e300458b474e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 4", + "release_date": "2014-11-18T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd1ea3be1633568b4586" + }, + { + "title": "Far Cry 4", + "id": "575ffd1ea3be1633568b457c", + "MasterID": "56c4947a88a7e300458b45e2", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw50af203c/images/large/56c4947a88a7e300458b45e2.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 4", + "release_date": "2014-11-18T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffd1ea3be1633568b457c" + }, + { + "title": "Assassin's Creed Unity", + "id": "575ffdb7a3be1633568b4ed8", + "MasterID": "56c4947a88a7e300458b45d6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwcc504b80/images/large/56c4947a88a7e300458b45d6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Unity", + "release_date": "2014-11-13T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdb7a3be1633568b4ed8" + }, + { + "title": "Assassin's Creed Rogue", + "id": "575ffdb4a3be1633568b4e98", + "MasterID": "56c4947988a7e300458b45bc", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwa3855356/images/large/56c4947988a7e300458b45bc.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Rogue", + "release_date": "2014-11-11T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdb4a3be1633568b4e98" + }, + { + "title": "Valiant Hearts - The Great War", + "id": "575ffdb2a3be1633568b4e7a", + "MasterID": "56c4948d88a7e300458b4890", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwb4fca77c/images/large/56c4948d88a7e300458b4890.jpg?sw=300&sh=395&sm=fit", + "short_title": "Valiant Hearts: The Great War", + "release_date": "2014-06-25T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdb2a3be1633568b4e7a" + }, + { + "title": "Watch_Dogs Complete Edition", + "id": "575ffdb7a3be1633568b4ed6", + "MasterID": "56c4948d88a7e300458b48a0", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwdb4a77ea/images/large/56c4948d88a7e300458b48a0.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch Dogs", + "release_date": "2014-05-27T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdb7a3be1633568b4ed6" + }, + { + "title": "Watch_Dogs", + "id": "575ffdb7a3be1633568b4ed4", + "MasterID": "56c494ae88a7e300458b4d72", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw77d11f26/images/large/56c494ae88a7e300458b4d72.jpg?sw=300&sh=395&sm=fit", + "short_title": "Watch Dogs", + "release_date": "2014-05-27T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdb7a3be1633568b4ed4" + }, + { + "title": "Child of Light", + "id": "575ffd93a3be1633568b4d36", + "MasterID": "56c4948488a7e300458b472e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw4beafba5/images/large/56c4948488a7e300458b472e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Child of Light", + "release_date": "2014-04-30T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd93a3be1633568b4d36" + }, + { + "title": "Trials Fusion", + "id": "575ffdb7a3be1633568b4eca", + "MasterID": "56c4948d88a7e300458b4888", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwfccfa549/images/large/56c4948d88a7e300458b4888.jpg?sw=300&sh=395&sm=fit", + "short_title": "Trials Fusion", + "release_date": "2014-04-24T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics" + ], + "objectID": "575ffdb7a3be1633568b4eca" + }, + { + "title": "South Park The Stick of Truth", + "id": "575ffdb5a3be1633568b4eae", + "MasterID": "56c494ad88a7e300458b4d44", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2e21cff9/images/large/56c494ad88a7e300458b4d44.jpg?sw=300&sh=395&sm=fit", + "short_title": "South Park : The Stick of Truth", + "release_date": "2014-03-06T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdb5a3be1633568b4eae" + }, + { + "title": "Assassin's Creed Liberation", + "id": "575ffd8fa3be1633568b4cf2", + "MasterID": "56c4948188a7e300458b46d0", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf46b2896/images/large/56c4948188a7e300458b46d0.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Liberation", + "release_date": "2014-01-15T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd8fa3be1633568b4cf2" + }, + { + "title": "Assassin's Creed Freedom Cry (Standalone)", + "id": "57062ebd88a7e316728b45c4", + "MasterID": "56c4948188a7e300458b46ce", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw448e0c70/images/large/56c4948188a7e300458b46ce.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Freedom Cry", + "release_date": "2013-12-19T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "57062ebd88a7e316728b45c4" + }, + { + "title": "Assassin's Creed® IV Black Flag™ Uplay Gold Edition", + "id": "575ffdb4a3be1633568b4e92", + "MasterID": "575ffdb4a3be1633568b4e90", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7f2b5ed1/images/large/56c4948088a7e300458b46b0.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed IV Black Flag", + "release_date": "2013-11-22T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdb4a3be1633568b4e92" + }, + { + "title": "Flashback", + "id": "575ffd9aa3be1633568b4d7e", + "MasterID": "575ffd9aa3be1633568b4d7c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd3614368/images/large/575ffd9aa3be1633568b4d7c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Flashback", + "release_date": "2013-09-30T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd9aa3be1633568b4d7e" + }, + { + "title": "Rayman Legends", + "id": "575ffdb4a3be1633568b4e9e", + "MasterID": "56c4948888a7e300458b47da", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwa8b6d5b5/images/large/56c4948888a7e300458b47da.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rayman Legends", + "release_date": "2013-08-28T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffdb4a3be1633568b4e9e" + }, + { + "title": "Far Cry 3 Blood Dragon", + "id": "575ffd99a3be1633568b4d74", + "MasterID": "56c4948488a7e300458b4744", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwddb8845f/images/large/56c4948488a7e300458b4744.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 3 Blood Dragon", + "release_date": "2013-05-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd99a3be1633568b4d74" + }, + { + "title": "Anno 2070 Complete Edition", + "id": "56c4947e88a7e300458b4668", + "MasterID": "56c4947888a7e300458b456c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw71bf3ce3/images/large/56c4947888a7e300458b456c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Anno 2070", + "release_date": "2013-03-28T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "56c4947e88a7e300458b4668" + }, + { + "title": "Far Cry 3", + "id": "575ffd98a3be1633568b4d6e", + "MasterID": "575ffd98a3be1633568b4d6c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw806502b0/images/large/575ffd98a3be1633568b4d6c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 3", + "release_date": "2013-01-15T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd98a3be1633568b4d6e" + }, + { + "title": "Tom Clancy's Splinter Cell Blacklist", + "id": "575ffdb6a3be1633568b4eb4", + "MasterID": "56c4948a88a7e300458b4822", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5b1b0412/images/large/56c4948a88a7e300458b4822.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Splinter Cell Blacklist", + "release_date": "2013-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdb6a3be1633568b4eb4" + }, + { + "title": "Trials Evolution Gold Edition", + "id": "5704facc88a7e32b078b46fc", + "MasterID": "56c4948d88a7e300458b488e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7f756120/images/large/56c4948d88a7e300458b488e.png?sw=300&sh=395&sm=fit", + "short_title": "", + "release_date": "2013-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5704facc88a7e32b078b46fc" + }, + { + "title": "Tom Clancy’s Ghost Recon Future Soldier™", + "id": "57615162a3be1683708b4588", + "MasterID": "57615162a3be1683708b4586", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7399a97c/images/large/57615162a3be1683708b4586.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy’s Ghost Recon Future Soldier", + "release_date": "2012-06-28T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "57615162a3be1683708b4588" + }, + { + "title": "Tom Clancy's Ghost Recon Future Soldier", + "id": "57ebc2a74e0165ef268b4568", + "MasterID": "57ebc15fef3aa57d1f8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw971a7998/images/large/56c4948588a7e300458b4768.jpg?sw=300&sh=395&sm=fit", + "short_title": "Ghost Recon Future Soldier", + "release_date": "2012-06-27T22:00:00.000Z", + "partofSubscriptionOffer": [], + "objectID": "57ebc2a74e0165ef268b4568" + }, + { + "title": "Rayman Origins", + "id": "575ffda8a3be1633568b4e12", + "MasterID": "56c4948888a7e300458b47dc", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw0d33cc71/images/large/56c4948888a7e300458b47dc.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rayman Origins", + "release_date": "2012-03-29T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda8a3be1633568b4e12" + }, + { + "title": "I Am Alive", + "id": "575ffd9da3be1633568b4da2", + "MasterID": "56c4948688a7e300458b4796", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw56895e6c/images/large/56c4948688a7e300458b4796.jpg?sw=300&sh=395&sm=fit", + "short_title": "I am Alive", + "release_date": "2012-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd9da3be1633568b4da2" + }, + { + "title": "Assassin's Creed Revelations", + "id": "575ffda8a3be1633568b4e0c", + "MasterID": "56c4948188a7e300458b46d2", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw88ca1535/images/large/56c4948188a7e300458b46d2.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin’s Creed Revelations", + "release_date": "2011-12-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffda8a3be1633568b4e0c" + }, + { + "title": "Might & Magic: Heroes VI", + "id": "65cba12638719824e7a443f7", + "MasterID": "65cba11038719824e7a443f6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw07b2c1e6/images/large/65cba11038719824e7a443f6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Might and Magic", + "release_date": "2011-10-13T09:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "65cba12638719824e7a443f7" + }, + { + "title": "Assassin's Creed Brotherhood", + "id": "575ffd8fa3be1633568b4cec", + "MasterID": "56c4948088a7e300458b46b6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw634ad17f/images/large/56c4948088a7e300458b46b6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed Brotherhood", + "release_date": "2011-03-17T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd8fa3be1633568b4cec" + }, + { + "title": "From Dust", + "id": "575ffd9aa3be1633568b4d80", + "MasterID": "56c4948588a7e300458b4766", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw683e69d4/images/large/56c4948588a7e300458b4766.jpg?sw=300&sh=395&sm=fit", + "short_title": "From Dust", + "release_date": "2011-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd9aa3be1633568b4d80" + }, + { + "title": "Tom Clancy's Splinter Cell Conviction", + "id": "65e9f394b2f13524e4159bfc", + "MasterID": "65e9f37db2f13524e4159bfb", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw152e5761/images/large/56c4948a88a7e300458b481e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Splinter Cell Conviction", + "release_date": "2010-04-29T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "65e9f394b2f13524e4159bfc" + }, + { + "title": "Silent Hunter 5", + "id": "575ffda9a3be1633568b4e24", + "MasterID": "56c4948988a7e300458b47fe", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw41bcdd7e/images/large/56c4948988a7e300458b47fe.jpg?sw=300&sh=395&sm=fit", + "short_title": "Silent Hunter 5", + "release_date": "2010-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda9a3be1633568b4e24" + }, + { + "title": "Prince of Persia The Forgotten Sands", + "id": "575ffda7a3be1633568b4dfe", + "MasterID": "56c4948788a7e300458b47c8", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2fb43061/images/large/56c4948788a7e300458b47c8.jpg?sw=300&sh=395&sm=fit", + "short_title": "Prince of Persia: The Forgotten Sands", + "release_date": "2010-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda7a3be1633568b4dfe" + }, + { + "title": "Assassin's Creed II", + "id": "575ffd8ba3be1633568b4cbe", + "MasterID": "56c4947f88a7e300458b4690", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw5df235dd/images/large/56c4947f88a7e300458b4690.jpg?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed II", + "release_date": "2009-11-17T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Classics", + "Ubisoft+ Premium" + ], + "objectID": "575ffd8ba3be1633568b4cbe" + }, + { + "title": "Far Cry 2", + "id": "575ffd98a3be1633568b4d6a", + "MasterID": "56c4948488a7e300458b4742", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwfcb51659/images/large/56c4948488a7e300458b4742.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry 2", + "release_date": "2008-10-21T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd98a3be1633568b4d6a" + }, + { + "title": "Prince of Persia", + "id": "575ffda6a3be1633568b4dfc", + "MasterID": "56c4948788a7e300458b47c6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf69c95ad/images/large/56c4948788a7e300458b47c6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Prince of Persia", + "release_date": "2008-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda6a3be1633568b4dfc" + }, + { + "title": "Brothers In Arms: Hell's Highway", + "id": "575ffd93a3be1633568b4d2c", + "MasterID": "56c4948388a7e300458b4714", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw851bc971/images/large/56c4948388a7e300458b4714.jpg?sw=300&sh=395&sm=fit", + "short_title": "Brothers in Arms - Hell's Highway", + "release_date": "2008-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd93a3be1633568b4d2c" + }, + { + "title": "Assassin's Creed Director's Cut Edition", + "id": "575ffd8fa3be1633568b4cea", + "MasterID": "56c4947f88a7e300458b468e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3f3fd3a1/images/large/56c4947f88a7e300458b468e.png?sw=300&sh=395&sm=fit", + "short_title": "Assassin's Creed", + "release_date": "2008-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd8fa3be1633568b4cea" + }, + { + "title": "Silent Hunter Wolves of the Pacific Gold Edition", + "id": "575ffda9a3be1633568b4e26", + "MasterID": "56c4948988a7e300458b47fa", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf8b34c4f/images/large/56c4948988a7e300458b47fa.jpg?sw=300&sh=395&sm=fit", + "short_title": "Silent Hunter 4", + "release_date": "2007-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda9a3be1633568b4e26" + }, + { + "title": "Rayman Raving Rabbids™", + "id": "575ffda8a3be1633568b4e14", + "MasterID": "56c4948888a7e300458b47de", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw173eca03/images/large/56c4948888a7e300458b47de.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rayman Raving Rabbids", + "release_date": "2007-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda8a3be1633568b4e14" + }, + { + "title": "Tom Clancy's Rainbow Six Vegas", + "id": "575ffdb0a3be1633568b4e60", + "MasterID": "56c4948888a7e300458b47d6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3f38f0af/images/large/56c4948888a7e300458b47d6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Rainbow Six Vegas", + "release_date": "2006-12-12T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdb0a3be1633568b4e60" + }, + { + "title": "Tom Clancy's Rainbow Six Lockdown", + "id": "575ffdafa3be1633568b4e5e", + "MasterID": "56c4948888a7e300458b47d4", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwbef117ab/images/large/56c4948888a7e300458b47d4.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Rainbow Six Lockdown", + "release_date": "2006-02-14T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdafa3be1633568b4e5e" + }, + { + "title": "Tom Clancy's Splinter Cell Double Agent", + "id": "575ffdb0a3be1633568b4e66", + "MasterID": "56c4948a88a7e300458b482c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwb3dccb35/images/large/56c4948a88a7e300458b482c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Splinter Cell Double Agent", + "release_date": "2006-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdb0a3be1633568b4e66" + }, + { + "title": "Heroes of Might and Magic V", + "id": "575ffd9ca3be1633568b4d94", + "MasterID": "56c4948588a7e300458b4776", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw3a67cc2b/images/large/56c4948588a7e300458b4776.jpg?sw=300&sh=395&sm=fit", + "short_title": "Heroes of Might and Magic 5", + "release_date": "2006-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd9ca3be1633568b4d94" + }, + { + "title": "Brothers In Arms Earned In Blood", + "id": "575ffd92a3be1633568b4d2a", + "MasterID": "575ffd92a3be1633568b4d28", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw8f6c77a6/images/large/575ffd92a3be1633568b4d28.jpg?sw=300&sh=395&sm=fit", + "short_title": "Brothers In Arms - Earned In Blood", + "release_date": "2005-10-03T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd92a3be1633568b4d2a" + }, + { + "title": "Tom Clancy's Splinter Cell Chaos Theory®", + "id": "575ffdc7a3be1633568b4f98", + "MasterID": "56c4948a88a7e300458b482a", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwddc124e9/images/large/56c4948a88a7e300458b482a.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Splinter Cell Chaos Theory", + "release_date": "2005-03-28T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdc7a3be1633568b4f98" + }, + { + "title": "Tom Clancy's EndWar", + "id": "575ffdbda3be1633568b4f22", + "MasterID": "575ffdbda3be1633568b4f20", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw35340806/images/large/575ffdbda3be1633568b4f20.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's End War", + "release_date": "2005-03-28T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdbda3be1633568b4f22" + }, + { + "title": "Cold Fear", + "id": "575ffd95a3be1633568b4d50", + "MasterID": "575ffd95a3be1633568b4d4e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw43322be7/images/large/575ffd95a3be1633568b4d4e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Cold Fear", + "release_date": "2005-03-28T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd95a3be1633568b4d50" + }, + { + "title": "Brothers In Arms: Road to Hill 30", + "id": "575ffd93a3be1633568b4d30", + "MasterID": "575ffd93a3be1633568b4d2e", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd5a156c6/images/large/575ffd93a3be1633568b4d2e.jpg?sw=300&sh=395&sm=fit", + "short_title": "Brothers In Arms : Road to Hill 30", + "release_date": "2005-03-03T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd93a3be1633568b4d30" + }, + { + "title": "Prince of Persia The Two Thrones", + "id": "575ffda7a3be1633568b4e06", + "MasterID": "56c4948888a7e300458b47d0", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw482f312d/images/large/56c4948888a7e300458b47d0.jpg?sw=300&sh=395&sm=fit", + "short_title": "Prince of Persia: The Two Thrones", + "release_date": "2005-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda7a3be1633568b4e06" + }, + { + "title": "Silent Hunter 3", + "id": "5704fac788a7e32b078b4692", + "MasterID": "56c4948988a7e300458b47f8", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw27089f03/images/large/56c4948988a7e300458b47f8.jpg?sw=300&sh=395&sm=fit", + "short_title": "Silent Hunter 3", + "release_date": "2005-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5704fac788a7e32b078b4692" + }, + { + "title": "Prince of Persia Warrior Within", + "id": "575ffda7a3be1633568b4e0a", + "MasterID": "575ffda7a3be1633568b4e08", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw59f81f00/images/large/575ffda7a3be1633568b4e08.jpg?sw=300&sh=395&sm=fit", + "short_title": "Prince Of Persia: Warrior Within", + "release_date": "2004-11-29T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda7a3be1633568b4e0a" + }, + { + "title": "Far Cry", + "id": "575ffd98a3be1633568b4d68", + "MasterID": "56c4948488a7e300458b4740", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd75f4954/images/large/56c4948488a7e300458b4740.jpg?sw=300&sh=395&sm=fit", + "short_title": "Far Cry", + "release_date": "2004-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd98a3be1633568b4d68" + }, + { + "title": "Beyond Good & Evil", + "id": "575ffd92a3be1633568b4d1e", + "MasterID": "56c4948388a7e300458b470a", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwe03ae1e7/images/large/56c4948388a7e300458b470a.jpg?sw=300&sh=395&sm=fit", + "short_title": "Beyond Good & Evil", + "release_date": "2003-11-11T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffd92a3be1633568b4d1e" + }, + { + "title": "Tom Clancy's Rainbow Six® 3 Gold", + "id": "58aeb9daca1a64ed1a8b4567", + "MasterID": "58aeb87e29e1236d368b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwf68bd342/images/large/58aeb87e29e1236d368b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Rainbow Six 3", + "release_date": "2003-03-17T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58aeb9daca1a64ed1a8b4567" + }, + { + "title": "Rayman® 3: Hoodlum Havoc", + "id": "5800b38badc7240b0f8b4569", + "MasterID": "5800b15eef3aa5ab3e8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dweda387b5/images/large/5800b15eef3aa5ab3e8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rayman 3: Hoodlum Havoc", + "release_date": "2003-01-20T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5800b38badc7240b0f8b4569" + }, + { + "title": "Tom Clancy's Splinter Cell", + "id": "575ffdc7a3be1633568b4f94", + "MasterID": "56c4948a88a7e300458b481c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7a4af193/images/large/56c4948a88a7e300458b481c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Splinter Cell", + "release_date": "2003-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffdc7a3be1633568b4f94" + }, + { + "title": "Prince of Persia®: The Sands of Time", + "id": "575ffda7a3be1633568b4e04", + "MasterID": "56c4948888a7e300458b47ce", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw51eb2b4b/images/large/56c4948888a7e300458b47ce.jpg?sw=300&sh=395&sm=fit", + "short_title": "Prince of Persia: Sands of Time", + "release_date": "2003-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "575ffda7a3be1633568b4e04" + }, + { + "title": "Warlords Battlecry 2", + "id": "5903061729e12358488b4567", + "MasterID": "5903049d4e01657f028b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw549275b0/images/large/5903049d4e01657f028b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Warlords Battlecry 2", + "release_date": "2002-02-11T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5903061729e12358488b4567" + }, + { + "title": "Might and Magic 9", + "id": "5704fac488a7e32b078b4654", + "MasterID": "56c4948788a7e300458b47b6", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw60b797de/images/large/56c4948788a7e300458b47b6.jpg?sw=300&sh=395&sm=fit", + "short_title": "Might and Magic IX", + "release_date": "2002-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5704fac488a7e32b078b4654" + }, + { + "title": "Tom Clancy's Ghost Recon®", + "id": "58aec0484e01651c298b4567", + "MasterID": "58aebeb4ef3aa5c5148b4568", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw1eea1742/images/large/58aebeb4ef3aa5c5148b4568.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Ghost Recon", + "release_date": "2001-11-12T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58aec0484e01651c298b4567" + }, + { + "title": "Silent Hunter® 2", + "id": "58aeb5d66b54a461248b4567", + "MasterID": "58aeae0b4e01650e298b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw05191230/images/large/58aeae0b4e01650e298b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Silent Hunter 2", + "release_date": "2001-11-06T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58aeb5d66b54a461248b4567" + }, + { + "title": "Rayman 2", + "id": "57062ec088a7e316728b465a", + "MasterID": "56c4947e88a7e300458b465c", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw82131909/images/large/56c4947e88a7e300458b465c.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rayman 2: The Great Escape", + "release_date": "2001-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "57062ec088a7e316728b465a" + }, + { + "title": "Warlords Battlecry", + "id": "590302d96b54a4b9158b4567", + "MasterID": "5902ff8529e1236c488b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw6adafd64/images/large/5902ff8529e1236c488b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Warlords Battlecry", + "release_date": "2000-07-08T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "590302d96b54a4b9158b4567" + }, + { + "title": "Might and Magic VIII: Day of the Destroyer", + "id": "5704fac488a7e32b078b465a", + "MasterID": "56c4948788a7e300458b47bc", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2b6fa783/images/large/56c4948788a7e300458b47bc.jpg?sw=300&sh=395&sm=fit", + "short_title": "Might and Magic VIII: Day of the Destroyer", + "release_date": "2000-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5704fac488a7e32b078b465a" + }, + { + "title": "Panzer General 3D Assault", + "id": "590310d9adc724f9768b4567", + "MasterID": "59030f5d88a7e304628b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw06f4a6ef/images/large/59030f5d88a7e304628b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Panzer General 3D Assault", + "release_date": "1999-09-28T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "590310d9adc724f9768b4567" + }, + { + "title": "Imperialism 2 : The Age of Exploration", + "id": "58c18cb1ca1a645b048b4567", + "MasterID": "58c18a7aadc724a9568b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw44031d55/images/large/58c18a7aadc724a9568b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Imperialism 2 : The Age of Exploration", + "release_date": "1999-03-30T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58c18cb1ca1a645b048b4567" + }, + { + "title": "Rayman® Forever", + "id": "5800d468adc7240b0f8b456a", + "MasterID": "5800d3fc4e016524248b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7ab2fd2d/images/large/5800d3fc4e016524248b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Rayman Forever", + "release_date": "1999-01-20T01:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5800d468adc7240b0f8b456a" + }, + { + "title": "Might and Magic VII: For Blood and Honor", + "id": "5704fac488a7e32b078b4658", + "MasterID": "56c4948788a7e300458b47ba", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw7314c7d5/images/large/56c4948788a7e300458b47ba.jpg?sw=300&sh=395&sm=fit", + "short_title": "Might and Magic VII: For Blood and Honor", + "release_date": "1999-01-01T00:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5704fac488a7e32b078b4658" + }, + { + "title": "Speed Busters: American Highways", + "id": "58c192f529e123195c8b4567", + "MasterID": "58c190c3ef3aa5e4498b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw98d23c6a/images/large/58c190c3ef3aa5e4498b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Speed Busters: American Highways", + "release_date": "1998-11-29T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58c192f529e123195c8b4567" + }, + { + "title": "Tom Clancy's Rainbow Six®", + "id": "58e60cb7ca1a64977d8b4567", + "MasterID": "58e60b88ca1a64156f8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dwd6c95989/images/large/58e60b88ca1a64156f8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Tom Clancy's Rainbow Six", + "release_date": "1998-08-21T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58e60cb7ca1a64977d8b4567" + }, + { + "title": "Panzer General 2", + "id": "594002e74e016580248b4567", + "MasterID": "594001856b54a43f4d8b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw94329d00/images/large/594001856b54a43f4d8b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Panzer General 2", + "release_date": "1997-09-21T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "594002e74e016580248b4567" + }, + { + "title": "Imperialism", + "id": "58c18772ca1a644b048b456a", + "MasterID": "58c186896b54a436368b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw506161d1/images/large/58c186896b54a436368b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Imperialism", + "release_date": "1997-08-30T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58c18772ca1a644b048b456a" + }, + { + "title": "Planet of Death - Gold", + "id": "58c18f9d29e1232a5c8b4567", + "MasterID": "58c18e3eef3aa5fa498b4568", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw2a55b641/images/large/58c18e3eef3aa5fa498b4568.jpg?sw=300&sh=395&sm=fit", + "short_title": "Planet of Death", + "release_date": "1997-02-27T23:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "58c18f9d29e1232a5c8b4567" + }, + { + "title": "Heroes of Might and Magic 2: Gold", + "id": "5902fdf9ef3aa527608b4567", + "MasterID": "5902fbba88a7e3f0618b4567", + "image_link": "https://store.ubisoft.com/dw/image/v2/ABBS_PRD/on/demandware.static/-/Sites-masterCatalog/default/dw9c4955ac/images/large/5902fbba88a7e3f0618b4567.jpg?sw=300&sh=395&sm=fit", + "short_title": "Heroes of Might and Magic 2", + "release_date": "1996-09-30T22:00:00.000Z", + "partofSubscriptionOffer": [ + "Ubisoft+ Premium" + ], + "objectID": "5902fdf9ef3aa527608b4567" + } + ] +} From 4dc0a5a1c74dc12b5e3b0b422742adbab400c6d9 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Fri, 23 Aug 2024 18:11:50 +0200 Subject: [PATCH 213/255] tags instead of extra columns --- backend/rai-pal-core/src/app_type.rs | 3 - backend/rai-pal-core/src/game_mode.rs | 3 - backend/rai-pal-core/src/game_tag.rs | 3 + backend/rai-pal-core/src/lib.rs | 3 +- backend/rai-pal-core/src/owned_game.rs | 37 ++++------- .../src/providers/epic_provider.rs | 3 +- .../src/providers/gog_provider.rs | 3 +- .../src/providers/itch_provider.rs | 3 +- .../src/providers/steam_provider.rs | 28 +++------ backend/rai-pal-core/src/steam/appinfo.rs | 11 ++-- frontend/api/bindings.ts | 5 +- .../components/badges/color-coded-badge.tsx | 17 +---- .../installed-games-columns.tsx | 60 ++++++------------ .../owned-games/owned-games-columns.tsx | 63 +++++++------------ frontend/components/table/table-head.tsx | 2 +- frontend/util/common-filter-options.ts | 6 +- frontend/util/filter.ts | 4 +- 17 files changed, 82 insertions(+), 172 deletions(-) delete mode 100644 backend/rai-pal-core/src/app_type.rs delete mode 100644 backend/rai-pal-core/src/game_mode.rs create mode 100644 backend/rai-pal-core/src/game_tag.rs diff --git a/backend/rai-pal-core/src/app_type.rs b/backend/rai-pal-core/src/app_type.rs deleted file mode 100644 index a49245ba..00000000 --- a/backend/rai-pal-core/src/app_type.rs +++ /dev/null @@ -1,3 +0,0 @@ -use crate::serializable_enum; - -serializable_enum!(AppType { Game, Demo }); diff --git a/backend/rai-pal-core/src/game_mode.rs b/backend/rai-pal-core/src/game_mode.rs deleted file mode 100644 index 57cc413d..00000000 --- a/backend/rai-pal-core/src/game_mode.rs +++ /dev/null @@ -1,3 +0,0 @@ -use crate::serializable_enum; - -serializable_enum!(GameMode { VR, Flat }); diff --git a/backend/rai-pal-core/src/game_tag.rs b/backend/rai-pal-core/src/game_tag.rs new file mode 100644 index 00000000..f0b61599 --- /dev/null +++ b/backend/rai-pal-core/src/game_tag.rs @@ -0,0 +1,3 @@ +use crate::serializable_enum; + +serializable_enum!(GameTag { VR, Demo }); diff --git a/backend/rai-pal-core/src/lib.rs b/backend/rai-pal-core/src/lib.rs index c10fd53b..05d2b885 100644 --- a/backend/rai-pal-core/src/lib.rs +++ b/backend/rai-pal-core/src/lib.rs @@ -1,13 +1,12 @@ #![allow(async_fn_in_trait)] pub mod analytics; -pub mod app_type; pub mod debug; pub mod files; pub mod game_engines; pub mod game_executable; pub mod game_mod; -pub mod game_mode; +pub mod game_tag; pub mod game_title; pub mod installed_game; pub mod local_mod; diff --git a/backend/rai-pal-core/src/owned_game.rs b/backend/rai-pal-core/src/owned_game.rs index ea55c7f1..1d22c7ab 100644 --- a/backend/rai-pal-core/src/owned_game.rs +++ b/backend/rai-pal-core/src/owned_game.rs @@ -1,10 +1,9 @@ -use std::collections::HashMap; +use std::collections::{HashMap, HashSet}; use rai_pal_proc_macros::serializable_struct; use crate::{ - app_type::AppType, - game_mode::GameMode, + game_tag::GameTag, game_title::GameTitle, providers::{ provider::ProviderId, @@ -20,24 +19,26 @@ pub struct OwnedGame { pub title: GameTitle, pub release_date: Option, pub thumbnail_url: Option, - pub game_mode: Option, - pub app_type: Option, - + pub tags: HashSet, pub provider_commands: HashMap, } impl OwnedGame { pub fn new(provider_game_id: &str, provider: ProviderId, name: &str) -> Self { + let title = GameTitle::new(name); + let mut tags = HashSet::default(); + if title.is_probably_demo() { + tags.insert(GameTag::Demo); + } Self { global_id: get_global_id(provider, provider_game_id), provider_game_id: provider_game_id.to_string(), provider, - title: GameTitle::new(name), + tags, + title, provider_commands: HashMap::default(), release_date: None, thumbnail_url: None, - game_mode: None, - app_type: None, } } @@ -51,22 +52,8 @@ impl OwnedGame { self } - pub fn set_game_mode(&mut self, game_mode: GameMode) -> &mut Self { - self.game_mode = Some(game_mode); - self - } - - pub fn set_app_type(&mut self, app_type: AppType) -> &mut Self { - self.app_type = Some(app_type); - self - } - - pub fn guess_app_type(&mut self) -> &mut Self { - self.app_type = Some(if self.title.is_probably_demo() { - AppType::Demo - } else { - AppType::Game - }); + pub fn add_tag(&mut self, tag: GameTag) -> &mut Self { + self.tags.insert(tag); self } diff --git a/backend/rai-pal-core/src/providers/epic_provider.rs b/backend/rai-pal-core/src/providers/epic_provider.rs index 49443053..9e7636d2 100644 --- a/backend/rai-pal-core/src/providers/epic_provider.rs +++ b/backend/rai-pal-core/src/providers/epic_provider.rs @@ -125,8 +125,7 @@ impl Epic { serde_urlencoded::to_string([("sortBy", "relevancy"), ("q", &catalog_item.title)]) .ok()?, )), - ) - .guess_app_type(); + ); if let Some(thumbnail_url) = catalog_item.get_thumbnail_url() { game.set_thumbnail_url(&thumbnail_url); diff --git a/backend/rai-pal-core/src/providers/gog_provider.rs b/backend/rai-pal-core/src/providers/gog_provider.rs index 0259a0e3..7e0a1227 100644 --- a/backend/rai-pal-core/src/providers/gog_provider.rs +++ b/backend/rai-pal-core/src/providers/gog_provider.rs @@ -67,8 +67,7 @@ impl Gog { ] .to_vec(), ), - ) - .guess_app_type(); + ); if let Some(thumbnail_url) = db_entry.image_url.clone() { game.set_thumbnail_url(&thumbnail_url); diff --git a/backend/rai-pal-core/src/providers/itch_provider.rs b/backend/rai-pal-core/src/providers/itch_provider.rs index 210598fd..41e4d8e6 100644 --- a/backend/rai-pal-core/src/providers/itch_provider.rs +++ b/backend/rai-pal-core/src/providers/itch_provider.rs @@ -49,8 +49,7 @@ impl Itch { .add_provider_command( ProviderCommandAction::Install, ProviderCommand::String(format!("itch://install?game_id={}", row.id)), - ) - .guess_app_type(); + ); game } diff --git a/backend/rai-pal-core/src/providers/steam_provider.rs b/backend/rai-pal-core/src/providers/steam_provider.rs index e00533d6..ff5e2dd2 100644 --- a/backend/rai-pal-core/src/providers/steam_provider.rs +++ b/backend/rai-pal-core/src/providers/steam_provider.rs @@ -13,8 +13,7 @@ use super::{ provider_command::{ProviderCommand, ProviderCommandAction}, }; use crate::{ - app_type::AppType, - game_mode::GameMode, + game_tag::GameTag, installed_game::{self, InstalledGame}, owned_game::OwnedGame, providers::provider::{ProviderActions, ProviderStatic}, @@ -55,18 +54,7 @@ impl Steam { return None; } - let game_mode = if app_info - .launch_options - .iter() - .any(|launch| launch.get_game_mode() == GameMode::VR) - { - GameMode::VR - } else { - GameMode::Flat - }; - game.set_thumbnail_url(&get_steam_thumbnail(&id_string)) - .set_game_mode(game_mode) .add_provider_command( ProviderCommandAction::ShowInLibrary, ProviderCommand::String(format!("steam://nav/games/details/{id_string}")), @@ -84,6 +72,10 @@ impl Steam { ProviderCommand::String(format!("https://store.steampowered.com/app/{id_string}")), ); + if app_info.launch_options.iter().any(|launch| launch.is_vr()) { + game.add_tag(GameTag::VR); + } + if let Some(release_date) = app_info .original_release_date .or(app_info.steam_release_date) @@ -92,15 +84,9 @@ impl Steam { } if let Some(app_type) = &app_info.app_type { - if app_type == "Game" { - game.set_app_type(AppType::Game); - } else if app_type == "Demo" { - game.set_app_type(AppType::Demo); + if app_type == "Demo" { + game.add_tag(GameTag::Demo); } - } else { - // We only try to guess the app type if couldn't read it from appinfo. - // For instance, something marked as Tool or Application shouldn't be marked as a game. - game.guess_app_type(); } Some(game) diff --git a/backend/rai-pal-core/src/steam/appinfo.rs b/backend/rai-pal-core/src/steam/appinfo.rs index 1dbdc857..0003d3fd 100644 --- a/backend/rai-pal-core/src/steam/appinfo.rs +++ b/backend/rai-pal-core/src/steam/appinfo.rs @@ -12,10 +12,7 @@ use byteorder::{LittleEndian, ReadBytesExt}; use rai_pal_proc_macros::serializable_struct; use steamlocate::SteamDir; -use crate::{ - game_mode::GameMode, - result::{Error, Result}, -}; +use crate::result::{Error, Result}; const BIN_NONE: u8 = b'\x00'; const BIN_STRING: u8 = b'\x01'; @@ -77,13 +74,13 @@ pub struct SteamLaunchOption { } impl SteamLaunchOption { - pub fn get_game_mode(&self) -> GameMode { + pub fn is_vr(&self) -> bool { if let Some(app_type) = &self.launch_type { if app_type == "vr" { - return GameMode::VR; + return true; } } - GameMode::Flat + return false; } } diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 27f202e4..087286d6 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -284,7 +284,6 @@ syncRemoteMods: "sync-remote-mods" /** user-defined types **/ -export type AppType = "Game" | "Demo" export type Architecture = "X64" | "X86" export type CommonModData = { id: string; engine: EngineBrand | null; unityBackend: UnityScriptingBackend | null; engineVersionRange: EngineVersionRange | null; loaderId: string } export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" @@ -298,7 +297,7 @@ export type FoundInstalledGame = [] export type FoundOwnedGame = [] export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } -export type GameMode = "VR" | "Flat" +export type GameTag = "VR" | "Demo" export type GameTitle = { display: string; normalized: string[] } export type InstalledGame = { id: string; title: GameTitle; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } export type LocalMod = { data: LocalModData; common: CommonModData } @@ -307,7 +306,7 @@ export type Manifest = { title: string | null; version: string; runnable: Runnab export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } export type ModKind = "Installable" | "Runnable" export type ModLoaderData = { id: string; path: string; kind: ModKind } -export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; gameMode: GameMode | null; appType: AppType | null; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } +export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; tags: GameTag[]; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } diff --git a/frontend/components/badges/color-coded-badge.tsx b/frontend/components/badges/color-coded-badge.tsx index b2226f81..9fb11792 100644 --- a/frontend/components/badges/color-coded-badge.tsx +++ b/frontend/components/badges/color-coded-badge.tsx @@ -1,15 +1,13 @@ import { - AppType, Architecture, EngineBrand, - GameMode, + GameTag, ProviderId, UnityScriptingBackend, } from "@api/bindings"; import { Badge, BadgeProps, DefaultMantineColor, Flex } from "@mantine/core"; import styles from "./badges.module.css"; import { - appTypeFilterOptions, engineFilterOptions, providerFilterOptions, } from "../../util/common-filter-options"; @@ -78,9 +76,9 @@ export const UnityBackendBadge = CreateColorCodedBadge( }, ); -export const GameModeBadge = CreateColorCodedBadge("-", { +export const GameTagBadge = CreateColorCodedBadge("-", { VR: "green", - Flat: "gray", + Demo: "yellow", }); export const ArchitectureBadge = CreateColorCodedBadge("-", { @@ -101,12 +99,3 @@ export const ProviderBadge = CreateColorCodedBadge( }, providerFilterOptions, ); - -export const AppTypeBadge = CreateColorCodedBadge( - "-", - { - Game: "blue", - Demo: "yellow", - }, - appTypeFilterOptions, -); diff --git a/frontend/components/installed-games/installed-games-columns.tsx b/frontend/components/installed-games/installed-games-columns.tsx index 4323d78e..fd06cd2f 100644 --- a/frontend/components/installed-games/installed-games-columns.tsx +++ b/frontend/components/installed-games/installed-games-columns.tsx @@ -1,28 +1,25 @@ import { Table, Tooltip } from "@mantine/core"; import { - AppType, Architecture, EngineBrand, - GameMode, + GameTag, ProviderId, UnityScriptingBackend, } from "@api/bindings"; import { TableColumnBase, columnMapToList } from "@components/table/table-head"; import { ItemName } from "../item-name"; import { - AppTypeBadge, ArchitectureBadge, EngineBadge, - GameModeBadge, ProviderBadge, UnityBackendBadge, } from "@components/badges/color-coded-badge"; import { ThumbnailCell } from "@components/table/thumbnail-cell"; import { OutdatedMarker } from "@components/outdated-marker"; import { - appTypeFilterOptions, engineFilterOptions, providerFilterOptions, + tagFilterOptions, } from "../../util/common-filter-options"; import styles from "../table/table.module.css"; import { ProcessedInstalledGame } from "@hooks/use-processed-installed-games"; @@ -73,7 +70,7 @@ const provider: TableColumnBase = { center: true, hidable: true, getSortValue: (game) => game.provider, - getFilterValue: (game) => game.provider, + filter: (game, hiddenValues) => hiddenValues.includes(game.provider), filterOptions: providerFilterOptions, renderCell: (game) => ( @@ -88,7 +85,8 @@ const architecture: TableColumnBase = { center: true, hidable: true, getSortValue: (game) => game.executable.architecture, - getFilterValue: (game) => game.executable.architecture, + filter: (game, hiddenValues) => + hiddenValues.includes(game.executable.architecture), filterOptions: [ { label: "x64", value: "X64" }, { label: "x86", value: "X86" }, @@ -109,7 +107,8 @@ const scriptingBackend: TableColumnBase< center: true, hidable: true, getSortValue: (game) => game.executable.scriptingBackend, - getFilterValue: (game) => game.executable.scriptingBackend, + filter: (game, hiddenValues) => + hiddenValues.includes(game.executable.scriptingBackend), filterOptions: [ { label: "IL2CPP", value: "Il2Cpp" }, { label: "Mono", value: "Mono" }, @@ -121,39 +120,20 @@ const scriptingBackend: TableColumnBase< ), }; -const gameMode: TableColumnBase = { - label: "Mode", +const gameTags: TableColumnBase = { + label: "Tags", width: 90, center: true, hidable: true, - getSortValue: (game) => game.ownedGame?.gameMode, - getFilterValue: (game) => game.ownedGame?.gameMode ?? null, - filterOptions: [ - { label: "Flat", value: "Flat" }, - { label: "VR", value: "VR" }, - ], - renderCell: (game) => ( - - - - ), -}; - -const getAppType = (game: ProcessedInstalledGame) => - game.ownedGame?.appType ?? null; - -const appType: TableColumnBase = { - label: "App Type", - width: 110, - center: true, - hidable: true, - getSortValue: (game) => getAppType(game), - getFilterValue: (game) => getAppType(game), - filterOptions: appTypeFilterOptions, + getSortValue: (game) => game.ownedGame?.tags.join(","), + filter: (game, hiddenValues) => + hiddenValues.findIndex( + (hiddenValue) => + game.ownedGame?.tags.indexOf(hiddenValue as GameTag) !== -1, + ) !== -1, + filterOptions: tagFilterOptions, renderCell: (game) => ( - - {getAppType(game)} - + {game.ownedGame?.tags.sort().join(", ")} ), }; @@ -164,7 +144,8 @@ const engine: TableColumnBase = { hidable: true, sort: (dataA, dataB) => sortGamesByEngine(dataA.executable.engine, dataB.executable.engine), - getFilterValue: (game) => game.executable.engine?.brand ?? null, + filter: (game, hiddenValues) => + hiddenValues.includes(game.executable.engine?.brand ?? null), unavailableValues: ["Godot", "GameMaker"], filterOptions: engineFilterOptions, renderCell: ({ executable: { engine } }) => ( @@ -187,11 +168,10 @@ const installedGamesColumnsMap = { thumbnail, name, provider, - gameMode, + gameTags, architecture, scriptingBackend, engine, - appType, }; export type InstalledGameColumnsId = keyof typeof installedGamesColumnsMap; diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index 86553512..8e0cd1b7 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -1,8 +1,6 @@ -import { AppType, EngineBrand, GameMode, ProviderId } from "@api/bindings"; +import { EngineBrand, GameTag, ProviderId } from "@api/bindings"; import { - AppTypeBadge, EngineBadge, - GameModeBadge, ProviderBadge, } from "@components/badges/color-coded-badge"; import { TableColumnBase, columnMapToList } from "@components/table/table-head"; @@ -11,9 +9,9 @@ import { IconCheck } from "@tabler/icons-react"; import styles from "../table/table.module.css"; import { ThumbnailCell } from "@components/table/thumbnail-cell"; import { - appTypeFilterOptions, engineFilterOptions, providerFilterOptions, + tagFilterOptions, } from "../../util/common-filter-options"; import { getThumbnailWithFallback } from "../../util/fallback-thumbnail"; import { sortGamesByEngine } from "../../util/game-engines"; @@ -48,7 +46,7 @@ const provider: TableColumnBase = { center: true, hidable: true, getSortValue: (game) => game.provider, - getFilterValue: (game) => game.provider, + filter: (game, hiddenValues) => hiddenValues.includes(game.provider), filterOptions: providerFilterOptions, unavailableValues: ["Manual"], renderCell: (game) => ( @@ -58,21 +56,6 @@ const provider: TableColumnBase = { ), }; -const appType: TableColumnBase = { - label: "App Type", - width: 110, - center: true, - hidable: true, - getSortValue: (game) => game.appType, - getFilterValue: (game) => game.appType, - filterOptions: appTypeFilterOptions, - renderCell: (game) => ( - - {game.appType} - - ), -}; - function getEngine(game: ProcessedOwnedGame) { return ( // The remote game database can have multiple engines assigned to a game. @@ -90,7 +73,8 @@ const engine: TableColumnBase = { center: true, hidable: true, sort: (dataA, dataB) => sortGamesByEngine(getEngine(dataA), getEngine(dataB)), - getFilterValue: (game) => getEngine(game)?.brand ?? null, + filter: (game, hiddenValues) => + hiddenValues.includes(getEngine(game)?.brand ?? null), filterOptions: engineFilterOptions, renderCell: (game) => ( @@ -103,13 +87,27 @@ const engine: TableColumnBase = { ), }; +const gameTags: TableColumnBase = { + label: "Tags", + width: 90, + center: true, + hidable: true, + getSortValue: (game) => `${game.tags.length}${game.tags.sort().join(",")}`, + filter: (game, hiddenValues) => + hiddenValues.findIndex((hiddenValue) => + game.tags.includes(hiddenValue as GameTag), + ) !== -1, + filterOptions: tagFilterOptions, + renderCell: (game) => {game.tags.sort().join(", ")}, +}; + const installed: TableColumnBase = { label: "Installed", width: 60, center: true, hidable: true, getSortValue: (game) => game.isInstalled, - getFilterValue: (game) => `${game.isInstalled}`, + filter: (game, hiddenValues) => hiddenValues.includes(`${game.isInstalled}`), filterOptions: [ { label: "Installed", value: "true" }, { label: "Not Installed", value: "false" }, @@ -119,24 +117,6 @@ const installed: TableColumnBase = { ), }; -const gameMode: TableColumnBase = { - label: "Mode", - width: 90, - center: true, - hidable: true, - getSortValue: (game) => game.gameMode, - getFilterValue: (game) => game.gameMode, - filterOptions: [ - { label: "Flat", value: "Flat" }, - { label: "VR", value: "VR" }, - ], - renderCell: (game) => ( - - - - ), -}; - const releaseDate: TableColumnBase = { label: "Release Date", width: 130, @@ -157,8 +137,7 @@ const ownedGamesColumnsMap = { name, provider, engine, - appType, - gameMode, + gameTags, installed, releaseDate, }; diff --git a/frontend/components/table/table-head.tsx b/frontend/components/table/table-head.tsx index 4342a3c0..ee7d5047 100644 --- a/frontend/components/table/table-head.tsx +++ b/frontend/components/table/table-head.tsx @@ -19,7 +19,7 @@ export type TableColumnBase = { unavailableValues?: TFilterOption[]; sort?: (itemA: TItem, itemB: TItem) => number; getSortValue?: (item: TItem) => unknown; - getFilterValue?: (item: TItem) => TFilterOption | null; + filter?: (item: TItem, hiddenValues: (TFilterOption | null)[]) => boolean; filterOptions?: FilterOption[]; }; diff --git a/frontend/util/common-filter-options.ts b/frontend/util/common-filter-options.ts index 93f05bbe..7db454fc 100644 --- a/frontend/util/common-filter-options.ts +++ b/frontend/util/common-filter-options.ts @@ -1,4 +1,4 @@ -import { AppType, EngineBrand, ProviderId } from "@api/bindings"; +import { EngineBrand, GameTag, ProviderId } from "@api/bindings"; import { FilterOption } from "@components/table/table-head"; export const engineFilterOptions: FilterOption[] = [ @@ -18,7 +18,7 @@ export const providerFilterOptions: FilterOption[] = [ { label: "Manual", value: "Manual" }, ]; -export const appTypeFilterOptions: FilterOption[] = [ - { label: "Game", value: "Game" }, +export const tagFilterOptions: FilterOption[] = [ + { label: "VR", value: "VR" }, { label: "Demo", value: "Demo" }, ]; diff --git a/frontend/util/filter.ts b/frontend/util/filter.ts index 3de7ce43..5d16f1f0 100644 --- a/frontend/util/filter.ts +++ b/frontend/util/filter.ts @@ -23,10 +23,10 @@ export function filterGame( return ( columns.findIndex((column) => { return ( - column.getFilterValue && + column.filter && hiddenValues[column.id] && hiddenValues[column.id].length > 0 && - hiddenValues[column.id].includes(column.getFilterValue(game)) + column.filter(game, hiddenValues[column.id]) ); }) === -1 ); From 60f1c986d46e963b835415770ba3ef44d2aab0e3 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 11:57:41 +0200 Subject: [PATCH 214/255] type adjustment --- frontend/components/table/table-head.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/components/table/table-head.tsx b/frontend/components/table/table-head.tsx index ee7d5047..65a1afd6 100644 --- a/frontend/components/table/table-head.tsx +++ b/frontend/components/table/table-head.tsx @@ -19,7 +19,7 @@ export type TableColumnBase = { unavailableValues?: TFilterOption[]; sort?: (itemA: TItem, itemB: TItem) => number; getSortValue?: (item: TItem) => unknown; - filter?: (item: TItem, hiddenValues: (TFilterOption | null)[]) => boolean; + filter?: (item: TItem, hiddenValues: (string | null)[]) => boolean; filterOptions?: FilterOption[]; }; From 9ec9aae53c1fd4602b2e9989158efbb20105090c Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 12:28:41 +0200 Subject: [PATCH 215/255] nicer way of showing tags --- frontend/components/game-tags.tsx | 53 +++++++++++++++++++ .../installed-games-columns.tsx | 26 +++++---- .../owned-games/owned-games-columns.tsx | 24 +++++---- frontend/util/common-filter-options.ts | 7 +-- 4 files changed, 79 insertions(+), 31 deletions(-) create mode 100644 frontend/components/game-tags.tsx diff --git a/frontend/components/game-tags.tsx b/frontend/components/game-tags.tsx new file mode 100644 index 00000000..b5faa2a1 --- /dev/null +++ b/frontend/components/game-tags.tsx @@ -0,0 +1,53 @@ +import { GameTag, OwnedGame } from "@api/bindings"; +import { Badge, Box, Flex, Stack, Table } from "@mantine/core"; +import { FilterOption } from "./table/table-head"; + +function getTagDisplayName(tag: GameTag) { + return ( + gameTagFilterOptions.find((option) => option.value === tag)?.label || tag + ); +} + +export function renderGameTagsCell(ownedGame: OwnedGame | undefined) { + return ( + + + {ownedGame?.tags.sort().map((tag) => ( + + {getTagDisplayName(tag)} + + ))} + + + ); +} + +export const gameTagFilterOptions: FilterOption[] = [ + { label: "Native VR", value: "VR" }, + { label: "Demo", value: "Demo" }, +]; + +export function filterGameTags( + ownedGame: OwnedGame | undefined, + hiddenValues: (string | null)[], +) { + return ( + hiddenValues.findIndex( + (hiddenValue) => ownedGame?.tags.indexOf(hiddenValue as GameTag) !== -1, + ) !== -1 + ); +} + +export function getGameTagsSortValue(ownedGame: OwnedGame | undefined) { + return ownedGame + ? `${ownedGame.tags.length}${ownedGame.tags.sort().join(",")}` + : ""; +} diff --git a/frontend/components/installed-games/installed-games-columns.tsx b/frontend/components/installed-games/installed-games-columns.tsx index fd06cd2f..63061744 100644 --- a/frontend/components/installed-games/installed-games-columns.tsx +++ b/frontend/components/installed-games/installed-games-columns.tsx @@ -2,7 +2,6 @@ import { Table, Tooltip } from "@mantine/core"; import { Architecture, EngineBrand, - GameTag, ProviderId, UnityScriptingBackend, } from "@api/bindings"; @@ -19,12 +18,17 @@ import { OutdatedMarker } from "@components/outdated-marker"; import { engineFilterOptions, providerFilterOptions, - tagFilterOptions, } from "../../util/common-filter-options"; import styles from "../table/table.module.css"; import { ProcessedInstalledGame } from "@hooks/use-processed-installed-games"; import { getThumbnailWithFallback } from "../../util/fallback-thumbnail"; import { sortGamesByEngine } from "../../util/game-engines"; +import { + filterGameTags, + gameTagFilterOptions, + getGameTagsSortValue, + renderGameTagsCell, +} from "@components/game-tags"; const thumbnail: TableColumnBase = { hideInDetails: true, @@ -122,19 +126,13 @@ const scriptingBackend: TableColumnBase< const gameTags: TableColumnBase = { label: "Tags", - width: 90, + width: 120, center: true, hidable: true, - getSortValue: (game) => game.ownedGame?.tags.join(","), - filter: (game, hiddenValues) => - hiddenValues.findIndex( - (hiddenValue) => - game.ownedGame?.tags.indexOf(hiddenValue as GameTag) !== -1, - ) !== -1, - filterOptions: tagFilterOptions, - renderCell: (game) => ( - {game.ownedGame?.tags.sort().join(", ")} - ), + getSortValue: (game) => getGameTagsSortValue(game.ownedGame), + filter: (game, hiddenValues) => filterGameTags(game.ownedGame, hiddenValues), + filterOptions: gameTagFilterOptions, + renderCell: (game) => renderGameTagsCell(game.ownedGame), }; const engine: TableColumnBase = { @@ -167,8 +165,8 @@ const engine: TableColumnBase = { const installedGamesColumnsMap = { thumbnail, name, - provider, gameTags, + provider, architecture, scriptingBackend, engine, diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index 8e0cd1b7..3fc5a655 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -1,4 +1,4 @@ -import { EngineBrand, GameTag, ProviderId } from "@api/bindings"; +import { EngineBrand, ProviderId } from "@api/bindings"; import { EngineBadge, ProviderBadge, @@ -11,11 +11,16 @@ import { ThumbnailCell } from "@components/table/thumbnail-cell"; import { engineFilterOptions, providerFilterOptions, - tagFilterOptions, } from "../../util/common-filter-options"; import { getThumbnailWithFallback } from "../../util/fallback-thumbnail"; import { sortGamesByEngine } from "../../util/game-engines"; import { ProcessedOwnedGame } from "@hooks/use-processed-owned-games"; +import { + filterGameTags, + gameTagFilterOptions, + getGameTagsSortValue, + renderGameTagsCell, +} from "@components/game-tags"; const thumbnail: TableColumnBase = { label: "Thumbnail", @@ -89,16 +94,13 @@ const engine: TableColumnBase = { const gameTags: TableColumnBase = { label: "Tags", - width: 90, + width: 120, center: true, hidable: true, - getSortValue: (game) => `${game.tags.length}${game.tags.sort().join(",")}`, - filter: (game, hiddenValues) => - hiddenValues.findIndex((hiddenValue) => - game.tags.includes(hiddenValue as GameTag), - ) !== -1, - filterOptions: tagFilterOptions, - renderCell: (game) => {game.tags.sort().join(", ")}, + getSortValue: getGameTagsSortValue, + filter: filterGameTags, + filterOptions: gameTagFilterOptions, + renderCell: renderGameTagsCell, }; const installed: TableColumnBase = { @@ -135,9 +137,9 @@ const releaseDate: TableColumnBase = { const ownedGamesColumnsMap = { thumbnail, name, + gameTags, provider, engine, - gameTags, installed, releaseDate, }; diff --git a/frontend/util/common-filter-options.ts b/frontend/util/common-filter-options.ts index 7db454fc..4159e185 100644 --- a/frontend/util/common-filter-options.ts +++ b/frontend/util/common-filter-options.ts @@ -1,4 +1,4 @@ -import { EngineBrand, GameTag, ProviderId } from "@api/bindings"; +import { EngineBrand, ProviderId } from "@api/bindings"; import { FilterOption } from "@components/table/table-head"; export const engineFilterOptions: FilterOption[] = [ @@ -17,8 +17,3 @@ export const providerFilterOptions: FilterOption[] = [ { label: "Ubisoft", value: "Ubisoft" }, { label: "Manual", value: "Manual" }, ]; - -export const tagFilterOptions: FilterOption[] = [ - { label: "VR", value: "VR" }, - { label: "Demo", value: "Demo" }, -]; From 7d6524bd3e27306223c6acdbf357028899f989f5 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 12:53:59 +0200 Subject: [PATCH 216/255] scrollable tags --- .../components/game-tags/game-tags.module.css | 35 +++++++++++++++++++ .../components/{ => game-tags}/game-tags.tsx | 20 +++++------ .../installed-games-columns.tsx | 2 +- .../owned-games/owned-games-columns.tsx | 2 +- 4 files changed, 45 insertions(+), 14 deletions(-) create mode 100644 frontend/components/game-tags/game-tags.module.css rename frontend/components/{ => game-tags}/game-tags.tsx (79%) diff --git a/frontend/components/game-tags/game-tags.module.css b/frontend/components/game-tags/game-tags.module.css new file mode 100644 index 00000000..7daa7db9 --- /dev/null +++ b/frontend/components/game-tags/game-tags.module.css @@ -0,0 +1,35 @@ +.wrapper { + display: flex; + flex-wrap: wrap; + gap: 0.2em; + align-items: center; + justify-content: center; + overflow-y: overlay; + max-height: 2.5em; +} + +.wrapper::-webkit-scrollbar { + width: 7px; + padding: 0; + margin: 0; +} + +.wrapper::-webkit-scrollbar-track { + border-radius: 1em; +} + +.wrapper::-webkit-scrollbar-thumb { + border-width: 0.1em; + border-radius: 1em; +} + +.tag { + font-size: 8px; + font-weight: 300; + padding: 3px; + line-height: 1; + background-color: var(--mantine-color-dark-7); + border-radius: 3px; + text-transform: uppercase; + white-space: nowrap; +} diff --git a/frontend/components/game-tags.tsx b/frontend/components/game-tags/game-tags.tsx similarity index 79% rename from frontend/components/game-tags.tsx rename to frontend/components/game-tags/game-tags.tsx index b5faa2a1..736caa7d 100644 --- a/frontend/components/game-tags.tsx +++ b/frontend/components/game-tags/game-tags.tsx @@ -1,6 +1,7 @@ import { GameTag, OwnedGame } from "@api/bindings"; -import { Badge, Box, Flex, Stack, Table } from "@mantine/core"; -import { FilterOption } from "./table/table-head"; +import { Table } from "@mantine/core"; +import { FilterOption } from "../table/table-head"; +import styles from "./game-tags.module.css"; function getTagDisplayName(tag: GameTag) { return ( @@ -11,21 +12,16 @@ function getTagDisplayName(tag: GameTag) { export function renderGameTagsCell(ownedGame: OwnedGame | undefined) { return ( - +
{ownedGame?.tags.sort().map((tag) => ( - {getTagDisplayName(tag)} - + ))} - +
); } diff --git a/frontend/components/installed-games/installed-games-columns.tsx b/frontend/components/installed-games/installed-games-columns.tsx index 63061744..f0596508 100644 --- a/frontend/components/installed-games/installed-games-columns.tsx +++ b/frontend/components/installed-games/installed-games-columns.tsx @@ -28,7 +28,7 @@ import { gameTagFilterOptions, getGameTagsSortValue, renderGameTagsCell, -} from "@components/game-tags"; +} from "@components/game-tags/game-tags"; const thumbnail: TableColumnBase = { hideInDetails: true, diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index 3fc5a655..e428db4d 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -20,7 +20,7 @@ import { gameTagFilterOptions, getGameTagsSortValue, renderGameTagsCell, -} from "@components/game-tags"; +} from "@components/game-tags/game-tags"; const thumbnail: TableColumnBase = { label: "Thumbnail", From e959cb36943481fcd7f68ca45a7884bf621b2818 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 12:55:00 +0200 Subject: [PATCH 217/255] cleanup --- backend/rai-pal-core/src/providers/steam_provider.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend/rai-pal-core/src/providers/steam_provider.rs b/backend/rai-pal-core/src/providers/steam_provider.rs index ff5e2dd2..2fb29f1c 100644 --- a/backend/rai-pal-core/src/providers/steam_provider.rs +++ b/backend/rai-pal-core/src/providers/steam_provider.rs @@ -72,7 +72,11 @@ impl Steam { ProviderCommand::String(format!("https://store.steampowered.com/app/{id_string}")), ); - if app_info.launch_options.iter().any(|launch| launch.is_vr()) { + if app_info + .launch_options + .iter() + .any(appinfo::SteamLaunchOption::is_vr) + { game.add_tag(GameTag::VR); } From aa66c3dc29820b484a8bb771d69238d424f3a0e6 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 12:56:54 +0200 Subject: [PATCH 218/255] cleanup --- backend/rai-pal-core/src/steam/appinfo.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/backend/rai-pal-core/src/steam/appinfo.rs b/backend/rai-pal-core/src/steam/appinfo.rs index 0003d3fd..687594bb 100644 --- a/backend/rai-pal-core/src/steam/appinfo.rs +++ b/backend/rai-pal-core/src/steam/appinfo.rs @@ -75,12 +75,7 @@ pub struct SteamLaunchOption { impl SteamLaunchOption { pub fn is_vr(&self) -> bool { - if let Some(app_type) = &self.launch_type { - if app_type == "vr" { - return true; - } - } - return false; + matches!(self.launch_type.as_deref(), Some("vr")) } } From 13d78d53dd86f647dc5cabeb1e803f838d613a34 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 13:16:48 +0200 Subject: [PATCH 219/255] add subscription list to owned games --- backend/Cargo.lock | 85 ++++++++++--------- backend/proc-macros/Cargo.toml | 1 + backend/proc-macros/src/lib.rs | 29 +++++++ .../src/game_engines/game_engine.rs | 9 +- .../rai-pal-core/src/game_engines/unity.rs | 8 +- backend/rai-pal-core/src/game_executable.rs | 9 +- backend/rai-pal-core/src/game_subscription.rs | 9 ++ backend/rai-pal-core/src/game_tag.rs | 8 +- backend/rai-pal-core/src/lib.rs | 2 +- backend/rai-pal-core/src/local_mod.rs | 8 +- backend/rai-pal-core/src/macros/mod.rs | 1 - .../src/macros/serializable_enum.rs | 15 ---- .../src/mod_loaders/runnable_loader.rs | 8 +- backend/rai-pal-core/src/owned_game.rs | 8 ++ .../rai-pal-core/src/providers/provider.rs | 7 +- .../src/providers/provider_command.rs | 9 +- .../src/providers/ubisoft_provider.rs | 10 +++ .../src/providers/xbox_provider.rs | 3 + frontend/api/bindings.ts | 3 +- 19 files changed, 146 insertions(+), 86 deletions(-) create mode 100644 backend/rai-pal-core/src/game_subscription.rs delete mode 100644 backend/rai-pal-core/src/macros/mod.rs delete mode 100644 backend/rai-pal-core/src/macros/serializable_enum.rs diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 1c7e93e6..de7e4667 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -235,7 +235,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -270,7 +270,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -419,7 +419,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "syn_derive", ] @@ -841,7 +841,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -851,7 +851,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -875,7 +875,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -886,7 +886,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -924,7 +924,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -937,7 +937,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -994,7 +994,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1017,7 +1017,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1100,7 +1100,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1121,7 +1121,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1282,7 +1282,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1375,7 +1375,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1632,7 +1632,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -1735,7 +1735,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2215,7 +2215,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2763,7 +2763,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -2926,7 +2926,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3044,7 +3044,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3091,7 +3091,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3396,6 +3396,7 @@ version = "0.13.0" dependencies = [ "quote", "serde", + "syn 2.0.76", ] [[package]] @@ -3841,7 +3842,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3942,7 +3943,7 @@ checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3953,7 +3954,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -3976,7 +3977,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -4027,7 +4028,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -4214,7 +4215,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -4341,9 +4342,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.72" +version = "2.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc4b9b9bf2add8093d3f2c0204471e951b2285580335de42f9d2534f3ae7a8af" +checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" dependencies = [ "proc-macro2", "quote", @@ -4359,7 +4360,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -4565,7 +4566,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.72", + "syn 2.0.76", "tauri-utils", "thiserror", "time", @@ -4583,7 +4584,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "tauri-codegen", "tauri-utils", ] @@ -4791,7 +4792,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -4886,7 +4887,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -5103,7 +5104,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -5422,7 +5423,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "wasm-bindgen-shared", ] @@ -5456,7 +5457,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5565,7 +5566,7 @@ checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -5671,7 +5672,7 @@ checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -5682,7 +5683,7 @@ checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] @@ -6116,7 +6117,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.72", + "syn 2.0.76", ] [[package]] diff --git a/backend/proc-macros/Cargo.toml b/backend/proc-macros/Cargo.toml index bb37fa29..4c16ea68 100644 --- a/backend/proc-macros/Cargo.toml +++ b/backend/proc-macros/Cargo.toml @@ -8,4 +8,5 @@ proc-macro = true [dependencies] quote = "1.0.36" +syn = "2.0.76" serde.workspace = true diff --git a/backend/proc-macros/src/lib.rs b/backend/proc-macros/src/lib.rs index e450fd10..cd8054d0 100644 --- a/backend/proc-macros/src/lib.rs +++ b/backend/proc-macros/src/lib.rs @@ -22,3 +22,32 @@ pub fn serializable_struct(_args: TokenStream, input: TokenStream) -> TokenStrea output.extend(input); output } + +#[proc_macro_attribute] +pub fn serializable_enum(_args: TokenStream, input: TokenStream) -> TokenStream { + // Parse the input tokens into a syntax tree + let input = syn::parse_macro_input!(input as syn::ItemEnum); + + // Get the enum name + let enum_name = &input.ident; + + // Generate the impl Display block + let display_impl = quote! { + impl core::fmt::Display for #enum_name { + fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { + write!(f, "{:?}", self) + } + } + }; + + // Generate the output tokens + let output = quote! { + #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug, Copy)] + #input + + #display_impl + }; + + // Convert the output tokens into a TokenStream + TokenStream::from(output) +} diff --git a/backend/rai-pal-core/src/game_engines/game_engine.rs b/backend/rai-pal-core/src/game_engines/game_engine.rs index 2328a4f7..a8e953d2 100644 --- a/backend/rai-pal-core/src/game_engines/game_engine.rs +++ b/backend/rai-pal-core/src/game_engines/game_engine.rs @@ -1,13 +1,12 @@ -use rai_pal_proc_macros::serializable_struct; +use rai_pal_proc_macros::{serializable_enum, serializable_struct}; -use crate::serializable_enum; - -serializable_enum!(EngineBrand { +#[serializable_enum] +pub enum EngineBrand { Unity, Unreal, Godot, GameMaker, -}); +} #[serializable_struct] pub struct GameEngine { diff --git a/backend/rai-pal-core/src/game_engines/unity.rs b/backend/rai-pal-core/src/game_engines/unity.rs index d809f1ca..1eac8b6c 100644 --- a/backend/rai-pal-core/src/game_engines/unity.rs +++ b/backend/rai-pal-core/src/game_engines/unity.rs @@ -6,6 +6,7 @@ use std::{ use lazy_regex::regex_captures; use log::error; +use rai_pal_proc_macros::serializable_enum; use super::game_engine::EngineVersionNumbers; use crate::{ @@ -13,10 +14,13 @@ use crate::{ game_executable::{get_architecture, Architecture, GameExecutable}, paths::{self, glob_path}, result::{Error, Result}, - serializable_enum, }; -serializable_enum!(UnityScriptingBackend { Il2Cpp, Mono }); +#[serializable_enum] +pub enum UnityScriptingBackend { + Il2Cpp, + Mono, +} pub fn parse_version(string: &str) -> Option { let (full, major, minor, patch, suffix) = regex_captures!( diff --git a/backend/rai-pal-core/src/game_executable.rs b/backend/rai-pal-core/src/game_executable.rs index 1ae0ed6e..d3072c65 100644 --- a/backend/rai-pal-core/src/game_executable.rs +++ b/backend/rai-pal-core/src/game_executable.rs @@ -4,7 +4,7 @@ use std::{ path::{Path, PathBuf}, }; -use rai_pal_proc_macros::serializable_struct; +use rai_pal_proc_macros::{serializable_enum, serializable_struct}; use crate::{ game_engines::{ @@ -14,10 +14,13 @@ use crate::{ }, paths::{file_name_without_extension, normalize_path}, result::Result, - serializable_enum, }; -serializable_enum!(Architecture { X64, X86 }); +#[serializable_enum] +pub enum Architecture { + X64, + X86, +} #[serializable_struct] pub struct GameExecutable { diff --git a/backend/rai-pal-core/src/game_subscription.rs b/backend/rai-pal-core/src/game_subscription.rs new file mode 100644 index 00000000..6aa898f7 --- /dev/null +++ b/backend/rai-pal-core/src/game_subscription.rs @@ -0,0 +1,9 @@ +use rai_pal_proc_macros::serializable_enum; + +#[serializable_enum] +pub enum GameSubscription { + UbisoftClassics, + UbisoftPremium, + XboxGamePass, + EaPlay, +} diff --git a/backend/rai-pal-core/src/game_tag.rs b/backend/rai-pal-core/src/game_tag.rs index f0b61599..e97768fa 100644 --- a/backend/rai-pal-core/src/game_tag.rs +++ b/backend/rai-pal-core/src/game_tag.rs @@ -1,3 +1,7 @@ -use crate::serializable_enum; +use rai_pal_proc_macros::serializable_enum; -serializable_enum!(GameTag { VR, Demo }); +#[serializable_enum] +pub enum GameTag { + VR, + Demo, +} diff --git a/backend/rai-pal-core/src/lib.rs b/backend/rai-pal-core/src/lib.rs index 05d2b885..35ee5ec7 100644 --- a/backend/rai-pal-core/src/lib.rs +++ b/backend/rai-pal-core/src/lib.rs @@ -6,11 +6,11 @@ pub mod files; pub mod game_engines; pub mod game_executable; pub mod game_mod; +pub mod game_subscription; pub mod game_tag; pub mod game_title; pub mod installed_game; pub mod local_mod; -pub mod macros; pub mod maps; pub mod mod_loaders; pub mod mod_manifest; diff --git a/backend/rai-pal-core/src/local_mod.rs b/backend/rai-pal-core/src/local_mod.rs index 06f61247..d2c07244 100644 --- a/backend/rai-pal-core/src/local_mod.rs +++ b/backend/rai-pal-core/src/local_mod.rs @@ -3,7 +3,7 @@ use std::{ path::{Path, PathBuf}, }; -use rai_pal_proc_macros::serializable_struct; +use rai_pal_proc_macros::{serializable_enum, serializable_struct}; use crate::{ game_engines::{game_engine::EngineBrand, unity::UnityScriptingBackend}, @@ -11,13 +11,13 @@ use crate::{ mod_manifest::{self, Manifest}, paths::{self, open_folder_or_parent}, result::Result, - serializable_enum, }; -serializable_enum!(ModKind { +#[serializable_enum] +pub enum ModKind { Installable, Runnable, -}); +} #[serializable_struct] pub struct LocalModData { diff --git a/backend/rai-pal-core/src/macros/mod.rs b/backend/rai-pal-core/src/macros/mod.rs deleted file mode 100644 index 12d97ead..00000000 --- a/backend/rai-pal-core/src/macros/mod.rs +++ /dev/null @@ -1 +0,0 @@ -mod serializable_enum; diff --git a/backend/rai-pal-core/src/macros/serializable_enum.rs b/backend/rai-pal-core/src/macros/serializable_enum.rs deleted file mode 100644 index c6c92e25..00000000 --- a/backend/rai-pal-core/src/macros/serializable_enum.rs +++ /dev/null @@ -1,15 +0,0 @@ -#[macro_export] -macro_rules! serializable_enum { - ($enum_name:ident { $($variant:ident),* $(,)? }) => { - #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug, Copy)] - pub enum $enum_name { - $($variant,)* - } - - impl core::fmt::Display for $enum_name { - fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { - write!(f, "{:?}", self) - } - } - }; -} diff --git a/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs b/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs index 3cd32350..fe92e5fd 100644 --- a/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs +++ b/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs @@ -4,7 +4,7 @@ use std::{ }; use log::error; -use rai_pal_proc_macros::serializable_struct; +use rai_pal_proc_macros::{serializable_enum, serializable_struct}; use super::mod_loader::{ModLoaderActions, ModLoaderData, ModLoaderStatic}; use crate::{ @@ -16,7 +16,6 @@ use crate::{ providers::provider_command::ProviderCommand, result::Error, result::Result, - serializable_enum, }; #[serializable_struct] @@ -24,13 +23,14 @@ pub struct RunnableLoader { pub data: ModLoaderData, } -serializable_enum!(RunnableParameter { +#[serializable_enum] +pub enum RunnableParameter { ExecutableName, ExecutablePath, GameJson, StartCommand, StartCommandArgs, -}); +} impl ModLoaderStatic for RunnableLoader { const ID: &'static str = "runnable"; diff --git a/backend/rai-pal-core/src/owned_game.rs b/backend/rai-pal-core/src/owned_game.rs index 1d22c7ab..f06c0b39 100644 --- a/backend/rai-pal-core/src/owned_game.rs +++ b/backend/rai-pal-core/src/owned_game.rs @@ -3,6 +3,7 @@ use std::collections::{HashMap, HashSet}; use rai_pal_proc_macros::serializable_struct; use crate::{ + game_subscription::GameSubscription, game_tag::GameTag, game_title::GameTitle, providers::{ @@ -21,6 +22,7 @@ pub struct OwnedGame { pub thumbnail_url: Option, pub tags: HashSet, pub provider_commands: HashMap, + pub from_subscriptions: HashSet, } impl OwnedGame { @@ -39,6 +41,7 @@ impl OwnedGame { provider_commands: HashMap::default(), release_date: None, thumbnail_url: None, + from_subscriptions: HashSet::default(), } } @@ -57,6 +60,11 @@ impl OwnedGame { self } + pub fn add_subscription(&mut self, subscription: GameSubscription) -> &mut Self { + self.from_subscriptions.insert(subscription); + self + } + pub fn add_provider_command( &mut self, command_action: ProviderCommandAction, diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/rai-pal-core/src/providers/provider.rs index 967031dc..178ea2bb 100644 --- a/backend/rai-pal-core/src/providers/provider.rs +++ b/backend/rai-pal-core/src/providers/provider.rs @@ -5,6 +5,7 @@ use std::{ }; use enum_dispatch::enum_dispatch; +use rai_pal_proc_macros::serializable_enum; #[cfg(target_os = "windows")] use crate::providers::{epic_provider::Epic, gog_provider::Gog, xbox_provider::Xbox}; @@ -14,12 +15,12 @@ use crate::{ paths, providers::{itch_provider::Itch, manual_provider::Manual, steam_provider::Steam}, result::{Error, Result}, - serializable_enum, }; use super::ubisoft_provider::Ubisoft; -serializable_enum!(ProviderId { +#[serializable_enum] +pub enum ProviderId { Steam, Manual, Itch, @@ -27,7 +28,7 @@ serializable_enum!(ProviderId { Gog, Xbox, Ubisoft, -}); +} #[enum_dispatch] #[derive(Clone)] diff --git a/backend/rai-pal-core/src/providers/provider_command.rs b/backend/rai-pal-core/src/providers/provider_command.rs index d601ba34..6fcc7746 100644 --- a/backend/rai-pal-core/src/providers/provider_command.rs +++ b/backend/rai-pal-core/src/providers/provider_command.rs @@ -1,6 +1,8 @@ use std::{path::PathBuf, process::Command}; -use crate::{result::Result, serializable_enum}; +use rai_pal_proc_macros::serializable_enum; + +use crate::result::Result; #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, PartialEq, Eq, Hash, Debug)] pub enum ProviderCommand { @@ -8,13 +10,14 @@ pub enum ProviderCommand { Path(PathBuf, Vec), } -serializable_enum!(ProviderCommandAction { +#[serializable_enum] +pub enum ProviderCommandAction { Install, ShowInLibrary, ShowInStore, Start, OpenInBrowser, -}); +} impl ProviderCommand { pub fn run(&self) -> Result { diff --git a/backend/rai-pal-core/src/providers/ubisoft_provider.rs b/backend/rai-pal-core/src/providers/ubisoft_provider.rs index 8e883683..ba48b0f7 100644 --- a/backend/rai-pal-core/src/providers/ubisoft_provider.rs +++ b/backend/rai-pal-core/src/providers/ubisoft_provider.rs @@ -11,6 +11,7 @@ use winreg::{ }; use crate::{ + game_subscription::GameSubscription, installed_game::InstalledGame, owned_game::OwnedGame, paths::file_name_without_extension, @@ -102,6 +103,15 @@ impl ProviderActions for Ubisoft { owned_game.set_thumbnail_url(&game.image_link); + for subscription in game.part_of_subscription_offer { + if subscription.to_lowercase().contains("premium") { + owned_game.add_subscription(GameSubscription::UbisoftPremium); + } + if subscription.to_lowercase().contains("classics") { + owned_game.add_subscription(GameSubscription::UbisoftClassics); + } + } + owned_callback(owned_game); } diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index 6bb8646e..716deeb1 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -11,6 +11,7 @@ use winreg::{ }; use crate::{ + game_subscription::GameSubscription, installed_game::InstalledGame, owned_game::OwnedGame, paths::file_name_without_extension, @@ -163,6 +164,8 @@ impl ProviderActions for Xbox { owned_game.set_thumbnail_url(&image_url); } + owned_game.add_subscription(GameSubscription::XboxGamePass); + owned_callback(owned_game); } diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 087286d6..d649ccee 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -297,6 +297,7 @@ export type FoundInstalledGame = [] export type FoundOwnedGame = [] export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } +export type GameSubscription = "UbisoftClassics" | "UbisoftPremium" | "XboxGamePass" | "EaPlay" export type GameTag = "VR" | "Demo" export type GameTitle = { display: string; normalized: string[] } export type InstalledGame = { id: string; title: GameTitle; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } @@ -306,7 +307,7 @@ export type Manifest = { title: string | null; version: string; runnable: Runnab export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } export type ModKind = "Installable" | "Runnable" export type ModLoaderData = { id: string; path: string; kind: ModKind } -export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; tags: GameTag[]; providerCommands: { [key in ProviderCommandAction]: ProviderCommand } } +export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; tags: GameTag[]; providerCommands: { [key in ProviderCommandAction]: ProviderCommand }; fromSubscriptions: GameSubscription[] } export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } From 0f4b3159b87a6e5dc5642e13897e5dfd161f5b8e Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 15:18:27 +0200 Subject: [PATCH 220/255] buildable on linux --- .../rai-pal-core/src/providers/provider.rs | 10 +- .../src/providers/ubisoft_provider.rs | 10 +- .../src/providers/xbox_provider.rs | 102 +++++++++--------- 3 files changed, 57 insertions(+), 65 deletions(-) diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/rai-pal-core/src/providers/provider.rs index 178ea2bb..44066911 100644 --- a/backend/rai-pal-core/src/providers/provider.rs +++ b/backend/rai-pal-core/src/providers/provider.rs @@ -8,12 +8,12 @@ use enum_dispatch::enum_dispatch; use rai_pal_proc_macros::serializable_enum; #[cfg(target_os = "windows")] -use crate::providers::{epic_provider::Epic, gog_provider::Gog, xbox_provider::Xbox}; +use crate::providers::{epic_provider::Epic, gog_provider::Gog}; use crate::{ installed_game::InstalledGame, owned_game::OwnedGame, paths, - providers::{itch_provider::Itch, manual_provider::Manual, steam_provider::Steam}, + providers::{itch_provider::Itch, manual_provider::Manual, steam_provider::Steam, xbox_provider::Xbox}, result::{Error, Result}, }; @@ -40,7 +40,6 @@ pub enum Provider { Epic, #[cfg(target_os = "windows")] Gog, - #[cfg(target_os = "windows")] Xbox, Ubisoft, } @@ -50,13 +49,12 @@ const PROVIDERS: &Map = &[ create_map_entry::(), create_map_entry::(), create_map_entry::(), + create_map_entry::(), + create_map_entry::(), #[cfg(target_os = "windows")] create_map_entry::(), #[cfg(target_os = "windows")] create_map_entry::(), - #[cfg(target_os = "windows")] - create_map_entry::(), - create_map_entry::(), ]; #[enum_dispatch(Provider)] diff --git a/backend/rai-pal-core/src/providers/ubisoft_provider.rs b/backend/rai-pal-core/src/providers/ubisoft_provider.rs index ba48b0f7..2865d5a5 100644 --- a/backend/rai-pal-core/src/providers/ubisoft_provider.rs +++ b/backend/rai-pal-core/src/providers/ubisoft_provider.rs @@ -1,20 +1,12 @@ -#![cfg(target_os = "windows")] +use std::path::Path; -use std::path::{Path, PathBuf}; - -use log::error; use rai_pal_proc_macros::serializable_struct; use serde::{Deserialize, Serialize}; -use winreg::{ - enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}, - RegKey, -}; use crate::{ game_subscription::GameSubscription, installed_game::InstalledGame, owned_game::OwnedGame, - paths::file_name_without_extension, providers::provider::{ProviderActions, ProviderId, ProviderStatic}, result::Result, }; diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index 716deeb1..4c6d0210 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -1,10 +1,9 @@ -#![cfg(target_os = "windows")] - use std::path::{Path, PathBuf}; use log::error; use rai_pal_proc_macros::serializable_struct; use serde::{Deserialize, Serialize}; +#[cfg(target_os = "windows")] use winreg::{ enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}, RegKey, @@ -72,57 +71,60 @@ impl ProviderActions for Xbox { TInstalledCallback: FnMut(InstalledGame) + Send + Sync, TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { - let gaming_services = RegKey::predef(HKEY_LOCAL_MACHINE) - .open_subkey("SOFTWARE\\Microsoft\\GamingServices")?; - let package_roots = gaming_services.open_subkey("PackageRepository\\Root")?; - let game_configs = gaming_services.open_subkey("GameConfig")?; - let app_packages = RegKey::predef(HKEY_CURRENT_USER).open_subkey("Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppModel\\Repository\\Packages")?; - - for key in package_roots.enum_keys().flatten() { - if let Ok(child) = package_roots.open_subkey(key) { - if let Some(Ok(subkey)) = child.enum_keys().nth(0) { - if let Ok(subchild) = child.open_subkey(subkey) { - if let Ok(package_id) = subchild.get_value::("Package") { - if let Ok(root_path) = subchild.get_value::("Root") { - if let Ok(executables) = - game_configs.open_subkey(format!("{package_id}\\Executable")) - { - if let Some(Ok(first_executable_key)) = - executables.enum_keys().nth(0) + #[cfg(target_os = "windows")] + { + let gaming_services = RegKey::predef(HKEY_LOCAL_MACHINE) + .open_subkey("SOFTWARE\\Microsoft\\GamingServices")?; + let package_roots = gaming_services.open_subkey("PackageRepository\\Root")?; + let game_configs = gaming_services.open_subkey("GameConfig")?; + let app_packages = RegKey::predef(HKEY_CURRENT_USER).open_subkey("Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppModel\\Repository\\Packages")?; + + for key in package_roots.enum_keys().flatten() { + if let Ok(child) = package_roots.open_subkey(key) { + if let Some(Ok(subkey)) = child.enum_keys().nth(0) { + if let Ok(subchild) = child.open_subkey(subkey) { + if let Ok(package_id) = subchild.get_value::("Package") { + if let Ok(root_path) = subchild.get_value::("Root") { + if let Ok(executables) = + game_configs.open_subkey(format!("{package_id}\\Executable")) { - if let Ok(first_executable) = - executables.open_subkey(first_executable_key) + if let Some(Ok(first_executable_key)) = + executables.enum_keys().nth(0) { - if let Ok(executable_name) = - first_executable.get_value::("Name") + if let Ok(first_executable) = + executables.open_subkey(first_executable_key) { - let executable_path = - PathBuf::from(root_path).join(executable_name); - - let display_name = app_packages - .open_subkey(&package_id) - .and_then(|package| { - package - .get_value::("DisplayName") - }) - .or_else(|error| { - error!("Failed to find display name for Xbox game: {}", error); - file_name_without_extension( - &executable_path, - ) - .map(ToString::to_string) - }) - .unwrap_or_else(|error| { - error!("Failed to get game name from exe path: {}", error); - "[Name Not Found]".to_string() - }); - - if let Some(game) = InstalledGame::new( - &executable_path, - &display_name, - *Self::ID, - ) { - installed_callback(game.clone()); + if let Ok(executable_name) = + first_executable.get_value::("Name") + { + let executable_path = + PathBuf::from(root_path).join(executable_name); + + let display_name = app_packages + .open_subkey(&package_id) + .and_then(|package| { + package + .get_value::("DisplayName") + }) + .or_else(|error| { + error!("Failed to find display name for Xbox game: {}", error); + file_name_without_extension( + &executable_path, + ) + .map(ToString::to_string) + }) + .unwrap_or_else(|error| { + error!("Failed to get game name from exe path: {}", error); + "[Name Not Found]".to_string() + }); + + if let Some(game) = InstalledGame::new( + &executable_path, + &display_name, + *Self::ID, + ) { + installed_callback(game.clone()); + } } } } From aa38c9d9d634176cf479ae8661d40d97a5a963fe Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 15:40:51 +0200 Subject: [PATCH 221/255] cleanup --- .vscode/settings.json | 3 +++ .../src/providers/ubisoft_provider.rs | 2 +- backend/src/app_cache.rs | 16 ++++++++-------- backend/src/main.rs | 2 +- frontend/hooks/use-processed-owned-games.ts | 4 +--- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 7b2eeef1..3a966b6f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,6 +30,7 @@ "needsadmin", "otherinstallcmd", "Pardeike", + "partof", "praydog", "predef", "PTLP", @@ -38,10 +39,12 @@ "runas", "rusqlite", "shellapi", + "specta", "subchild", "subkey", "substr", "SYSTEMMODAL", + "tauri", "ubisoft", "uevr", "ureq", diff --git a/backend/rai-pal-core/src/providers/ubisoft_provider.rs b/backend/rai-pal-core/src/providers/ubisoft_provider.rs index 2865d5a5..aa2a98c2 100644 --- a/backend/rai-pal-core/src/providers/ubisoft_provider.rs +++ b/backend/rai-pal-core/src/providers/ubisoft_provider.rs @@ -74,7 +74,7 @@ impl ProviderActions for Ubisoft { TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { let json_path = - Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/Ubisoft-plus-games.json"); + Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/ubisoft-plus-games.json"); let database: UbisoftPlusGameDatabase = serde_json::from_str(&std::fs::read_to_string(json_path)?)?; diff --git a/backend/src/app_cache.rs b/backend/src/app_cache.rs index 09dd4b85..4d3af049 100644 --- a/backend/src/app_cache.rs +++ b/backend/src/app_cache.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, path::PathBuf}; +use std::{collections::HashMap, fs, path::PathBuf}; use crate::result::Result; use rai_pal_core::{ @@ -26,16 +26,16 @@ impl ProviderCache { const DATA_KEY: &'static str = "data"; const CACHE_FOLDER: &'static str = "cache"; - pub fn new(id: ProviderId) -> Self { - Self { - path: PathBuf::from(Self::CACHE_FOLDER) - .join("providers") - .join(id.to_string()), + pub fn new(id: ProviderId) -> Result { + let path = PathBuf::from(Self::CACHE_FOLDER).join("providers").join(id.to_string()); + fs::create_dir_all(&path)?; + Ok(Self { + path, data: ProviderData { installed_games: HashMap::new(), owned_games: HashMap::new(), }, - } + }) } pub fn load(&mut self, handle: &AppHandle) -> Result { @@ -90,7 +90,7 @@ impl ProviderCache { pub fn clear_all(handle: &AppHandle) -> Result { for provider_id in provider::get_provider_ids() { - Self::new(provider_id).clear(handle)?; + Self::new(provider_id)?.clear(handle)?; } Ok(()) diff --git a/backend/src/main.rs b/backend/src/main.rs index cebdc1d3..5f270c25 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -415,7 +415,7 @@ fn update_owned_games_state( #[tauri::command] #[specta::specta] async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Result { - let mut cache = ProviderCache::new(provider_id); + let mut cache = ProviderCache::new(provider_id)?; let mut installed_games = HashMap::::new(); let mut installed_games_without_cache = HashMap::::new(); diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index e9ee63b8..1e0355fc 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -33,9 +33,7 @@ export function useProcessedOwnedGames() { } } } - - console.log("remoteGames", remoteGames); - + return [byProvider, byTitle]; }, [remoteGames, providerDataMap]); From a4ea58e3909bc8defe8deb14d3efc40612481114 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 16:50:45 +0200 Subject: [PATCH 222/255] add subscriptions selector --- .vscode/settings.json | 2 + .../owned-games/owned-games-page.tsx | 2 + .../owned-games/subscriptions-selector.tsx | 54 +++++++++++++++++++ frontend/hooks/use-owned-subscriptions.ts | 24 +++++++++ frontend/hooks/use-processed-owned-games.ts | 2 +- 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 frontend/components/owned-games/subscriptions-selector.tsx create mode 100644 frontend/hooks/use-owned-subscriptions.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 3a966b6f..cd914523 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -27,6 +27,7 @@ "Leaderboard", "librarycache", "Loggable", + "mantine", "needsadmin", "otherinstallcmd", "Pardeike", @@ -44,6 +45,7 @@ "subkey", "substr", "SYSTEMMODAL", + "tabler", "tauri", "ubisoft", "uevr", diff --git a/frontend/components/owned-games/owned-games-page.tsx b/frontend/components/owned-games/owned-games-page.tsx index 04be9280..715a07b4 100644 --- a/frontend/components/owned-games/owned-games-page.tsx +++ b/frontend/components/owned-games/owned-games-page.tsx @@ -15,6 +15,7 @@ import { useProcessedOwnedGames, } from "@hooks/use-processed-owned-games"; import { FilterSelect } from "@components/filters/filter-select"; +import { SubscriptionsSelector } from "./subscriptions-selector"; const defaultFilter: Record = {}; @@ -89,6 +90,7 @@ export function OwnedGamesPage() { ) : null} + = { + EaPlay: "EA Play", + XboxGamePass: "Game Pass", + UbisoftClassics: "Ubisoft Classics", + UbisoftPremium: "Ubisoft Premium", +} as const; + +export function SubscriptionsSelector() { + const [ownedSubscriptions, toggleSubscription] = useOwnedSubscriptions(); + + return ( + + + + + + + + + + Select the subscriptions you have. The games included in those + subscriptions will be considered as owned in Rai Pal. + + {Object.entries(subscriptions).map(([subscriptionId, subscriptionTitle]) => ( + + ))} + + + + + + ); +} diff --git a/frontend/hooks/use-owned-subscriptions.ts b/frontend/hooks/use-owned-subscriptions.ts new file mode 100644 index 00000000..40b3a5d2 --- /dev/null +++ b/frontend/hooks/use-owned-subscriptions.ts @@ -0,0 +1,24 @@ +import { GameSubscription } from "@api/bindings"; +import { usePersistedState } from "./use-persisted-state"; +import { useCallback } from "react"; + +// TODO: this can't be like this, gotta send owned subs to backend. +export function useOwnedSubscriptions() { + const [gameSubscriptionMap, setOwnedSubscriptions] = usePersistedState< + Partial> + >({}, "owned-game-subscriptions"); + + const toggleSubscription = useCallback( + (subscription: GameSubscription | null) => { + if (!subscription) return; + + setOwnedSubscriptions((prev) => ({ + ...prev, + [subscription]: !prev[subscription], + })); + }, + [setOwnedSubscriptions], + ); + + return [gameSubscriptionMap, toggleSubscription] as const; +} diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index 1e0355fc..e4e5b3fb 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -3,7 +3,7 @@ import { useMemo } from "react"; import { remoteGamesAtom, providerDataAtom } from "./use-data"; import { OwnedGame, ProviderId, RemoteGame } from "@api/bindings"; -type ProcessedOwnedGameRecord = Record; +export type ProcessedOwnedGameRecord = Record; export interface ProcessedOwnedGame extends OwnedGame { isInstalled: boolean; remoteData?: RemoteGame; From 8863eb8d5a63faaf20c0d5f5a0cc72a49da96170 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 24 Aug 2024 17:03:48 +0200 Subject: [PATCH 223/255] rename --- frontend/components/owned-games/subscriptions-selector.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/components/owned-games/subscriptions-selector.tsx b/frontend/components/owned-games/subscriptions-selector.tsx index f2093b27..fc88d9a7 100644 --- a/frontend/components/owned-games/subscriptions-selector.tsx +++ b/frontend/components/owned-games/subscriptions-selector.tsx @@ -6,7 +6,7 @@ import { IconCash } from "@tabler/icons-react"; const subscriptions: Record = { EaPlay: "EA Play", - XboxGamePass: "Game Pass", + XboxGamePass: "Xbox Game Pass (PC)", UbisoftClassics: "Ubisoft Classics", UbisoftPremium: "Ubisoft Premium", } as const; From 111a0e34cbf7c04d1d8275961771776476539e71 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 2 Sep 2024 17:05:35 +0200 Subject: [PATCH 224/255] xbox provider commands --- .vscode/settings.json | 1 + .../src/providers/xbox_provider.rs | 39 ++++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index cd914523..2f520d32 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -28,6 +28,7 @@ "librarycache", "Loggable", "mantine", + "msxbox", "needsadmin", "otherinstallcmd", "Pardeike", diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index 4c6d0210..3266ed5f 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -85,8 +85,8 @@ impl ProviderActions for Xbox { if let Ok(subchild) = child.open_subkey(subkey) { if let Ok(package_id) = subchild.get_value::("Package") { if let Ok(root_path) = subchild.get_value::("Root") { - if let Ok(executables) = - game_configs.open_subkey(format!("{package_id}\\Executable")) + if let Ok(executables) = game_configs + .open_subkey(format!("{package_id}\\Executable")) { if let Some(Ok(first_executable_key)) = executables.enum_keys().nth(0) @@ -97,14 +97,15 @@ impl ProviderActions for Xbox { if let Ok(executable_name) = first_executable.get_value::("Name") { - let executable_path = - PathBuf::from(root_path).join(executable_name); + let executable_path = PathBuf::from(root_path) + .join(executable_name); let display_name = app_packages .open_subkey(&package_id) .and_then(|package| { - package - .get_value::("DisplayName") + package.get_value::( + "DisplayName", + ) }) .or_else(|error| { error!("Failed to find display name for Xbox game: {}", error); @@ -137,8 +138,8 @@ impl ProviderActions for Xbox { } } - let json_path = Path::new(env!("CARGO_MANIFEST_DIR")) - .join("../../test-data/xbox-gamepass-games-eaplay.json"); + let json_path = + Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/xbox-gamepass-games.json"); let games: Vec = serde_json::from_str(&std::fs::read_to_string(json_path)?)?; @@ -146,13 +147,21 @@ impl ProviderActions for Xbox { for game in games { let mut owned_game = OwnedGame::new(&game.product_id, *Self::ID, &game.product_title); - owned_game.add_provider_command( - ProviderCommandAction::OpenInBrowser, - ProviderCommand::String(format!( - "https://www.microsoft.com/store/productId/{}", - game.product_id, - )), - ); + owned_game + .add_provider_command( + ProviderCommandAction::OpenInBrowser, + ProviderCommand::String(format!( + "https://www.microsoft.com/store/productId/{}", + game.product_id, + )), + ) + .add_provider_command( + ProviderCommandAction::ShowInStore, + ProviderCommand::String(format!( + "msxbox://game/?productId={}", + game.product_id, + )), + ); if let Some(release_date) = game.get_release_date() { owned_game.set_release_date(release_date); From c5ecc84c91cc51e524e28e606878a127071bc318 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 2 Sep 2024 17:42:27 +0200 Subject: [PATCH 225/255] add contributing --- .vscode/settings.json | 2 ++ CONTRIBUTING.md | 51 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/.vscode/settings.json b/.vscode/settings.json index 2f520d32..82a1b6fb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,10 +8,12 @@ "cargoquery", "catcache", "chrono", + "Clippy", "compatdata", "ctypes", "epicgames", "flashbang", + "frontends", "gamemaker", "Gamepass", "globbed", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..56b4fcc1 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,51 @@ +# Contributing + +Before starting any of this: please make an issue about your potential contribution and discuss it with me (unless we already discussed it of course). + +Rai Pal is currently undergoing a major rewrite, so this might be outdated. Message me if you need help. + +## Setting up + +Rai Pal is made with [Tauri v2](https://v2.tauri.app/). You'll need to follow the instructions in the [Tauri Prerequisites](https://v2.tauri.app/start/prerequisites/) page to install all the dependencies, including [Node section](https://v2.tauri.app/start/prerequisites/#nodejs). Ignore anything related to mobile. + +Once that's taken care of: +- Clone this repo. +- `cd` into the root folder of the project. +- Run the usual `npm install` to install all dependencies +- Run `npm run dev` to start the local dev server and frontend. First time will take a while. + +## Project Structure + +The project is split into two main parts: + +[`/backend`](/backend): Rust code that does most of the heavy lifting. +[`/frontend`](/frontend): TypeScript React code that handles drawing the actual app views, and some of the logic too. + +## Backend + +The [`/backend`](/backend) folder contains the Rust code that does most of the heavy lifting. Has a `Cargo.toml` at the top level, defining the main Tauri project (code in `/backend/src`). This code contains anything specific to Tauri, like all the app commands and events that can be called. + +The top level crate is also the workspace containing two other sub-crates: +- [`/backend/rai-pal-core`](/backend/rai-pal-core): Main Rai Pal logic. Shouldn't depend on anything Tauri-specific, could theoretically be split out into an isolated crate to be used by different frontends. +- [`/backend/proc-macros`](/backend/proc-macros): Procedural macros ([read more](https://doc.rust-lang.org/reference/procedural-macros.html)). + +Dependencies that are used by multiple crates in the workspace get defined at the workspace level, on the root `Cargo.toml`. Dependencies that are only used by a specific create, get defined in that crate's `Cargo.toml`. + +The root/workspace `Cargo.toml` also contains the settings for profiles and linters. Set up your IDE (probably [VSCode](https://code.visualstudio.com/)) to automatically format your code using [Clippy](https://doc.rust-lang.org/clippy/). + +## Frontend + +I initially tried to keep all business logic on the backend, but eventually settled on a balance that prevented the Rust side from getting too confusing. For instance, the logic for merging different types of data (like installed games, owned games, and remote games) is on the frontend, because I went insane trying to reconcile all that on the backend without making the frontend wait for the entire thing to be processed. So there are a lot of situations where you'll need to decide whether some piece of logic should be on the frontend or on the backend. I usually go by how annoying the Rust code can get: if it gets pretty annoying, I make it dumber and move some logic to the frontend. And of course, anything performance-intensive should be on the Rust side. + +## General architecture + +The way I fetch data from the backend might be a bit uncommon. I admit that I didn't really look up similar projects to figure out how they did it, I was just winging it. I did learn a lot from the [Outer Wilds Mod Manager](https://github.com/ow-mods/ow-mod-man), but Rai Pal has some different requirements. What I want from Rai Pal is: +- The frontend shouldn't visibly block while fetching or computing data. +- Data should be visible on the frontend as soon as possible. +- Slow data processes shouldn't prevent other processes from delivering their data to the frontend. + +Some people have 800 games installed at the same time (not even exaggerating). So parsing through that entire list takes a long time. Ideally, the user shouldn't need to wait for the process of discovering installed games to finish before starting to find the list of owned (but not necessarily installed) games. Same goes for the other way around. Some people own 23k games on Steam (again, not exaggerating, an actual number). Parsing that list takes a long time. So we need to make sure one process doesn't block the other, and that we show the results progressively (games show as they're discovered). + +There's also a lot of caching involved, but I'm still trying to figure out the best implementation. + +There's probably a lot more confusing stuff going on in this project, but it's hard for me to go over it all. Please to message me if you want to contribute and need more help unravelling this god forsaken thing. From 7dc8984a960df1d136a6e4437f0e078bccc79e1e Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 2 Sep 2024 18:14:46 +0200 Subject: [PATCH 226/255] update remote game format --- .vscode/settings.json | 2 ++ backend/rai-pal-core/src/remote_games.rs | 30 +++++++++++++++------ frontend/api/bindings.ts | 3 ++- frontend/hooks/use-processed-owned-games.ts | 6 ++--- 4 files changed, 29 insertions(+), 12 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 82a1b6fb..8d996c40 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -38,8 +38,10 @@ "praydog", "predef", "PTLP", + "Raicuparta", "redownload", "repairtype", + "reqwest", "runas", "rusqlite", "shellapi", diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/rai-pal-core/src/remote_games.rs index 579d6dc3..6b6243cb 100644 --- a/backend/rai-pal-core/src/remote_games.rs +++ b/backend/rai-pal-core/src/remote_games.rs @@ -1,13 +1,12 @@ use std::collections::HashMap; use lazy_regex::regex; -use rai_pal_proc_macros::serializable_struct; +use rai_pal_proc_macros::{serializable_enum, serializable_struct}; use crate::game_engines::game_engine::{ EngineBrand, EngineVersion, EngineVersionNumbers, GameEngine, }; -use crate::game_title::GameTitle; -use crate::providers::provider::ProviderId; +use crate::game_subscription::GameSubscription; use crate::result::Result; const URL_BASE: &str = "https://raicuparta.github.io/rai-pal-db/game-db"; @@ -24,18 +23,32 @@ struct GameDatabaseEngineVersion { version: Option, } +#[serializable_enum] +pub enum IdKind { + Steam, + Manual, + Itch, + Epic, + Gog, + Xbox, + Ubisoft, + NormalizedTitle, +} + #[serializable_struct] struct GameDatabaseEntry { pub title: Option, pub engines: Option>, - pub provider_ids: Option>>, + pub ids: Option>>, + pub subscriptions: Option>, } #[serializable_struct] pub struct RemoteGame { - pub title: Option, + pub title: Option, pub engines: Option>, - pub provider_ids: HashMap>, + pub ids: HashMap>, + pub subscriptions: Option>, } fn engine_brand_from_string(brand: &str) -> Option { @@ -87,7 +100,7 @@ pub async fn get() -> Result> { .into_iter() .filter_map(|entry| { Some(RemoteGame { - title: entry.title.map(|title| GameTitle::new(&title)), + title: entry.title, engines: entry.engines.map(|engines| { engines .into_iter() @@ -104,7 +117,8 @@ pub async fn get() -> Result> { }) .collect() }), - provider_ids: entry.provider_ids?, + ids: entry.ids?, + subscriptions: entry.subscriptions, }) }) .collect(); diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index d649ccee..b98bf07d 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -300,6 +300,7 @@ export type GameExecutable = { path: string; name: string; engine: GameEngine | export type GameSubscription = "UbisoftClassics" | "UbisoftPremium" | "XboxGamePass" | "EaPlay" export type GameTag = "VR" | "Demo" export type GameTitle = { display: string; normalized: string[] } +export type IdKind = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" | "Ubisoft" | "NormalizedTitle" export type InstalledGame = { id: string; title: GameTitle; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } export type LocalMod = { data: LocalModData; common: CommonModData } export type LocalModData = { path: string; manifest: Manifest | null } @@ -312,7 +313,7 @@ export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" | "Ubisoft" -export type RemoteGame = { title: GameTitle | null; engines: GameEngine[] | null; providerIds: { [key in ProviderId]: string[] } } +export type RemoteGame = { title: string | null; engines: GameEngine[] | null; ids: { [key in IdKind]: string[] }; subscriptions: GameSubscription[] | null } export type RemoteMod = { common: CommonModData; data: RemoteModData } export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } export type RunnableModData = { path: string; args: string[] } diff --git a/frontend/hooks/use-processed-owned-games.ts b/frontend/hooks/use-processed-owned-games.ts index e4e5b3fb..96a09ccb 100644 --- a/frontend/hooks/use-processed-owned-games.ts +++ b/frontend/hooks/use-processed-owned-games.ts @@ -22,18 +22,18 @@ export function useProcessedOwnedGames() { for (const remoteGame of remoteGames) { for (const providerId of providerIds) { byProvider[providerId] ??= {}; - for (const remoteGameId of remoteGame.providerIds[providerId] ?? []) { + for (const remoteGameId of remoteGame.ids[providerId] ?? []) { byProvider[providerId][remoteGameId] = remoteGame; } } if (remoteGame.title) { - for (const normalizedTitle of remoteGame.title.normalized) { + for (const normalizedTitle of remoteGame.ids.NormalizedTitle) { byTitle[normalizedTitle] = remoteGame; } } } - + return [byProvider, byTitle]; }, [remoteGames, providerDataMap]); From a4a354bf95917eac8116c81365ec6627fc2ee79e Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 2 Sep 2024 18:19:25 +0200 Subject: [PATCH 227/255] disable subscription stuff for now --- backend/rai-pal-core/src/providers/mod.rs | 1 - .../rai-pal-core/src/providers/provider.rs | 9 +- .../src/providers/ubisoft_provider.rs | 112 ------------------ .../src/providers/xbox_provider.rs | 61 +--------- frontend/api/bindings.ts | 2 +- .../components/badges/color-coded-badge.tsx | 2 +- .../owned-games/owned-games-columns.tsx | 2 +- .../owned-games/owned-games-page.tsx | 4 +- .../owned-games/subscriptions-selector.tsx | 101 ++++++++-------- .../components/providers/provider-icon.tsx | 3 +- frontend/hooks/use-owned-subscriptions.ts | 24 ---- frontend/util/common-filter-options.ts | 1 - 12 files changed, 61 insertions(+), 261 deletions(-) delete mode 100644 backend/rai-pal-core/src/providers/ubisoft_provider.rs delete mode 100644 frontend/hooks/use-owned-subscriptions.ts diff --git a/backend/rai-pal-core/src/providers/mod.rs b/backend/rai-pal-core/src/providers/mod.rs index 8b7d7a9f..7c69ccca 100644 --- a/backend/rai-pal-core/src/providers/mod.rs +++ b/backend/rai-pal-core/src/providers/mod.rs @@ -5,5 +5,4 @@ pub mod manual_provider; pub mod provider; pub mod provider_command; pub mod steam_provider; -pub mod ubisoft_provider; pub mod xbox_provider; diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/rai-pal-core/src/providers/provider.rs index 44066911..c14697b3 100644 --- a/backend/rai-pal-core/src/providers/provider.rs +++ b/backend/rai-pal-core/src/providers/provider.rs @@ -13,12 +13,12 @@ use crate::{ installed_game::InstalledGame, owned_game::OwnedGame, paths, - providers::{itch_provider::Itch, manual_provider::Manual, steam_provider::Steam, xbox_provider::Xbox}, + providers::{ + itch_provider::Itch, manual_provider::Manual, steam_provider::Steam, xbox_provider::Xbox, + }, result::{Error, Result}, }; -use super::ubisoft_provider::Ubisoft; - #[serializable_enum] pub enum ProviderId { Steam, @@ -27,7 +27,6 @@ pub enum ProviderId { Epic, Gog, Xbox, - Ubisoft, } #[enum_dispatch] @@ -41,7 +40,6 @@ pub enum Provider { #[cfg(target_os = "windows")] Gog, Xbox, - Ubisoft, } type Map = [(ProviderId, fn() -> Result)]; @@ -50,7 +48,6 @@ const PROVIDERS: &Map = &[ create_map_entry::(), create_map_entry::(), create_map_entry::(), - create_map_entry::(), #[cfg(target_os = "windows")] create_map_entry::(), #[cfg(target_os = "windows")] diff --git a/backend/rai-pal-core/src/providers/ubisoft_provider.rs b/backend/rai-pal-core/src/providers/ubisoft_provider.rs deleted file mode 100644 index aa2a98c2..00000000 --- a/backend/rai-pal-core/src/providers/ubisoft_provider.rs +++ /dev/null @@ -1,112 +0,0 @@ -use std::path::Path; - -use rai_pal_proc_macros::serializable_struct; -use serde::{Deserialize, Serialize}; - -use crate::{ - game_subscription::GameSubscription, - installed_game::InstalledGame, - owned_game::OwnedGame, - providers::provider::{ProviderActions, ProviderId, ProviderStatic}, - result::Result, -}; - -use super::provider_command::{ProviderCommand, ProviderCommandAction}; - -#[derive(Clone)] -pub struct Ubisoft {} - -impl ProviderStatic for Ubisoft { - const ID: &'static ProviderId = &ProviderId::Ubisoft; - - fn new() -> Result - where - Self: Sized, - { - Ok(Self {}) - } -} - -#[derive(Serialize, Deserialize, specta::Type, Clone, Debug)] -struct UbisoftPlusGame { - title: String, - id: String, - #[serde(rename = "MasterID")] - master_id: String, - image_link: String, - short_title: String, - release_date: String, - #[serde(rename = "partofSubscriptionOffer")] - part_of_subscription_offer: Vec, -} - -#[serializable_struct] -struct UbisoftPlusGameDatabase { - hits: Vec, -} - -impl UbisoftPlusGame { - fn get_release_date(&self) -> Option { - Some( - self.release_date - .parse::>() - .ok()? - .timestamp(), - ) - } -} - -#[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, Debug)] -#[serde(rename_all = "PascalCase")] -struct UbisoftGamepassImages { - logo: Option>, - box_art: Option>, -} - -impl ProviderActions for Ubisoft { - async fn get_games( - &self, - mut _installed_callback: TInstalledCallback, - mut owned_callback: TOwnedCallback, - ) -> Result - where - TInstalledCallback: FnMut(InstalledGame) + Send + Sync, - TOwnedCallback: FnMut(OwnedGame) + Send + Sync, - { - let json_path = - Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/ubisoft-plus-games.json"); - - let database: UbisoftPlusGameDatabase = - serde_json::from_str(&std::fs::read_to_string(json_path)?)?; - - for game in database.hits { - let mut owned_game = OwnedGame::new(&game.id, *Self::ID, &game.title); - - owned_game.add_provider_command( - ProviderCommandAction::OpenInBrowser, - ProviderCommand::String( - format!("https://store.ubisoft.com/us/a/{}.html", game.id,), - ), - ); - - if let Some(release_date) = game.get_release_date() { - owned_game.set_release_date(release_date); - } - - owned_game.set_thumbnail_url(&game.image_link); - - for subscription in game.part_of_subscription_offer { - if subscription.to_lowercase().contains("premium") { - owned_game.add_subscription(GameSubscription::UbisoftPremium); - } - if subscription.to_lowercase().contains("classics") { - owned_game.add_subscription(GameSubscription::UbisoftClassics); - } - } - - owned_callback(owned_game); - } - - Ok(()) - } -} diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index 3266ed5f..f9d7e7c9 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -1,8 +1,7 @@ -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use log::error; use rai_pal_proc_macros::serializable_struct; -use serde::{Deserialize, Serialize}; #[cfg(target_os = "windows")] use winreg::{ enums::{HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE}, @@ -10,7 +9,6 @@ use winreg::{ }; use crate::{ - game_subscription::GameSubscription, installed_game::InstalledGame, owned_game::OwnedGame, paths::file_name_without_extension, @@ -18,8 +16,6 @@ use crate::{ result::Result, }; -use super::provider_command::{ProviderCommand, ProviderCommandAction}; - #[derive(Clone)] pub struct Xbox {} @@ -43,17 +39,6 @@ struct XboxGamepassGame { store_page: String, } -impl XboxGamepassGame { - fn get_release_date(&self) -> Option { - Some( - self.release_date - .parse::>() - .ok()? - .timestamp(), - ) - } -} - #[derive(serde::Serialize, serde::Deserialize, specta::Type, Clone, Debug)] #[serde(rename_all = "PascalCase")] struct XboxGamepassImages { @@ -65,7 +50,7 @@ impl ProviderActions for Xbox { async fn get_games( &self, mut installed_callback: TInstalledCallback, - mut owned_callback: TOwnedCallback, + mut _owned_callback: TOwnedCallback, ) -> Result where TInstalledCallback: FnMut(InstalledGame) + Send + Sync, @@ -138,48 +123,6 @@ impl ProviderActions for Xbox { } } - let json_path = - Path::new(env!("CARGO_MANIFEST_DIR")).join("../../test-data/xbox-gamepass-games.json"); - - let games: Vec = - serde_json::from_str(&std::fs::read_to_string(json_path)?)?; - - for game in games { - let mut owned_game = OwnedGame::new(&game.product_id, *Self::ID, &game.product_title); - - owned_game - .add_provider_command( - ProviderCommandAction::OpenInBrowser, - ProviderCommand::String(format!( - "https://www.microsoft.com/store/productId/{}", - game.product_id, - )), - ) - .add_provider_command( - ProviderCommandAction::ShowInStore, - ProviderCommand::String(format!( - "msxbox://game/?productId={}", - game.product_id, - )), - ); - - if let Some(release_date) = game.get_release_date() { - owned_game.set_release_date(release_date); - } - - if let Some(image_url) = game - .images - .and_then(|images| images.logo.or(images.box_art)) - .and_then(|image_urls| image_urls.first().cloned()) - { - owned_game.set_thumbnail_url(&image_url); - } - - owned_game.add_subscription(GameSubscription::XboxGamePass); - - owned_callback(owned_game); - } - Ok(()) } } diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index b98bf07d..2733a1d2 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -312,7 +312,7 @@ export type OwnedGame = { globalId: string; providerGameId: string; provider: Pr export type ProviderCommand = { String: string } | { Path: [string, string[]] } export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } -export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" | "Ubisoft" +export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" export type RemoteGame = { title: string | null; engines: GameEngine[] | null; ids: { [key in IdKind]: string[] }; subscriptions: GameSubscription[] | null } export type RemoteMod = { common: CommonModData; data: RemoteModData } export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } diff --git a/frontend/components/badges/color-coded-badge.tsx b/frontend/components/badges/color-coded-badge.tsx index 9fb11792..57617e3b 100644 --- a/frontend/components/badges/color-coded-badge.tsx +++ b/frontend/components/badges/color-coded-badge.tsx @@ -95,7 +95,7 @@ export const ProviderBadge = CreateColorCodedBadge( Gog: "violet", Xbox: "green", Itch: "teal", - Ubisoft: "grape", + // Ubisoft: "grape", }, providerFilterOptions, ); diff --git a/frontend/components/owned-games/owned-games-columns.tsx b/frontend/components/owned-games/owned-games-columns.tsx index e428db4d..55b449ea 100644 --- a/frontend/components/owned-games/owned-games-columns.tsx +++ b/frontend/components/owned-games/owned-games-columns.tsx @@ -53,7 +53,7 @@ const provider: TableColumnBase = { getSortValue: (game) => game.provider, filter: (game, hiddenValues) => hiddenValues.includes(game.provider), filterOptions: providerFilterOptions, - unavailableValues: ["Manual"], + unavailableValues: ["Xbox", "Manual"], renderCell: (game) => ( diff --git a/frontend/components/owned-games/owned-games-page.tsx b/frontend/components/owned-games/owned-games-page.tsx index 715a07b4..3ad2c8fe 100644 --- a/frontend/components/owned-games/owned-games-page.tsx +++ b/frontend/components/owned-games/owned-games-page.tsx @@ -15,7 +15,6 @@ import { useProcessedOwnedGames, } from "@hooks/use-processed-owned-games"; import { FilterSelect } from "@components/filters/filter-select"; -import { SubscriptionsSelector } from "./subscriptions-selector"; const defaultFilter: Record = {}; @@ -90,7 +89,8 @@ export function OwnedGamesPage() { ) : null} - + {/* TODO: add subscriptions selector once we figure out the database stuff */} + {/* */} = { - EaPlay: "EA Play", - XboxGamePass: "Xbox Game Pass (PC)", - UbisoftClassics: "Ubisoft Classics", - UbisoftPremium: "Ubisoft Premium", -} as const; +// import { GameSubscription } from "@api/bindings"; +// import { FilterButton } from "@components/filters/filter-button"; +// import { Indicator, Button, Popover, Stack, Text } from "@mantine/core"; +// import { IconCash } from "@tabler/icons-react"; -export function SubscriptionsSelector() { - const [ownedSubscriptions, toggleSubscription] = useOwnedSubscriptions(); +// const subscriptions: Record = { +// EaPlay: "EA Play", +// XboxGamePass: "Xbox Game Pass (PC)", +// UbisoftClassics: "Ubisoft Classics", +// UbisoftPremium: "Ubisoft Premium", +// } as const; - return ( - - - - - - - - - - Select the subscriptions you have. The games included in those - subscriptions will be considered as owned in Rai Pal. - - {Object.entries(subscriptions).map(([subscriptionId, subscriptionTitle]) => ( - - ))} - - - - - - ); -} +// export function SubscriptionsSelector() { +// return ( +// +// +// +// +// +// +// +// +// +// Select the subscriptions you have. The games included in those +// subscriptions will be considered as owned in Rai Pal. +// +// {Object.entries(subscriptions).map(([subscriptionId, subscriptionTitle]) => ( +// +// ))} +// +// +// +// +// +// ); +// } diff --git a/frontend/components/providers/provider-icon.tsx b/frontend/components/providers/provider-icon.tsx index 968dced3..a1bffc6b 100644 --- a/frontend/components/providers/provider-icon.tsx +++ b/frontend/components/providers/provider-icon.tsx @@ -7,7 +7,6 @@ import { IconCircleLetterG, IconBrandXbox, IconBrandItch, - IconCircleLetterUFilled, } from "@tabler/icons-react"; type Props = { @@ -21,7 +20,7 @@ const providerIcons: Record = { Gog: IconCircleLetterG, Xbox: IconBrandXbox, Itch: IconBrandItch, - Ubisoft: IconCircleLetterUFilled, + // Ubisoft: IconCircleLetterUFilled, }; export function ProviderIcon(props: Props) { diff --git a/frontend/hooks/use-owned-subscriptions.ts b/frontend/hooks/use-owned-subscriptions.ts deleted file mode 100644 index 40b3a5d2..00000000 --- a/frontend/hooks/use-owned-subscriptions.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { GameSubscription } from "@api/bindings"; -import { usePersistedState } from "./use-persisted-state"; -import { useCallback } from "react"; - -// TODO: this can't be like this, gotta send owned subs to backend. -export function useOwnedSubscriptions() { - const [gameSubscriptionMap, setOwnedSubscriptions] = usePersistedState< - Partial> - >({}, "owned-game-subscriptions"); - - const toggleSubscription = useCallback( - (subscription: GameSubscription | null) => { - if (!subscription) return; - - setOwnedSubscriptions((prev) => ({ - ...prev, - [subscription]: !prev[subscription], - })); - }, - [setOwnedSubscriptions], - ); - - return [gameSubscriptionMap, toggleSubscription] as const; -} diff --git a/frontend/util/common-filter-options.ts b/frontend/util/common-filter-options.ts index 4159e185..e26f768e 100644 --- a/frontend/util/common-filter-options.ts +++ b/frontend/util/common-filter-options.ts @@ -14,6 +14,5 @@ export const providerFilterOptions: FilterOption[] = [ { label: "GOG", value: "Gog" }, { label: "Xbox", value: "Xbox" }, { label: "Itch", value: "Itch" }, - { label: "Ubisoft", value: "Ubisoft" }, { label: "Manual", value: "Manual" }, ]; From b47e6ddbdf62d1c881bc5731c249030421b4cc2c Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 2 Sep 2024 18:32:21 +0200 Subject: [PATCH 228/255] fix publish script for tauri 2 and npm hehe --- .github/workflows/release.yml | 2 +- .vscode/settings.json | 3 +++ publish.ps1 | 6 +++--- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 515e9960..752520fd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: - name: Release uses: softprops/action-gh-release@v1 with: - draft: false + draft: true name: Rai Pal ${{ steps.build.outputs.version }} tag_name: v${{ steps.build.outputs.version }} body: "${{ github.event.pull_request.body }}\n\n[![Download Rai Pal for Windows](https://shields.io/badge/-Download_Rai_Pal_for_Windows-8A2BE2?style=for-the-badge&logo=windows&logoColor=white)](https://github.com/Raicuparta/rai-pal/releases/latest/download/RaiPal.msi)" diff --git a/.vscode/settings.json b/.vscode/settings.json index 8d996c40..dc71a2f6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,6 +11,7 @@ "Clippy", "compatdata", "ctypes", + "dtolnay", "epicgames", "flashbang", "frontends", @@ -45,10 +46,12 @@ "runas", "rusqlite", "shellapi", + "softprops", "specta", "subchild", "subkey", "substr", + "Swatinem", "SYSTEMMODAL", "tabler", "tauri", diff --git a/publish.ps1 b/publish.ps1 index 0afde18b..6bf5d098 100644 --- a/publish.ps1 +++ b/publish.ps1 @@ -15,10 +15,10 @@ function CheckEnvVar { } } -CheckEnvVar -Var "TAURI_PRIVATE_KEY" -CheckEnvVar -Var "TAURI_KEY_PASSWORD" +CheckEnvVar -Var "TAURI_SIGNING_PRIVATE_KEY" +CheckEnvVar -Var "TAURI_SIGNING_PRIVATE_KEY_PASSWORD" -npm build +npm run build $msiFolder = "./backend/target/release/bundle/msi" From 80629d1250394a45f52d899f3d3a453828c6edff Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 2 Sep 2024 19:48:18 +0200 Subject: [PATCH 229/255] manually create cache in backend instead of using tauri store plugin --- backend/Cargo.lock | 16 --- backend/Cargo.toml | 1 - backend/capabilities/main.json | 31 ++--- backend/gen/schemas/acl-manifests.json | 2 +- backend/gen/schemas/capabilities.json | 2 +- backend/gen/schemas/desktop-schema.json | 175 ------------------------ backend/gen/schemas/windows-schema.json | 175 ------------------------ backend/src/app_cache.rs | 59 +++----- backend/src/main.rs | 9 +- backend/src/result.rs | 12 +- frontend/api/bindings.ts | 2 +- 11 files changed, 47 insertions(+), 437 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index de7e4667..3db7c176 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3352,7 +3352,6 @@ dependencies = [ "tauri-build", "tauri-plugin-dialog", "tauri-plugin-log", - "tauri-plugin-store", "tauri-plugin-updater", "tauri-plugin-window-state", "tauri-runtime", @@ -4665,21 +4664,6 @@ dependencies = [ "time", ] -[[package]] -name = "tauri-plugin-store" -version = "2.0.0-rc.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a728d696695856a5c1478e1701fbeb74c7ffaa7d6455de8154e33abd8b649db" -dependencies = [ - "dunce", - "log", - "serde", - "serde_json", - "tauri", - "tauri-plugin", - "thiserror", -] - [[package]] name = "tauri-plugin-updater" version = "2.0.0-rc.0" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 6b41db7e..708ef2d2 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -32,7 +32,6 @@ specta-typescript = "0.0.7" tauri = { version = "2.0.0-rc.0", features = [] } tauri-plugin-dialog = "2.0.0-rc.0" tauri-plugin-log = "2.0.0-rc.0" -tauri-plugin-store = "2.0.0-rc.0" tauri-plugin-updater = "2.0.0-rc.0" tauri-plugin-window-state = "2.0.0-rc.0" tauri-runtime = "2.0.0-rc.0" diff --git a/backend/capabilities/main.json b/backend/capabilities/main.json index 802b2b67..0b9507f6 100644 --- a/backend/capabilities/main.json +++ b/backend/capabilities/main.json @@ -1,19 +1,16 @@ { - "$schema": "../gen/schemas/desktop-schema.json", - "identifier": "main-capabilities", - "local": true, - "windows": [ - "main" - ], - "permissions": [ - "core:path:default", - "core:event:default", - "core:window:default", - "core:app:default", - "core:resources:default", - "dialog:allow-open", - "dialog:allow-ask", - "updater:allow-check", - "store:default" - ] + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "main-capabilities", + "local": true, + "windows": ["main"], + "permissions": [ + "core:path:default", + "core:event:default", + "core:window:default", + "core:app:default", + "core:resources:default", + "dialog:allow-open", + "dialog:allow-ask", + "updater:allow-check" + ] } diff --git a/backend/gen/schemas/acl-manifests.json b/backend/gen/schemas/acl-manifests.json index 81cb9d3d..a8cc8693 100644 --- a/backend/gen/schemas/acl-manifests.json +++ b/backend/gen/schemas/acl-manifests.json @@ -1 +1 @@ -{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"store":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-clear","allow-delete","allow-entries","allow-get","allow-has","allow-keys","allow-length","allow-load","allow-reset","allow-save","allow-set","allow-values"]},"permissions":{"allow-clear":{"identifier":"allow-clear","description":"Enables the clear command without any pre-configured scope.","commands":{"allow":["clear"],"deny":[]}},"allow-delete":{"identifier":"allow-delete","description":"Enables the delete command without any pre-configured scope.","commands":{"allow":["delete"],"deny":[]}},"allow-entries":{"identifier":"allow-entries","description":"Enables the entries command without any pre-configured scope.","commands":{"allow":["entries"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-has":{"identifier":"allow-has","description":"Enables the has command without any pre-configured scope.","commands":{"allow":["has"],"deny":[]}},"allow-keys":{"identifier":"allow-keys","description":"Enables the keys command without any pre-configured scope.","commands":{"allow":["keys"],"deny":[]}},"allow-length":{"identifier":"allow-length","description":"Enables the length command without any pre-configured scope.","commands":{"allow":["length"],"deny":[]}},"allow-load":{"identifier":"allow-load","description":"Enables the load command without any pre-configured scope.","commands":{"allow":["load"],"deny":[]}},"allow-reset":{"identifier":"allow-reset","description":"Enables the reset command without any pre-configured scope.","commands":{"allow":["reset"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"allow-set":{"identifier":"allow-set","description":"Enables the set command without any pre-configured scope.","commands":{"allow":["set"],"deny":[]}},"allow-values":{"identifier":"allow-values","description":"Enables the values command without any pre-configured scope.","commands":{"allow":["values"],"deny":[]}},"deny-clear":{"identifier":"deny-clear","description":"Denies the clear command without any pre-configured scope.","commands":{"allow":[],"deny":["clear"]}},"deny-delete":{"identifier":"deny-delete","description":"Denies the delete command without any pre-configured scope.","commands":{"allow":[],"deny":["delete"]}},"deny-entries":{"identifier":"deny-entries","description":"Denies the entries command without any pre-configured scope.","commands":{"allow":[],"deny":["entries"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-has":{"identifier":"deny-has","description":"Denies the has command without any pre-configured scope.","commands":{"allow":[],"deny":["has"]}},"deny-keys":{"identifier":"deny-keys","description":"Denies the keys command without any pre-configured scope.","commands":{"allow":[],"deny":["keys"]}},"deny-length":{"identifier":"deny-length","description":"Denies the length command without any pre-configured scope.","commands":{"allow":[],"deny":["length"]}},"deny-load":{"identifier":"deny-load","description":"Denies the load command without any pre-configured scope.","commands":{"allow":[],"deny":["load"]}},"deny-reset":{"identifier":"deny-reset","description":"Denies the reset command without any pre-configured scope.","commands":{"allow":[],"deny":["reset"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}},"deny-set":{"identifier":"deny-set","description":"Denies the set command without any pre-configured scope.","commands":{"allow":[],"deny":["set"]}},"deny-values":{"identifier":"deny-values","description":"Denies the values command without any pre-configured scope.","commands":{"allow":[],"deny":["values"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file +{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/backend/gen/schemas/capabilities.json b/backend/gen/schemas/capabilities.json index d09e6be8..7c46b0fd 100644 --- a/backend/gen/schemas/capabilities.json +++ b/backend/gen/schemas/capabilities.json @@ -1 +1 @@ -{"main-capabilities":{"identifier":"main-capabilities","description":"","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","dialog:allow-open","dialog:allow-ask","updater:allow-check","store:default"]}} \ No newline at end of file +{"main-capabilities":{"identifier":"main-capabilities","description":"","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","dialog:allow-open","dialog:allow-ask","updater:allow-check"]}} \ No newline at end of file diff --git a/backend/gen/schemas/desktop-schema.json b/backend/gen/schemas/desktop-schema.json index 2a80568d..c29c3555 100644 --- a/backend/gen/schemas/desktop-schema.json +++ b/backend/gen/schemas/desktop-schema.json @@ -2208,181 +2208,6 @@ "log:deny-log" ] }, - { - "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "enum": [ - "store:default" - ] - }, - { - "description": "store:allow-clear -> Enables the clear command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-clear" - ] - }, - { - "description": "store:allow-delete -> Enables the delete command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-delete" - ] - }, - { - "description": "store:allow-entries -> Enables the entries command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-entries" - ] - }, - { - "description": "store:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-get" - ] - }, - { - "description": "store:allow-has -> Enables the has command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-has" - ] - }, - { - "description": "store:allow-keys -> Enables the keys command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-keys" - ] - }, - { - "description": "store:allow-length -> Enables the length command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-length" - ] - }, - { - "description": "store:allow-load -> Enables the load command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-load" - ] - }, - { - "description": "store:allow-reset -> Enables the reset command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-reset" - ] - }, - { - "description": "store:allow-save -> Enables the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-save" - ] - }, - { - "description": "store:allow-set -> Enables the set command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-set" - ] - }, - { - "description": "store:allow-values -> Enables the values command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-values" - ] - }, - { - "description": "store:deny-clear -> Denies the clear command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-clear" - ] - }, - { - "description": "store:deny-delete -> Denies the delete command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-delete" - ] - }, - { - "description": "store:deny-entries -> Denies the entries command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-entries" - ] - }, - { - "description": "store:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-get" - ] - }, - { - "description": "store:deny-has -> Denies the has command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-has" - ] - }, - { - "description": "store:deny-keys -> Denies the keys command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-keys" - ] - }, - { - "description": "store:deny-length -> Denies the length command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-length" - ] - }, - { - "description": "store:deny-load -> Denies the load command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-load" - ] - }, - { - "description": "store:deny-reset -> Denies the reset command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-reset" - ] - }, - { - "description": "store:deny-save -> Denies the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-save" - ] - }, - { - "description": "store:deny-set -> Denies the set command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-set" - ] - }, - { - "description": "store:deny-values -> Denies the values command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-values" - ] - }, { "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", "type": "string", diff --git a/backend/gen/schemas/windows-schema.json b/backend/gen/schemas/windows-schema.json index 2a80568d..c29c3555 100644 --- a/backend/gen/schemas/windows-schema.json +++ b/backend/gen/schemas/windows-schema.json @@ -2208,181 +2208,6 @@ "log:deny-log" ] }, - { - "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "enum": [ - "store:default" - ] - }, - { - "description": "store:allow-clear -> Enables the clear command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-clear" - ] - }, - { - "description": "store:allow-delete -> Enables the delete command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-delete" - ] - }, - { - "description": "store:allow-entries -> Enables the entries command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-entries" - ] - }, - { - "description": "store:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-get" - ] - }, - { - "description": "store:allow-has -> Enables the has command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-has" - ] - }, - { - "description": "store:allow-keys -> Enables the keys command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-keys" - ] - }, - { - "description": "store:allow-length -> Enables the length command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-length" - ] - }, - { - "description": "store:allow-load -> Enables the load command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-load" - ] - }, - { - "description": "store:allow-reset -> Enables the reset command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-reset" - ] - }, - { - "description": "store:allow-save -> Enables the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-save" - ] - }, - { - "description": "store:allow-set -> Enables the set command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-set" - ] - }, - { - "description": "store:allow-values -> Enables the values command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-values" - ] - }, - { - "description": "store:deny-clear -> Denies the clear command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-clear" - ] - }, - { - "description": "store:deny-delete -> Denies the delete command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-delete" - ] - }, - { - "description": "store:deny-entries -> Denies the entries command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-entries" - ] - }, - { - "description": "store:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-get" - ] - }, - { - "description": "store:deny-has -> Denies the has command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-has" - ] - }, - { - "description": "store:deny-keys -> Denies the keys command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-keys" - ] - }, - { - "description": "store:deny-length -> Denies the length command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-length" - ] - }, - { - "description": "store:deny-load -> Denies the load command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-load" - ] - }, - { - "description": "store:deny-reset -> Denies the reset command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-reset" - ] - }, - { - "description": "store:deny-save -> Denies the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-save" - ] - }, - { - "description": "store:deny-set -> Denies the set command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-set" - ] - }, - { - "description": "store:deny-values -> Denies the values command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-values" - ] - }, { "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", "type": "string", diff --git a/backend/src/app_cache.rs b/backend/src/app_cache.rs index 4d3af049..86ebf8b0 100644 --- a/backend/src/app_cache.rs +++ b/backend/src/app_cache.rs @@ -4,12 +4,10 @@ use crate::result::Result; use rai_pal_core::{ installed_game::InstalledGame, owned_game::OwnedGame, + paths, providers::provider::{self, ProviderId}, }; use rai_pal_proc_macros::serializable_struct; -use serde_json::json; -use tauri::{AppHandle, Manager, Wry}; -use tauri_plugin_store::{with_store, StoreCollection}; #[serializable_struct] pub struct ProviderData { @@ -27,7 +25,10 @@ impl ProviderCache { const CACHE_FOLDER: &'static str = "cache"; pub fn new(id: ProviderId) -> Result { - let path = PathBuf::from(Self::CACHE_FOLDER).join("providers").join(id.to_string()); + let path = paths::app_data_path()? + .join(Self::CACHE_FOLDER) + .join("providers") + .join(id.to_string()); fs::create_dir_all(&path)?; Ok(Self { path, @@ -38,35 +39,17 @@ impl ProviderCache { }) } - pub fn load(&mut self, handle: &AppHandle) -> Result { - let stores = handle.state::>(); - - let mut cache_data = ProviderData { - installed_games: HashMap::new(), - owned_games: HashMap::new(), - }; - - with_store(handle.clone(), stores, self.path.clone(), |store| { - if let Some(data) = store.get(Self::DATA_KEY) { - cache_data = serde_json::from_value(data.clone())?; - } - - Ok(()) - })?; - - self.data = cache_data; + pub fn load(&mut self) -> Result { + self.data = serde_json::from_str(&fs::read_to_string(self.path.join(Self::DATA_KEY))?)?; Ok(()) } - pub fn save(&self, handle: &AppHandle) -> Result { - let stores = handle.state::>(); - - with_store(handle.clone(), stores, self.path.clone(), |store| { - store.insert(Self::DATA_KEY.to_string(), json!(self.data))?; - store.save()?; - Ok(()) - })?; + pub fn save(&self) -> Result { + fs::write( + self.path.join(Self::DATA_KEY), + serde_json::to_string(&self.data)?, + )?; Ok(()) } @@ -76,21 +59,19 @@ impl ProviderCache { self } - pub fn clear(&self, handle: &AppHandle) -> Result { - let stores = handle.state::>(); - - with_store(handle.clone(), stores, self.path.clone(), |store| { - store.clear()?; - store.save()?; + pub fn clear(&mut self) -> Result { + fs::remove_dir_all(&self.path)?; + self.data = ProviderData { + installed_games: HashMap::new(), + owned_games: HashMap::new(), + }; - Ok(()) - })?; Ok(()) } - pub fn clear_all(handle: &AppHandle) -> Result { + pub fn clear_all() -> Result { for provider_id in provider::get_provider_ids() { - Self::new(provider_id)?.clear(handle)?; + Self::new(provider_id)?.clear()?; } Ok(()) diff --git a/backend/src/main.rs b/backend/src/main.rs index 5f270c25..ff2d30df 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -423,7 +423,7 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul let mut owned_games = HashMap::::new(); let mut owned_games_without_cache = HashMap::::new(); - if let Err(err) = cache.load(&handle) { + if let Err(err) = cache.load() { log::warn!("Failed to load cache for provider {provider_id}: {err}"); } else { installed_games = cache.data.installed_games.clone(); @@ -457,7 +457,7 @@ async fn get_provider_games(handle: AppHandle, provider_id: ProviderId) -> Resul installed_games: installed_games_without_cache.clone(), owned_games: owned_games_without_cache.clone(), }) - .save(&handle)?; + .save()?; Ok(()) } @@ -567,8 +567,8 @@ async fn get_provider_data(handle: AppHandle, provider_id: ProviderId) -> Result #[tauri::command] #[specta::specta] -async fn clear_cache(handle: AppHandle) -> Result { - ProviderCache::clear_all(&handle) +async fn clear_cache() -> Result { + ProviderCache::clear_all() } fn main() { @@ -630,7 +630,6 @@ fn main() { }); tauri::Builder::default() - .plugin(tauri_plugin_store::Builder::new().build()) .plugin( tauri_plugin_window_state::Builder::default() .with_state_flags(StateFlags::POSITION | StateFlags::SIZE) diff --git a/backend/src/result.rs b/backend/src/result.rs index 2631ccd5..39207e9e 100644 --- a/backend/src/result.rs +++ b/backend/src/result.rs @@ -10,24 +10,24 @@ pub enum Error { ), #[error(transparent)] - TauriPluginStore( + Io( #[serde(skip)] #[from] - tauri_plugin_store::Error, + std::io::Error, ), #[error(transparent)] - Io( + Core( #[serde(skip)] #[from] - std::io::Error, + rai_pal_core::result::Error, ), #[error(transparent)] - Core( + SerdeJson( #[serde(skip)] #[from] - rai_pal_core::result::Error, + serde_json::error::Error, ), #[error("Failed to get app resources path: `{0}`")] diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 2733a1d2..a8507516 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -290,7 +290,7 @@ export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type Error = "Tauri" | "TauriPluginStore" | "Io" | "Core" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } +export type Error = "Tauri" | "Io" | "Core" | "SerdeJson" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } export type ErrorRaised = string export type ExecutedProviderCommand = null export type FoundInstalledGame = [] From e57168b17bdf3f901fb77cfaed14f59640edbfe6 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 11:44:08 +0200 Subject: [PATCH 230/255] use provider cache files instead of folders, prevent read errors for non existing --- backend/src/app_cache.rs | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/backend/src/app_cache.rs b/backend/src/app_cache.rs index 86ebf8b0..c3940f80 100644 --- a/backend/src/app_cache.rs +++ b/backend/src/app_cache.rs @@ -21,17 +21,17 @@ pub struct ProviderCache { } impl ProviderCache { - const DATA_KEY: &'static str = "data"; const CACHE_FOLDER: &'static str = "cache"; pub fn new(id: ProviderId) -> Result { - let path = paths::app_data_path()? + let folder_path = paths::app_data_path()? .join(Self::CACHE_FOLDER) - .join("providers") - .join(id.to_string()); - fs::create_dir_all(&path)?; + .join("providers"); + + fs::create_dir_all(&folder_path)?; + Ok(Self { - path, + path: folder_path.join(id.to_string()), data: ProviderData { installed_games: HashMap::new(), owned_games: HashMap::new(), @@ -40,16 +40,21 @@ impl ProviderCache { } pub fn load(&mut self) -> Result { - self.data = serde_json::from_str(&fs::read_to_string(self.path.join(Self::DATA_KEY))?)?; + if !self.path.is_file() { + return Ok(()); + } + + self.data = serde_json::from_str(&fs::read_to_string(&self.path)?)?; Ok(()) } pub fn save(&self) -> Result { - fs::write( - self.path.join(Self::DATA_KEY), - serde_json::to_string(&self.data)?, - )?; + if self.path.is_dir() { + fs::remove_dir_all(&self.path)? + } + + fs::write(&self.path, serde_json::to_string(&self.data)?)?; Ok(()) } @@ -60,7 +65,7 @@ impl ProviderCache { } pub fn clear(&mut self) -> Result { - fs::remove_dir_all(&self.path)?; + fs::remove_file(&self.path)?; self.data = ProviderData { installed_games: HashMap::new(), owned_games: HashMap::new(), From eff22672332015a55a6ac95a0d0ecb0dcbaec250 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 11:49:43 +0200 Subject: [PATCH 231/255] prevent error when itch app not installed --- .../src/providers/itch_provider.rs | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/backend/rai-pal-core/src/providers/itch_provider.rs b/backend/rai-pal-core/src/providers/itch_provider.rs index 41e4d8e6..6ecb5257 100644 --- a/backend/rai-pal-core/src/providers/itch_provider.rs +++ b/backend/rai-pal-core/src/providers/itch_provider.rs @@ -115,16 +115,20 @@ impl ProviderActions for Itch { .config_dir() .join("itch"); - let database = get_database(&app_data_path)?; - - for db_entry in database.games { - owned_callback(Self::get_owned_game(&db_entry)); - } + if let Some(database) = get_database(&app_data_path)? { + for db_entry in database.games { + owned_callback(Self::get_owned_game(&db_entry)); + } - for db_entry in database.caves { - if let Some(installed_game) = Self::get_installed_game(&db_entry) { - installed_callback(installed_game); + for db_entry in database.caves { + if let Some(installed_game) = Self::get_installed_game(&db_entry) { + installed_callback(installed_game); + } } + } else { + log::info!( + "Itch database file not found. Probably means user hasn't installed the Itch app." + ); } Ok(()) @@ -142,8 +146,13 @@ fn parse_verdict(json_option: &Option) -> Option { } } -fn get_database(app_data_path: &Path) -> Result { +fn get_database(app_data_path: &Path) -> Result> { let db_path = app_data_path.join("db").join("butler.db"); + + if !db_path.is_file() { + return Ok(None); + } + let connection = Connection::open_with_flags(db_path, OpenFlags::SQLITE_OPEN_READ_ONLY)?; let mut caves_statement = connection.prepare( @@ -183,7 +192,7 @@ fn get_database(app_data_path: &Path) -> Result { }) })?; - Ok(ItchDatabase { + Ok(Some(ItchDatabase { games: game_rows .filter_map(|row| match row { Ok(game) => Some(game), @@ -202,5 +211,5 @@ fn get_database(app_data_path: &Path) -> Result { } }) .collect(), - }) + })) } From 9d911f41123fcf4ad0fa58947bc24ab8cbf4195e Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 11:55:43 +0200 Subject: [PATCH 232/255] prevent error when GOG not installed --- .../src/providers/gog_provider.rs | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/backend/rai-pal-core/src/providers/gog_provider.rs b/backend/rai-pal-core/src/providers/gog_provider.rs index 7e0a1227..e3810d55 100644 --- a/backend/rai-pal-core/src/providers/gog_provider.rs +++ b/backend/rai-pal-core/src/providers/gog_provider.rs @@ -102,14 +102,19 @@ impl ProviderActions for Gog { TInstalledCallback: FnMut(InstalledGame) + Send + Sync, TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { - let database = get_database()?; - let launcher_path = get_launcher_path()?; - - for db_entry in database { - owned_callback(Self::get_owned_game(&db_entry, &launcher_path)); - if let Some(installed_game) = Self::get_installed_game(&db_entry, &launcher_path) { - installed_callback(installed_game); + if let Some(database) = get_database()? { + let launcher_path = get_launcher_path()?; + + for db_entry in database { + owned_callback(Self::get_owned_game(&db_entry, &launcher_path)); + if let Some(installed_game) = Self::get_installed_game(&db_entry, &launcher_path) { + installed_callback(installed_game); + } } + } else { + log::info!( + "GOG database file not found. Probably means user hasn't installed GOG Galaxy." + ); } Ok(()) @@ -129,10 +134,14 @@ pub struct GogDbEntryMeta { release_date: Option, } -fn get_database() -> Result> { +fn get_database() -> Result>> { let program_data = paths::try_get_program_data_path(); let database_path = program_data.join("GOG.com/Galaxy/storage/galaxy-2.0.db"); + if !database_path.is_file() { + return Ok(None); + } + let connection = Connection::open_with_flags(database_path, OpenFlags::SQLITE_OPEN_READ_ONLY)?; let mut statement = connection.prepare( @@ -183,7 +192,7 @@ GROUP BY }) .collect(); - Ok(rows) + Ok(Some(rows)) } fn try_parse_json(json: &str) -> Option From 016c462797ae9b5002e9d68ca1ce20e7560ab61a Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 12:04:33 +0200 Subject: [PATCH 233/255] prevent errors when epic not installed --- .../src/providers/epic_provider.rs | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/backend/rai-pal-core/src/providers/epic_provider.rs b/backend/rai-pal-core/src/providers/epic_provider.rs index 9e7636d2..2a0c709f 100644 --- a/backend/rai-pal-core/src/providers/epic_provider.rs +++ b/backend/rai-pal-core/src/providers/epic_provider.rs @@ -190,26 +190,36 @@ impl ProviderActions for Epic { .and_then(|launcher_reg| launcher_reg.get_value::("AppDataPath")) .map(PathBuf::from)?; - let mut file = File::open(app_data_path.join("Catalog").join("catcache.bin"))?; - - let mut decoder = base64::read::DecoderReader::new(&mut file, &general_purpose::STANDARD); - let mut json = String::default(); - decoder.read_to_string(&mut json)?; - - let catalog = serde_json::from_str::>(&json)?; - - let manifest_paths = glob_path(&app_data_path.join("Manifests").join("*.item")); - - for manifest_path in manifest_paths { - if let Some(installed_game) = Self::get_installed_game(&manifest_path) { - installed_callback(installed_game); + let manifests_path = app_data_path.join("Manifests"); + if manifests_path.is_dir() { + let manifest_paths = glob_path(&manifests_path.join("*.item")); + for manifest_path in manifest_paths { + if let Some(installed_game) = Self::get_installed_game(&manifest_path) { + installed_callback(installed_game); + } } + } else { + log::info!("Epic Games Launcher manifests folder not found. Probably means Epic Games Launcher isn't installed, or maybe user hasn't installed any games dunno."); } - for catalog_item in catalog { - if let Some(owned_game) = Self::get_owned_game(&catalog_item) { - owned_callback(owned_game); + let catalog_path = app_data_path.join("Catalog").join("catcache.bin"); + if catalog_path.is_file() { + let mut catalog_cache_file = File::open(catalog_path)?; + let mut decoder = base64::read::DecoderReader::new( + &mut catalog_cache_file, + &general_purpose::STANDARD, + ); + let mut json = String::default(); + decoder.read_to_string(&mut json)?; + + let catalog = serde_json::from_str::>(&json)?; + for catalog_item in catalog { + if let Some(owned_game) = Self::get_owned_game(&catalog_item) { + owned_callback(owned_game); + } } + } else { + log::info!("Epic Games Launcher catalog cache file not found. Probably means user hasn't installed Epic Games Launcher, or the cache file hasn't been created yet."); } Ok(()) From 5067c9a8f9be68d38ad206e53433d0d21474e218 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 12:57:03 +0200 Subject: [PATCH 234/255] fix error on xbox not found --- .../src/providers/xbox_provider.rs | 122 ++++++++++-------- 1 file changed, 70 insertions(+), 52 deletions(-) diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/rai-pal-core/src/providers/xbox_provider.rs index f9d7e7c9..d142d096 100644 --- a/backend/rai-pal-core/src/providers/xbox_provider.rs +++ b/backend/rai-pal-core/src/providers/xbox_provider.rs @@ -1,4 +1,4 @@ -use std::path::PathBuf; +use std::{io, path::PathBuf}; use log::error; use rai_pal_proc_macros::serializable_struct; @@ -56,61 +56,79 @@ impl ProviderActions for Xbox { TInstalledCallback: FnMut(InstalledGame) + Send + Sync, TOwnedCallback: FnMut(OwnedGame) + Send + Sync, { - #[cfg(target_os = "windows")] - { - let gaming_services = RegKey::predef(HKEY_LOCAL_MACHINE) - .open_subkey("SOFTWARE\\Microsoft\\GamingServices")?; - let package_roots = gaming_services.open_subkey("PackageRepository\\Root")?; - let game_configs = gaming_services.open_subkey("GameConfig")?; - let app_packages = RegKey::predef(HKEY_CURRENT_USER).open_subkey("Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppModel\\Repository\\Packages")?; + if let Err(error) = find_installed_games(&mut installed_callback) { + if error.kind() == std::io::ErrorKind::NotFound { + log::info!("Failed to find installed Xbox PC games. This probably means the Xbox PC app isn't installed, or there are no Windows Store games or something. Error: {}", error); + return Ok(()); + } + } + + Ok(()) + } +} - for key in package_roots.enum_keys().flatten() { - if let Ok(child) = package_roots.open_subkey(key) { - if let Some(Ok(subkey)) = child.enum_keys().nth(0) { - if let Ok(subchild) = child.open_subkey(subkey) { - if let Ok(package_id) = subchild.get_value::("Package") { - if let Ok(root_path) = subchild.get_value::("Root") { - if let Ok(executables) = game_configs - .open_subkey(format!("{package_id}\\Executable")) +fn find_installed_games( + mut installed_callback: TInstalledCallback, +) -> io::Result<()> +where + TInstalledCallback: FnMut(InstalledGame) + Send + Sync, +{ + #[cfg(target_os = "windows")] + { + let gaming_services = RegKey::predef(HKEY_LOCAL_MACHINE) + .open_subkey("SOFTWARE\\Microsoft\\GamingServices")?; + let package_roots = gaming_services.open_subkey("PackageRepository\\Root")?; + let game_configs = gaming_services.open_subkey("GameConfig")?; + let app_packages = RegKey::predef(HKEY_CURRENT_USER).open_subkey("Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppModel\\Repository\\Packages")?; + + for key in package_roots.enum_keys().flatten() { + if let Ok(child) = package_roots.open_subkey(key) { + if let Some(Ok(subkey)) = child.enum_keys().next() { + if let Ok(subchild) = child.open_subkey(subkey) { + if let Ok(package_id) = subchild.get_value::("Package") { + if let Ok(root_path) = subchild.get_value::("Root") { + if let Ok(executables) = + game_configs.open_subkey(format!("{package_id}\\Executable")) + { + if let Some(Ok(first_executable_key)) = + executables.enum_keys().next() { - if let Some(Ok(first_executable_key)) = - executables.enum_keys().nth(0) + if let Ok(first_executable) = + executables.open_subkey(first_executable_key) { - if let Ok(first_executable) = - executables.open_subkey(first_executable_key) + if let Ok(executable_name) = + first_executable.get_value::("Name") { - if let Ok(executable_name) = - first_executable.get_value::("Name") - { - let executable_path = PathBuf::from(root_path) - .join(executable_name); + let executable_path = + PathBuf::from(root_path).join(executable_name); - let display_name = app_packages - .open_subkey(&package_id) - .and_then(|package| { - package.get_value::( - "DisplayName", - ) - }) - .or_else(|error| { - error!("Failed to find display name for Xbox game: {}", error); - file_name_without_extension( - &executable_path, - ) - .map(ToString::to_string) - }) - .unwrap_or_else(|error| { - error!("Failed to get game name from exe path: {}", error); - "[Name Not Found]".to_string() - }); + let display_name = app_packages + .open_subkey(&package_id) + .and_then(|package| { + package + .get_value::("DisplayName") + }) + .or_else(|error| { + error!("Failed to find display name for Xbox game: {}", error); + file_name_without_extension( + &executable_path, + ) + .map(ToString::to_string) + }) + .unwrap_or_else(|error| { + error!( + "Failed to get game name from exe path: {}", + error + ); + "[Name Not Found]".to_string() + }); - if let Some(game) = InstalledGame::new( - &executable_path, - &display_name, - *Self::ID, - ) { - installed_callback(game.clone()); - } + if let Some(game) = InstalledGame::new( + &executable_path, + &display_name, + *Xbox::ID, + ) { + installed_callback(game.clone()); } } } @@ -122,7 +140,7 @@ impl ProviderActions for Xbox { } } } - - Ok(()) } + + Ok(()) } From d17881d34de498a37702fa376780274b37700d21 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 14:01:46 +0200 Subject: [PATCH 235/255] use "open" dependency only on rai-pal-core --- .vscode/settings.json | 1 + backend/Cargo.lock | 1 - backend/Cargo.toml | 2 -- backend/rai-pal-core/Cargo.toml | 2 +- backend/rai-pal-core/src/providers/mod.rs | 1 + .../src/providers/provider_cache.rs} | 4 ++-- backend/src/main.rs | 9 +++++---- backend/src/result.rs | 7 ------- 8 files changed, 10 insertions(+), 17 deletions(-) rename backend/{src/app_cache.rs => rai-pal-core/src/providers/provider_cache.rs} (96%) diff --git a/.vscode/settings.json b/.vscode/settings.json index dc71a2f6..27b17df1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -55,6 +55,7 @@ "SYSTEMMODAL", "tabler", "tauri", + "thiserror", "ubisoft", "uevr", "ureq", diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 3db7c176..2b8c7e22 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3341,7 +3341,6 @@ name = "rai-pal" version = "0.13.0" dependencies = [ "log", - "open", "rai-pal-core", "rai-pal-proc-macros", "serde", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 708ef2d2..0c614c8f 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -18,7 +18,6 @@ tauri-build = { version = "2.0.0-rc.0", features = [] } [workspace.dependencies] log = "0.4.20" -open = "5.0.0" rai-pal-core = { path = "./rai-pal-core" } rai-pal-proc-macros = { path = "./proc-macros" } serde = { version = "1.0", features = ["derive"] } @@ -37,7 +36,6 @@ tauri-plugin-window-state = "2.0.0-rc.0" tauri-runtime = "2.0.0-rc.0" log.workspace = true -open.workspace = true rai-pal-core.workspace = true rai-pal-proc-macros.workspace = true serde_json.workspace = true diff --git a/backend/rai-pal-core/Cargo.toml b/backend/rai-pal-core/Cargo.toml index d8551656..d7ce8872 100644 --- a/backend/rai-pal-core/Cargo.toml +++ b/backend/rai-pal-core/Cargo.toml @@ -7,7 +7,6 @@ edition.workspace = true [dependencies] log.workspace = true -open.workspace = true rai-pal-proc-macros.workspace = true serde_json.workspace = true serde.workspace = true @@ -32,6 +31,7 @@ serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } zip = { version = "2.1.6", default-features = false, features = ["deflate"] } +open = "5.0.0" [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3.9", features = ["winuser"] } diff --git a/backend/rai-pal-core/src/providers/mod.rs b/backend/rai-pal-core/src/providers/mod.rs index 7c69ccca..fafad441 100644 --- a/backend/rai-pal-core/src/providers/mod.rs +++ b/backend/rai-pal-core/src/providers/mod.rs @@ -3,6 +3,7 @@ pub mod gog_provider; pub mod itch_provider; pub mod manual_provider; pub mod provider; +pub mod provider_cache; pub mod provider_command; pub mod steam_provider; pub mod xbox_provider; diff --git a/backend/src/app_cache.rs b/backend/rai-pal-core/src/providers/provider_cache.rs similarity index 96% rename from backend/src/app_cache.rs rename to backend/rai-pal-core/src/providers/provider_cache.rs index c3940f80..cfc22b33 100644 --- a/backend/src/app_cache.rs +++ b/backend/rai-pal-core/src/providers/provider_cache.rs @@ -1,7 +1,7 @@ use std::{collections::HashMap, fs, path::PathBuf}; use crate::result::Result; -use rai_pal_core::{ +use crate::{ installed_game::InstalledGame, owned_game::OwnedGame, paths, @@ -51,7 +51,7 @@ impl ProviderCache { pub fn save(&self) -> Result { if self.path.is_dir() { - fs::remove_dir_all(&self.path)? + fs::remove_dir_all(&self.path)?; } fs::write(&self.path, serde_json::to_string(&self.data)?)?; diff --git a/backend/src/main.rs b/backend/src/main.rs index ff2d30df..bd35c48a 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -6,7 +6,6 @@ use std::{collections::HashMap, path::PathBuf, sync::Mutex}; use crate::result::{Error, Result}; -use app_cache::{ProviderCache, ProviderData}; use app_state::{AppState, DataValue, StateData, StatefulHandle}; use events::EventEmitter; use rai_pal_core::installed_game::InstalledGame; @@ -16,6 +15,7 @@ use rai_pal_core::mod_loaders::mod_loader::{self, ModLoaderActions}; use rai_pal_core::owned_game::OwnedGame; use rai_pal_core::paths::{self, normalize_path}; use rai_pal_core::providers::provider::ProviderId; +use rai_pal_core::providers::provider_cache::{ProviderCache, ProviderData}; use rai_pal_core::providers::{ manual_provider, provider::{self, ProviderActions}, @@ -32,7 +32,6 @@ use tauri_plugin_log::{Target, TargetKind}; use tauri_plugin_window_state::StateFlags; use tauri_specta::Builder; -mod app_cache; mod app_state; mod events; mod result; @@ -78,7 +77,8 @@ async fn open_game_mods_folder(installed_game: InstalledGame) -> Result { #[tauri::command] #[specta::specta] async fn open_mods_folder() -> Result { - Ok(open::that_detached(paths::installed_mods_path()?)?) + paths::open_folder_or_parent(&paths::installed_mods_path()?)?; + Ok(()) } #[tauri::command] @@ -568,7 +568,8 @@ async fn get_provider_data(handle: AppHandle, provider_id: ProviderId) -> Result #[tauri::command] #[specta::specta] async fn clear_cache() -> Result { - ProviderCache::clear_all() + ProviderCache::clear_all()?; + Ok(()) } fn main() { diff --git a/backend/src/result.rs b/backend/src/result.rs index 39207e9e..8c649ef7 100644 --- a/backend/src/result.rs +++ b/backend/src/result.rs @@ -9,13 +9,6 @@ pub enum Error { tauri::Error, ), - #[error(transparent)] - Io( - #[serde(skip)] - #[from] - std::io::Error, - ), - #[error(transparent)] Core( #[serde(skip)] From ea759a9c1dc18a210940de341fe790b4b8969b2d Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 14:45:16 +0200 Subject: [PATCH 236/255] update dependencies --- .vscode/settings.json | 2 + backend/Cargo.lock | 367 +++++++++++++++--------- backend/Cargo.toml | 26 +- backend/gen/schemas/acl-manifests.json | 2 +- backend/gen/schemas/desktop-schema.json | 28 ++ backend/gen/schemas/windows-schema.json | 28 ++ backend/tauri.conf.json | 128 ++++----- frontend/api/bindings.ts | 2 +- 8 files changed, 362 insertions(+), 221 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 27b17df1..47ce7bac 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -15,12 +15,14 @@ "epicgames", "flashbang", "frontends", + "fullscreen", "gamemaker", "Gamepass", "globbed", "globwalk", "hasher", "HKEY", + "icns", "ICONERROR", "IDYES", "Infobox", diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 2b8c7e22..765cfc82 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -425,9 +425,9 @@ dependencies = [ [[package]] name = "brotli" -version = "3.5.0" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d640d25bc63c50fb1f0b545ffd80207d2e10a4c965530809b40ba3386825c391" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -436,9 +436,9 @@ dependencies = [ [[package]] name = "brotli-decompressor" -version = "2.5.1" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e2e4afe60d7dd600fdd3de8d0f08c2b7ec039712e3b6137ff98b7004e82de4f" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" dependencies = [ "alloc-no-stdlib", "alloc-stdlib", @@ -653,9 +653,25 @@ checksum = "f6140449f97a6e97f9511815c5632d84c8aacf8ac271ad77c559218161a1373c" dependencies = [ "bitflags 1.3.2", "block", - "cocoa-foundation", - "core-foundation", - "core-graphics", + "cocoa-foundation 0.1.2", + "core-foundation 0.9.4", + "core-graphics 0.23.2", + "foreign-types 0.5.0", + "libc", + "objc", +] + +[[package]] +name = "cocoa" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f79398230a6e2c08f5c9760610eb6924b52aa9e7950a619602baba59dcbbdbb2" +dependencies = [ + "bitflags 2.6.0", + "block", + "cocoa-foundation 0.2.0", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "foreign-types 0.5.0", "libc", "objc", @@ -669,8 +685,22 @@ checksum = "8c6234cbb2e4c785b456c0644748b1ac416dd045799740356f8363dfe00c93f7" dependencies = [ "bitflags 1.3.2", "block", - "core-foundation", - "core-graphics-types", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "libc", + "objc", +] + +[[package]] +name = "cocoa-foundation" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14045fb83be07b5acf1c0884b2180461635b433455fa35d1cd6f17f1450679d" +dependencies = [ + "bitflags 2.6.0", + "block", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", "libc", "objc", ] @@ -710,11 +740,21 @@ dependencies = [ "libc", ] +[[package]] +name = "core-foundation" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-graphics" @@ -723,8 +763,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c07782be35f9e1140080c6b96f0d44b739e2278479f64e02fdab4e32dfd8b081" dependencies = [ "bitflags 1.3.2", - "core-foundation", - "core-graphics-types", + "core-foundation 0.9.4", + "core-graphics-types 0.1.3", + "foreign-types 0.5.0", + "libc", +] + +[[package]] +name = "core-graphics" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", + "core-graphics-types 0.2.0", "foreign-types 0.5.0", "libc", ] @@ -736,7 +789,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", + "libc", +] + +[[package]] +name = "core-graphics-types" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" +dependencies = [ + "bitflags 2.6.0", + "core-foundation 0.10.0", "libc", ] @@ -1249,6 +1313,15 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fluent-uri" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17c704e9dbe1ddd863da1e6ff3567795087b1eb201ce80d8fa81162e1516500d" +dependencies = [ + "bitflags 1.3.2", +] + [[package]] name = "fnv" version = "1.0.7" @@ -2140,15 +2213,27 @@ dependencies = [ [[package]] name = "json-patch" -version = "1.4.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b" +checksum = "5b1fb8864823fad91877e6caea0baca82e49e8db50f8e5c9f9a453e27d3330fc" dependencies = [ + "jsonptr", "serde", "serde_json", "thiserror", ] +[[package]] +name = "jsonptr" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6e529149475ca0b2820835d3dce8fcc41c6b943ca608d32f35b449255e4627" +dependencies = [ + "fluent-uri", + "serde", + "serde_json", +] + [[package]] name = "keyboard-types" version = "0.7.0" @@ -2427,11 +2512,11 @@ dependencies = [ [[package]] name = "muda" -version = "0.13.5" +version = "0.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b959f97c97044e4c96e32e1db292a7d594449546a3c6b77ae613dc3a5b5145" +checksum = "ba8ac4080fb1e097c2c22acae467e46e4da72d941f02e82b67a87a2a89fa38b1" dependencies = [ - "cocoa", + "cocoa 0.26.0", "crossbeam-channel", "dpi", "gtk", @@ -2441,7 +2526,7 @@ dependencies = [ "png", "serde", "thiserror", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2463,15 +2548,16 @@ dependencies = [ [[package]] name = "ndk" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "jni-sys", + "log", "ndk-sys", "num_enum", - "raw-window-handle 0.5.2", + "raw-window-handle", "thiserror", ] @@ -2483,9 +2569,9 @@ checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" [[package]] name = "ndk-sys" -version = "0.4.1+23.1.7779620" +version = "0.6.0+11769913" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +checksum = "ee6cda3051665f1fb8d9e08fc35c96d5a244fb1be711a03b71118828afc9a873" dependencies = [ "jni-sys", ] @@ -2547,23 +2633,23 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179" dependencies = [ "num_enum_derive", ] [[package]] name = "num_enum_derive" -version = "0.5.11" +version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.76", ] [[package]] @@ -3478,12 +3564,6 @@ dependencies = [ "rand_core 0.5.1", ] -[[package]] -name = "raw-window-handle" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -3631,7 +3711,7 @@ dependencies = [ "objc", "objc-foundation", "objc_id", - "raw-window-handle 0.6.2", + "raw-window-handle", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", @@ -3868,7 +3948,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ "bitflags 2.6.0", - "core-foundation", + "core-foundation 0.9.4", "core-foundation-sys", "libc", "security-framework-sys", @@ -3915,9 +3995,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e33aedb1a7135da52b7c21791455563facbbcc43d0f0f66165b42c21b3dfb150" +checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" dependencies = [ "serde_derive", ] @@ -3935,9 +4015,9 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.205" +version = "1.0.209" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692d6f5ac90220161d6774db30c662202721e64aed9058d2c394f451261420c1" +checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" dependencies = [ "proc-macro2", "quote", @@ -3957,9 +4037,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.127" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" dependencies = [ "itoa 1.0.11", "memchr", @@ -4152,7 +4232,7 @@ checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" dependencies = [ "bytemuck", "cfg_aliases 0.2.1", - "core-graphics", + "core-graphics 0.23.2", "foreign-types 0.5.0", "js-sys", "log", @@ -4160,7 +4240,7 @@ dependencies = [ "objc2-app-kit", "objc2-foundation", "objc2-quartz-core", - "raw-window-handle 0.6.2", + "raw-window-handle", "redox_syscall", "wasm-bindgen", "web-sys", @@ -4318,9 +4398,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "swift-rs" -version = "1.0.6" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bbdb58577b6301f8d17ae2561f32002a5bae056d444e0f69e611e504a276204" +checksum = "4057c98e2e852d51fdcfca832aac7b571f6b351ad159f9eda5db1655f8d0c4d7" dependencies = [ "base64 0.21.7", "serde", @@ -4374,7 +4454,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" dependencies = [ "bitflags 1.3.2", - "core-foundation", + "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4403,14 +4483,14 @@ dependencies = [ [[package]] name = "tao" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea538df05fbc2dcbbd740ba0cfe8607688535f4798d213cbbfa13ce494f3451f" +checksum = "d3a97abbc7d6cfd0720da3e06fcb1cf2ac87cbfdb5bbbce103a1279a211c4d81" dependencies = [ "bitflags 2.6.0", - "cocoa", - "core-foundation", - "core-graphics", + "cocoa 0.26.0", + "core-foundation 0.10.0", + "core-graphics 0.24.0", "crossbeam-channel", "dispatch", "dlopen2", @@ -4429,13 +4509,13 @@ dependencies = [ "objc", "once_cell", "parking_lot", - "raw-window-handle 0.6.2", + "raw-window-handle", "scopeguard", "tao-macros", "unicode-segmentation", "url", - "windows 0.57.0", - "windows-core 0.57.0", + "windows 0.58.0", + "windows-core 0.58.0", "windows-version", "x11-dl", ] @@ -4476,13 +4556,13 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.0-rc.0" +version = "2.0.0-rc.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "255e746089a370802ec4eb896dccc6f27c1dd2a203c1dc484fd996db954e2300" +checksum = "e8345ccc676ef16e26b61fc0f5340b4e770678b1e1f53f08c69ebdac5e56b422" dependencies = [ "anyhow", "bytes", - "cocoa", + "cocoa 0.26.0", "dirs", "dunce", "embed_plist", @@ -4499,7 +4579,7 @@ dependencies = [ "muda", "objc", "percent-encoding", - "raw-window-handle 0.6.2", + "raw-window-handle", "reqwest", "serde", "serde_json", @@ -4521,14 +4601,14 @@ dependencies = [ "webkit2gtk", "webview2-com", "window-vibrancy", - "windows 0.57.0", + "windows 0.58.0", ] [[package]] name = "tauri-build" -version = "2.0.0-rc.2" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96a58b3a716b51d7f671f729bb8c0a53cd2551eec8450c64e828ef4e6c9f948e" +checksum = "7d5ad5fcfaf02cf79aa6727f6c5df38567d8dce172b00b62690c6bc46c08b7ce" dependencies = [ "anyhow", "cargo_toml", @@ -4548,9 +4628,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-rc.2" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90a9e63ecd827d57228864764e0234935c9aac230099cf145197c8c08e754ced" +checksum = "809ef6316726fc72593d296cf6f4e7461326e310c313d6a6c42b6e7f1e2671cf" dependencies = [ "base64 0.22.1", "brotli", @@ -4575,9 +4655,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-rc.2" +version = "2.0.0-rc.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a54f5d5b289aa6215ffcfed7d4ff9960a04b7a854436d04519a9fcf911050cba" +checksum = "1359e8861d210d25731f8b1bfbb4d111dd06406cf73c59659366ef450364d811" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4589,9 +4669,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-rc.2" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03ce2ac5e182251ff932750d69c9b240a78e44901a7a6234814d63c595b43660" +checksum = "a7dded420c86183f592d0fe925ef9447f41e26fa79f0bdfef8d3f17bfbcdbfb7" dependencies = [ "anyhow", "glob", @@ -4606,13 +4686,13 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.0.0-rc.0" +version = "2.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c538457a755a75b8bb1594ed40d1512f8f6386251d3fcde492f8f46768ec85b" +checksum = "aa8bd381f75c47687f41fb603f67fdd99a1af377da22d03d8fb959d2481845c1" dependencies = [ "dunce", "log", - "raw-window-handle 0.6.2", + "raw-window-handle", "rfd", "serde", "serde_json", @@ -4620,13 +4700,14 @@ dependencies = [ "tauri-plugin", "tauri-plugin-fs", "thiserror", + "url", ] [[package]] name = "tauri-plugin-fs" -version = "2.0.0-rc.0" +version = "2.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5df6b25b1f2b7b61565e66c4dbee9eb39e5635d2a763206e380e07cc3f601a67" +checksum = "694a746b0e0c1d318198fabf4957800c42fb4b705e866e0eed7ec21476ef88db" dependencies = [ "anyhow", "glob", @@ -4643,13 +4724,13 @@ dependencies = [ [[package]] name = "tauri-plugin-log" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380d27f23c39cde6a73024e65d8ec9b5b0af861e968dbe16b3aad86cd2c578e5" +checksum = "b57e4666c4a5d81f81b7bb8eacf51ae32c4e69c35071aabb480ad20a80836e4e" dependencies = [ "android_logger", "byte-unit", - "cocoa", + "cocoa 0.25.0", "fern", "log", "objc", @@ -4665,9 +4746,9 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b5f10ba18d2fc65e16bdf053b7beccb621dcf880c52d2ab08bdeb2d685e3e14" +checksum = "f7048854b4271f3bc58ee850f0582f8d9bb0190118afa8397f36fc260daaa68b" dependencies = [ "base64 0.22.1", "dirs", @@ -4688,15 +4769,15 @@ dependencies = [ "time", "tokio", "url", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "zip", ] [[package]] name = "tauri-plugin-window-state" -version = "2.0.0-rc.0" +version = "2.0.0-rc.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a86654a4937427217c7531594a60bede289e0e6d27baef0527d5678fb3d263a" +checksum = "ba56bcec4b7a1601cf3136c9a3a98f77036b7e1a67564788c5ccd051035d028a" dependencies = [ "bitflags 2.6.0", "log", @@ -4709,36 +4790,36 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-rc.2" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f01b129b1ebdf09563c354760dbe7c0e96a166b4e33362d9c8d207f527c7ea5" +checksum = "75c72b844f387bfc3341c355f3e16b8cbf4161848fa4e348670effb222cd3ba5" dependencies = [ "dpi", "gtk", "http", "jni", - "raw-window-handle 0.6.2", + "raw-window-handle", "serde", "serde_json", "tauri-utils", "thiserror", "url", - "windows 0.57.0", + "windows 0.58.0", ] [[package]] name = "tauri-runtime-wry" -version = "2.0.0-rc.2" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcda27639094ace2bf25f00bc10e35ea4e3af2f92753b1bdd2a174d1fa5a6292" +checksum = "73accf936a7cd01d1382de7850726fdf6c1f6ab3b01ccb7a0950cb852e332596" dependencies = [ - "cocoa", + "cocoa 0.26.0", "gtk", "http", "jni", "log", "percent-encoding", - "raw-window-handle 0.6.2", + "raw-window-handle", "softbuffer", "tao", "tauri-runtime", @@ -4746,15 +4827,15 @@ dependencies = [ "url", "webkit2gtk", "webview2-com", - "windows 0.57.0", + "windows 0.58.0", "wry", ] [[package]] name = "tauri-specta" -version = "2.0.0-rc.15" +version = "2.0.0-rc.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5146a4f94911b69b6086a0a700e8748b96cc18220b0504d5085dc0f856d2bec7" +checksum = "c2d58f5067f811ac923825ed15a95baa76313891ddc9ccfe28e4526e86477347" dependencies = [ "heck 0.5.0", "serde", @@ -4768,9 +4849,9 @@ dependencies = [ [[package]] name = "tauri-specta-macros" -version = "2.0.0-rc.6" +version = "2.0.0-rc.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb0e8c565ad3dda541e954e9e8fbbca9d43283d1050aec78daac07a92b64f733" +checksum = "7a4aa93823e07859546aa796b8a5d608190cd8037a3a5dce3eb63d491c34bda8" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4780,9 +4861,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-rc.2" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28bb83cffa26e9cb7a2b3d0c31ab87bf277f44aaaa90f17159aef4d37aabd051" +checksum = "d53d9fe87e985b273696ae22ce2b9f099a8f1b44bc8fb127467bda5fcb3e4371" dependencies = [ "brotli", "cargo_metadata", @@ -5131,22 +5212,23 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.14.3" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ad8319cca93189ea9ab1b290de0595960529750b6b8b501a399ed1ec3775d60" +checksum = "131a65b2cef2081bc14dbcd414c906edbfa3bb5323dd7e748cc298614681196b" dependencies = [ - "cocoa", - "core-graphics", + "core-graphics 0.24.0", "crossbeam-channel", "dirs", "libappindicator", "muda", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "once_cell", "png", "serde", "thiserror", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -5529,23 +5611,23 @@ dependencies = [ [[package]] name = "webview2-com" -version = "0.31.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6516cfa64c6b3212686080eeec378e662c2af54bb2a5b2a22749673f5cb2226f" +checksum = "6f61ff3d9d0ee4efcb461b14eb3acfda2702d10dc329f339303fc3e57215ae2c" dependencies = [ "webview2-com-macros", "webview2-com-sys", - "windows 0.57.0", - "windows-core 0.57.0", + "windows 0.58.0", + "windows-core 0.58.0", "windows-implement", "windows-interface", ] [[package]] name = "webview2-com-macros" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1345798ecd8122468840bcdf1b95e5dc6d2206c5e4b0eafa078d061f59c9bc" +checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", @@ -5554,13 +5636,13 @@ dependencies = [ [[package]] name = "webview2-com-sys" -version = "0.31.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c76d5b77320ff155660be1df3e6588bc85c75f1a9feef938cc4dc4dd60d1d7cf" +checksum = "a3a3e2eeb58f82361c93f9777014668eb3d07e7d174ee4c819575a9208011886" dependencies = [ "thiserror", - "windows 0.57.0", - "windows-core 0.57.0", + "windows 0.58.0", + "windows-core 0.58.0", ] [[package]] @@ -5600,9 +5682,9 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" dependencies = [ - "cocoa", + "cocoa 0.25.0", "objc", - "raw-window-handle 0.6.2", + "raw-window-handle", "windows-sys 0.52.0", "windows-version", ] @@ -5618,11 +5700,11 @@ dependencies = [ [[package]] name = "windows" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" dependencies = [ - "windows-core 0.57.0", + "windows-core 0.58.0", "windows-targets 0.52.6", ] @@ -5637,21 +5719,22 @@ dependencies = [ [[package]] name = "windows-core" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" dependencies = [ "windows-implement", "windows-interface", "windows-result", + "windows-strings", "windows-targets 0.52.6", ] [[package]] name = "windows-implement" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", @@ -5660,9 +5743,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.57.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", @@ -5671,13 +5754,23 @@ dependencies = [ [[package]] name = "windows-result" -version = "0.1.2" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.45.0" @@ -5932,14 +6025,14 @@ dependencies = [ [[package]] name = "wry" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b00c945786b02d7805d09a969fa36d0eee4e0bd4fb3ec2a79d2bf45a1b44cd" +checksum = "49b8049c8f239cdbfaaea4bacb9646f6b208938ceec0acd5b3e99cd05f70903f" dependencies = [ "base64 0.22.1", "block", - "cocoa", - "core-graphics", + "cocoa 0.26.0", + "core-graphics 0.24.0", "crossbeam-channel", "dpi", "dunce", @@ -5952,13 +6045,11 @@ dependencies = [ "kuchikiki", "libc", "ndk", - "ndk-context", - "ndk-sys", "objc", "objc_id", "once_cell", "percent-encoding", - "raw-window-handle 0.6.2", + "raw-window-handle", "sha2", "soup3", "tao-macros", @@ -5966,8 +6057,8 @@ dependencies = [ "webkit2gtk", "webkit2gtk-sys", "webview2-com", - "windows 0.57.0", - "windows-core 0.57.0", + "windows 0.58.0", + "windows-core 0.58.0", "windows-version", "x11-dl", ] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 0c614c8f..939c4c64 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -14,26 +14,26 @@ version.workspace = true edition.workspace = true [build-dependencies] -tauri-build = { version = "2.0.0-rc.0", features = [] } +tauri-build = { version = "2.0.0-rc.7", features = [] } [workspace.dependencies] -log = "0.4.20" +log = "0.4.22" rai-pal-core = { path = "./rai-pal-core" } rai-pal-proc-macros = { path = "./proc-macros" } -serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.108" -specta = "2.0.0-rc.19" -tauri-specta = { version = "2.0.0-rc.14", features = ["derive", "typescript"] } -thiserror = "1.0.50" +serde = { version = "1.0.209", features = ["derive"] } +serde_json = "1.0.127" +specta = "2.0.0-rc.20" +tauri-specta = { version = "2.0.0-rc.18", features = ["derive", "typescript"] } +thiserror = "1.0.63" [dependencies] specta-typescript = "0.0.7" -tauri = { version = "2.0.0-rc.0", features = [] } -tauri-plugin-dialog = "2.0.0-rc.0" -tauri-plugin-log = "2.0.0-rc.0" -tauri-plugin-updater = "2.0.0-rc.0" -tauri-plugin-window-state = "2.0.0-rc.0" -tauri-runtime = "2.0.0-rc.0" +tauri = { version = "2.0.0-rc.8", features = [] } +tauri-plugin-dialog = "2.0.0-rc.3" +tauri-plugin-log = "2.0.0-rc.2" +tauri-plugin-updater = "2.0.0-rc.2" +tauri-plugin-window-state = "2.0.0-rc.2" +tauri-runtime = "2.0.0-rc.7" log.workspace = true rai-pal-core.workspace = true diff --git a/backend/gen/schemas/acl-manifests.json b/backend/gen/schemas/acl-manifests.json index a8cc8693..7e7b7089 100644 --- a/backend/gen/schemas/acl-manifests.json +++ b/backend/gen/schemas/acl-manifests.json @@ -1 +1 @@ -{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file +{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/backend/gen/schemas/desktop-schema.json b/backend/gen/schemas/desktop-schema.json index c29c3555..c184ff68 100644 --- a/backend/gen/schemas/desktop-schema.json +++ b/backend/gen/schemas/desktop-schema.json @@ -1039,6 +1039,13 @@ "core:webview:allow-create-webview-window" ] }, + { + "description": "core:webview:allow-get-all-webviews -> Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-get-all-webviews" + ] + }, { "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", "type": "string", @@ -1123,6 +1130,13 @@ "core:webview:deny-create-webview-window" ] }, + { + "description": "core:webview:deny-get-all-webviews -> Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-get-all-webviews" + ] + }, { "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", "type": "string", @@ -1249,6 +1263,13 @@ "core:window:allow-destroy" ] }, + { + "description": "core:window:allow-get-all-windows -> Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-get-all-windows" + ] + }, { "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", "type": "string", @@ -1704,6 +1725,13 @@ "core:window:deny-destroy" ] }, + { + "description": "core:window:deny-get-all-windows -> Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-get-all-windows" + ] + }, { "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", "type": "string", diff --git a/backend/gen/schemas/windows-schema.json b/backend/gen/schemas/windows-schema.json index c29c3555..c184ff68 100644 --- a/backend/gen/schemas/windows-schema.json +++ b/backend/gen/schemas/windows-schema.json @@ -1039,6 +1039,13 @@ "core:webview:allow-create-webview-window" ] }, + { + "description": "core:webview:allow-get-all-webviews -> Enables the get_all_webviews command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:allow-get-all-webviews" + ] + }, { "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", "type": "string", @@ -1123,6 +1130,13 @@ "core:webview:deny-create-webview-window" ] }, + { + "description": "core:webview:deny-get-all-webviews -> Denies the get_all_webviews command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:webview:deny-get-all-webviews" + ] + }, { "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", "type": "string", @@ -1249,6 +1263,13 @@ "core:window:allow-destroy" ] }, + { + "description": "core:window:allow-get-all-windows -> Enables the get_all_windows command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:allow-get-all-windows" + ] + }, { "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", "type": "string", @@ -1704,6 +1725,13 @@ "core:window:deny-destroy" ] }, + { + "description": "core:window:deny-get-all-windows -> Denies the get_all_windows command without any pre-configured scope.", + "type": "string", + "enum": [ + "core:window:deny-get-all-windows" + ] + }, { "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", "type": "string", diff --git a/backend/tauri.conf.json b/backend/tauri.conf.json index 049cc117..5b9110c4 100644 --- a/backend/tauri.conf.json +++ b/backend/tauri.conf.json @@ -1,70 +1,62 @@ { - "$schema": "../node_modules/@tauri-apps/cli/schema.json", - "build": { - "beforeDevCommand": "npm run frontend:dev", - "beforeBuildCommand": "npm run frontend:build", - "frontendDist": "../dist", - "devUrl": "http://localhost:1420" - }, - "bundle": { - "createUpdaterArtifacts": "v1Compatible", - "active": true, - "targets": [ - "msi" - ], - "resources": [ - "resources/*" - ], - "icon": [ - "icons/32x32.png", - "icons/128x128.png", - "icons/128x128@2x.png", - "icons/icon.icns", - "icons/icon.ico" - ] - }, - "productName": "Rai Pal", - "identifier": "com.raicuparta.pal", - "plugins": { - "updater": { - "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDNGMzI5QUM1RjMwMjM0OTMKUldTVE5BTHp4Wm95UDcvaWgyKzRENVkzZVc2K1JTOEhidUR4OFVENWVqemloUWRmZDllbzJGaSsK", - "endpoints": [ - "https://github.com/Raicuparta/rai-pal/releases/latest/download/latest.json" - ] - } - }, - "app": { - "windows": [ - { - "fullscreen": false, - "resizable": true, - "title": "Rai Pal", - "width": 800, - "height": 600, - "minHeight": 300, - "minWidth": 800, - "visible": false - } - ], - "security": { - "dangerousDisableAssetCspModification": [ - "style-src-elem" - ], - "csp": { - "img-src": [ - "'self'", - "http://tauri.localhost", - "https://*.epicgames.com", - "https://*.itch.zone", - "https://*.steamstatic.com", - "https://*.gog.com", - "https://*.patreonusercontent.com", - "https://*.patreon.com" - ], - "style-src-elem": [ - "'self' 'unsafe-inline'" - ] - } - } - } + "$schema": "../node_modules/@tauri-apps/cli/schema.json", + "build": { + "beforeDevCommand": "npm run frontend:dev", + "beforeBuildCommand": "npm run frontend:build", + "frontendDist": "../dist", + "devUrl": "http://localhost:1420" + }, + "bundle": { + "createUpdaterArtifacts": "v1Compatible", + "active": true, + "targets": ["msi"], + "resources": ["resources/**/*"], + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ] + }, + "productName": "Rai Pal", + "identifier": "com.raicuparta.pal", + "plugins": { + "updater": { + "pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDNGMzI5QUM1RjMwMjM0OTMKUldTVE5BTHp4Wm95UDcvaWgyKzRENVkzZVc2K1JTOEhidUR4OFVENWVqemloUWRmZDllbzJGaSsK", + "endpoints": [ + "https://github.com/Raicuparta/rai-pal/releases/latest/download/latest.json" + ] + } + }, + "app": { + "windows": [ + { + "fullscreen": false, + "resizable": true, + "title": "Rai Pal", + "width": 800, + "height": 600, + "minHeight": 300, + "minWidth": 800, + "visible": false + } + ], + "security": { + "dangerousDisableAssetCspModification": ["style-src-elem"], + "csp": { + "img-src": [ + "'self'", + "http://tauri.localhost", + "https://*.epicgames.com", + "https://*.itch.zone", + "https://*.steamstatic.com", + "https://*.gog.com", + "https://*.patreonusercontent.com", + "https://*.patreon.com" + ], + "style-src-elem": ["'self' 'unsafe-inline'"] + } + } + } } diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index a8507516..a3b48932 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -290,7 +290,7 @@ export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type Error = "Tauri" | "Io" | "Core" | "SerdeJson" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } +export type Error = "Tauri" | "Core" | "SerdeJson" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } export type ErrorRaised = string export type ExecutedProviderCommand = null export type FoundInstalledGame = [] From bb1fbf21270757d21375037a7d9a74052496b286 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 15:00:47 +0200 Subject: [PATCH 237/255] separate tauri app from workspace --- CONTRIBUTING.md | 6 +- backend/Cargo.lock | 44 +- backend/Cargo.toml | 33 +- backend/frontend/api/bindings.ts | 384 ++++++++++++++++++ backend/tauri-app/Cargo.toml | 30 ++ backend/{ => tauri-app}/build.rs | 0 .../{ => tauri-app}/capabilities/main.json | 0 .../gen/schemas/acl-manifests.json | 0 .../gen/schemas/capabilities.json | 0 .../gen/schemas/desktop-schema.json | 0 .../gen/schemas/linux-schema.json | 0 .../gen/schemas/windows-schema.json | 0 backend/{ => tauri-app}/icons/128x128.png | Bin backend/{ => tauri-app}/icons/128x128@2x.png | Bin backend/{ => tauri-app}/icons/32x32.png | Bin .../icons/Square107x107Logo.png | Bin .../icons/Square142x142Logo.png | Bin .../icons/Square150x150Logo.png | Bin .../icons/Square284x284Logo.png | Bin .../{ => tauri-app}/icons/Square30x30Logo.png | Bin .../icons/Square310x310Logo.png | Bin .../{ => tauri-app}/icons/Square44x44Logo.png | Bin .../{ => tauri-app}/icons/Square71x71Logo.png | Bin .../{ => tauri-app}/icons/Square89x89Logo.png | Bin backend/{ => tauri-app}/icons/StoreLogo.png | Bin backend/{ => tauri-app}/icons/icon-source.png | Bin backend/{ => tauri-app}/icons/icon.icns | Bin backend/{ => tauri-app}/icons/icon.ico | Bin backend/{ => tauri-app}/icons/icon.png | Bin .../X64/copy-to-game/.doorstop_version | 0 .../Windows/X64/copy-to-game/winhttp.dll | Bin .../bepinex/Il2Cpp/Windows/X64/mod-loader.zip | Bin .../Windows/X86/copy-to-game/winhttp.dll | Bin .../bepinex/Il2Cpp/Windows/X86/mod-loader.zip | Bin .../bepinex/Il2Cpp/doorstop_config.ini | 0 .../bepinex/Mono/Linux/mod-loader.zip | Bin .../Mono/Windows/X64/copy-to-game/winhttp.dll | Bin .../bepinex/Mono/Windows/X64/mod-loader.zip | Bin .../Mono/Windows/X86/copy-to-game/winhttp.dll | Bin .../bepinex/Mono/Windows/X86/mod-loader.zip | Bin .../bepinex/Mono/doorstop_config.ini | 0 .../bepinex/config/BepInEx-legacy.cfg | 0 .../resources/bepinex/config/BepInEx.cfg | 0 backend/{ => tauri-app}/src/app_state.rs | 0 backend/{ => tauri-app}/src/events.rs | 0 backend/{ => tauri-app}/src/main.rs | 0 backend/{ => tauri-app}/src/result.rs | 0 backend/{ => tauri-app}/tauri.conf.json | 0 48 files changed, 440 insertions(+), 57 deletions(-) create mode 100644 backend/frontend/api/bindings.ts create mode 100644 backend/tauri-app/Cargo.toml rename backend/{ => tauri-app}/build.rs (100%) rename backend/{ => tauri-app}/capabilities/main.json (100%) rename backend/{ => tauri-app}/gen/schemas/acl-manifests.json (100%) rename backend/{ => tauri-app}/gen/schemas/capabilities.json (100%) rename backend/{ => tauri-app}/gen/schemas/desktop-schema.json (100%) rename backend/{ => tauri-app}/gen/schemas/linux-schema.json (100%) rename backend/{ => tauri-app}/gen/schemas/windows-schema.json (100%) rename backend/{ => tauri-app}/icons/128x128.png (100%) rename backend/{ => tauri-app}/icons/128x128@2x.png (100%) rename backend/{ => tauri-app}/icons/32x32.png (100%) rename backend/{ => tauri-app}/icons/Square107x107Logo.png (100%) rename backend/{ => tauri-app}/icons/Square142x142Logo.png (100%) rename backend/{ => tauri-app}/icons/Square150x150Logo.png (100%) rename backend/{ => tauri-app}/icons/Square284x284Logo.png (100%) rename backend/{ => tauri-app}/icons/Square30x30Logo.png (100%) rename backend/{ => tauri-app}/icons/Square310x310Logo.png (100%) rename backend/{ => tauri-app}/icons/Square44x44Logo.png (100%) rename backend/{ => tauri-app}/icons/Square71x71Logo.png (100%) rename backend/{ => tauri-app}/icons/Square89x89Logo.png (100%) rename backend/{ => tauri-app}/icons/StoreLogo.png (100%) rename backend/{ => tauri-app}/icons/icon-source.png (100%) rename backend/{ => tauri-app}/icons/icon.icns (100%) rename backend/{ => tauri-app}/icons/icon.ico (100%) rename backend/{ => tauri-app}/icons/icon.png (100%) rename backend/{ => tauri-app}/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/.doorstop_version (100%) rename backend/{ => tauri-app}/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/winhttp.dll (100%) rename backend/{ => tauri-app}/resources/bepinex/Il2Cpp/Windows/X64/mod-loader.zip (100%) rename backend/{ => tauri-app}/resources/bepinex/Il2Cpp/Windows/X86/copy-to-game/winhttp.dll (100%) rename backend/{ => tauri-app}/resources/bepinex/Il2Cpp/Windows/X86/mod-loader.zip (100%) rename backend/{ => tauri-app}/resources/bepinex/Il2Cpp/doorstop_config.ini (100%) rename backend/{ => tauri-app}/resources/bepinex/Mono/Linux/mod-loader.zip (100%) rename backend/{ => tauri-app}/resources/bepinex/Mono/Windows/X64/copy-to-game/winhttp.dll (100%) rename backend/{ => tauri-app}/resources/bepinex/Mono/Windows/X64/mod-loader.zip (100%) rename backend/{ => tauri-app}/resources/bepinex/Mono/Windows/X86/copy-to-game/winhttp.dll (100%) rename backend/{ => tauri-app}/resources/bepinex/Mono/Windows/X86/mod-loader.zip (100%) rename backend/{ => tauri-app}/resources/bepinex/Mono/doorstop_config.ini (100%) rename backend/{ => tauri-app}/resources/bepinex/config/BepInEx-legacy.cfg (100%) rename backend/{ => tauri-app}/resources/bepinex/config/BepInEx.cfg (100%) rename backend/{ => tauri-app}/src/app_state.rs (100%) rename backend/{ => tauri-app}/src/events.rs (100%) rename backend/{ => tauri-app}/src/main.rs (100%) rename backend/{ => tauri-app}/src/result.rs (100%) rename backend/{ => tauri-app}/tauri.conf.json (100%) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 56b4fcc1..f764d5a4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,10 +23,10 @@ The project is split into two main parts: ## Backend -The [`/backend`](/backend) folder contains the Rust code that does most of the heavy lifting. Has a `Cargo.toml` at the top level, defining the main Tauri project (code in `/backend/src`). This code contains anything specific to Tauri, like all the app commands and events that can be called. +[`/backend/Cargo.toml`](/backend/Cargo.toml) is the [cargo workspace](https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html) manifest. So it's Rust settings and stuff that relates to all crates within the workspace. Those crates are: -The top level crate is also the workspace containing two other sub-crates: -- [`/backend/rai-pal-core`](/backend/rai-pal-core): Main Rai Pal logic. Shouldn't depend on anything Tauri-specific, could theoretically be split out into an isolated crate to be used by different frontends. +- [`/backend/tauri-app`](/backend/tauri-app): Anything specific to Tauri, like all the app commands and events that can be called. +- [`/backend/rai-pal-core`](/backend/rai-pal-core): Main Rai Pal logic. Shouldn't depend on anything Tauri-specific, could theoretically be split out into an isolated crate to be used by different frontends. The crate in `tauri-app` will reference this crate, to actually do the Rai Pal magic. - [`/backend/proc-macros`](/backend/proc-macros): Procedural macros ([read more](https://doc.rust-lang.org/reference/procedural-macros.html)). Dependencies that are used by multiple crates in the workspace get defined at the workspace level, on the root `Cargo.toml`. Dependencies that are only used by a specific create, get defined in that crate's `Cargo.toml`. diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 765cfc82..96efd28e 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -3422,28 +3422,6 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" -[[package]] -name = "rai-pal" -version = "0.13.0" -dependencies = [ - "log", - "rai-pal-core", - "rai-pal-proc-macros", - "serde", - "serde_json", - "specta", - "specta-typescript", - "tauri", - "tauri-build", - "tauri-plugin-dialog", - "tauri-plugin-log", - "tauri-plugin-updater", - "tauri-plugin-window-state", - "tauri-runtime", - "tauri-specta", - "thiserror", -] - [[package]] name = "rai-pal-core" version = "0.13.0" @@ -3483,6 +3461,28 @@ dependencies = [ "syn 2.0.76", ] +[[package]] +name = "rai-pal-tauri" +version = "0.13.0" +dependencies = [ + "log", + "rai-pal-core", + "rai-pal-proc-macros", + "serde", + "serde_json", + "specta", + "specta-typescript", + "tauri", + "tauri-build", + "tauri-plugin-dialog", + "tauri-plugin-log", + "tauri-plugin-updater", + "tauri-plugin-window-state", + "tauri-runtime", + "tauri-specta", + "thiserror", +] + [[package]] name = "rand" version = "0.7.3" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 939c4c64..d7b793f1 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["proc-macros", "rai-pal-core"] +members = ["proc-macros", "rai-pal-core", "tauri-app"] [workspace.package] version = "0.13.0" @@ -8,14 +8,6 @@ license = "GPL-3.0-or-later" repository = "https://github.com/Raicuparta/rai-pal" edition = "2021" -[package] -name = "rai-pal" -version.workspace = true -edition.workspace = true - -[build-dependencies] -tauri-build = { version = "2.0.0-rc.7", features = [] } - [workspace.dependencies] log = "0.4.22" rai-pal-core = { path = "./rai-pal-core" } @@ -26,29 +18,6 @@ specta = "2.0.0-rc.20" tauri-specta = { version = "2.0.0-rc.18", features = ["derive", "typescript"] } thiserror = "1.0.63" -[dependencies] -specta-typescript = "0.0.7" -tauri = { version = "2.0.0-rc.8", features = [] } -tauri-plugin-dialog = "2.0.0-rc.3" -tauri-plugin-log = "2.0.0-rc.2" -tauri-plugin-updater = "2.0.0-rc.2" -tauri-plugin-window-state = "2.0.0-rc.2" -tauri-runtime = "2.0.0-rc.7" - -log.workspace = true -rai-pal-core.workspace = true -rai-pal-proc-macros.workspace = true -serde_json.workspace = true -serde.workspace = true -specta.workspace = true -tauri-specta.workspace = true -thiserror.workspace = true - -[features] -# this feature is used for production builds or when `devPath` points to the filesystem -# DO NOT REMOVE!! -custom-protocol = ["tauri/custom-protocol"] - [profile.release] codegen-units = 1 incremental = false diff --git a/backend/frontend/api/bindings.ts b/backend/frontend/api/bindings.ts new file mode 100644 index 00000000..a3b48932 --- /dev/null +++ b/backend/frontend/api/bindings.ts @@ -0,0 +1,384 @@ + +// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. + +/** user-defined commands **/ + + +export const commands = { +async addGame(path: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("add_game", { path }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async configureMod(installedGame: InstalledGame, modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("configure_mod", { installedGame, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async deleteMod(modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("delete_mod", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async deleteSteamAppinfoCache() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("delete_steam_appinfo_cache") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async downloadMod(modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("download_mod", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async frontendReady() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("frontend_ready") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async getLocalMods() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_local_mods") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async getModLoaders() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_mod_loaders") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async getProviderGames(providerId: ProviderId) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_provider_games", { providerId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async getProviderIds() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_provider_ids") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async getRemoteMods() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_remote_mods") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async installMod(installedGame: InstalledGame, modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("install_mod", { installedGame, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openGameFolder(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_game_folder", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openGameModsFolder(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_game_mods_folder", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openInstalledModFolder(installedGame: InstalledGame, modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_installed_mod_folder", { installedGame, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openLogsFolder() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_logs_folder") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openModFolder(modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_mod_folder", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openModLoaderFolder(modLoaderId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_mod_loader_folder", { modLoaderId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async openModsFolder() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_mods_folder") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async refreshGame(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("refresh_game", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async removeGame(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("remove_game", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async runProviderCommand(ownedGame: OwnedGame, commandAction: ProviderCommandAction) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("run_provider_command", { ownedGame, commandAction }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async runRunnableWithoutGame(modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("run_runnable_without_game", { modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async startGameExe(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("start_game_exe", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async startGame(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("start_game", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async uninstallAllMods(installedGame: InstalledGame) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("uninstall_all_mods", { installedGame }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async uninstallMod(installedGame: InstalledGame, modId: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("uninstall_mod", { installedGame, modId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async updateLocalMods() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("update_local_mods") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async fetchRemoteGames() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("fetch_remote_games") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async getProviderData(providerId: ProviderId) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_provider_data", { providerId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, +async clearCache() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("clear_cache") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +} +} + +/** user-defined events **/ + + +export const events = __makeEvents__<{ +errorRaised: ErrorRaised, +executedProviderCommand: ExecutedProviderCommand, +foundInstalledGame: FoundInstalledGame, +foundOwnedGame: FoundOwnedGame, +selectInstalledGame: SelectInstalledGame, +syncLocalMods: SyncLocalMods, +syncModLoaders: SyncModLoaders, +syncRemoteMods: SyncRemoteMods +}>({ +errorRaised: "error-raised", +executedProviderCommand: "executed-provider-command", +foundInstalledGame: "found-installed-game", +foundOwnedGame: "found-owned-game", +selectInstalledGame: "select-installed-game", +syncLocalMods: "sync-local-mods", +syncModLoaders: "sync-mod-loaders", +syncRemoteMods: "sync-remote-mods" +}) + +/** user-defined constants **/ + + + +/** user-defined types **/ + +export type Architecture = "X64" | "X86" +export type CommonModData = { id: string; engine: EngineBrand | null; unityBackend: UnityScriptingBackend | null; engineVersionRange: EngineVersionRange | null; loaderId: string } +export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" +export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } +export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } +export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } +export type Error = "Tauri" | "Core" | "SerdeJson" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } +export type ErrorRaised = string +export type ExecutedProviderCommand = null +export type FoundInstalledGame = [] +export type FoundOwnedGame = [] +export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } +export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } +export type GameSubscription = "UbisoftClassics" | "UbisoftPremium" | "XboxGamePass" | "EaPlay" +export type GameTag = "VR" | "Demo" +export type GameTitle = { display: string; normalized: string[] } +export type IdKind = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" | "Ubisoft" | "NormalizedTitle" +export type InstalledGame = { id: string; title: GameTitle; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } +export type LocalMod = { data: LocalModData; common: CommonModData } +export type LocalModData = { path: string; manifest: Manifest | null } +export type Manifest = { title: string | null; version: string; runnable: RunnableModData | null; engine: EngineBrand | null; engineVersionRange: EngineVersionRange | null; unityBackend: UnityScriptingBackend | null } +export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } +export type ModKind = "Installable" | "Runnable" +export type ModLoaderData = { id: string; path: string; kind: ModKind } +export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; tags: GameTag[]; providerCommands: { [key in ProviderCommandAction]: ProviderCommand }; fromSubscriptions: GameSubscription[] } +export type ProviderCommand = { String: string } | { Path: [string, string[]] } +export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" +export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } +export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" +export type RemoteGame = { title: string | null; engines: GameEngine[] | null; ids: { [key in IdKind]: string[] }; subscriptions: GameSubscription[] | null } +export type RemoteMod = { common: CommonModData; data: RemoteModData } +export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } +export type RunnableModData = { path: string; args: string[] } +export type SelectInstalledGame = string +export type SyncLocalMods = { [key in string]: LocalMod } +export type SyncModLoaders = { [key in string]: ModLoaderData } +export type SyncRemoteMods = { [key in string]: RemoteMod } +export type UnityScriptingBackend = "Il2Cpp" | "Mono" + +/** tauri-specta globals **/ + +import { + invoke as TAURI_INVOKE, + Channel as TAURI_CHANNEL, +} from "@tauri-apps/api/core"; +import * as TAURI_API_EVENT from "@tauri-apps/api/event"; +import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; + +type __EventObj__ = { + listen: ( + cb: TAURI_API_EVENT.EventCallback, + ) => ReturnType>; + once: ( + cb: TAURI_API_EVENT.EventCallback, + ) => ReturnType>; + emit: T extends null + ? (payload?: T) => ReturnType + : (payload: T) => ReturnType; +}; + +export type Result = + | { status: "ok"; data: T } + | { status: "error"; error: E }; + +function __makeEvents__>( + mappings: Record, +) { + return new Proxy( + {} as unknown as { + [K in keyof T]: __EventObj__ & { + (handle: __WebviewWindow__): __EventObj__; + }; + }, + { + get: (_, event) => { + const name = mappings[event as keyof T]; + + return new Proxy((() => {}) as any, { + apply: (_, __, [window]: [__WebviewWindow__]) => ({ + listen: (arg: any) => window.listen(name, arg), + once: (arg: any) => window.once(name, arg), + emit: (arg: any) => window.emit(name, arg), + }), + get: (_, command: keyof __EventObj__) => { + switch (command) { + case "listen": + return (arg: any) => TAURI_API_EVENT.listen(name, arg); + case "once": + return (arg: any) => TAURI_API_EVENT.once(name, arg); + case "emit": + return (arg: any) => TAURI_API_EVENT.emit(name, arg); + } + }, + }); + }, + }, + ); +} diff --git a/backend/tauri-app/Cargo.toml b/backend/tauri-app/Cargo.toml new file mode 100644 index 00000000..ee8d159d --- /dev/null +++ b/backend/tauri-app/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "rai-pal-tauri" +version.workspace = true +edition.workspace = true + +[build-dependencies] +tauri-build = { version = "2.0.0-rc.7", features = [] } + +[dependencies] +specta-typescript = "0.0.7" +tauri = { version = "2.0.0-rc.8", features = [] } +tauri-plugin-dialog = "2.0.0-rc.3" +tauri-plugin-log = "2.0.0-rc.2" +tauri-plugin-updater = "2.0.0-rc.2" +tauri-plugin-window-state = "2.0.0-rc.2" +tauri-runtime = "2.0.0-rc.7" + +log.workspace = true +rai-pal-core.workspace = true +rai-pal-proc-macros.workspace = true +serde_json.workspace = true +serde.workspace = true +specta.workspace = true +tauri-specta.workspace = true +thiserror.workspace = true + +[features] +# this feature is used for production builds or when `devPath` points to the filesystem +# DO NOT REMOVE!! +custom-protocol = ["tauri/custom-protocol"] diff --git a/backend/build.rs b/backend/tauri-app/build.rs similarity index 100% rename from backend/build.rs rename to backend/tauri-app/build.rs diff --git a/backend/capabilities/main.json b/backend/tauri-app/capabilities/main.json similarity index 100% rename from backend/capabilities/main.json rename to backend/tauri-app/capabilities/main.json diff --git a/backend/gen/schemas/acl-manifests.json b/backend/tauri-app/gen/schemas/acl-manifests.json similarity index 100% rename from backend/gen/schemas/acl-manifests.json rename to backend/tauri-app/gen/schemas/acl-manifests.json diff --git a/backend/gen/schemas/capabilities.json b/backend/tauri-app/gen/schemas/capabilities.json similarity index 100% rename from backend/gen/schemas/capabilities.json rename to backend/tauri-app/gen/schemas/capabilities.json diff --git a/backend/gen/schemas/desktop-schema.json b/backend/tauri-app/gen/schemas/desktop-schema.json similarity index 100% rename from backend/gen/schemas/desktop-schema.json rename to backend/tauri-app/gen/schemas/desktop-schema.json diff --git a/backend/gen/schemas/linux-schema.json b/backend/tauri-app/gen/schemas/linux-schema.json similarity index 100% rename from backend/gen/schemas/linux-schema.json rename to backend/tauri-app/gen/schemas/linux-schema.json diff --git a/backend/gen/schemas/windows-schema.json b/backend/tauri-app/gen/schemas/windows-schema.json similarity index 100% rename from backend/gen/schemas/windows-schema.json rename to backend/tauri-app/gen/schemas/windows-schema.json diff --git a/backend/icons/128x128.png b/backend/tauri-app/icons/128x128.png similarity index 100% rename from backend/icons/128x128.png rename to backend/tauri-app/icons/128x128.png diff --git a/backend/icons/128x128@2x.png b/backend/tauri-app/icons/128x128@2x.png similarity index 100% rename from backend/icons/128x128@2x.png rename to backend/tauri-app/icons/128x128@2x.png diff --git a/backend/icons/32x32.png b/backend/tauri-app/icons/32x32.png similarity index 100% rename from backend/icons/32x32.png rename to backend/tauri-app/icons/32x32.png diff --git a/backend/icons/Square107x107Logo.png b/backend/tauri-app/icons/Square107x107Logo.png similarity index 100% rename from backend/icons/Square107x107Logo.png rename to backend/tauri-app/icons/Square107x107Logo.png diff --git a/backend/icons/Square142x142Logo.png b/backend/tauri-app/icons/Square142x142Logo.png similarity index 100% rename from backend/icons/Square142x142Logo.png rename to backend/tauri-app/icons/Square142x142Logo.png diff --git a/backend/icons/Square150x150Logo.png b/backend/tauri-app/icons/Square150x150Logo.png similarity index 100% rename from backend/icons/Square150x150Logo.png rename to backend/tauri-app/icons/Square150x150Logo.png diff --git a/backend/icons/Square284x284Logo.png b/backend/tauri-app/icons/Square284x284Logo.png similarity index 100% rename from backend/icons/Square284x284Logo.png rename to backend/tauri-app/icons/Square284x284Logo.png diff --git a/backend/icons/Square30x30Logo.png b/backend/tauri-app/icons/Square30x30Logo.png similarity index 100% rename from backend/icons/Square30x30Logo.png rename to backend/tauri-app/icons/Square30x30Logo.png diff --git a/backend/icons/Square310x310Logo.png b/backend/tauri-app/icons/Square310x310Logo.png similarity index 100% rename from backend/icons/Square310x310Logo.png rename to backend/tauri-app/icons/Square310x310Logo.png diff --git a/backend/icons/Square44x44Logo.png b/backend/tauri-app/icons/Square44x44Logo.png similarity index 100% rename from backend/icons/Square44x44Logo.png rename to backend/tauri-app/icons/Square44x44Logo.png diff --git a/backend/icons/Square71x71Logo.png b/backend/tauri-app/icons/Square71x71Logo.png similarity index 100% rename from backend/icons/Square71x71Logo.png rename to backend/tauri-app/icons/Square71x71Logo.png diff --git a/backend/icons/Square89x89Logo.png b/backend/tauri-app/icons/Square89x89Logo.png similarity index 100% rename from backend/icons/Square89x89Logo.png rename to backend/tauri-app/icons/Square89x89Logo.png diff --git a/backend/icons/StoreLogo.png b/backend/tauri-app/icons/StoreLogo.png similarity index 100% rename from backend/icons/StoreLogo.png rename to backend/tauri-app/icons/StoreLogo.png diff --git a/backend/icons/icon-source.png b/backend/tauri-app/icons/icon-source.png similarity index 100% rename from backend/icons/icon-source.png rename to backend/tauri-app/icons/icon-source.png diff --git a/backend/icons/icon.icns b/backend/tauri-app/icons/icon.icns similarity index 100% rename from backend/icons/icon.icns rename to backend/tauri-app/icons/icon.icns diff --git a/backend/icons/icon.ico b/backend/tauri-app/icons/icon.ico similarity index 100% rename from backend/icons/icon.ico rename to backend/tauri-app/icons/icon.ico diff --git a/backend/icons/icon.png b/backend/tauri-app/icons/icon.png similarity index 100% rename from backend/icons/icon.png rename to backend/tauri-app/icons/icon.png diff --git a/backend/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/.doorstop_version b/backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/.doorstop_version similarity index 100% rename from backend/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/.doorstop_version rename to backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/.doorstop_version diff --git a/backend/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/winhttp.dll b/backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/winhttp.dll similarity index 100% rename from backend/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/winhttp.dll rename to backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X64/copy-to-game/winhttp.dll diff --git a/backend/resources/bepinex/Il2Cpp/Windows/X64/mod-loader.zip b/backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X64/mod-loader.zip similarity index 100% rename from backend/resources/bepinex/Il2Cpp/Windows/X64/mod-loader.zip rename to backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X64/mod-loader.zip diff --git a/backend/resources/bepinex/Il2Cpp/Windows/X86/copy-to-game/winhttp.dll b/backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X86/copy-to-game/winhttp.dll similarity index 100% rename from backend/resources/bepinex/Il2Cpp/Windows/X86/copy-to-game/winhttp.dll rename to backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X86/copy-to-game/winhttp.dll diff --git a/backend/resources/bepinex/Il2Cpp/Windows/X86/mod-loader.zip b/backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X86/mod-loader.zip similarity index 100% rename from backend/resources/bepinex/Il2Cpp/Windows/X86/mod-loader.zip rename to backend/tauri-app/resources/bepinex/Il2Cpp/Windows/X86/mod-loader.zip diff --git a/backend/resources/bepinex/Il2Cpp/doorstop_config.ini b/backend/tauri-app/resources/bepinex/Il2Cpp/doorstop_config.ini similarity index 100% rename from backend/resources/bepinex/Il2Cpp/doorstop_config.ini rename to backend/tauri-app/resources/bepinex/Il2Cpp/doorstop_config.ini diff --git a/backend/resources/bepinex/Mono/Linux/mod-loader.zip b/backend/tauri-app/resources/bepinex/Mono/Linux/mod-loader.zip similarity index 100% rename from backend/resources/bepinex/Mono/Linux/mod-loader.zip rename to backend/tauri-app/resources/bepinex/Mono/Linux/mod-loader.zip diff --git a/backend/resources/bepinex/Mono/Windows/X64/copy-to-game/winhttp.dll b/backend/tauri-app/resources/bepinex/Mono/Windows/X64/copy-to-game/winhttp.dll similarity index 100% rename from backend/resources/bepinex/Mono/Windows/X64/copy-to-game/winhttp.dll rename to backend/tauri-app/resources/bepinex/Mono/Windows/X64/copy-to-game/winhttp.dll diff --git a/backend/resources/bepinex/Mono/Windows/X64/mod-loader.zip b/backend/tauri-app/resources/bepinex/Mono/Windows/X64/mod-loader.zip similarity index 100% rename from backend/resources/bepinex/Mono/Windows/X64/mod-loader.zip rename to backend/tauri-app/resources/bepinex/Mono/Windows/X64/mod-loader.zip diff --git a/backend/resources/bepinex/Mono/Windows/X86/copy-to-game/winhttp.dll b/backend/tauri-app/resources/bepinex/Mono/Windows/X86/copy-to-game/winhttp.dll similarity index 100% rename from backend/resources/bepinex/Mono/Windows/X86/copy-to-game/winhttp.dll rename to backend/tauri-app/resources/bepinex/Mono/Windows/X86/copy-to-game/winhttp.dll diff --git a/backend/resources/bepinex/Mono/Windows/X86/mod-loader.zip b/backend/tauri-app/resources/bepinex/Mono/Windows/X86/mod-loader.zip similarity index 100% rename from backend/resources/bepinex/Mono/Windows/X86/mod-loader.zip rename to backend/tauri-app/resources/bepinex/Mono/Windows/X86/mod-loader.zip diff --git a/backend/resources/bepinex/Mono/doorstop_config.ini b/backend/tauri-app/resources/bepinex/Mono/doorstop_config.ini similarity index 100% rename from backend/resources/bepinex/Mono/doorstop_config.ini rename to backend/tauri-app/resources/bepinex/Mono/doorstop_config.ini diff --git a/backend/resources/bepinex/config/BepInEx-legacy.cfg b/backend/tauri-app/resources/bepinex/config/BepInEx-legacy.cfg similarity index 100% rename from backend/resources/bepinex/config/BepInEx-legacy.cfg rename to backend/tauri-app/resources/bepinex/config/BepInEx-legacy.cfg diff --git a/backend/resources/bepinex/config/BepInEx.cfg b/backend/tauri-app/resources/bepinex/config/BepInEx.cfg similarity index 100% rename from backend/resources/bepinex/config/BepInEx.cfg rename to backend/tauri-app/resources/bepinex/config/BepInEx.cfg diff --git a/backend/src/app_state.rs b/backend/tauri-app/src/app_state.rs similarity index 100% rename from backend/src/app_state.rs rename to backend/tauri-app/src/app_state.rs diff --git a/backend/src/events.rs b/backend/tauri-app/src/events.rs similarity index 100% rename from backend/src/events.rs rename to backend/tauri-app/src/events.rs diff --git a/backend/src/main.rs b/backend/tauri-app/src/main.rs similarity index 100% rename from backend/src/main.rs rename to backend/tauri-app/src/main.rs diff --git a/backend/src/result.rs b/backend/tauri-app/src/result.rs similarity index 100% rename from backend/src/result.rs rename to backend/tauri-app/src/result.rs diff --git a/backend/tauri.conf.json b/backend/tauri-app/tauri.conf.json similarity index 100% rename from backend/tauri.conf.json rename to backend/tauri-app/tauri.conf.json From ad15eaea401718972246d34ac4966ebdc6f7cd7d Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Tue, 3 Sep 2024 15:06:28 +0200 Subject: [PATCH 238/255] move rai-pal-core to core --- .vscode/settings.json | 1 + CONTRIBUTING.md | 2 +- backend/Cargo.toml | 4 +- backend/{rai-pal-core => core}/Cargo.toml | 0 .../{rai-pal-core => core}/src/analytics.rs | 0 backend/{rai-pal-core => core}/src/debug.rs | 0 backend/{rai-pal-core => core}/src/files.rs | 0 .../src/game_engines/game_engine.rs | 0 .../src/game_engines/mod.rs | 0 .../src/game_engines/unity.rs | 0 .../src/game_engines/unreal.rs | 0 .../src/game_executable.rs | 0 .../{rai-pal-core => core}/src/game_mod.rs | 0 .../src/game_subscription.rs | 0 .../{rai-pal-core => core}/src/game_tag.rs | 0 .../{rai-pal-core => core}/src/game_title.rs | 0 .../src/installed_game.rs | 0 backend/{rai-pal-core => core}/src/lib.rs | 0 .../{rai-pal-core => core}/src/local_mod.rs | 0 backend/{rai-pal-core => core}/src/maps.rs | 0 .../src/mod_loaders/bepinex.rs | 0 .../src/mod_loaders/mod.rs | 0 .../src/mod_loaders/mod_database.rs | 0 .../src/mod_loaders/mod_loader.rs | 0 .../src/mod_loaders/runnable_loader.rs | 0 .../src/mod_manifest.rs | 0 .../{rai-pal-core => core}/src/owned_game.rs | 0 backend/{rai-pal-core => core}/src/paths.rs | 0 .../src/providers/epic_provider.rs | 0 .../src/providers/gog_provider.rs | 0 .../src/providers/itch_provider.rs | 0 .../src/providers/manual_provider.rs | 0 .../src/providers/mod.rs | 0 .../src/providers/provider.rs | 0 .../src/providers/provider_cache.rs | 0 .../src/providers/provider_command.rs | 0 .../src/providers/steam_provider.rs | 0 .../src/providers/xbox_provider.rs | 0 .../src/remote_games.rs | 0 .../{rai-pal-core => core}/src/remote_mod.rs | 0 backend/{rai-pal-core => core}/src/result.rs | 0 .../src/steam/appinfo.rs | 0 .../{rai-pal-core => core}/src/steam/mod.rs | 0 .../src/steam/thumbnail.rs | 0 backend/{rai-pal-core => core}/src/tests.rs | 0 backend/{rai-pal-core => core}/src/windows.rs | 0 backend/frontend/api/bindings.ts | 384 ------------------ backend/tauri-app/src/main.rs | 2 +- backend/tauri-app/tauri.conf.json | 2 +- 49 files changed, 6 insertions(+), 389 deletions(-) rename backend/{rai-pal-core => core}/Cargo.toml (100%) rename backend/{rai-pal-core => core}/src/analytics.rs (100%) rename backend/{rai-pal-core => core}/src/debug.rs (100%) rename backend/{rai-pal-core => core}/src/files.rs (100%) rename backend/{rai-pal-core => core}/src/game_engines/game_engine.rs (100%) rename backend/{rai-pal-core => core}/src/game_engines/mod.rs (100%) rename backend/{rai-pal-core => core}/src/game_engines/unity.rs (100%) rename backend/{rai-pal-core => core}/src/game_engines/unreal.rs (100%) rename backend/{rai-pal-core => core}/src/game_executable.rs (100%) rename backend/{rai-pal-core => core}/src/game_mod.rs (100%) rename backend/{rai-pal-core => core}/src/game_subscription.rs (100%) rename backend/{rai-pal-core => core}/src/game_tag.rs (100%) rename backend/{rai-pal-core => core}/src/game_title.rs (100%) rename backend/{rai-pal-core => core}/src/installed_game.rs (100%) rename backend/{rai-pal-core => core}/src/lib.rs (100%) rename backend/{rai-pal-core => core}/src/local_mod.rs (100%) rename backend/{rai-pal-core => core}/src/maps.rs (100%) rename backend/{rai-pal-core => core}/src/mod_loaders/bepinex.rs (100%) rename backend/{rai-pal-core => core}/src/mod_loaders/mod.rs (100%) rename backend/{rai-pal-core => core}/src/mod_loaders/mod_database.rs (100%) rename backend/{rai-pal-core => core}/src/mod_loaders/mod_loader.rs (100%) rename backend/{rai-pal-core => core}/src/mod_loaders/runnable_loader.rs (100%) rename backend/{rai-pal-core => core}/src/mod_manifest.rs (100%) rename backend/{rai-pal-core => core}/src/owned_game.rs (100%) rename backend/{rai-pal-core => core}/src/paths.rs (100%) rename backend/{rai-pal-core => core}/src/providers/epic_provider.rs (100%) rename backend/{rai-pal-core => core}/src/providers/gog_provider.rs (100%) rename backend/{rai-pal-core => core}/src/providers/itch_provider.rs (100%) rename backend/{rai-pal-core => core}/src/providers/manual_provider.rs (100%) rename backend/{rai-pal-core => core}/src/providers/mod.rs (100%) rename backend/{rai-pal-core => core}/src/providers/provider.rs (100%) rename backend/{rai-pal-core => core}/src/providers/provider_cache.rs (100%) rename backend/{rai-pal-core => core}/src/providers/provider_command.rs (100%) rename backend/{rai-pal-core => core}/src/providers/steam_provider.rs (100%) rename backend/{rai-pal-core => core}/src/providers/xbox_provider.rs (100%) rename backend/{rai-pal-core => core}/src/remote_games.rs (100%) rename backend/{rai-pal-core => core}/src/remote_mod.rs (100%) rename backend/{rai-pal-core => core}/src/result.rs (100%) rename backend/{rai-pal-core => core}/src/steam/appinfo.rs (100%) rename backend/{rai-pal-core => core}/src/steam/mod.rs (100%) rename backend/{rai-pal-core => core}/src/steam/thumbnail.rs (100%) rename backend/{rai-pal-core => core}/src/tests.rs (100%) rename backend/{rai-pal-core => core}/src/windows.rs (100%) delete mode 100644 backend/frontend/api/bindings.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 47ce7bac..5d73853e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,6 +3,7 @@ "Andreas", "Anticheat", "appguid", + "appinfo", "appname", "Arkham", "cargoquery", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f764d5a4..6bd30802 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,7 @@ The project is split into two main parts: [`/backend/Cargo.toml`](/backend/Cargo.toml) is the [cargo workspace](https://doc.rust-lang.org/book/ch14-03-cargo-workspaces.html) manifest. So it's Rust settings and stuff that relates to all crates within the workspace. Those crates are: - [`/backend/tauri-app`](/backend/tauri-app): Anything specific to Tauri, like all the app commands and events that can be called. -- [`/backend/rai-pal-core`](/backend/rai-pal-core): Main Rai Pal logic. Shouldn't depend on anything Tauri-specific, could theoretically be split out into an isolated crate to be used by different frontends. The crate in `tauri-app` will reference this crate, to actually do the Rai Pal magic. +- [`/backend/core`](/backend/core): Main Rai Pal logic. Shouldn't depend on anything Tauri-specific, could theoretically be split out into an isolated crate to be used by different frontends. The crate in `tauri-app` will reference this crate, to actually do the Rai Pal magic. - [`/backend/proc-macros`](/backend/proc-macros): Procedural macros ([read more](https://doc.rust-lang.org/reference/procedural-macros.html)). Dependencies that are used by multiple crates in the workspace get defined at the workspace level, on the root `Cargo.toml`. Dependencies that are only used by a specific create, get defined in that crate's `Cargo.toml`. diff --git a/backend/Cargo.toml b/backend/Cargo.toml index d7b793f1..0c713a11 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,5 +1,5 @@ [workspace] -members = ["proc-macros", "rai-pal-core", "tauri-app"] +members = ["proc-macros", "core", "tauri-app"] [workspace.package] version = "0.13.0" @@ -10,7 +10,7 @@ edition = "2021" [workspace.dependencies] log = "0.4.22" -rai-pal-core = { path = "./rai-pal-core" } +rai-pal-core = { path = "./core" } rai-pal-proc-macros = { path = "./proc-macros" } serde = { version = "1.0.209", features = ["derive"] } serde_json = "1.0.127" diff --git a/backend/rai-pal-core/Cargo.toml b/backend/core/Cargo.toml similarity index 100% rename from backend/rai-pal-core/Cargo.toml rename to backend/core/Cargo.toml diff --git a/backend/rai-pal-core/src/analytics.rs b/backend/core/src/analytics.rs similarity index 100% rename from backend/rai-pal-core/src/analytics.rs rename to backend/core/src/analytics.rs diff --git a/backend/rai-pal-core/src/debug.rs b/backend/core/src/debug.rs similarity index 100% rename from backend/rai-pal-core/src/debug.rs rename to backend/core/src/debug.rs diff --git a/backend/rai-pal-core/src/files.rs b/backend/core/src/files.rs similarity index 100% rename from backend/rai-pal-core/src/files.rs rename to backend/core/src/files.rs diff --git a/backend/rai-pal-core/src/game_engines/game_engine.rs b/backend/core/src/game_engines/game_engine.rs similarity index 100% rename from backend/rai-pal-core/src/game_engines/game_engine.rs rename to backend/core/src/game_engines/game_engine.rs diff --git a/backend/rai-pal-core/src/game_engines/mod.rs b/backend/core/src/game_engines/mod.rs similarity index 100% rename from backend/rai-pal-core/src/game_engines/mod.rs rename to backend/core/src/game_engines/mod.rs diff --git a/backend/rai-pal-core/src/game_engines/unity.rs b/backend/core/src/game_engines/unity.rs similarity index 100% rename from backend/rai-pal-core/src/game_engines/unity.rs rename to backend/core/src/game_engines/unity.rs diff --git a/backend/rai-pal-core/src/game_engines/unreal.rs b/backend/core/src/game_engines/unreal.rs similarity index 100% rename from backend/rai-pal-core/src/game_engines/unreal.rs rename to backend/core/src/game_engines/unreal.rs diff --git a/backend/rai-pal-core/src/game_executable.rs b/backend/core/src/game_executable.rs similarity index 100% rename from backend/rai-pal-core/src/game_executable.rs rename to backend/core/src/game_executable.rs diff --git a/backend/rai-pal-core/src/game_mod.rs b/backend/core/src/game_mod.rs similarity index 100% rename from backend/rai-pal-core/src/game_mod.rs rename to backend/core/src/game_mod.rs diff --git a/backend/rai-pal-core/src/game_subscription.rs b/backend/core/src/game_subscription.rs similarity index 100% rename from backend/rai-pal-core/src/game_subscription.rs rename to backend/core/src/game_subscription.rs diff --git a/backend/rai-pal-core/src/game_tag.rs b/backend/core/src/game_tag.rs similarity index 100% rename from backend/rai-pal-core/src/game_tag.rs rename to backend/core/src/game_tag.rs diff --git a/backend/rai-pal-core/src/game_title.rs b/backend/core/src/game_title.rs similarity index 100% rename from backend/rai-pal-core/src/game_title.rs rename to backend/core/src/game_title.rs diff --git a/backend/rai-pal-core/src/installed_game.rs b/backend/core/src/installed_game.rs similarity index 100% rename from backend/rai-pal-core/src/installed_game.rs rename to backend/core/src/installed_game.rs diff --git a/backend/rai-pal-core/src/lib.rs b/backend/core/src/lib.rs similarity index 100% rename from backend/rai-pal-core/src/lib.rs rename to backend/core/src/lib.rs diff --git a/backend/rai-pal-core/src/local_mod.rs b/backend/core/src/local_mod.rs similarity index 100% rename from backend/rai-pal-core/src/local_mod.rs rename to backend/core/src/local_mod.rs diff --git a/backend/rai-pal-core/src/maps.rs b/backend/core/src/maps.rs similarity index 100% rename from backend/rai-pal-core/src/maps.rs rename to backend/core/src/maps.rs diff --git a/backend/rai-pal-core/src/mod_loaders/bepinex.rs b/backend/core/src/mod_loaders/bepinex.rs similarity index 100% rename from backend/rai-pal-core/src/mod_loaders/bepinex.rs rename to backend/core/src/mod_loaders/bepinex.rs diff --git a/backend/rai-pal-core/src/mod_loaders/mod.rs b/backend/core/src/mod_loaders/mod.rs similarity index 100% rename from backend/rai-pal-core/src/mod_loaders/mod.rs rename to backend/core/src/mod_loaders/mod.rs diff --git a/backend/rai-pal-core/src/mod_loaders/mod_database.rs b/backend/core/src/mod_loaders/mod_database.rs similarity index 100% rename from backend/rai-pal-core/src/mod_loaders/mod_database.rs rename to backend/core/src/mod_loaders/mod_database.rs diff --git a/backend/rai-pal-core/src/mod_loaders/mod_loader.rs b/backend/core/src/mod_loaders/mod_loader.rs similarity index 100% rename from backend/rai-pal-core/src/mod_loaders/mod_loader.rs rename to backend/core/src/mod_loaders/mod_loader.rs diff --git a/backend/rai-pal-core/src/mod_loaders/runnable_loader.rs b/backend/core/src/mod_loaders/runnable_loader.rs similarity index 100% rename from backend/rai-pal-core/src/mod_loaders/runnable_loader.rs rename to backend/core/src/mod_loaders/runnable_loader.rs diff --git a/backend/rai-pal-core/src/mod_manifest.rs b/backend/core/src/mod_manifest.rs similarity index 100% rename from backend/rai-pal-core/src/mod_manifest.rs rename to backend/core/src/mod_manifest.rs diff --git a/backend/rai-pal-core/src/owned_game.rs b/backend/core/src/owned_game.rs similarity index 100% rename from backend/rai-pal-core/src/owned_game.rs rename to backend/core/src/owned_game.rs diff --git a/backend/rai-pal-core/src/paths.rs b/backend/core/src/paths.rs similarity index 100% rename from backend/rai-pal-core/src/paths.rs rename to backend/core/src/paths.rs diff --git a/backend/rai-pal-core/src/providers/epic_provider.rs b/backend/core/src/providers/epic_provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/epic_provider.rs rename to backend/core/src/providers/epic_provider.rs diff --git a/backend/rai-pal-core/src/providers/gog_provider.rs b/backend/core/src/providers/gog_provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/gog_provider.rs rename to backend/core/src/providers/gog_provider.rs diff --git a/backend/rai-pal-core/src/providers/itch_provider.rs b/backend/core/src/providers/itch_provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/itch_provider.rs rename to backend/core/src/providers/itch_provider.rs diff --git a/backend/rai-pal-core/src/providers/manual_provider.rs b/backend/core/src/providers/manual_provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/manual_provider.rs rename to backend/core/src/providers/manual_provider.rs diff --git a/backend/rai-pal-core/src/providers/mod.rs b/backend/core/src/providers/mod.rs similarity index 100% rename from backend/rai-pal-core/src/providers/mod.rs rename to backend/core/src/providers/mod.rs diff --git a/backend/rai-pal-core/src/providers/provider.rs b/backend/core/src/providers/provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/provider.rs rename to backend/core/src/providers/provider.rs diff --git a/backend/rai-pal-core/src/providers/provider_cache.rs b/backend/core/src/providers/provider_cache.rs similarity index 100% rename from backend/rai-pal-core/src/providers/provider_cache.rs rename to backend/core/src/providers/provider_cache.rs diff --git a/backend/rai-pal-core/src/providers/provider_command.rs b/backend/core/src/providers/provider_command.rs similarity index 100% rename from backend/rai-pal-core/src/providers/provider_command.rs rename to backend/core/src/providers/provider_command.rs diff --git a/backend/rai-pal-core/src/providers/steam_provider.rs b/backend/core/src/providers/steam_provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/steam_provider.rs rename to backend/core/src/providers/steam_provider.rs diff --git a/backend/rai-pal-core/src/providers/xbox_provider.rs b/backend/core/src/providers/xbox_provider.rs similarity index 100% rename from backend/rai-pal-core/src/providers/xbox_provider.rs rename to backend/core/src/providers/xbox_provider.rs diff --git a/backend/rai-pal-core/src/remote_games.rs b/backend/core/src/remote_games.rs similarity index 100% rename from backend/rai-pal-core/src/remote_games.rs rename to backend/core/src/remote_games.rs diff --git a/backend/rai-pal-core/src/remote_mod.rs b/backend/core/src/remote_mod.rs similarity index 100% rename from backend/rai-pal-core/src/remote_mod.rs rename to backend/core/src/remote_mod.rs diff --git a/backend/rai-pal-core/src/result.rs b/backend/core/src/result.rs similarity index 100% rename from backend/rai-pal-core/src/result.rs rename to backend/core/src/result.rs diff --git a/backend/rai-pal-core/src/steam/appinfo.rs b/backend/core/src/steam/appinfo.rs similarity index 100% rename from backend/rai-pal-core/src/steam/appinfo.rs rename to backend/core/src/steam/appinfo.rs diff --git a/backend/rai-pal-core/src/steam/mod.rs b/backend/core/src/steam/mod.rs similarity index 100% rename from backend/rai-pal-core/src/steam/mod.rs rename to backend/core/src/steam/mod.rs diff --git a/backend/rai-pal-core/src/steam/thumbnail.rs b/backend/core/src/steam/thumbnail.rs similarity index 100% rename from backend/rai-pal-core/src/steam/thumbnail.rs rename to backend/core/src/steam/thumbnail.rs diff --git a/backend/rai-pal-core/src/tests.rs b/backend/core/src/tests.rs similarity index 100% rename from backend/rai-pal-core/src/tests.rs rename to backend/core/src/tests.rs diff --git a/backend/rai-pal-core/src/windows.rs b/backend/core/src/windows.rs similarity index 100% rename from backend/rai-pal-core/src/windows.rs rename to backend/core/src/windows.rs diff --git a/backend/frontend/api/bindings.ts b/backend/frontend/api/bindings.ts deleted file mode 100644 index a3b48932..00000000 --- a/backend/frontend/api/bindings.ts +++ /dev/null @@ -1,384 +0,0 @@ - -// This file was generated by [tauri-specta](https://github.com/oscartbeaumont/tauri-specta). Do not edit this file manually. - -/** user-defined commands **/ - - -export const commands = { -async addGame(path: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("add_game", { path }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async configureMod(installedGame: InstalledGame, modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("configure_mod", { installedGame, modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async deleteMod(modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("delete_mod", { modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async deleteSteamAppinfoCache() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("delete_steam_appinfo_cache") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async downloadMod(modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("download_mod", { modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async frontendReady() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("frontend_ready") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getLocalMods() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_local_mods") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getModLoaders() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_mod_loaders") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getProviderGames(providerId: ProviderId) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_provider_games", { providerId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getProviderIds() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_provider_ids") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getRemoteMods() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_remote_mods") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async installMod(installedGame: InstalledGame, modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("install_mod", { installedGame, modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openGameFolder(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_game_folder", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openGameModsFolder(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_game_mods_folder", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openInstalledModFolder(installedGame: InstalledGame, modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_installed_mod_folder", { installedGame, modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openLogsFolder() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_logs_folder") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openModFolder(modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_mod_folder", { modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openModLoaderFolder(modLoaderId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_mod_loader_folder", { modLoaderId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async openModsFolder() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("open_mods_folder") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async refreshGame(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("refresh_game", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async removeGame(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("remove_game", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async runProviderCommand(ownedGame: OwnedGame, commandAction: ProviderCommandAction) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("run_provider_command", { ownedGame, commandAction }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async runRunnableWithoutGame(modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("run_runnable_without_game", { modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async startGameExe(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("start_game_exe", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async startGame(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("start_game", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async uninstallAllMods(installedGame: InstalledGame) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("uninstall_all_mods", { installedGame }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async uninstallMod(installedGame: InstalledGame, modId: string) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("uninstall_mod", { installedGame, modId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async updateLocalMods() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("update_local_mods") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async fetchRemoteGames() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("fetch_remote_games") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getProviderData(providerId: ProviderId) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_provider_data", { providerId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async clearCache() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("clear_cache") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -} -} - -/** user-defined events **/ - - -export const events = __makeEvents__<{ -errorRaised: ErrorRaised, -executedProviderCommand: ExecutedProviderCommand, -foundInstalledGame: FoundInstalledGame, -foundOwnedGame: FoundOwnedGame, -selectInstalledGame: SelectInstalledGame, -syncLocalMods: SyncLocalMods, -syncModLoaders: SyncModLoaders, -syncRemoteMods: SyncRemoteMods -}>({ -errorRaised: "error-raised", -executedProviderCommand: "executed-provider-command", -foundInstalledGame: "found-installed-game", -foundOwnedGame: "found-owned-game", -selectInstalledGame: "select-installed-game", -syncLocalMods: "sync-local-mods", -syncModLoaders: "sync-mod-loaders", -syncRemoteMods: "sync-remote-mods" -}) - -/** user-defined constants **/ - - - -/** user-defined types **/ - -export type Architecture = "X64" | "X86" -export type CommonModData = { id: string; engine: EngineBrand | null; unityBackend: UnityScriptingBackend | null; engineVersionRange: EngineVersionRange | null; loaderId: string } -export type EngineBrand = "Unity" | "Unreal" | "Godot" | "GameMaker" -export type EngineVersion = { numbers: EngineVersionNumbers; suffix: string | null; display: string } -export type EngineVersionNumbers = { major: number; minor: number | null; patch: number | null } -export type EngineVersionRange = { minimum: EngineVersionNumbers | null; maximum: EngineVersionNumbers | null } -export type Error = "Tauri" | "Core" | "SerdeJson" | { FailedToGetResourcesPath: string } | { EmptyStateData: [] } | { FailedToAccessStateData: string } -export type ErrorRaised = string -export type ExecutedProviderCommand = null -export type FoundInstalledGame = [] -export type FoundOwnedGame = [] -export type GameEngine = { brand: EngineBrand; version: EngineVersion | null } -export type GameExecutable = { path: string; name: string; engine: GameEngine | null; architecture: Architecture | null; scriptingBackend: UnityScriptingBackend | null } -export type GameSubscription = "UbisoftClassics" | "UbisoftPremium" | "XboxGamePass" | "EaPlay" -export type GameTag = "VR" | "Demo" -export type GameTitle = { display: string; normalized: string[] } -export type IdKind = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" | "Ubisoft" | "NormalizedTitle" -export type InstalledGame = { id: string; title: GameTitle; provider: ProviderId; executable: GameExecutable; installedModVersions: { [key in string]: string }; discriminator: string | null; thumbnailUrl: string | null; ownedGameId: string | null; startCommand: ProviderCommand | null } -export type LocalMod = { data: LocalModData; common: CommonModData } -export type LocalModData = { path: string; manifest: Manifest | null } -export type Manifest = { title: string | null; version: string; runnable: RunnableModData | null; engine: EngineBrand | null; engineVersionRange: EngineVersionRange | null; unityBackend: UnityScriptingBackend | null } -export type ModDownload = { id: string; url: string; root: string | null; runnable: RunnableModData | null } -export type ModKind = "Installable" | "Runnable" -export type ModLoaderData = { id: string; path: string; kind: ModKind } -export type OwnedGame = { globalId: string; providerGameId: string; provider: ProviderId; title: GameTitle; releaseDate: bigint | null; thumbnailUrl: string | null; tags: GameTag[]; providerCommands: { [key in ProviderCommandAction]: ProviderCommand }; fromSubscriptions: GameSubscription[] } -export type ProviderCommand = { String: string } | { Path: [string, string[]] } -export type ProviderCommandAction = "Install" | "ShowInLibrary" | "ShowInStore" | "Start" | "OpenInBrowser" -export type ProviderData = { installedGames: { [key in string]: InstalledGame }; ownedGames: { [key in string]: OwnedGame } } -export type ProviderId = "Steam" | "Manual" | "Itch" | "Epic" | "Gog" | "Xbox" -export type RemoteGame = { title: string | null; engines: GameEngine[] | null; ids: { [key in IdKind]: string[] }; subscriptions: GameSubscription[] | null } -export type RemoteMod = { common: CommonModData; data: RemoteModData } -export type RemoteModData = { title: string; deprecated: boolean; author: string; sourceCode: string; description: string; latestVersion: ModDownload | null } -export type RunnableModData = { path: string; args: string[] } -export type SelectInstalledGame = string -export type SyncLocalMods = { [key in string]: LocalMod } -export type SyncModLoaders = { [key in string]: ModLoaderData } -export type SyncRemoteMods = { [key in string]: RemoteMod } -export type UnityScriptingBackend = "Il2Cpp" | "Mono" - -/** tauri-specta globals **/ - -import { - invoke as TAURI_INVOKE, - Channel as TAURI_CHANNEL, -} from "@tauri-apps/api/core"; -import * as TAURI_API_EVENT from "@tauri-apps/api/event"; -import { type WebviewWindow as __WebviewWindow__ } from "@tauri-apps/api/webviewWindow"; - -type __EventObj__ = { - listen: ( - cb: TAURI_API_EVENT.EventCallback, - ) => ReturnType>; - once: ( - cb: TAURI_API_EVENT.EventCallback, - ) => ReturnType>; - emit: T extends null - ? (payload?: T) => ReturnType - : (payload: T) => ReturnType; -}; - -export type Result = - | { status: "ok"; data: T } - | { status: "error"; error: E }; - -function __makeEvents__>( - mappings: Record, -) { - return new Proxy( - {} as unknown as { - [K in keyof T]: __EventObj__ & { - (handle: __WebviewWindow__): __EventObj__; - }; - }, - { - get: (_, event) => { - const name = mappings[event as keyof T]; - - return new Proxy((() => {}) as any, { - apply: (_, __, [window]: [__WebviewWindow__]) => ({ - listen: (arg: any) => window.listen(name, arg), - once: (arg: any) => window.once(name, arg), - emit: (arg: any) => window.emit(name, arg), - }), - get: (_, command: keyof __EventObj__) => { - switch (command) { - case "listen": - return (arg: any) => TAURI_API_EVENT.listen(name, arg); - case "once": - return (arg: any) => TAURI_API_EVENT.once(name, arg); - case "emit": - return (arg: any) => TAURI_API_EVENT.emit(name, arg); - } - }, - }); - }, - }, - ); -} diff --git a/backend/tauri-app/src/main.rs b/backend/tauri-app/src/main.rs index bd35c48a..29e5c36c 100644 --- a/backend/tauri-app/src/main.rs +++ b/backend/tauri-app/src/main.rs @@ -623,7 +623,7 @@ fn main() { builder .export( Typescript::default().bigint(BigIntExportBehavior::BigInt), - "../frontend/api/bindings.ts", + "../../frontend/api/bindings.ts", ) .unwrap_or_else(|err| { log::error!("Failed to generate TypeScript bindings: {err}"); diff --git a/backend/tauri-app/tauri.conf.json b/backend/tauri-app/tauri.conf.json index 5b9110c4..7463b2fd 100644 --- a/backend/tauri-app/tauri.conf.json +++ b/backend/tauri-app/tauri.conf.json @@ -1,5 +1,5 @@ { - "$schema": "../node_modules/@tauri-apps/cli/schema.json", + "$schema": "../../node_modules/@tauri-apps/cli/schema.json", "build": { "beforeDevCommand": "npm run frontend:dev", "beforeBuildCommand": "npm run frontend:build", From 990c5884293d49641b12eb37fdf9cc9a9274801e Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Wed, 4 Sep 2024 13:51:46 +0200 Subject: [PATCH 239/255] update frontend dependencies and move stuff around --- .vscode/settings.json | 1 + backend/tauri-app/Cargo.toml | 2 +- backend/tauri-app/src/main.rs | 13 +- backend/tauri-app/src/typescript.rs | 17 + backend/tauri-app/tauri.conf.json | 2 +- package-lock.json | 12169 +++++++++++++------------- package.json | 114 +- vite.config.ts | 16 +- 8 files changed, 6138 insertions(+), 6196 deletions(-) create mode 100644 backend/tauri-app/src/typescript.rs diff --git a/.vscode/settings.json b/.vscode/settings.json index 5d73853e..d1ff0015 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -48,6 +48,7 @@ "reqwest", "runas", "rusqlite", + "RUSTUP", "shellapi", "softprops", "specta", diff --git a/backend/tauri-app/Cargo.toml b/backend/tauri-app/Cargo.toml index ee8d159d..a8eb45dd 100644 --- a/backend/tauri-app/Cargo.toml +++ b/backend/tauri-app/Cargo.toml @@ -7,13 +7,13 @@ edition.workspace = true tauri-build = { version = "2.0.0-rc.7", features = [] } [dependencies] -specta-typescript = "0.0.7" tauri = { version = "2.0.0-rc.8", features = [] } tauri-plugin-dialog = "2.0.0-rc.3" tauri-plugin-log = "2.0.0-rc.2" tauri-plugin-updater = "2.0.0-rc.2" tauri-plugin-window-state = "2.0.0-rc.2" tauri-runtime = "2.0.0-rc.7" +specta-typescript = "0.0.7" log.workspace = true rai-pal-core.workspace = true diff --git a/backend/tauri-app/src/main.rs b/backend/tauri-app/src/main.rs index 29e5c36c..e412ad9c 100644 --- a/backend/tauri-app/src/main.rs +++ b/backend/tauri-app/src/main.rs @@ -25,7 +25,6 @@ use rai_pal_core::remote_games::{self, RemoteGame}; #[cfg(target_os = "windows")] use rai_pal_core::windows; use rai_pal_core::{analytics, remote_mod, steam}; -use specta_typescript::{BigIntExportBehavior, Typescript}; use tauri::path::BaseDirectory; use tauri::{AppHandle, Manager}; use tauri_plugin_log::{Target, TargetKind}; @@ -35,6 +34,7 @@ use tauri_specta::Builder; mod app_state; mod events; mod result; +mod typescript; #[tauri::command] #[specta::specta] @@ -619,16 +619,7 @@ fn main() { ]) .events(events::collect_events()); - #[cfg(debug_assertions)] - builder - .export( - Typescript::default().bigint(BigIntExportBehavior::BigInt), - "../../frontend/api/bindings.ts", - ) - .unwrap_or_else(|err| { - log::error!("Failed to generate TypeScript bindings: {err}"); - std::process::exit(1); - }); + typescript::export(&builder); tauri::Builder::default() .plugin( diff --git a/backend/tauri-app/src/typescript.rs b/backend/tauri-app/src/typescript.rs new file mode 100644 index 00000000..9822e6fa --- /dev/null +++ b/backend/tauri-app/src/typescript.rs @@ -0,0 +1,17 @@ +#[cfg(debug_assertions)] +use specta_typescript::{BigIntExportBehavior, Typescript}; + +const BINDINGS_PATH: &str = "../../frontend/api/bindings.ts"; + +pub fn export(builder: &tauri_specta::Builder) { + #[cfg(debug_assertions)] + builder + .export( + Typescript::default().bigint(BigIntExportBehavior::BigInt), + BINDINGS_PATH, + ) + .unwrap_or_else(|err| { + log::error!("Failed to generate TypeScript bindings: {err}"); + std::process::exit(1); + }); +} diff --git a/backend/tauri-app/tauri.conf.json b/backend/tauri-app/tauri.conf.json index 7463b2fd..a71b8821 100644 --- a/backend/tauri-app/tauri.conf.json +++ b/backend/tauri-app/tauri.conf.json @@ -3,7 +3,7 @@ "build": { "beforeDevCommand": "npm run frontend:dev", "beforeBuildCommand": "npm run frontend:build", - "frontendDist": "../dist", + "frontendDist": "../../dist", "devUrl": "http://localhost:1420" }, "bundle": { diff --git a/package-lock.json b/package-lock.json index 166f892b..51144f06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6119 +1,6054 @@ { - "name": "rai-mods", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "rai-mods", - "version": "0.0.0", - "devDependencies": { - "@mantine/code-highlight": "^7.11.0", - "@mantine/core": "^7.11.0", - "@mantine/hooks": "^7.11.0", - "@mantine/notifications": "^7.11.0", - "@tabler/icons-react": "^3.7.0", - "@tauri-apps/api": "2.0.0-rc.0", - "@tauri-apps/cli": "^2.0.0-rc.0", - "@tauri-apps/plugin-dialog": "2.0.0-rc.0", - "@tauri-apps/plugin-process": "2.0.0-rc.0", - "@tauri-apps/plugin-store": "^2.0.0-rc.0", - "@tauri-apps/plugin-updater": "2.0.0-rc.0", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "8.0.0", - "@typescript-eslint/parser": "8.0.0", - "@vitejs/plugin-react": "^4.3.1", - "cross-env": "^7.0.3", - "eslint": "8.57.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.34.3", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7", - "jotai": "^2.8.4", - "postcss": "^8.4.38", - "postcss-preset-mantine": "^1.15.0", - "postcss-simple-vars": "^7.0.1", - "prettier": "^3.3.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-virtuoso": "^4.9.0", - "typescript": "^5.5.2", - "vite": "5.3.5" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "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==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "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==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.2" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", - "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", - "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/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": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", - "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.5" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", - "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.5" - } - }, - "node_modules/@floating-ui/react": { - "version": "0.26.20", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.20.tgz", - "integrity": "sha512-RixKJJG92fcIsVoqrFr4Onpzh7hlOx4U7NV4aLhMLmtvjZ5oTB/WzXaANYUZATKqXvvW7t9sCxtzejip26N5Ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.1.1", - "@floating-ui/utils": "^0.2.5", - "tabbable": "^6.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", - "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/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": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mantine/code-highlight": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.11.2.tgz", - "integrity": "sha512-9q4p4LDbuuUhQ8GjzmI/Ven2JxjoT8+Sjnv76hNGJK9xRtorJs2PJn/fdQTd7QX9tOaalnsENIj85bSZ4V3X2g==", - "dev": true, - "license": "MIT", - "dependencies": { - "clsx": "^2.1.1", - "highlight.js": "^11.9.0" - }, - "peerDependencies": { - "@mantine/core": "7.11.2", - "@mantine/hooks": "7.11.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - } - }, - "node_modules/@mantine/core": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.11.2.tgz", - "integrity": "sha512-T64RjdgY8UPAv249miW1lQyPPot1JbCcKKsAZMNQHgcttcxLhrFpKVvglc4/48hdSoxI4LYJPNvqp7zciZmucQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/react": "^0.26.9", - "clsx": "^2.1.1", - "react-number-format": "^5.3.1", - "react-remove-scroll": "^2.5.7", - "react-textarea-autosize": "8.5.3", - "type-fest": "^4.12.0" - }, - "peerDependencies": { - "@mantine/hooks": "7.11.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - } - }, - "node_modules/@mantine/hooks": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.11.2.tgz", - "integrity": "sha512-jhyVe/sbDEG2U8rr2lMecUPgQxcfr5hh9HazqGfkS7ZRIMDO7uJ947yAcTMGGkp5Lxtt5TBFt1Cb6tiB2/1agg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/@mantine/notifications": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.11.2.tgz", - "integrity": "sha512-KB/6mp3mU3LvcFlfMc5zK5mWcrAO+zAGeiBb1oUjNFXBECCn9xizqqUeT0YbWBHL7wysq9IThDJxLwUBnQt+8Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mantine/store": "7.11.2", - "react-transition-group": "4.4.5" - }, - "peerDependencies": { - "@mantine/core": "7.11.2", - "@mantine/hooks": "7.11.2", - "react": "^18.2.0", - "react-dom": "^18.2.0" - } - }, - "node_modules/@mantine/store": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.11.2.tgz", - "integrity": "sha512-FfkmnOnCivOjqwNaTZeV4TgDANUs7fP+0uSgzp0GuvwTuDfQNVafPBRzPkjKuz5ug+Nn9l6WwjfJ6LBDv9U0LQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^18.2.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "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": { - "node": ">= 8" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.19.2.tgz", - "integrity": "sha512-OHflWINKtoCFSpm/WmuQaWW4jeX+3Qt3XQDepkkiFTsoxFc5BpF3Z5aDxFZgBqRjO6ATP5+b1iilp4kGIZVWlA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.19.2.tgz", - "integrity": "sha512-k0OC/b14rNzMLDOE6QMBCjDRm3fQOHAL8Ldc9bxEWvMo4Ty9RY6rWmGetNTWhPo+/+FNd1lsQYRd0/1OSix36A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.19.2.tgz", - "integrity": "sha512-IIARRgWCNWMTeQH+kr/gFTHJccKzwEaI0YSvtqkEBPj7AshElFq89TyreKNFAGh5frLfDCbodnq+Ye3dqGKPBw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.19.2.tgz", - "integrity": "sha512-52udDMFDv54BTAdnw+KXNF45QCvcJOcYGl3vQkp4vARyrcdI/cXH8VXTEv/8QWfd6Fru8QQuw1b2uNersXOL0g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.19.2.tgz", - "integrity": "sha512-r+SI2t8srMPYZeoa1w0o/AfoVt9akI1ihgazGYPQGRilVAkuzMGiTtexNZkrPkQsyFrvqq/ni8f3zOnHw4hUbA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.19.2.tgz", - "integrity": "sha512-+tYiL4QVjtI3KliKBGtUU7yhw0GMcJJuB9mLTCEauHEsqfk49gtUBXGtGP3h1LW8MbaTY6rSFIQV1XOBps1gBA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.19.2.tgz", - "integrity": "sha512-OR5DcvZiYN75mXDNQQxlQPTv4D+uNCUsmSCSY2FolLf9W5I4DSoJyg7z9Ea3TjKfhPSGgMJiey1aWvlWuBzMtg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.19.2.tgz", - "integrity": "sha512-Hw3jSfWdUSauEYFBSFIte6I8m6jOj+3vifLg8EU3lreWulAUpch4JBjDMtlKosrBzkr0kwKgL9iCfjA8L3geoA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.19.2.tgz", - "integrity": "sha512-rhjvoPBhBwVnJRq/+hi2Q3EMiVF538/o9dBuj9TVLclo9DuONqt5xfWSaE6MYiFKpo/lFPJ/iSI72rYWw5Hc7w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.19.2.tgz", - "integrity": "sha512-EAz6vjPwHHs2qOCnpQkw4xs14XJq84I81sDRGPEjKPFVPBw7fwvtwhVjcZR6SLydCv8zNK8YGFblKWd/vRmP8g==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.19.2.tgz", - "integrity": "sha512-IJSUX1xb8k/zN9j2I7B5Re6B0NNJDJ1+soezjNojhT8DEVeDNptq2jgycCOpRhyGj0+xBn7Cq+PK7Q+nd2hxLA==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.19.2.tgz", - "integrity": "sha512-OgaToJ8jSxTpgGkZSkwKE+JQGihdcaqnyHEFOSAU45utQ+yLruE1dkonB2SDI8t375wOKgNn8pQvaWY9kPzxDQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.19.2.tgz", - "integrity": "sha512-5V3mPpWkB066XZZBgSd1lwozBk7tmOkKtquyCJ6T4LN3mzKENXyBwWNQn8d0Ci81hvlBw5RoFgleVpL6aScLYg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.19.2.tgz", - "integrity": "sha512-ayVstadfLeeXI9zUPiKRVT8qF55hm7hKa+0N1V6Vj+OTNFfKSoUxyZvzVvgtBxqSb5URQ8sK6fhwxr9/MLmxdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.19.2.tgz", - "integrity": "sha512-Mda7iG4fOLHNsPqjWSjANvNZYoW034yxgrndof0DwCy0D3FvTjeNo+HGE6oGWgvcLZNLlcp0hLEFcRs+UGsMLg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.19.2.tgz", - "integrity": "sha512-DPi0ubYhSow/00YqmG1jWm3qt1F8aXziHc/UNy8bo9cpCacqhuWu+iSq/fp2SyEQK7iYTZ60fBU9cat3MXTjIQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@tabler/icons": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.11.0.tgz", - "integrity": "sha512-/vZinJNvCYhdAB+RUsyCpanSPuOEKHHIZi4Uu0Bw7ilewHnQhCWUPrT704uHCRli2ROl7spADPmWzAqOganA5A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/codecalm" - } - }, - "node_modules/@tabler/icons-react": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.11.0.tgz", - "integrity": "sha512-xHNBi9mns1slvqos+7LkP3ube4CjWrANMbxMaorzwzO9J/+y1sAEG/sN8CV8FmtpYW/9/gDR+OWCjjLLg0RmAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tabler/icons": "3.11.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/codecalm" - }, - "peerDependencies": { - "react": ">= 16" - } - }, - "node_modules/@tauri-apps/api": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-rc.0.tgz", - "integrity": "sha512-v454Qs3REHc3Za59U+/eSmBsdmF+3NE5+76+lFDaitVqN4ZglDHENDaMARYKGJVZuxiSkzyqG0SeG7lLQjVkPA==", - "dev": true, - "license": "Apache-2.0 OR MIT", - "engines": { - "node": ">= 18.18", - "npm": ">= 6.6.0", - "yarn": ">= 1.19.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/tauri" - } - }, - "node_modules/@tauri-apps/cli": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.0.tgz", - "integrity": "sha512-X9N/R7e3zeTpU0HgQi2kaNYncMFoSTzXstnUyGOcKrJcCkR4ebbA2nYqhGvIPfglLKHNFRTZwfPNhixx2Ftxxg==", - "dev": true, - "license": "Apache-2.0 OR MIT", - "bin": { - "tauri": "tauri.js" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/tauri" - }, - "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.0", - "@tauri-apps/cli-darwin-x64": "2.0.0-rc.0", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.0", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.0", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.0", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.0", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.0", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.0", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.0", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.0" - } - }, - "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.0.tgz", - "integrity": "sha512-jpQc++6ESFUuBpoXvJNPTRtrmToMIByOynZ4K5SAwI9RkKUikSaDmlRZV0GisOVPT7TT08khk7MPtAQeFyjqwA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.0.tgz", - "integrity": "sha512-EnqsgcNUwH29YjQ4JdBID5kILQQdIJgZ36VQgtju/BBvnd1lr+6Bswdk1/4y41hhAVz9WyHeMCnTH33CSKvNxw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.0.tgz", - "integrity": "sha512-YKg/qThAmQYRToiV8lx/DvMf0VaUJAutIfv8ALq9Or4zdg7mZlAlKvF+7lZQQRmKhQ62+0gnoJS2HyN8feaagw==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.0.tgz", - "integrity": "sha512-UnflWuNhH/u41GSmG1jm6qhWUM4o1AB463QCaf2fAjLo5GWiI78U6rJOOXZvOOmWIQuzsmAUZjNDORWW13+osA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.0.tgz", - "integrity": "sha512-sWRaDyb332gtHWHr0KvoLzkzvXqRpZ0vpQYxKF2/mIZtaUuMtU56GmRwFVX4VjQYgWb3yWmzTr+tEKjCjXbjng==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.0.tgz", - "integrity": "sha512-1dokW+9ZfhwzwYz42jYR5A0/VnGoEGVW7HyN1N6KvHeL1FpSbh0LoTsDODjVjZSjXd62+Aac/stbJqBZChQWbA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.0.tgz", - "integrity": "sha512-7tb34p3vLEGS4pGRpmxcz7eq37yD7DVe4XFfgj8ZO0KsaRBVivzNK2snNDLnd0dVZcx/lJjZc8Cf0B5W1/x/Jw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.0.tgz", - "integrity": "sha512-Ilw3Gro8ZBew9yfBXcaET9lLj0g4jehWDMH6j2Wdje1rnvBbQShMaSn3WNMfJypyet5nqM88nGA3YipzmVcIBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.0.tgz", - "integrity": "sha512-AWzgDlvv0BssWH3aNsDXLRkKbGynWdm5X6DenSQKtZm5dmDBZsNlZRMgkyPb8WSHK/7ARznKs2OdnkuHWuh9ww==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.0.tgz", - "integrity": "sha512-zmXDUkBmzZ6lk6jT6AoOAE2w+kmkLX5uf/vaJHHzE6WsrZ6UymH0HTLwbRXhaplvpnzXGVyLuSlv3/BK6Q69aQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@tauri-apps/plugin-dialog": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-rc.0.tgz", - "integrity": "sha512-DPOXYe8SQ6Radk/67EOdaomlxL7oF99JO/ZUaPp1IBEs3Wro7lhlz63CfdKIBfKIZTLJLzP1R7/EiPL/GTA3Bg==", - "dev": true, - "license": "MIT or APACHE-2.0", - "dependencies": { - "@tauri-apps/api": "^2.0.0-rc.0" - } - }, - "node_modules/@tauri-apps/plugin-process": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.0.0-rc.0.tgz", - "integrity": "sha512-Z12D/kmQzG1vCVf+jLXPhPDUA0pEjFrsg4p0uwO2sotVLM9287IuTM+aIz9cuAYOxFLKcsnDG7amSCL9IfA1gw==", - "dev": true, - "license": "MIT or APACHE-2.0", - "dependencies": { - "@tauri-apps/api": "^2.0.0-rc.0" - } - }, - "node_modules/@tauri-apps/plugin-store": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-store/-/plugin-store-2.0.0-rc.0.tgz", - "integrity": "sha512-KqiEzq6EdRwxrl0/FwyNLwumDBM91xTchdu2a8vfkNub30GuP9z7RskP9ifVRI1gbxfa5TUDi0hKFk/SP7TANQ==", - "dev": true, - "license": "MIT or APACHE-2.0", - "dependencies": { - "@tauri-apps/api": "^2.0.0-rc.0" - } - }, - "node_modules/@tauri-apps/plugin-updater": { - "version": "2.0.0-rc.0", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-rc.0.tgz", - "integrity": "sha512-EKajf/sBpFif0cwXhTo3BmNvTZ2t2DDLRyhA8FFKugZNoOeqU97bHhPT5DIqMUPRE1tyDk9o7sXm8dKf7oz+EA==", - "dev": true, - "license": "MIT or APACHE-2.0", - "dependencies": { - "@tauri-apps/api": "^2.0.0-rc.0" - } - }, - "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": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", - "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "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": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", - "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "18.3.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.3.tgz", - "integrity": "sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0.tgz", - "integrity": "sha512-STIZdwEQRXAHvNUS6ILDf5z3u95Gc8jzywunxSNqX00OooIemaaNIA0vEgynJlycL5AjabYLLrIyHd4iazyvtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.0.0", - "@typescript-eslint/type-utils": "8.0.0", - "@typescript-eslint/utils": "8.0.0", - "@typescript-eslint/visitor-keys": "8.0.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0.tgz", - "integrity": "sha512-pS1hdZ+vnrpDIxuFXYQpLTILglTjSYJ9MbetZctrUawogUsPdz31DIIRZ9+rab0LhYNTsk88w4fIzVheiTbWOQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "8.0.0", - "@typescript-eslint/types": "8.0.0", - "@typescript-eslint/typescript-estree": "8.0.0", - "@typescript-eslint/visitor-keys": "8.0.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0.tgz", - "integrity": "sha512-V0aa9Csx/ZWWv2IPgTfY7T4agYwJyILESu/PVqFtTFz9RIS823mAze+NbnBI8xiwdX3iqeQbcTYlvB04G9wyQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.0.0", - "@typescript-eslint/visitor-keys": "8.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0.tgz", - "integrity": "sha512-mJAFP2mZLTBwAn5WI4PMakpywfWFH5nQZezUQdSKV23Pqo6o9iShQg1hP2+0hJJXP2LnZkWPphdIq4juYYwCeg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "8.0.0", - "@typescript-eslint/utils": "8.0.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0.tgz", - "integrity": "sha512-wgdSGs9BTMWQ7ooeHtu5quddKKs5Z5dS+fHLbrQI+ID0XWJLODGMHRfhwImiHoeO2S5Wir2yXuadJN6/l4JRxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0.tgz", - "integrity": "sha512-5b97WpKMX+Y43YKi4zVcCVLtK5F98dFls3Oxui8LbnmRsseKenbbDinmvxrWegKDMmlkIq/XHuyy0UGLtpCDKg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "8.0.0", - "@typescript-eslint/visitor-keys": "8.0.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0.tgz", - "integrity": "sha512-k/oS/A/3QeGLRvOWCg6/9rATJL5rec7/5s1YmdS0ZU6LHveJyGFwBvLhSRBv6i9xaj7etmosp+l+ViN1I9Aj/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.0", - "@typescript-eslint/types": "8.0.0", - "@typescript-eslint/typescript-estree": "8.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0.tgz", - "integrity": "sha512-oN0K4nkHuOyF3PVMyETbpP5zp6wfyOvm7tWhTMfoqxSSsPmJIh6JNASuZDlODE8eE+0EB9uar+6+vxr9DBTYOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.0.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", - "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.24.5", - "@babel/plugin-transform-react-jsx-self": "^7.24.5", - "@babel/plugin-transform-react-jsx-source": "^7.24.1", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "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": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=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": { - "node": ">= 6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "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": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=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": { - "color-name": "1.1.3" - } - }, - "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/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/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "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": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true, - "license": "MIT" - }, - "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": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "dev": true, - "license": "ISC" - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", - "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "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": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.35.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz", - "integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.19", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.8", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.9", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.9.tgz", - "integrity": "sha512-QK49YrBAo5CLNLseZ7sZgvgTy21E6NEw22eZqc4teZfH8pxV3yXc9XXOYfUI6JNpw7mfHNkAeWtBxrTyykB6HA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "eslint": ">=7" - } - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/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": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/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/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/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": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "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": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "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": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-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": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/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": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/highlight.js": { - "version": "11.10.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", - "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" - } - }, - "node_modules/jotai": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.9.1.tgz", - "integrity": "sha512-t4Q7FIqQB3N/1art4OcqdlEtPmQ2h4DNIzTFhvt06WE0kCpQ1QoG+1A1IGTaQBi2KdDRsnywj+ojmHHKgw6PDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20.0" - }, - "peerDependencies": { - "@types/react": ">=17.0.0", - "react": ">=17.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - } - } - }, - "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==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "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==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/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-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": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" - }, - "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": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.40", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.40.tgz", - "integrity": "sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-js": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", - "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/postcss-mixins": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz", - "integrity": "sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.2.11", - "postcss-js": "^4.0.0", - "postcss-simple-vars": "^7.0.0", - "sugarss": "^4.0.1" - }, - "engines": { - "node": ">=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "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": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.1.1" - }, - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-preset-mantine": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.17.0.tgz", - "integrity": "sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-mixins": "^9.0.4", - "postcss-nested": "^6.0.1" - }, - "peerDependencies": { - "postcss": ">=8.0.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-simple-vars": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", - "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.1" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-number-format": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", - "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", - "dev": true, - "license": "MIT", - "dependencies": { - "prop-types": "^15.7.2" - }, - "peerDependencies": { - "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", - "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-remove-scroll": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", - "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.6", - "react-style-singleton": "^2.2.1", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.0", - "use-sidecar": "^1.1.2" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", - "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-style-singleton": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", - "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-nonce": "^1.0.0", - "invariant": "^2.2.4", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", - "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.20.13", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/react-virtuoso": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.9.0.tgz", - "integrity": "sha512-MiiSGKqvYPfAK3FUe852n2L3M5IXMKP0pUgYQ/UTk90A/l2UNQOvaEUvAZp+0ytL0kOCNk8i8/J8FMKvIq7kqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": ">=16 || >=17 || >= 18", - "react-dom": ">=16 || >=17 || >= 18" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.19.2.tgz", - "integrity": "sha512-6/jgnN1svF9PjNYJ4ya3l+cqutg49vOZ4rVgsDKxdl+5gpGPnByFXWGyfH9YGx9i3nfBwSu1Iyu6vGwFFA0BdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.5" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.19.2", - "@rollup/rollup-android-arm64": "4.19.2", - "@rollup/rollup-darwin-arm64": "4.19.2", - "@rollup/rollup-darwin-x64": "4.19.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.19.2", - "@rollup/rollup-linux-arm-musleabihf": "4.19.2", - "@rollup/rollup-linux-arm64-gnu": "4.19.2", - "@rollup/rollup-linux-arm64-musl": "4.19.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.19.2", - "@rollup/rollup-linux-riscv64-gnu": "4.19.2", - "@rollup/rollup-linux-s390x-gnu": "4.19.2", - "@rollup/rollup-linux-x64-gnu": "4.19.2", - "@rollup/rollup-linux-x64-musl": "4.19.2", - "@rollup/rollup-win32-arm64-msvc": "4.19.2", - "@rollup/rollup-win32-ia32-msvc": "4.19.2", - "@rollup/rollup-win32-x64-msvc": "4.19.2", - "fsevents": "~2.3.2" - } - }, - "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==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/sugarss": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", - "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "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": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true, - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/use-callback-ref": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", - "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dev": true, - "license": "MIT", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sidecar": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", - "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "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/vite": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.5.tgz", - "integrity": "sha512-MdjglKR6AQXQb9JGiS7Rc2wC6uMjcm7Go/NHNO63EwiJXfuk9PgqiP/n5IDJCziMkfw9n4Ubp7lttNwz+8ZVKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.39", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "dev": true, - "license": "MIT", - "dependencies": { - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", - "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } + "name": "rai-mods", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rai-mods", + "version": "0.0.0", + "devDependencies": { + "@mantine/code-highlight": "^7.11.0", + "@mantine/core": "7.12.2", + "@mantine/hooks": "7.12.2", + "@mantine/notifications": "7.12.2", + "@tabler/icons-react": "3.14.0", + "@tauri-apps/api": "2.0.0-rc.4", + "@tauri-apps/cli": "^2.0.0-rc.10", + "@tauri-apps/plugin-dialog": "2.0.0-rc.1", + "@tauri-apps/plugin-process": "2.0.0-rc.1", + "@tauri-apps/plugin-store": "^2.0.0-rc.1", + "@tauri-apps/plugin-updater": "2.0.0-rc.1", + "@types/react": "18.3.5", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "8.4.0", + "@typescript-eslint/parser": "8.4.0", + "@vitejs/plugin-react": "^4.3.1", + "cross-env": "^7.0.3", + "eslint": "8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.34.3", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.7", + "jotai": "^2.8.4", + "postcss": "^8.4.38", + "postcss-preset-mantine": "^1.15.0", + "postcss-simple-vars": "^7.0.1", + "prettier": "3.3.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-virtuoso": "4.10.2", + "typescript": "^5.5.2", + "vite": "5.4.3" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", + "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", + "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", + "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.2" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", + "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", + "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", + "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/parser": "^7.25.3", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.2", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", + "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", + "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.5" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", + "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.5" + } + }, + "node_modules/@floating-ui/react": { + "version": "0.26.20", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.20.tgz", + "integrity": "sha512-RixKJJG92fcIsVoqrFr4Onpzh7hlOx4U7NV4aLhMLmtvjZ5oTB/WzXaANYUZATKqXvvW7t9sCxtzejip26N5Ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.1.1", + "@floating-ui/utils": "^0.2.5", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", + "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", + "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mantine/code-highlight": { + "version": "7.12.2", + "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.12.2.tgz", + "integrity": "sha512-eVVA6ZmtV2qV60qiQW3wvFbs0ryCmzrCJaqU4GV0D+6lGVn8mwbbo36+Jt4Qz/6FrswPD99ALRBlOwHDJe0P8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clsx": "^2.1.1", + "highlight.js": "^11.9.0" + }, + "peerDependencies": { + "@mantine/core": "7.12.2", + "@mantine/hooks": "7.12.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/core": { + "version": "7.12.2", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.12.2.tgz", + "integrity": "sha512-FrMHOKq4s3CiPIxqZ9xnVX7H4PEGNmbtHMvWO/0YlfPgoV0Er/N/DNJOFW1ys4WSnidPTayYeB41riyxxGOpRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.9", + "clsx": "^2.1.1", + "react-number-format": "^5.3.1", + "react-remove-scroll": "^2.5.7", + "react-textarea-autosize": "8.5.3", + "type-fest": "^4.12.0" + }, + "peerDependencies": { + "@mantine/hooks": "7.12.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/hooks": { + "version": "7.12.2", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.12.2.tgz", + "integrity": "sha512-dVMw8jpM0hAzc8e7/GNvzkk9N0RN/m+PKycETB3H6lJGuXJJSRR4wzzgQKpEhHwPccktDpvb4rkukKDq2jA8Fg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/@mantine/notifications": { + "version": "7.12.2", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.12.2.tgz", + "integrity": "sha512-gTvLHkoAZ42v5bZxibP9A50djp5ndEwumVhHSa7mxQ8oSS23tt3It/6hOqH7M+9kHY0a8s+viMiflUzTByA9qg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mantine/store": "7.12.2", + "react-transition-group": "4.4.5" + }, + "peerDependencies": { + "@mantine/core": "7.12.2", + "@mantine/hooks": "7.12.2", + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "node_modules/@mantine/store": { + "version": "7.12.2", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.12.2.tgz", + "integrity": "sha512-NqL31sO/KcAETEWP/CiXrQOQNoE4168vZsxyXacQHGBueVMJa64WIDQtKLHrCnFRMws3vsXF02/OO4bH4XGcMQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^18.2.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "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": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", + "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", + "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", + "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", + "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", + "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", + "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", + "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", + "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", + "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", + "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", + "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", + "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", + "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", + "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", + "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", + "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tabler/icons": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.14.0.tgz", + "integrity": "sha512-OakKjK1kuDWKoNwdnHHVMt11kTZAC10iZpN/8o/CSYdeBH7S3v5n8IyqAYynFxLI8yBGTyBvljtvWdmWh57zSg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + } + }, + "node_modules/@tabler/icons-react": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.14.0.tgz", + "integrity": "sha512-3XdbuyhBNq8aZW0qagR9YL8diACZYSAtaw6VuwcO2l6HzVFPN6N5TDex9WTz/3lf+uktAvOv1kNuuFBjSjN9yw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tabler/icons": "3.14.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/codecalm" + }, + "peerDependencies": { + "react": ">= 16" + } + }, + "node_modules/@tauri-apps/api": { + "version": "2.0.0-rc.4", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-rc.4.tgz", + "integrity": "sha512-UNiIhhKG08j4ooss2oEEVexffmWkgkYlC2M3GcX3VPtNsqFgVNL8Mcw/4Y7rO9M9S+ffAMnLOF5ypzyuyb8tyg==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + } + }, + "node_modules/@tauri-apps/cli": { + "version": "2.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.10.tgz", + "integrity": "sha512-mnoMyeD65DoVWzrLiLRW8Ns5Aktn9Ua7eKTOUEPq+r+1sQtWKxfnYTBEbEWnivduLhJCEDqGP5tyJaPcVXcEzA==", + "dev": true, + "license": "Apache-2.0 OR MIT", + "bin": { + "tauri": "tauri.js" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/tauri" + }, + "optionalDependencies": { + "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.10", + "@tauri-apps/cli-darwin-x64": "2.0.0-rc.10", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.10", + "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.10", + "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.10", + "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.10", + "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.10", + "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.10", + "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.10", + "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.10" + } + }, + "node_modules/@tauri-apps/cli-darwin-arm64": { + "version": "2.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.10.tgz", + "integrity": "sha512-oAuG3n/dIqK5ZedknF1QOgVDlpEepAaaIFHpUi+eIdG1MFp82jgyHqplveVZ95F16j7RhjIMaEhiTF6cGR/baA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/cli-darwin-x64": { + "version": "2.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.10.tgz", + "integrity": "sha512-n4ul0XUBqrA7KbNY6Vo52EBNqTXogYuV2qi5RWR0bIJF/A/vYjZ3LcC1TXXo/X57sDN55LWORrBe4c4Ds8MZrA==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.10.tgz", + "integrity": "sha512-RByz0zRbngps5QMQVsbgCD03TiCMxwAhaZhNtojXQ2AiJFkv1Mu68W/prbpWucw6Ep1nM3/yTIm0aL6ozdh/gw==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.10.tgz", + "integrity": "sha512-ZqpbDIMp5b0jz1ddutJH6S5geLaBEmsMG6eZix+MgcZZRyEfahTMGCq3xkvv+tnrNNq7drvwBISCVSSS0zu3wQ==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.10.tgz", + "integrity": "sha512-EVh1xPqs5bi0aBYbv6Iy1ooFClyK6/wIsNw9DyxWwhPz9I7UNpDAgHm6lOhkMH26Cp/eQPiEA8OdfOLTfCY81A==", + "cpu": [ + "arm64" + ], + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.10.tgz", + "integrity": "sha512-ZLcXJbRRMfgSkZdxBegP/4PlXkoVR1zpx2pE7mKkRgyvwJCx+A2f0+IZM+VVu/WRECxAdzVCbgxztTAOoLkdrg==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.10.tgz", + "integrity": "sha512-IgzRemlQT+SHfb2x8kq32xKGnR3r7S69Ogv5pBKIDX1/G2qQofM6wfy0OHnAyS4Bj0y2lZPjiYQBwmLIkK/BNw==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.10.tgz", + "integrity": "sha512-RmSh5omDiCEZgw1fOhdEFi6MzAQ1rQBmvTM13K2p8XUxxaYb/MHYYZbNEMqxqWvsg4fidZ8hNSqRkB7YCCWWgg==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.10.tgz", + "integrity": "sha512-6zxZ1KnKqflC5YpJmXZyNNVaRXMdOiRijimua8zLzfoAo+adb6gd8V4o03rZF3BPHtmd35rPkZHlgMlg/th2Bw==", + "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.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.10.tgz", + "integrity": "sha512-D7L9QnxUJcSykQ9S8AQ0CEdxaw3IMoyAwv2LR7x+w/j7Jg3UsEgnsX5ePkShBiqSmu/UXfSuQeGvAoA8kSLiUw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 OR MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tauri-apps/plugin-dialog": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-rc.1.tgz", + "integrity": "sha512-H28gh6BfZtjflHQ+HrmWwunDriBI3AQLAKnMs50GA6zeNUULqbQr7VXbAAKeJL/0CmWcecID4PKXVoSlaWRhEg==", + "dev": true, + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0-rc.4" + } + }, + "node_modules/@tauri-apps/plugin-process": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.0.0-rc.1.tgz", + "integrity": "sha512-Bl22xdoiu+AqEP6rzjb7DUJwdLDnejuRFukpkdrqF1/VEWJK5PuE903l+8mIOsd17zZ1Ua8y8WaBWnOXx4QHmw==", + "dev": true, + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0-rc.4" + } + }, + "node_modules/@tauri-apps/plugin-store": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-store/-/plugin-store-2.0.0-rc.1.tgz", + "integrity": "sha512-rW71Tkr7OifxoL8NkWgPy5Os4Gn3oJTbv/j/nJ03HDuYsq+F4+8kU8o4epRFJnr6VKmgB/2CtiacSC3dnSSRnA==", + "dev": true, + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0-rc.4" + } + }, + "node_modules/@tauri-apps/plugin-updater": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-rc.1.tgz", + "integrity": "sha512-SwQhDad/jnGIUe4eFfVBZ+0wRZthPSLwrFAl/K0Fyuu7dD/uGHS/jbATxZzwFDGfcpWOGLOsS8+LqSmY5zufHw==", + "dev": true, + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0-rc.4" + } + }, + "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": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "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": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", + "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz", + "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.4.0", + "@typescript-eslint/type-utils": "8.4.0", + "@typescript-eslint/utils": "8.4.0", + "@typescript-eslint/visitor-keys": "8.4.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz", + "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.4.0", + "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/typescript-estree": "8.4.0", + "@typescript-eslint/visitor-keys": "8.4.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz", + "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/visitor-keys": "8.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz", + "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.4.0", + "@typescript-eslint/utils": "8.4.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz", + "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz", + "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/visitor-keys": "8.4.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz", + "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.4.0", + "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/typescript-estree": "8.4.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz", + "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.4.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", + "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.5", + "@babel/plugin-transform-react-jsx-self": "^7.24.5", + "@babel/plugin-transform-react-jsx-source": "^7.24.1", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001646", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", + "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=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": { + "color-name": "1.1.3" + } + }, + "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/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/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", + "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "dev": true, + "license": "ISC" + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", + "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.2", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.35.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", + "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.0.19", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.11.tgz", + "integrity": "sha512-wrAKxMbVr8qhXTtIKfXqAn5SAtRZt0aXxe5P23Fh4pUAdC6XEsybGLB8P0PI4j1yYqOgUEUlzKAGDfo7rJOjcw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-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": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/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": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", + "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", + "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", + "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", + "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + } + }, + "node_modules/jotai": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.9.3.tgz", + "integrity": "sha512-IqMWKoXuEzWSShjd9UhalNsRGbdju5G2FrqNLQJT+Ih6p41VNYe2sav5hnwQx4HJr25jq9wRqvGSWGviGG6Gjw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=17.0.0", + "react": ">=17.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "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==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/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/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true, + "license": "ISC" + }, + "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": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.45", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", + "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-mixins": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz", + "integrity": "sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.11", + "postcss-js": "^4.0.0", + "postcss-simple-vars": "^7.0.0", + "sugarss": "^4.0.1" + }, + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "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": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-preset-mantine": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.17.0.tgz", + "integrity": "sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-mixins": "^9.0.4", + "postcss-nested": "^6.0.1" + }, + "peerDependencies": { + "postcss": ">=8.0.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-simple-vars": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", + "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.1" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-number-format": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", + "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", + "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", + "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/react-virtuoso": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.10.2.tgz", + "integrity": "sha512-os6n9QKeKRF+8mnQR/vGy/xrFf6vXIzuaAVL54q5k2st2d5QIEwI+KDKaflMUmMvnDbPxf68bs+CF5bY3YI7qA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16 || >=17 || >= 18", + "react-dom": ">=16 || >=17 || >= 18" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", + "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.1", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.3", + "which-builtin-type": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", + "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.21.2", + "@rollup/rollup-android-arm64": "4.21.2", + "@rollup/rollup-darwin-arm64": "4.21.2", + "@rollup/rollup-darwin-x64": "4.21.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", + "@rollup/rollup-linux-arm-musleabihf": "4.21.2", + "@rollup/rollup-linux-arm64-gnu": "4.21.2", + "@rollup/rollup-linux-arm64-musl": "4.21.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", + "@rollup/rollup-linux-riscv64-gnu": "4.21.2", + "@rollup/rollup-linux-s390x-gnu": "4.21.2", + "@rollup/rollup-linux-x64-gnu": "4.21.2", + "@rollup/rollup-linux-x64-musl": "4.21.2", + "@rollup/rollup-win32-arm64-msvc": "4.21.2", + "@rollup/rollup-win32-ia32-msvc": "4.21.2", + "@rollup/rollup-win32-x64-msvc": "4.21.2", + "fsevents": "~2.3.2" + } + }, + "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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sugarss": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", + "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "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": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", + "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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/vite": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", + "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", + "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "dev": true, + "license": "MIT", + "dependencies": { + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.0.2", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } } diff --git a/package.json b/package.json index 3257e99c..5a475088 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,59 @@ { - "name": "rai-mods", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "cross-env RUSTUP_TOOLCHAIN=nightly tauri dev", - "build": "tauri build", - "build-debug": "cross-env CARGO_TARGET_DIR=target/debug/standalone-build tauri build --debug --no-bundle", - "vite": "vite", - "tauri": "tauri", - "update-icons": "tauri icon backend/icons/icon-source.png", - "frontend:build": "tsc && vite build", - "frontend:dev": "vite", - "lint": "prettier ./frontend --write && eslint . --ext .ts,.tsx --fix" - }, - "devDependencies": { - "@mantine/code-highlight": "^7.11.0", - "@mantine/core": "^7.11.0", - "@mantine/hooks": "^7.11.0", - "@mantine/notifications": "^7.11.0", - "@tabler/icons-react": "^3.7.0", - "@tauri-apps/api": "2.0.0-rc.0", - "@tauri-apps/cli": "^2.0.0-rc.0", - "@tauri-apps/plugin-dialog": "2.0.0-rc.0", - "@tauri-apps/plugin-process": "2.0.0-rc.0", - "@tauri-apps/plugin-store": "^2.0.0-rc.0", - "@tauri-apps/plugin-updater": "2.0.0-rc.0", - "@types/react-dom": "^18.3.0", - "@types/react": "^18.3.3", - "@typescript-eslint/eslint-plugin": "8.0.0", - "@typescript-eslint/parser": "8.0.0", - "@vitejs/plugin-react": "^4.3.1", - "cross-env": "^7.0.3", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7", - "eslint-plugin-react": "^7.34.3", - "eslint": "8.57.0", - "jotai": "^2.8.4", - "postcss-preset-mantine": "^1.15.0", - "postcss-simple-vars": "^7.0.1", - "postcss": "^8.4.38", - "prettier": "^3.3.2", - "react-dom": "^18.3.1", - "react-virtuoso": "^4.9.0", - "react": "^18.3.1", - "typescript": "^5.5.2", - "vite": "5.3.5" - }, - "prettier": { - "useTabs": true, - "singleAttributePerLine": true, - "quoteProps": "as-needed" - }, - "engines": { - "node": ">=20.0.0" - } + "name": "rai-mods", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "cross-env RUSTUP_TOOLCHAIN=nightly tauri dev", + "build": "tauri build", + "build-debug": "cross-env CARGO_TARGET_DIR=target/debug/standalone-build tauri build --debug --no-bundle", + "vite": "vite", + "tauri": "tauri", + "update-icons": "tauri icon backend/icons/icon-source.png", + "frontend:build": "tsc && vite build", + "frontend:dev": "vite", + "lint": "prettier ./frontend --write && eslint . --ext .ts,.tsx --fix" + }, + "devDependencies": { + "@mantine/code-highlight": "^7.11.0", + "@mantine/core": "7.12.2", + "@mantine/hooks": "7.12.2", + "@mantine/notifications": "7.12.2", + "@tabler/icons-react": "3.14.0", + "@tauri-apps/api": "2.0.0-rc.4", + "@tauri-apps/cli": "^2.0.0-rc.10", + "@tauri-apps/plugin-dialog": "2.0.0-rc.1", + "@tauri-apps/plugin-process": "2.0.0-rc.1", + "@tauri-apps/plugin-store": "^2.0.0-rc.1", + "@tauri-apps/plugin-updater": "2.0.0-rc.1", + "@types/react": "18.3.5", + "@types/react-dom": "^18.3.0", + "@typescript-eslint/eslint-plugin": "8.4.0", + "@typescript-eslint/parser": "8.4.0", + "@vitejs/plugin-react": "^4.3.1", + "cross-env": "^7.0.3", + "eslint": "8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-react": "^7.34.3", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.7", + "jotai": "^2.8.4", + "postcss": "^8.4.38", + "postcss-preset-mantine": "^1.15.0", + "postcss-simple-vars": "^7.0.1", + "prettier": "3.3.3", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-virtuoso": "4.10.2", + "typescript": "^5.5.2", + "vite": "5.4.3" + }, + "prettier": { + "useTabs": true, + "singleAttributePerLine": true, + "quoteProps": "as-needed" + }, + "engines": { + "node": ">=20.0.0" + } } diff --git a/vite.config.ts b/vite.config.ts index 59cb7b4f..f1efc39d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -18,25 +18,25 @@ function getAliasesFromTsconfig() { return resolveAlias; } -// https://vitejs.dev/config/ export default defineConfig(async () => ({ plugins: [react()], resolve: { alias: getAliasesFromTsconfig(), }, - // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` - // - // 1. prevent vite from obscuring rust errors clearScreen: false, - // 2. tauri expects a fixed port, fail if that port is not available server: { - port: 1420, + // Tauri expects a fixed port, fail if that port is not available strictPort: true, + // tauri.conf.json needs to specify the same port, under build.devUrl. + port: 1420, watch: { - ignored: ["backend/target/**"], + // The target folder has all the backend builds, and gets huge, making the watcher super slow. + ignored: ["backend/target/**/*"], }, }, build: { + // tauri.config.json needs to point to the same path, under build.frontendDist. + outDir: "dist", rollupOptions: { output: { manualChunks: undefined, @@ -44,7 +44,5 @@ export default defineConfig(async () => ({ }, chunkSizeWarningLimit: 2000, }, - // 3. to make use of `TAURI_DEBUG` and other env variables - // https://tauri.studio/v1/api/config#buildconfig.beforedevcommand envPrefix: ["VITE_", "TAURI_ENV_"], })); From 50fc3be4d6a527f3a4dcd4203e2c7d0ba5877695 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Wed, 4 Sep 2024 13:53:32 +0200 Subject: [PATCH 240/255] specify resolver --- backend/Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 0c713a11..f775bb7b 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = ["proc-macros", "core", "tauri-app"] +resolver = "2" [workspace.package] version = "0.13.0" From 747642efb52984acd640386180b955da4d4568c9 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 16 Sep 2024 01:28:34 +0200 Subject: [PATCH 241/255] update dependencies sorta --- backend/Cargo.lock | 194 +++++++++++++++++---------------- backend/Cargo.toml | 11 +- backend/proc-macros/Cargo.toml | 4 +- backend/tauri-app/Cargo.toml | 12 +- frontend/api/bindings.ts | 2 +- package-lock.json | 128 +++++++++++----------- package.json | 8 +- 7 files changed, 183 insertions(+), 176 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 96efd28e..e9411c85 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -235,7 +235,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -270,7 +270,7 @@ checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -419,7 +419,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", "syn_derive", ] @@ -905,7 +905,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -915,7 +915,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -939,7 +939,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -950,7 +950,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -988,7 +988,7 @@ checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1001,7 +1001,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1058,7 +1058,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1081,7 +1081,7 @@ checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1164,7 +1164,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1185,7 +1185,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1355,7 +1355,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1448,7 +1448,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1705,7 +1705,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -1808,7 +1808,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2104,9 +2104,9 @@ dependencies = [ [[package]] name = "infer" -version = "0.15.0" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb33622da908807a06f9513c19b3c1ad50fab3e4137d82a78107d502075aa199" +checksum = "bc150e5ce2330295b8616ce0e3f53250e53af31759a9dbedad1621ba29151847" dependencies = [ "cfb", ] @@ -2300,7 +2300,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2649,7 +2649,7 @@ dependencies = [ "proc-macro-crate 2.0.2", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -2849,7 +2849,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -3012,7 +3012,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -3130,7 +3130,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -3177,7 +3177,7 @@ checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -3409,9 +3409,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.36" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" dependencies = [ "proc-macro2", ] @@ -3458,7 +3458,7 @@ version = "0.13.0" dependencies = [ "quote", "serde", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -3920,7 +3920,7 @@ dependencies = [ "proc-macro2", "quote", "serde_derive_internals", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -3995,9 +3995,9 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] @@ -4015,13 +4015,13 @@ dependencies = [ [[package]] name = "serde_derive" -version = "1.0.209" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -4032,14 +4032,14 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] name = "serde_json" -version = "1.0.127" +version = "1.0.128" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8043c06d9f82bd7271361ed64f415fe5e12a77fdb52e573e7f06a516dea329ad" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" dependencies = [ "itoa 1.0.11", "memchr", @@ -4055,7 +4055,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -4106,7 +4106,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -4293,7 +4293,7 @@ dependencies = [ "Inflector", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -4420,9 +4420,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.76" +version = "2.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578e081a14e0cefc3279b0472138c513f37b41a08d5a3cca9b6e4e8ceb6cd525" +checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" dependencies = [ "proc-macro2", "quote", @@ -4438,7 +4438,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -4483,9 +4483,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3a97abbc7d6cfd0720da3e06fcb1cf2ac87cbfdb5bbbce103a1279a211c4d81" +checksum = "2a93f2c6b8fdaeb7f417bda89b5bc767999745c3052969664ae1fa65892deb7e" dependencies = [ "bitflags 2.6.0", "cocoa 0.26.0", @@ -4556,13 +4556,12 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.0-rc.8" +version = "2.0.0-rc.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8345ccc676ef16e26b61fc0f5340b4e770678b1e1f53f08c69ebdac5e56b422" +checksum = "0a283cb3d25e46e2f5d99f0068928dadaca4a19558c555f91a5064e3299c691d" dependencies = [ "anyhow", "bytes", - "cocoa 0.26.0", "dirs", "dunce", "embed_plist", @@ -4577,8 +4576,11 @@ dependencies = [ "log", "mime", "muda", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", + "plist", "raw-window-handle", "reqwest", "serde", @@ -4606,9 +4608,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-rc.7" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d5ad5fcfaf02cf79aa6727f6c5df38567d8dce172b00b62690c6bc46c08b7ce" +checksum = "148441d64674b2885c1ba5baf3ae61662bb8753859ffcfb541962cbc6b847f39" dependencies = [ "anyhow", "cargo_toml", @@ -4628,9 +4630,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-rc.7" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809ef6316726fc72593d296cf6f4e7461326e310c313d6a6c42b6e7f1e2671cf" +checksum = "72a15c3f9282c82871c69ddb65d02ae552738bbac848c8adcab521bf14d8b9e6" dependencies = [ "base64 0.22.1", "brotli", @@ -4644,7 +4646,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "syn 2.0.76", + "syn 2.0.77", "tauri-utils", "thiserror", "time", @@ -4655,23 +4657,23 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-rc.6" +version = "2.0.0-rc.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1359e8861d210d25731f8b1bfbb4d111dd06406cf73c59659366ef450364d811" +checksum = "f12d1aa317bec56f78388cf6012d788876d838595a48f95cbd7835642db356a0" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", "tauri-codegen", "tauri-utils", ] [[package]] name = "tauri-plugin" -version = "2.0.0-rc.7" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dded420c86183f592d0fe925ef9447f41e26fa79f0bdfef8d3f17bfbcdbfb7" +checksum = "d82a2adea16b8a71b7a5ad23f720bb13f8d2830b820cc1c266512314ba99bf67" dependencies = [ "anyhow", "glob", @@ -4686,11 +4688,10 @@ dependencies = [ [[package]] name = "tauri-plugin-dialog" -version = "2.0.0-rc.3" +version = "2.0.0-rc.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa8bd381f75c47687f41fb603f67fdd99a1af377da22d03d8fb959d2481845c1" +checksum = "785722c81beb4a6b729ae55d06aeb68d47166c933e64b727e33254dcb5d4d82d" dependencies = [ - "dunce", "log", "raw-window-handle", "rfd", @@ -4705,12 +4706,14 @@ dependencies = [ [[package]] name = "tauri-plugin-fs" -version = "2.0.0-rc.1" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "694a746b0e0c1d318198fabf4957800c42fb4b705e866e0eed7ec21476ef88db" +checksum = "4cb1dfbbea322afbc9dec49351bc29edf4e85e74d37d9a3fcc72d67ed55ffdbd" dependencies = [ "anyhow", + "dunce", "glob", + "percent-encoding", "schemars", "serde", "serde_json", @@ -4746,9 +4749,9 @@ dependencies = [ [[package]] name = "tauri-plugin-updater" -version = "2.0.0-rc.2" +version = "2.0.0-rc.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7048854b4271f3bc58ee850f0582f8d9bb0190118afa8397f36fc260daaa68b" +checksum = "391ebb8ae8cd6aec44b5d96d3005659d88cde69c57326f639bbc660116a30d63" dependencies = [ "base64 0.22.1", "dirs", @@ -4775,9 +4778,9 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "2.0.0-rc.2" +version = "2.0.0-rc.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba56bcec4b7a1601cf3136c9a3a98f77036b7e1a67564788c5ccd051035d028a" +checksum = "67c9b841c8164b949eac9e4fe8d56a23ed5e8ef0ac1c52e26a500709f7a50e50" dependencies = [ "bitflags 2.6.0", "log", @@ -4790,9 +4793,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-rc.7" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75c72b844f387bfc3341c355f3e16b8cbf4161848fa4e348670effb222cd3ba5" +checksum = "389f78c8e8e6eff3897d8d9581087943b5976ea96a0ab5036be691f28c2b0df0" dependencies = [ "dpi", "gtk", @@ -4809,15 +4812,17 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-rc.7" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73accf936a7cd01d1382de7850726fdf6c1f6ab3b01ccb7a0950cb852e332596" +checksum = "e17625b7cf63958d53945e199391d11c9f195fb3d1cb8aeb64dc3084d0091b92" dependencies = [ - "cocoa 0.26.0", "gtk", "http", "jni", "log", + "objc2", + "objc2-app-kit", + "objc2-foundation", "percent-encoding", "raw-window-handle", "softbuffer", @@ -4833,9 +4838,8 @@ dependencies = [ [[package]] name = "tauri-specta" -version = "2.0.0-rc.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2d58f5067f811ac923825ed15a95baa76313891ddc9ccfe28e4526e86477347" +version = "2.0.0-rc.19" +source = "git+https://github.com/Raicuparta/tauri-specta?branch=main#7e06ac6c9349dc4d395e490a17ca667cecfc1773" dependencies = [ "heck 0.5.0", "serde", @@ -4850,20 +4854,19 @@ dependencies = [ [[package]] name = "tauri-specta-macros" version = "2.0.0-rc.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a4aa93823e07859546aa796b8a5d608190cd8037a3a5dce3eb63d491c34bda8" +source = "git+https://github.com/Raicuparta/tauri-specta?branch=main#7e06ac6c9349dc4d395e490a17ca667cecfc1773" dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] name = "tauri-utils" -version = "2.0.0-rc.7" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53d9fe87e985b273696ae22ce2b9f099a8f1b44bc8fb127467bda5fcb3e4371" +checksum = "3019641087c9039b57ebfca95fa42a93c07056845b7d8d57c8966061bcee83b4" dependencies = [ "brotli", "cargo_metadata", @@ -4951,7 +4954,7 @@ checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -5168,7 +5171,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -5212,9 +5215,9 @@ dependencies = [ [[package]] name = "tray-icon" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "131a65b2cef2081bc14dbcd414c906edbfa3bb5323dd7e748cc298614681196b" +checksum = "044d7738b3d50f288ddef035b793228740ad4d927f5466b0af55dc15e7e03cfe" dependencies = [ "core-graphics 0.24.0", "crossbeam-channel", @@ -5354,11 +5357,10 @@ dependencies = [ [[package]] name = "urlpattern" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609" +checksum = "70acd30e3aa1450bc2eece896ce2ad0d178e9c079493819301573dae3c37ba6d" dependencies = [ - "derive_more", "regex", "serde", "unic-ucd-ident", @@ -5488,7 +5490,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", "wasm-bindgen-shared", ] @@ -5522,7 +5524,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -5631,7 +5633,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -5738,7 +5740,7 @@ checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -5749,7 +5751,7 @@ checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] @@ -6025,9 +6027,9 @@ dependencies = [ [[package]] name = "wry" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49b8049c8f239cdbfaaea4bacb9646f6b208938ceec0acd5b3e99cd05f70903f" +checksum = "f4d715cf5fe88e9647f3d17b207b6d060d4a88e7171d4ccb2d2c657dd1d44728" dependencies = [ "base64 0.22.1", "block", @@ -6191,7 +6193,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.76", + "syn 2.0.77", ] [[package]] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index f775bb7b..6c4893fa 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -13,10 +13,15 @@ edition = "2021" log = "0.4.22" rai-pal-core = { path = "./core" } rai-pal-proc-macros = { path = "./proc-macros" } -serde = { version = "1.0.209", features = ["derive"] } -serde_json = "1.0.127" +serde = { version = "1.0.210", features = ["derive"] } +serde_json = "1.0.128" specta = "2.0.0-rc.20" -tauri-specta = { version = "2.0.0-rc.18", features = ["derive", "typescript"] } +# tauri-specta = { version = "2.0.0-rc.19", features = ["derive", "typescript"] } +# get tauri-specta from git instead for now, so I can loosen the tauri dependency requirement: +tauri-specta = { git = "https://github.com/Raicuparta/tauri-specta", branch = "main", features = [ + "derive", + "typescript", +] } thiserror = "1.0.63" [profile.release] diff --git a/backend/proc-macros/Cargo.toml b/backend/proc-macros/Cargo.toml index 4c16ea68..8b9195da 100644 --- a/backend/proc-macros/Cargo.toml +++ b/backend/proc-macros/Cargo.toml @@ -7,6 +7,6 @@ edition.workspace = true proc-macro = true [dependencies] -quote = "1.0.36" -syn = "2.0.76" +quote = "1.0.37" +syn = "2.0.77" serde.workspace = true diff --git a/backend/tauri-app/Cargo.toml b/backend/tauri-app/Cargo.toml index a8eb45dd..daa91bab 100644 --- a/backend/tauri-app/Cargo.toml +++ b/backend/tauri-app/Cargo.toml @@ -4,15 +4,15 @@ version.workspace = true edition.workspace = true [build-dependencies] -tauri-build = { version = "2.0.0-rc.7", features = [] } +tauri-build = { version = "2.0.0-rc.11", features = [] } [dependencies] -tauri = { version = "2.0.0-rc.8", features = [] } -tauri-plugin-dialog = "2.0.0-rc.3" +tauri = { version = "2.0.0-rc.13", features = [] } +tauri-plugin-dialog = "2.0.0-rc.7" tauri-plugin-log = "2.0.0-rc.2" -tauri-plugin-updater = "2.0.0-rc.2" -tauri-plugin-window-state = "2.0.0-rc.2" -tauri-runtime = "2.0.0-rc.7" +tauri-plugin-updater = "2.0.0-rc.3" +tauri-plugin-window-state = "2.0.0-rc.4" +tauri-runtime = "2.0.0-rc.11" specta-typescript = "0.0.7" log.workspace = true diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index a3b48932..9af68468 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -339,7 +339,7 @@ type __EventObj__ = { once: ( cb: TAURI_API_EVENT.EventCallback, ) => ReturnType>; - emit: T extends null + emit: null extends T ? (payload?: T) => ReturnType : (payload: T) => ReturnType; }; diff --git a/package-lock.json b/package-lock.json index 51144f06..cde8bf16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,11 +14,11 @@ "@mantine/notifications": "7.12.2", "@tabler/icons-react": "3.14.0", "@tauri-apps/api": "2.0.0-rc.4", - "@tauri-apps/cli": "^2.0.0-rc.10", + "@tauri-apps/cli": "2.0.0-rc.15", "@tauri-apps/plugin-dialog": "2.0.0-rc.1", "@tauri-apps/plugin-process": "2.0.0-rc.1", "@tauri-apps/plugin-store": "^2.0.0-rc.1", - "@tauri-apps/plugin-updater": "2.0.0-rc.1", + "@tauri-apps/plugin-updater": "2.0.0-rc.2", "@types/react": "18.3.5", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "8.4.0", @@ -31,13 +31,13 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "jotai": "^2.8.4", - "postcss": "^8.4.38", + "postcss": "8.4.47", "postcss-preset-mantine": "^1.15.0", "postcss-simple-vars": "^7.0.1", "prettier": "3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-virtuoso": "4.10.2", + "react-virtuoso": "4.10.4", "typescript": "^5.5.2", "vite": "5.4.3" }, @@ -1447,9 +1447,9 @@ } }, "node_modules/@tauri-apps/cli": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.10.tgz", - "integrity": "sha512-mnoMyeD65DoVWzrLiLRW8Ns5Aktn9Ua7eKTOUEPq+r+1sQtWKxfnYTBEbEWnivduLhJCEDqGP5tyJaPcVXcEzA==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.15.tgz", + "integrity": "sha512-w5cq2WBKYRJDCE5wi5gyjM79Cq3AchTFImbcGBB+uyB/m3PDBXEidaTBTHqwiup2hKbMivuBAzGUCHt+OfgBhA==", "dev": true, "license": "Apache-2.0 OR MIT", "bin": { @@ -1463,22 +1463,22 @@ "url": "https://opencollective.com/tauri" }, "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.10", - "@tauri-apps/cli-darwin-x64": "2.0.0-rc.10", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.10", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.10", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.10", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.10", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.10", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.10", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.10", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.10" + "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.15", + "@tauri-apps/cli-darwin-x64": "2.0.0-rc.15", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.15", + "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.15", + "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.15", + "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.15", + "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.15", + "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.15", + "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.15", + "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.15" } }, "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.10.tgz", - "integrity": "sha512-oAuG3n/dIqK5ZedknF1QOgVDlpEepAaaIFHpUi+eIdG1MFp82jgyHqplveVZ95F16j7RhjIMaEhiTF6cGR/baA==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.15.tgz", + "integrity": "sha512-WuzQRELJTeSHe/uLu6IClCCEkwQy4qtZdHUmcAW3baKD217WCytn4jQ5+NFs2GxhK1a2GLHMQtQZSFTLkKiXkw==", "cpu": [ "arm64" ], @@ -1493,9 +1493,9 @@ } }, "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.10.tgz", - "integrity": "sha512-n4ul0XUBqrA7KbNY6Vo52EBNqTXogYuV2qi5RWR0bIJF/A/vYjZ3LcC1TXXo/X57sDN55LWORrBe4c4Ds8MZrA==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.15.tgz", + "integrity": "sha512-71H1dNWlEr+Hyi096Ir3SnlClw4CSR4MhJ8UG8IUBqYwydJPYFzA+GFWRAgnPgcV6sBzdt8trcV9BLV4teDzEw==", "cpu": [ "x64" ], @@ -1510,9 +1510,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.10.tgz", - "integrity": "sha512-RByz0zRbngps5QMQVsbgCD03TiCMxwAhaZhNtojXQ2AiJFkv1Mu68W/prbpWucw6Ep1nM3/yTIm0aL6ozdh/gw==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.15.tgz", + "integrity": "sha512-hO7AS09l6XZRCu/vqvB/iv6CvIlD//h9njhyw++0tJPCNH3X4rl13ji6SnoO0V6ZUCEeCeQBTAALsanYAlZelQ==", "cpu": [ "arm" ], @@ -1527,9 +1527,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.10.tgz", - "integrity": "sha512-ZqpbDIMp5b0jz1ddutJH6S5geLaBEmsMG6eZix+MgcZZRyEfahTMGCq3xkvv+tnrNNq7drvwBISCVSSS0zu3wQ==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.15.tgz", + "integrity": "sha512-r9FrwY83TD4w3vX7J9zS3GPSeis0YWq52p/MVLYR1i8sSJppbvYY72EXi5pR2CZ3vb+6z9/w7LpYTv+hOd2RbA==", "cpu": [ "arm64" ], @@ -1544,9 +1544,9 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.10.tgz", - "integrity": "sha512-EVh1xPqs5bi0aBYbv6Iy1ooFClyK6/wIsNw9DyxWwhPz9I7UNpDAgHm6lOhkMH26Cp/eQPiEA8OdfOLTfCY81A==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.15.tgz", + "integrity": "sha512-PqMn3/GiqLAhs7p0jr5XqwWN1t7SAgvo6+bFuYNL/SWx1Ui6mOck3ncfDkf+dQAnXnrhX2Qfwkl3agiOZxUZtA==", "cpu": [ "arm64" ], @@ -1561,9 +1561,9 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.10.tgz", - "integrity": "sha512-ZLcXJbRRMfgSkZdxBegP/4PlXkoVR1zpx2pE7mKkRgyvwJCx+A2f0+IZM+VVu/WRECxAdzVCbgxztTAOoLkdrg==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.15.tgz", + "integrity": "sha512-o8lvgVBGXwthMV8+8EzEwXQY5jk2q+c700xeC/LY+J0lBL5ai3i0revlhO+3RwKnjnRLZMCXatr5K3gGtXIsoQ==", "cpu": [ "x64" ], @@ -1578,9 +1578,9 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.10.tgz", - "integrity": "sha512-IgzRemlQT+SHfb2x8kq32xKGnR3r7S69Ogv5pBKIDX1/G2qQofM6wfy0OHnAyS4Bj0y2lZPjiYQBwmLIkK/BNw==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.15.tgz", + "integrity": "sha512-cmANCyhcdInZSfIM3CPjA0eDu1toYABapSttA1rHbNrcJrHIq2KPKRCNuXIjWiBggxfIhJKWX7mTgQCQIyHd/w==", "cpu": [ "x64" ], @@ -1595,9 +1595,9 @@ } }, "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.10.tgz", - "integrity": "sha512-RmSh5omDiCEZgw1fOhdEFi6MzAQ1rQBmvTM13K2p8XUxxaYb/MHYYZbNEMqxqWvsg4fidZ8hNSqRkB7YCCWWgg==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.15.tgz", + "integrity": "sha512-FyWwCQb+uCCBtEDTDKtILH3wv0TWCQ2mXwMyZlibpbZ4RbaV5yDY82h8h7usfEuPHtBtAJHknHvX5WV1ETl5kw==", "cpu": [ "arm64" ], @@ -1612,9 +1612,9 @@ } }, "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.10.tgz", - "integrity": "sha512-6zxZ1KnKqflC5YpJmXZyNNVaRXMdOiRijimua8zLzfoAo+adb6gd8V4o03rZF3BPHtmd35rPkZHlgMlg/th2Bw==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.15.tgz", + "integrity": "sha512-+bOBX7EdpmkCSBxgd9HcC/p9LoG/q1a5dJebWFuL9GhmdPeb5hv4plB/OTUAtg1OnEVGPXhTiSkcdRatZVryfA==", "cpu": [ "ia32" ], @@ -1629,9 +1629,9 @@ } }, "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-rc.10", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.10.tgz", - "integrity": "sha512-D7L9QnxUJcSykQ9S8AQ0CEdxaw3IMoyAwv2LR7x+w/j7Jg3UsEgnsX5ePkShBiqSmu/UXfSuQeGvAoA8kSLiUw==", + "version": "2.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.15.tgz", + "integrity": "sha512-Phpk18bs1YxC+OFYaZNWiddYRmiZvMjB9Rzjl6M128gIkgnqDGnZyfWtM5GZ85/BmX1HVGgILK/46RU6Q88z1g==", "cpu": [ "x64" ], @@ -1676,9 +1676,9 @@ } }, "node_modules/@tauri-apps/plugin-updater": { - "version": "2.0.0-rc.1", - "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-rc.1.tgz", - "integrity": "sha512-SwQhDad/jnGIUe4eFfVBZ+0wRZthPSLwrFAl/K0Fyuu7dD/uGHS/jbATxZzwFDGfcpWOGLOsS8+LqSmY5zufHw==", + "version": "2.0.0-rc.2", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-rc.2.tgz", + "integrity": "sha512-Ngvpa/km/00KASvOsFqRQbVf/6BaAX/gYwQs9eFxjygDpxxlZkZDVP1Fg0urW8s5dY7ELD6UAFB/ZI/g8D0QvQ==", "dev": true, "license": "MIT or APACHE-2.0", "dependencies": { @@ -4638,9 +4638,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", "dev": true, "license": "ISC" }, @@ -4668,9 +4668,9 @@ } }, "node_modules/postcss": { - "version": "8.4.45", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.45.tgz", - "integrity": "sha512-7KTLTdzdZZYscUc65XmjFiB73vBhBfbPztCYdUNvlaso9PrzjzcmjqBPR0lNGkcVlcO4BjiO5rK/qNz+XAen1Q==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "dev": true, "funding": [ { @@ -4689,8 +4689,8 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.1", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -5046,9 +5046,9 @@ } }, "node_modules/react-virtuoso": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.10.2.tgz", - "integrity": "sha512-os6n9QKeKRF+8mnQR/vGy/xrFf6vXIzuaAVL54q5k2st2d5QIEwI+KDKaflMUmMvnDbPxf68bs+CF5bY3YI7qA==", + "version": "4.10.4", + "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.10.4.tgz", + "integrity": "sha512-G/gprhTbK+lzMxoo/iStcZxVEGph/cIhc3WANEpt92RuMw+LiCZOmBfKoeoZOHlm/iyftTrDJhGaTCpxyucnkQ==", "dev": true, "license": "MIT", "engines": { @@ -5360,9 +5360,9 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "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": { diff --git a/package.json b/package.json index 5a475088..f8fb9183 100644 --- a/package.json +++ b/package.json @@ -21,11 +21,11 @@ "@mantine/notifications": "7.12.2", "@tabler/icons-react": "3.14.0", "@tauri-apps/api": "2.0.0-rc.4", - "@tauri-apps/cli": "^2.0.0-rc.10", + "@tauri-apps/cli": "2.0.0-rc.15", "@tauri-apps/plugin-dialog": "2.0.0-rc.1", "@tauri-apps/plugin-process": "2.0.0-rc.1", "@tauri-apps/plugin-store": "^2.0.0-rc.1", - "@tauri-apps/plugin-updater": "2.0.0-rc.1", + "@tauri-apps/plugin-updater": "2.0.0-rc.2", "@types/react": "18.3.5", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "8.4.0", @@ -38,13 +38,13 @@ "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", "jotai": "^2.8.4", - "postcss": "^8.4.38", + "postcss": "8.4.47", "postcss-preset-mantine": "^1.15.0", "postcss-simple-vars": "^7.0.1", "prettier": "3.3.3", "react": "^18.3.1", "react-dom": "^18.3.1", - "react-virtuoso": "4.10.2", + "react-virtuoso": "4.10.4", "typescript": "^5.5.2", "vite": "5.4.3" }, From fa617b6110842c9a94fbc55ba4e8be15ccbc9b92 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 16 Sep 2024 01:36:13 +0200 Subject: [PATCH 242/255] ignore tauri gen folder --- backend/tauri-app/.gitignore | 1 + .../tauri-app/gen/schemas/acl-manifests.json | 1 - .../tauri-app/gen/schemas/capabilities.json | 1 - .../tauri-app/gen/schemas/desktop-schema.json | 2448 ---------------- .../tauri-app/gen/schemas/linux-schema.json | 2595 ----------------- .../tauri-app/gen/schemas/windows-schema.json | 2448 ---------------- 6 files changed, 1 insertion(+), 7493 deletions(-) create mode 100644 backend/tauri-app/.gitignore delete mode 100644 backend/tauri-app/gen/schemas/acl-manifests.json delete mode 100644 backend/tauri-app/gen/schemas/capabilities.json delete mode 100644 backend/tauri-app/gen/schemas/desktop-schema.json delete mode 100644 backend/tauri-app/gen/schemas/linux-schema.json delete mode 100644 backend/tauri-app/gen/schemas/windows-schema.json diff --git a/backend/tauri-app/.gitignore b/backend/tauri-app/.gitignore new file mode 100644 index 00000000..d88ac421 --- /dev/null +++ b/backend/tauri-app/.gitignore @@ -0,0 +1 @@ +/gen \ No newline at end of file diff --git a/backend/tauri-app/gen/schemas/acl-manifests.json b/backend/tauri-app/gen/schemas/acl-manifests.json deleted file mode 100644 index 7e7b7089..00000000 --- a/backend/tauri-app/gen/schemas/acl-manifests.json +++ /dev/null @@ -1 +0,0 @@ -{"core:app":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-version","allow-name","allow-tauri-version"]},"permissions":{"allow-app-hide":{"identifier":"allow-app-hide","description":"Enables the app_hide command without any pre-configured scope.","commands":{"allow":["app_hide"],"deny":[]}},"allow-app-show":{"identifier":"allow-app-show","description":"Enables the app_show command without any pre-configured scope.","commands":{"allow":["app_show"],"deny":[]}},"allow-default-window-icon":{"identifier":"allow-default-window-icon","description":"Enables the default_window_icon command without any pre-configured scope.","commands":{"allow":["default_window_icon"],"deny":[]}},"allow-name":{"identifier":"allow-name","description":"Enables the name command without any pre-configured scope.","commands":{"allow":["name"],"deny":[]}},"allow-tauri-version":{"identifier":"allow-tauri-version","description":"Enables the tauri_version command without any pre-configured scope.","commands":{"allow":["tauri_version"],"deny":[]}},"allow-version":{"identifier":"allow-version","description":"Enables the version command without any pre-configured scope.","commands":{"allow":["version"],"deny":[]}},"deny-app-hide":{"identifier":"deny-app-hide","description":"Denies the app_hide command without any pre-configured scope.","commands":{"allow":[],"deny":["app_hide"]}},"deny-app-show":{"identifier":"deny-app-show","description":"Denies the app_show command without any pre-configured scope.","commands":{"allow":[],"deny":["app_show"]}},"deny-default-window-icon":{"identifier":"deny-default-window-icon","description":"Denies the default_window_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["default_window_icon"]}},"deny-name":{"identifier":"deny-name","description":"Denies the name command without any pre-configured scope.","commands":{"allow":[],"deny":["name"]}},"deny-tauri-version":{"identifier":"deny-tauri-version","description":"Denies the tauri_version command without any pre-configured scope.","commands":{"allow":[],"deny":["tauri_version"]}},"deny-version":{"identifier":"deny-version","description":"Denies the version command without any pre-configured scope.","commands":{"allow":[],"deny":["version"]}}},"permission_sets":{},"global_scope_schema":null},"core:event":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-listen","allow-unlisten","allow-emit","allow-emit-to"]},"permissions":{"allow-emit":{"identifier":"allow-emit","description":"Enables the emit command without any pre-configured scope.","commands":{"allow":["emit"],"deny":[]}},"allow-emit-to":{"identifier":"allow-emit-to","description":"Enables the emit_to command without any pre-configured scope.","commands":{"allow":["emit_to"],"deny":[]}},"allow-listen":{"identifier":"allow-listen","description":"Enables the listen command without any pre-configured scope.","commands":{"allow":["listen"],"deny":[]}},"allow-unlisten":{"identifier":"allow-unlisten","description":"Enables the unlisten command without any pre-configured scope.","commands":{"allow":["unlisten"],"deny":[]}},"deny-emit":{"identifier":"deny-emit","description":"Denies the emit command without any pre-configured scope.","commands":{"allow":[],"deny":["emit"]}},"deny-emit-to":{"identifier":"deny-emit-to","description":"Denies the emit_to command without any pre-configured scope.","commands":{"allow":[],"deny":["emit_to"]}},"deny-listen":{"identifier":"deny-listen","description":"Denies the listen command without any pre-configured scope.","commands":{"allow":[],"deny":["listen"]}},"deny-unlisten":{"identifier":"deny-unlisten","description":"Denies the unlisten command without any pre-configured scope.","commands":{"allow":[],"deny":["unlisten"]}}},"permission_sets":{},"global_scope_schema":null},"core:image":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-from-bytes","allow-from-path","allow-rgba","allow-size"]},"permissions":{"allow-from-bytes":{"identifier":"allow-from-bytes","description":"Enables the from_bytes command without any pre-configured scope.","commands":{"allow":["from_bytes"],"deny":[]}},"allow-from-path":{"identifier":"allow-from-path","description":"Enables the from_path command without any pre-configured scope.","commands":{"allow":["from_path"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-rgba":{"identifier":"allow-rgba","description":"Enables the rgba command without any pre-configured scope.","commands":{"allow":["rgba"],"deny":[]}},"allow-size":{"identifier":"allow-size","description":"Enables the size command without any pre-configured scope.","commands":{"allow":["size"],"deny":[]}},"deny-from-bytes":{"identifier":"deny-from-bytes","description":"Denies the from_bytes command without any pre-configured scope.","commands":{"allow":[],"deny":["from_bytes"]}},"deny-from-path":{"identifier":"deny-from-path","description":"Denies the from_path command without any pre-configured scope.","commands":{"allow":[],"deny":["from_path"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-rgba":{"identifier":"deny-rgba","description":"Denies the rgba command without any pre-configured scope.","commands":{"allow":[],"deny":["rgba"]}},"deny-size":{"identifier":"deny-size","description":"Denies the size command without any pre-configured scope.","commands":{"allow":[],"deny":["size"]}}},"permission_sets":{},"global_scope_schema":null},"core:menu":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-append","allow-prepend","allow-insert","allow-remove","allow-remove-at","allow-items","allow-get","allow-popup","allow-create-default","allow-set-as-app-menu","allow-set-as-window-menu","allow-text","allow-set-text","allow-is-enabled","allow-set-enabled","allow-set-accelerator","allow-set-as-windows-menu-for-nsapp","allow-set-as-help-menu-for-nsapp","allow-is-checked","allow-set-checked","allow-set-icon"]},"permissions":{"allow-append":{"identifier":"allow-append","description":"Enables the append command without any pre-configured scope.","commands":{"allow":["append"],"deny":[]}},"allow-create-default":{"identifier":"allow-create-default","description":"Enables the create_default command without any pre-configured scope.","commands":{"allow":["create_default"],"deny":[]}},"allow-get":{"identifier":"allow-get","description":"Enables the get command without any pre-configured scope.","commands":{"allow":["get"],"deny":[]}},"allow-insert":{"identifier":"allow-insert","description":"Enables the insert command without any pre-configured scope.","commands":{"allow":["insert"],"deny":[]}},"allow-is-checked":{"identifier":"allow-is-checked","description":"Enables the is_checked command without any pre-configured scope.","commands":{"allow":["is_checked"],"deny":[]}},"allow-is-enabled":{"identifier":"allow-is-enabled","description":"Enables the is_enabled command without any pre-configured scope.","commands":{"allow":["is_enabled"],"deny":[]}},"allow-items":{"identifier":"allow-items","description":"Enables the items command without any pre-configured scope.","commands":{"allow":["items"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-popup":{"identifier":"allow-popup","description":"Enables the popup command without any pre-configured scope.","commands":{"allow":["popup"],"deny":[]}},"allow-prepend":{"identifier":"allow-prepend","description":"Enables the prepend command without any pre-configured scope.","commands":{"allow":["prepend"],"deny":[]}},"allow-remove":{"identifier":"allow-remove","description":"Enables the remove command without any pre-configured scope.","commands":{"allow":["remove"],"deny":[]}},"allow-remove-at":{"identifier":"allow-remove-at","description":"Enables the remove_at command without any pre-configured scope.","commands":{"allow":["remove_at"],"deny":[]}},"allow-set-accelerator":{"identifier":"allow-set-accelerator","description":"Enables the set_accelerator command without any pre-configured scope.","commands":{"allow":["set_accelerator"],"deny":[]}},"allow-set-as-app-menu":{"identifier":"allow-set-as-app-menu","description":"Enables the set_as_app_menu command without any pre-configured scope.","commands":{"allow":["set_as_app_menu"],"deny":[]}},"allow-set-as-help-menu-for-nsapp":{"identifier":"allow-set-as-help-menu-for-nsapp","description":"Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_help_menu_for_nsapp"],"deny":[]}},"allow-set-as-window-menu":{"identifier":"allow-set-as-window-menu","description":"Enables the set_as_window_menu command without any pre-configured scope.","commands":{"allow":["set_as_window_menu"],"deny":[]}},"allow-set-as-windows-menu-for-nsapp":{"identifier":"allow-set-as-windows-menu-for-nsapp","description":"Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":["set_as_windows_menu_for_nsapp"],"deny":[]}},"allow-set-checked":{"identifier":"allow-set-checked","description":"Enables the set_checked command without any pre-configured scope.","commands":{"allow":["set_checked"],"deny":[]}},"allow-set-enabled":{"identifier":"allow-set-enabled","description":"Enables the set_enabled command without any pre-configured scope.","commands":{"allow":["set_enabled"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-text":{"identifier":"allow-set-text","description":"Enables the set_text command without any pre-configured scope.","commands":{"allow":["set_text"],"deny":[]}},"allow-text":{"identifier":"allow-text","description":"Enables the text command without any pre-configured scope.","commands":{"allow":["text"],"deny":[]}},"deny-append":{"identifier":"deny-append","description":"Denies the append command without any pre-configured scope.","commands":{"allow":[],"deny":["append"]}},"deny-create-default":{"identifier":"deny-create-default","description":"Denies the create_default command without any pre-configured scope.","commands":{"allow":[],"deny":["create_default"]}},"deny-get":{"identifier":"deny-get","description":"Denies the get command without any pre-configured scope.","commands":{"allow":[],"deny":["get"]}},"deny-insert":{"identifier":"deny-insert","description":"Denies the insert command without any pre-configured scope.","commands":{"allow":[],"deny":["insert"]}},"deny-is-checked":{"identifier":"deny-is-checked","description":"Denies the is_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["is_checked"]}},"deny-is-enabled":{"identifier":"deny-is-enabled","description":"Denies the is_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["is_enabled"]}},"deny-items":{"identifier":"deny-items","description":"Denies the items command without any pre-configured scope.","commands":{"allow":[],"deny":["items"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-popup":{"identifier":"deny-popup","description":"Denies the popup command without any pre-configured scope.","commands":{"allow":[],"deny":["popup"]}},"deny-prepend":{"identifier":"deny-prepend","description":"Denies the prepend command without any pre-configured scope.","commands":{"allow":[],"deny":["prepend"]}},"deny-remove":{"identifier":"deny-remove","description":"Denies the remove command without any pre-configured scope.","commands":{"allow":[],"deny":["remove"]}},"deny-remove-at":{"identifier":"deny-remove-at","description":"Denies the remove_at command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_at"]}},"deny-set-accelerator":{"identifier":"deny-set-accelerator","description":"Denies the set_accelerator command without any pre-configured scope.","commands":{"allow":[],"deny":["set_accelerator"]}},"deny-set-as-app-menu":{"identifier":"deny-set-as-app-menu","description":"Denies the set_as_app_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_app_menu"]}},"deny-set-as-help-menu-for-nsapp":{"identifier":"deny-set-as-help-menu-for-nsapp","description":"Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_help_menu_for_nsapp"]}},"deny-set-as-window-menu":{"identifier":"deny-set-as-window-menu","description":"Denies the set_as_window_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_window_menu"]}},"deny-set-as-windows-menu-for-nsapp":{"identifier":"deny-set-as-windows-menu-for-nsapp","description":"Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.","commands":{"allow":[],"deny":["set_as_windows_menu_for_nsapp"]}},"deny-set-checked":{"identifier":"deny-set-checked","description":"Denies the set_checked command without any pre-configured scope.","commands":{"allow":[],"deny":["set_checked"]}},"deny-set-enabled":{"identifier":"deny-set-enabled","description":"Denies the set_enabled command without any pre-configured scope.","commands":{"allow":[],"deny":["set_enabled"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-text":{"identifier":"deny-set-text","description":"Denies the set_text command without any pre-configured scope.","commands":{"allow":[],"deny":["set_text"]}},"deny-text":{"identifier":"deny-text","description":"Denies the text command without any pre-configured scope.","commands":{"allow":[],"deny":["text"]}}},"permission_sets":{},"global_scope_schema":null},"core:path":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-resolve-directory","allow-resolve","allow-normalize","allow-join","allow-dirname","allow-extname","allow-basename","allow-is-absolute"]},"permissions":{"allow-basename":{"identifier":"allow-basename","description":"Enables the basename command without any pre-configured scope.","commands":{"allow":["basename"],"deny":[]}},"allow-dirname":{"identifier":"allow-dirname","description":"Enables the dirname command without any pre-configured scope.","commands":{"allow":["dirname"],"deny":[]}},"allow-extname":{"identifier":"allow-extname","description":"Enables the extname command without any pre-configured scope.","commands":{"allow":["extname"],"deny":[]}},"allow-is-absolute":{"identifier":"allow-is-absolute","description":"Enables the is_absolute command without any pre-configured scope.","commands":{"allow":["is_absolute"],"deny":[]}},"allow-join":{"identifier":"allow-join","description":"Enables the join command without any pre-configured scope.","commands":{"allow":["join"],"deny":[]}},"allow-normalize":{"identifier":"allow-normalize","description":"Enables the normalize command without any pre-configured scope.","commands":{"allow":["normalize"],"deny":[]}},"allow-resolve":{"identifier":"allow-resolve","description":"Enables the resolve command without any pre-configured scope.","commands":{"allow":["resolve"],"deny":[]}},"allow-resolve-directory":{"identifier":"allow-resolve-directory","description":"Enables the resolve_directory command without any pre-configured scope.","commands":{"allow":["resolve_directory"],"deny":[]}},"deny-basename":{"identifier":"deny-basename","description":"Denies the basename command without any pre-configured scope.","commands":{"allow":[],"deny":["basename"]}},"deny-dirname":{"identifier":"deny-dirname","description":"Denies the dirname command without any pre-configured scope.","commands":{"allow":[],"deny":["dirname"]}},"deny-extname":{"identifier":"deny-extname","description":"Denies the extname command without any pre-configured scope.","commands":{"allow":[],"deny":["extname"]}},"deny-is-absolute":{"identifier":"deny-is-absolute","description":"Denies the is_absolute command without any pre-configured scope.","commands":{"allow":[],"deny":["is_absolute"]}},"deny-join":{"identifier":"deny-join","description":"Denies the join command without any pre-configured scope.","commands":{"allow":[],"deny":["join"]}},"deny-normalize":{"identifier":"deny-normalize","description":"Denies the normalize command without any pre-configured scope.","commands":{"allow":[],"deny":["normalize"]}},"deny-resolve":{"identifier":"deny-resolve","description":"Denies the resolve command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve"]}},"deny-resolve-directory":{"identifier":"deny-resolve-directory","description":"Denies the resolve_directory command without any pre-configured scope.","commands":{"allow":[],"deny":["resolve_directory"]}}},"permission_sets":{},"global_scope_schema":null},"core:resources":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-close"]},"permissions":{"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}}},"permission_sets":{},"global_scope_schema":null},"core:tray":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-new","allow-get-by-id","allow-remove-by-id","allow-set-icon","allow-set-menu","allow-set-tooltip","allow-set-title","allow-set-visible","allow-set-temp-dir-path","allow-set-icon-as-template","allow-set-show-menu-on-left-click"]},"permissions":{"allow-get-by-id":{"identifier":"allow-get-by-id","description":"Enables the get_by_id command without any pre-configured scope.","commands":{"allow":["get_by_id"],"deny":[]}},"allow-new":{"identifier":"allow-new","description":"Enables the new command without any pre-configured scope.","commands":{"allow":["new"],"deny":[]}},"allow-remove-by-id":{"identifier":"allow-remove-by-id","description":"Enables the remove_by_id command without any pre-configured scope.","commands":{"allow":["remove_by_id"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-icon-as-template":{"identifier":"allow-set-icon-as-template","description":"Enables the set_icon_as_template command without any pre-configured scope.","commands":{"allow":["set_icon_as_template"],"deny":[]}},"allow-set-menu":{"identifier":"allow-set-menu","description":"Enables the set_menu command without any pre-configured scope.","commands":{"allow":["set_menu"],"deny":[]}},"allow-set-show-menu-on-left-click":{"identifier":"allow-set-show-menu-on-left-click","description":"Enables the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":["set_show_menu_on_left_click"],"deny":[]}},"allow-set-temp-dir-path":{"identifier":"allow-set-temp-dir-path","description":"Enables the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":["set_temp_dir_path"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-tooltip":{"identifier":"allow-set-tooltip","description":"Enables the set_tooltip command without any pre-configured scope.","commands":{"allow":["set_tooltip"],"deny":[]}},"allow-set-visible":{"identifier":"allow-set-visible","description":"Enables the set_visible command without any pre-configured scope.","commands":{"allow":["set_visible"],"deny":[]}},"deny-get-by-id":{"identifier":"deny-get-by-id","description":"Denies the get_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["get_by_id"]}},"deny-new":{"identifier":"deny-new","description":"Denies the new command without any pre-configured scope.","commands":{"allow":[],"deny":["new"]}},"deny-remove-by-id":{"identifier":"deny-remove-by-id","description":"Denies the remove_by_id command without any pre-configured scope.","commands":{"allow":[],"deny":["remove_by_id"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-icon-as-template":{"identifier":"deny-set-icon-as-template","description":"Denies the set_icon_as_template command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon_as_template"]}},"deny-set-menu":{"identifier":"deny-set-menu","description":"Denies the set_menu command without any pre-configured scope.","commands":{"allow":[],"deny":["set_menu"]}},"deny-set-show-menu-on-left-click":{"identifier":"deny-set-show-menu-on-left-click","description":"Denies the set_show_menu_on_left_click command without any pre-configured scope.","commands":{"allow":[],"deny":["set_show_menu_on_left_click"]}},"deny-set-temp-dir-path":{"identifier":"deny-set-temp-dir-path","description":"Denies the set_temp_dir_path command without any pre-configured scope.","commands":{"allow":[],"deny":["set_temp_dir_path"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-tooltip":{"identifier":"deny-set-tooltip","description":"Denies the set_tooltip command without any pre-configured scope.","commands":{"allow":[],"deny":["set_tooltip"]}},"deny-set-visible":{"identifier":"deny-set-visible","description":"Denies the set_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible"]}}},"permission_sets":{},"global_scope_schema":null},"core:webview":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-webviews","allow-webview-position","allow-webview-size","allow-internal-toggle-devtools"]},"permissions":{"allow-create-webview":{"identifier":"allow-create-webview","description":"Enables the create_webview command without any pre-configured scope.","commands":{"allow":["create_webview"],"deny":[]}},"allow-create-webview-window":{"identifier":"allow-create-webview-window","description":"Enables the create_webview_window command without any pre-configured scope.","commands":{"allow":["create_webview_window"],"deny":[]}},"allow-get-all-webviews":{"identifier":"allow-get-all-webviews","description":"Enables the get_all_webviews command without any pre-configured scope.","commands":{"allow":["get_all_webviews"],"deny":[]}},"allow-internal-toggle-devtools":{"identifier":"allow-internal-toggle-devtools","description":"Enables the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":["internal_toggle_devtools"],"deny":[]}},"allow-print":{"identifier":"allow-print","description":"Enables the print command without any pre-configured scope.","commands":{"allow":["print"],"deny":[]}},"allow-reparent":{"identifier":"allow-reparent","description":"Enables the reparent command without any pre-configured scope.","commands":{"allow":["reparent"],"deny":[]}},"allow-set-webview-focus":{"identifier":"allow-set-webview-focus","description":"Enables the set_webview_focus command without any pre-configured scope.","commands":{"allow":["set_webview_focus"],"deny":[]}},"allow-set-webview-position":{"identifier":"allow-set-webview-position","description":"Enables the set_webview_position command without any pre-configured scope.","commands":{"allow":["set_webview_position"],"deny":[]}},"allow-set-webview-size":{"identifier":"allow-set-webview-size","description":"Enables the set_webview_size command without any pre-configured scope.","commands":{"allow":["set_webview_size"],"deny":[]}},"allow-set-webview-zoom":{"identifier":"allow-set-webview-zoom","description":"Enables the set_webview_zoom command without any pre-configured scope.","commands":{"allow":["set_webview_zoom"],"deny":[]}},"allow-webview-close":{"identifier":"allow-webview-close","description":"Enables the webview_close command without any pre-configured scope.","commands":{"allow":["webview_close"],"deny":[]}},"allow-webview-position":{"identifier":"allow-webview-position","description":"Enables the webview_position command without any pre-configured scope.","commands":{"allow":["webview_position"],"deny":[]}},"allow-webview-size":{"identifier":"allow-webview-size","description":"Enables the webview_size command without any pre-configured scope.","commands":{"allow":["webview_size"],"deny":[]}},"deny-create-webview":{"identifier":"deny-create-webview","description":"Denies the create_webview command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview"]}},"deny-create-webview-window":{"identifier":"deny-create-webview-window","description":"Denies the create_webview_window command without any pre-configured scope.","commands":{"allow":[],"deny":["create_webview_window"]}},"deny-get-all-webviews":{"identifier":"deny-get-all-webviews","description":"Denies the get_all_webviews command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_webviews"]}},"deny-internal-toggle-devtools":{"identifier":"deny-internal-toggle-devtools","description":"Denies the internal_toggle_devtools command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_devtools"]}},"deny-print":{"identifier":"deny-print","description":"Denies the print command without any pre-configured scope.","commands":{"allow":[],"deny":["print"]}},"deny-reparent":{"identifier":"deny-reparent","description":"Denies the reparent command without any pre-configured scope.","commands":{"allow":[],"deny":["reparent"]}},"deny-set-webview-focus":{"identifier":"deny-set-webview-focus","description":"Denies the set_webview_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_focus"]}},"deny-set-webview-position":{"identifier":"deny-set-webview-position","description":"Denies the set_webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_position"]}},"deny-set-webview-size":{"identifier":"deny-set-webview-size","description":"Denies the set_webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_size"]}},"deny-set-webview-zoom":{"identifier":"deny-set-webview-zoom","description":"Denies the set_webview_zoom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_webview_zoom"]}},"deny-webview-close":{"identifier":"deny-webview-close","description":"Denies the webview_close command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_close"]}},"deny-webview-position":{"identifier":"deny-webview-position","description":"Denies the webview_position command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_position"]}},"deny-webview-size":{"identifier":"deny-webview-size","description":"Denies the webview_size command without any pre-configured scope.","commands":{"allow":[],"deny":["webview_size"]}}},"permission_sets":{},"global_scope_schema":null},"core:window":{"default_permission":{"identifier":"default","description":"Default permissions for the plugin.","permissions":["allow-get-all-windows","allow-scale-factor","allow-inner-position","allow-outer-position","allow-inner-size","allow-outer-size","allow-is-fullscreen","allow-is-minimized","allow-is-maximized","allow-is-focused","allow-is-decorated","allow-is-resizable","allow-is-maximizable","allow-is-minimizable","allow-is-closable","allow-is-visible","allow-title","allow-current-monitor","allow-primary-monitor","allow-monitor-from-point","allow-available-monitors","allow-cursor-position","allow-theme","allow-internal-toggle-maximize"]},"permissions":{"allow-available-monitors":{"identifier":"allow-available-monitors","description":"Enables the available_monitors command without any pre-configured scope.","commands":{"allow":["available_monitors"],"deny":[]}},"allow-center":{"identifier":"allow-center","description":"Enables the center command without any pre-configured scope.","commands":{"allow":["center"],"deny":[]}},"allow-close":{"identifier":"allow-close","description":"Enables the close command without any pre-configured scope.","commands":{"allow":["close"],"deny":[]}},"allow-create":{"identifier":"allow-create","description":"Enables the create command without any pre-configured scope.","commands":{"allow":["create"],"deny":[]}},"allow-current-monitor":{"identifier":"allow-current-monitor","description":"Enables the current_monitor command without any pre-configured scope.","commands":{"allow":["current_monitor"],"deny":[]}},"allow-cursor-position":{"identifier":"allow-cursor-position","description":"Enables the cursor_position command without any pre-configured scope.","commands":{"allow":["cursor_position"],"deny":[]}},"allow-destroy":{"identifier":"allow-destroy","description":"Enables the destroy command without any pre-configured scope.","commands":{"allow":["destroy"],"deny":[]}},"allow-get-all-windows":{"identifier":"allow-get-all-windows","description":"Enables the get_all_windows command without any pre-configured scope.","commands":{"allow":["get_all_windows"],"deny":[]}},"allow-hide":{"identifier":"allow-hide","description":"Enables the hide command without any pre-configured scope.","commands":{"allow":["hide"],"deny":[]}},"allow-inner-position":{"identifier":"allow-inner-position","description":"Enables the inner_position command without any pre-configured scope.","commands":{"allow":["inner_position"],"deny":[]}},"allow-inner-size":{"identifier":"allow-inner-size","description":"Enables the inner_size command without any pre-configured scope.","commands":{"allow":["inner_size"],"deny":[]}},"allow-internal-toggle-maximize":{"identifier":"allow-internal-toggle-maximize","description":"Enables the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":["internal_toggle_maximize"],"deny":[]}},"allow-is-closable":{"identifier":"allow-is-closable","description":"Enables the is_closable command without any pre-configured scope.","commands":{"allow":["is_closable"],"deny":[]}},"allow-is-decorated":{"identifier":"allow-is-decorated","description":"Enables the is_decorated command without any pre-configured scope.","commands":{"allow":["is_decorated"],"deny":[]}},"allow-is-focused":{"identifier":"allow-is-focused","description":"Enables the is_focused command without any pre-configured scope.","commands":{"allow":["is_focused"],"deny":[]}},"allow-is-fullscreen":{"identifier":"allow-is-fullscreen","description":"Enables the is_fullscreen command without any pre-configured scope.","commands":{"allow":["is_fullscreen"],"deny":[]}},"allow-is-maximizable":{"identifier":"allow-is-maximizable","description":"Enables the is_maximizable command without any pre-configured scope.","commands":{"allow":["is_maximizable"],"deny":[]}},"allow-is-maximized":{"identifier":"allow-is-maximized","description":"Enables the is_maximized command without any pre-configured scope.","commands":{"allow":["is_maximized"],"deny":[]}},"allow-is-minimizable":{"identifier":"allow-is-minimizable","description":"Enables the is_minimizable command without any pre-configured scope.","commands":{"allow":["is_minimizable"],"deny":[]}},"allow-is-minimized":{"identifier":"allow-is-minimized","description":"Enables the is_minimized command without any pre-configured scope.","commands":{"allow":["is_minimized"],"deny":[]}},"allow-is-resizable":{"identifier":"allow-is-resizable","description":"Enables the is_resizable command without any pre-configured scope.","commands":{"allow":["is_resizable"],"deny":[]}},"allow-is-visible":{"identifier":"allow-is-visible","description":"Enables the is_visible command without any pre-configured scope.","commands":{"allow":["is_visible"],"deny":[]}},"allow-maximize":{"identifier":"allow-maximize","description":"Enables the maximize command without any pre-configured scope.","commands":{"allow":["maximize"],"deny":[]}},"allow-minimize":{"identifier":"allow-minimize","description":"Enables the minimize command without any pre-configured scope.","commands":{"allow":["minimize"],"deny":[]}},"allow-monitor-from-point":{"identifier":"allow-monitor-from-point","description":"Enables the monitor_from_point command without any pre-configured scope.","commands":{"allow":["monitor_from_point"],"deny":[]}},"allow-outer-position":{"identifier":"allow-outer-position","description":"Enables the outer_position command without any pre-configured scope.","commands":{"allow":["outer_position"],"deny":[]}},"allow-outer-size":{"identifier":"allow-outer-size","description":"Enables the outer_size command without any pre-configured scope.","commands":{"allow":["outer_size"],"deny":[]}},"allow-primary-monitor":{"identifier":"allow-primary-monitor","description":"Enables the primary_monitor command without any pre-configured scope.","commands":{"allow":["primary_monitor"],"deny":[]}},"allow-request-user-attention":{"identifier":"allow-request-user-attention","description":"Enables the request_user_attention command without any pre-configured scope.","commands":{"allow":["request_user_attention"],"deny":[]}},"allow-scale-factor":{"identifier":"allow-scale-factor","description":"Enables the scale_factor command without any pre-configured scope.","commands":{"allow":["scale_factor"],"deny":[]}},"allow-set-always-on-bottom":{"identifier":"allow-set-always-on-bottom","description":"Enables the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":["set_always_on_bottom"],"deny":[]}},"allow-set-always-on-top":{"identifier":"allow-set-always-on-top","description":"Enables the set_always_on_top command without any pre-configured scope.","commands":{"allow":["set_always_on_top"],"deny":[]}},"allow-set-closable":{"identifier":"allow-set-closable","description":"Enables the set_closable command without any pre-configured scope.","commands":{"allow":["set_closable"],"deny":[]}},"allow-set-content-protected":{"identifier":"allow-set-content-protected","description":"Enables the set_content_protected command without any pre-configured scope.","commands":{"allow":["set_content_protected"],"deny":[]}},"allow-set-cursor-grab":{"identifier":"allow-set-cursor-grab","description":"Enables the set_cursor_grab command without any pre-configured scope.","commands":{"allow":["set_cursor_grab"],"deny":[]}},"allow-set-cursor-icon":{"identifier":"allow-set-cursor-icon","description":"Enables the set_cursor_icon command without any pre-configured scope.","commands":{"allow":["set_cursor_icon"],"deny":[]}},"allow-set-cursor-position":{"identifier":"allow-set-cursor-position","description":"Enables the set_cursor_position command without any pre-configured scope.","commands":{"allow":["set_cursor_position"],"deny":[]}},"allow-set-cursor-visible":{"identifier":"allow-set-cursor-visible","description":"Enables the set_cursor_visible command without any pre-configured scope.","commands":{"allow":["set_cursor_visible"],"deny":[]}},"allow-set-decorations":{"identifier":"allow-set-decorations","description":"Enables the set_decorations command without any pre-configured scope.","commands":{"allow":["set_decorations"],"deny":[]}},"allow-set-effects":{"identifier":"allow-set-effects","description":"Enables the set_effects command without any pre-configured scope.","commands":{"allow":["set_effects"],"deny":[]}},"allow-set-focus":{"identifier":"allow-set-focus","description":"Enables the set_focus command without any pre-configured scope.","commands":{"allow":["set_focus"],"deny":[]}},"allow-set-fullscreen":{"identifier":"allow-set-fullscreen","description":"Enables the set_fullscreen command without any pre-configured scope.","commands":{"allow":["set_fullscreen"],"deny":[]}},"allow-set-icon":{"identifier":"allow-set-icon","description":"Enables the set_icon command without any pre-configured scope.","commands":{"allow":["set_icon"],"deny":[]}},"allow-set-ignore-cursor-events":{"identifier":"allow-set-ignore-cursor-events","description":"Enables the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":["set_ignore_cursor_events"],"deny":[]}},"allow-set-max-size":{"identifier":"allow-set-max-size","description":"Enables the set_max_size command without any pre-configured scope.","commands":{"allow":["set_max_size"],"deny":[]}},"allow-set-maximizable":{"identifier":"allow-set-maximizable","description":"Enables the set_maximizable command without any pre-configured scope.","commands":{"allow":["set_maximizable"],"deny":[]}},"allow-set-min-size":{"identifier":"allow-set-min-size","description":"Enables the set_min_size command without any pre-configured scope.","commands":{"allow":["set_min_size"],"deny":[]}},"allow-set-minimizable":{"identifier":"allow-set-minimizable","description":"Enables the set_minimizable command without any pre-configured scope.","commands":{"allow":["set_minimizable"],"deny":[]}},"allow-set-position":{"identifier":"allow-set-position","description":"Enables the set_position command without any pre-configured scope.","commands":{"allow":["set_position"],"deny":[]}},"allow-set-progress-bar":{"identifier":"allow-set-progress-bar","description":"Enables the set_progress_bar command without any pre-configured scope.","commands":{"allow":["set_progress_bar"],"deny":[]}},"allow-set-resizable":{"identifier":"allow-set-resizable","description":"Enables the set_resizable command without any pre-configured scope.","commands":{"allow":["set_resizable"],"deny":[]}},"allow-set-shadow":{"identifier":"allow-set-shadow","description":"Enables the set_shadow command without any pre-configured scope.","commands":{"allow":["set_shadow"],"deny":[]}},"allow-set-size":{"identifier":"allow-set-size","description":"Enables the set_size command without any pre-configured scope.","commands":{"allow":["set_size"],"deny":[]}},"allow-set-size-constraints":{"identifier":"allow-set-size-constraints","description":"Enables the set_size_constraints command without any pre-configured scope.","commands":{"allow":["set_size_constraints"],"deny":[]}},"allow-set-skip-taskbar":{"identifier":"allow-set-skip-taskbar","description":"Enables the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":["set_skip_taskbar"],"deny":[]}},"allow-set-title":{"identifier":"allow-set-title","description":"Enables the set_title command without any pre-configured scope.","commands":{"allow":["set_title"],"deny":[]}},"allow-set-title-bar-style":{"identifier":"allow-set-title-bar-style","description":"Enables the set_title_bar_style command without any pre-configured scope.","commands":{"allow":["set_title_bar_style"],"deny":[]}},"allow-set-visible-on-all-workspaces":{"identifier":"allow-set-visible-on-all-workspaces","description":"Enables the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":["set_visible_on_all_workspaces"],"deny":[]}},"allow-show":{"identifier":"allow-show","description":"Enables the show command without any pre-configured scope.","commands":{"allow":["show"],"deny":[]}},"allow-start-dragging":{"identifier":"allow-start-dragging","description":"Enables the start_dragging command without any pre-configured scope.","commands":{"allow":["start_dragging"],"deny":[]}},"allow-start-resize-dragging":{"identifier":"allow-start-resize-dragging","description":"Enables the start_resize_dragging command without any pre-configured scope.","commands":{"allow":["start_resize_dragging"],"deny":[]}},"allow-theme":{"identifier":"allow-theme","description":"Enables the theme command without any pre-configured scope.","commands":{"allow":["theme"],"deny":[]}},"allow-title":{"identifier":"allow-title","description":"Enables the title command without any pre-configured scope.","commands":{"allow":["title"],"deny":[]}},"allow-toggle-maximize":{"identifier":"allow-toggle-maximize","description":"Enables the toggle_maximize command without any pre-configured scope.","commands":{"allow":["toggle_maximize"],"deny":[]}},"allow-unmaximize":{"identifier":"allow-unmaximize","description":"Enables the unmaximize command without any pre-configured scope.","commands":{"allow":["unmaximize"],"deny":[]}},"allow-unminimize":{"identifier":"allow-unminimize","description":"Enables the unminimize command without any pre-configured scope.","commands":{"allow":["unminimize"],"deny":[]}},"deny-available-monitors":{"identifier":"deny-available-monitors","description":"Denies the available_monitors command without any pre-configured scope.","commands":{"allow":[],"deny":["available_monitors"]}},"deny-center":{"identifier":"deny-center","description":"Denies the center command without any pre-configured scope.","commands":{"allow":[],"deny":["center"]}},"deny-close":{"identifier":"deny-close","description":"Denies the close command without any pre-configured scope.","commands":{"allow":[],"deny":["close"]}},"deny-create":{"identifier":"deny-create","description":"Denies the create command without any pre-configured scope.","commands":{"allow":[],"deny":["create"]}},"deny-current-monitor":{"identifier":"deny-current-monitor","description":"Denies the current_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["current_monitor"]}},"deny-cursor-position":{"identifier":"deny-cursor-position","description":"Denies the cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["cursor_position"]}},"deny-destroy":{"identifier":"deny-destroy","description":"Denies the destroy command without any pre-configured scope.","commands":{"allow":[],"deny":["destroy"]}},"deny-get-all-windows":{"identifier":"deny-get-all-windows","description":"Denies the get_all_windows command without any pre-configured scope.","commands":{"allow":[],"deny":["get_all_windows"]}},"deny-hide":{"identifier":"deny-hide","description":"Denies the hide command without any pre-configured scope.","commands":{"allow":[],"deny":["hide"]}},"deny-inner-position":{"identifier":"deny-inner-position","description":"Denies the inner_position command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_position"]}},"deny-inner-size":{"identifier":"deny-inner-size","description":"Denies the inner_size command without any pre-configured scope.","commands":{"allow":[],"deny":["inner_size"]}},"deny-internal-toggle-maximize":{"identifier":"deny-internal-toggle-maximize","description":"Denies the internal_toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["internal_toggle_maximize"]}},"deny-is-closable":{"identifier":"deny-is-closable","description":"Denies the is_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_closable"]}},"deny-is-decorated":{"identifier":"deny-is-decorated","description":"Denies the is_decorated command without any pre-configured scope.","commands":{"allow":[],"deny":["is_decorated"]}},"deny-is-focused":{"identifier":"deny-is-focused","description":"Denies the is_focused command without any pre-configured scope.","commands":{"allow":[],"deny":["is_focused"]}},"deny-is-fullscreen":{"identifier":"deny-is-fullscreen","description":"Denies the is_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["is_fullscreen"]}},"deny-is-maximizable":{"identifier":"deny-is-maximizable","description":"Denies the is_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximizable"]}},"deny-is-maximized":{"identifier":"deny-is-maximized","description":"Denies the is_maximized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_maximized"]}},"deny-is-minimizable":{"identifier":"deny-is-minimizable","description":"Denies the is_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimizable"]}},"deny-is-minimized":{"identifier":"deny-is-minimized","description":"Denies the is_minimized command without any pre-configured scope.","commands":{"allow":[],"deny":["is_minimized"]}},"deny-is-resizable":{"identifier":"deny-is-resizable","description":"Denies the is_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["is_resizable"]}},"deny-is-visible":{"identifier":"deny-is-visible","description":"Denies the is_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["is_visible"]}},"deny-maximize":{"identifier":"deny-maximize","description":"Denies the maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["maximize"]}},"deny-minimize":{"identifier":"deny-minimize","description":"Denies the minimize command without any pre-configured scope.","commands":{"allow":[],"deny":["minimize"]}},"deny-monitor-from-point":{"identifier":"deny-monitor-from-point","description":"Denies the monitor_from_point command without any pre-configured scope.","commands":{"allow":[],"deny":["monitor_from_point"]}},"deny-outer-position":{"identifier":"deny-outer-position","description":"Denies the outer_position command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_position"]}},"deny-outer-size":{"identifier":"deny-outer-size","description":"Denies the outer_size command without any pre-configured scope.","commands":{"allow":[],"deny":["outer_size"]}},"deny-primary-monitor":{"identifier":"deny-primary-monitor","description":"Denies the primary_monitor command without any pre-configured scope.","commands":{"allow":[],"deny":["primary_monitor"]}},"deny-request-user-attention":{"identifier":"deny-request-user-attention","description":"Denies the request_user_attention command without any pre-configured scope.","commands":{"allow":[],"deny":["request_user_attention"]}},"deny-scale-factor":{"identifier":"deny-scale-factor","description":"Denies the scale_factor command without any pre-configured scope.","commands":{"allow":[],"deny":["scale_factor"]}},"deny-set-always-on-bottom":{"identifier":"deny-set-always-on-bottom","description":"Denies the set_always_on_bottom command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_bottom"]}},"deny-set-always-on-top":{"identifier":"deny-set-always-on-top","description":"Denies the set_always_on_top command without any pre-configured scope.","commands":{"allow":[],"deny":["set_always_on_top"]}},"deny-set-closable":{"identifier":"deny-set-closable","description":"Denies the set_closable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_closable"]}},"deny-set-content-protected":{"identifier":"deny-set-content-protected","description":"Denies the set_content_protected command without any pre-configured scope.","commands":{"allow":[],"deny":["set_content_protected"]}},"deny-set-cursor-grab":{"identifier":"deny-set-cursor-grab","description":"Denies the set_cursor_grab command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_grab"]}},"deny-set-cursor-icon":{"identifier":"deny-set-cursor-icon","description":"Denies the set_cursor_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_icon"]}},"deny-set-cursor-position":{"identifier":"deny-set-cursor-position","description":"Denies the set_cursor_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_position"]}},"deny-set-cursor-visible":{"identifier":"deny-set-cursor-visible","description":"Denies the set_cursor_visible command without any pre-configured scope.","commands":{"allow":[],"deny":["set_cursor_visible"]}},"deny-set-decorations":{"identifier":"deny-set-decorations","description":"Denies the set_decorations command without any pre-configured scope.","commands":{"allow":[],"deny":["set_decorations"]}},"deny-set-effects":{"identifier":"deny-set-effects","description":"Denies the set_effects command without any pre-configured scope.","commands":{"allow":[],"deny":["set_effects"]}},"deny-set-focus":{"identifier":"deny-set-focus","description":"Denies the set_focus command without any pre-configured scope.","commands":{"allow":[],"deny":["set_focus"]}},"deny-set-fullscreen":{"identifier":"deny-set-fullscreen","description":"Denies the set_fullscreen command without any pre-configured scope.","commands":{"allow":[],"deny":["set_fullscreen"]}},"deny-set-icon":{"identifier":"deny-set-icon","description":"Denies the set_icon command without any pre-configured scope.","commands":{"allow":[],"deny":["set_icon"]}},"deny-set-ignore-cursor-events":{"identifier":"deny-set-ignore-cursor-events","description":"Denies the set_ignore_cursor_events command without any pre-configured scope.","commands":{"allow":[],"deny":["set_ignore_cursor_events"]}},"deny-set-max-size":{"identifier":"deny-set-max-size","description":"Denies the set_max_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_max_size"]}},"deny-set-maximizable":{"identifier":"deny-set-maximizable","description":"Denies the set_maximizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_maximizable"]}},"deny-set-min-size":{"identifier":"deny-set-min-size","description":"Denies the set_min_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_min_size"]}},"deny-set-minimizable":{"identifier":"deny-set-minimizable","description":"Denies the set_minimizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_minimizable"]}},"deny-set-position":{"identifier":"deny-set-position","description":"Denies the set_position command without any pre-configured scope.","commands":{"allow":[],"deny":["set_position"]}},"deny-set-progress-bar":{"identifier":"deny-set-progress-bar","description":"Denies the set_progress_bar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_progress_bar"]}},"deny-set-resizable":{"identifier":"deny-set-resizable","description":"Denies the set_resizable command without any pre-configured scope.","commands":{"allow":[],"deny":["set_resizable"]}},"deny-set-shadow":{"identifier":"deny-set-shadow","description":"Denies the set_shadow command without any pre-configured scope.","commands":{"allow":[],"deny":["set_shadow"]}},"deny-set-size":{"identifier":"deny-set-size","description":"Denies the set_size command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size"]}},"deny-set-size-constraints":{"identifier":"deny-set-size-constraints","description":"Denies the set_size_constraints command without any pre-configured scope.","commands":{"allow":[],"deny":["set_size_constraints"]}},"deny-set-skip-taskbar":{"identifier":"deny-set-skip-taskbar","description":"Denies the set_skip_taskbar command without any pre-configured scope.","commands":{"allow":[],"deny":["set_skip_taskbar"]}},"deny-set-title":{"identifier":"deny-set-title","description":"Denies the set_title command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title"]}},"deny-set-title-bar-style":{"identifier":"deny-set-title-bar-style","description":"Denies the set_title_bar_style command without any pre-configured scope.","commands":{"allow":[],"deny":["set_title_bar_style"]}},"deny-set-visible-on-all-workspaces":{"identifier":"deny-set-visible-on-all-workspaces","description":"Denies the set_visible_on_all_workspaces command without any pre-configured scope.","commands":{"allow":[],"deny":["set_visible_on_all_workspaces"]}},"deny-show":{"identifier":"deny-show","description":"Denies the show command without any pre-configured scope.","commands":{"allow":[],"deny":["show"]}},"deny-start-dragging":{"identifier":"deny-start-dragging","description":"Denies the start_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_dragging"]}},"deny-start-resize-dragging":{"identifier":"deny-start-resize-dragging","description":"Denies the start_resize_dragging command without any pre-configured scope.","commands":{"allow":[],"deny":["start_resize_dragging"]}},"deny-theme":{"identifier":"deny-theme","description":"Denies the theme command without any pre-configured scope.","commands":{"allow":[],"deny":["theme"]}},"deny-title":{"identifier":"deny-title","description":"Denies the title command without any pre-configured scope.","commands":{"allow":[],"deny":["title"]}},"deny-toggle-maximize":{"identifier":"deny-toggle-maximize","description":"Denies the toggle_maximize command without any pre-configured scope.","commands":{"allow":[],"deny":["toggle_maximize"]}},"deny-unmaximize":{"identifier":"deny-unmaximize","description":"Denies the unmaximize command without any pre-configured scope.","commands":{"allow":[],"deny":["unmaximize"]}},"deny-unminimize":{"identifier":"deny-unminimize","description":"Denies the unminimize command without any pre-configured scope.","commands":{"allow":[],"deny":["unminimize"]}}},"permission_sets":{},"global_scope_schema":null},"dialog":{"default_permission":{"identifier":"default","description":"This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n","permissions":["allow-ask","allow-confirm","allow-message","allow-save","allow-open"]},"permissions":{"allow-ask":{"identifier":"allow-ask","description":"Enables the ask command without any pre-configured scope.","commands":{"allow":["ask"],"deny":[]}},"allow-confirm":{"identifier":"allow-confirm","description":"Enables the confirm command without any pre-configured scope.","commands":{"allow":["confirm"],"deny":[]}},"allow-message":{"identifier":"allow-message","description":"Enables the message command without any pre-configured scope.","commands":{"allow":["message"],"deny":[]}},"allow-open":{"identifier":"allow-open","description":"Enables the open command without any pre-configured scope.","commands":{"allow":["open"],"deny":[]}},"allow-save":{"identifier":"allow-save","description":"Enables the save command without any pre-configured scope.","commands":{"allow":["save"],"deny":[]}},"deny-ask":{"identifier":"deny-ask","description":"Denies the ask command without any pre-configured scope.","commands":{"allow":[],"deny":["ask"]}},"deny-confirm":{"identifier":"deny-confirm","description":"Denies the confirm command without any pre-configured scope.","commands":{"allow":[],"deny":["confirm"]}},"deny-message":{"identifier":"deny-message","description":"Denies the message command without any pre-configured scope.","commands":{"allow":[],"deny":["message"]}},"deny-open":{"identifier":"deny-open","description":"Denies the open command without any pre-configured scope.","commands":{"allow":[],"deny":["open"]}},"deny-save":{"identifier":"deny-save","description":"Denies the save command without any pre-configured scope.","commands":{"allow":[],"deny":["save"]}}},"permission_sets":{},"global_scope_schema":null},"log":{"default_permission":{"identifier":"default","description":"Allows the log command","permissions":["allow-log"]},"permissions":{"allow-log":{"identifier":"allow-log","description":"Enables the log command without any pre-configured scope.","commands":{"allow":["log"],"deny":[]}},"deny-log":{"identifier":"deny-log","description":"Denies the log command without any pre-configured scope.","commands":{"allow":[],"deny":["log"]}}},"permission_sets":{},"global_scope_schema":null},"updater":{"default_permission":{"identifier":"default","description":"This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n","permissions":["allow-check","allow-download","allow-install","allow-download-and-install"]},"permissions":{"allow-check":{"identifier":"allow-check","description":"Enables the check command without any pre-configured scope.","commands":{"allow":["check"],"deny":[]}},"allow-download":{"identifier":"allow-download","description":"Enables the download command without any pre-configured scope.","commands":{"allow":["download"],"deny":[]}},"allow-download-and-install":{"identifier":"allow-download-and-install","description":"Enables the download_and_install command without any pre-configured scope.","commands":{"allow":["download_and_install"],"deny":[]}},"allow-install":{"identifier":"allow-install","description":"Enables the install command without any pre-configured scope.","commands":{"allow":["install"],"deny":[]}},"deny-check":{"identifier":"deny-check","description":"Denies the check command without any pre-configured scope.","commands":{"allow":[],"deny":["check"]}},"deny-download":{"identifier":"deny-download","description":"Denies the download command without any pre-configured scope.","commands":{"allow":[],"deny":["download"]}},"deny-download-and-install":{"identifier":"deny-download-and-install","description":"Denies the download_and_install command without any pre-configured scope.","commands":{"allow":[],"deny":["download_and_install"]}},"deny-install":{"identifier":"deny-install","description":"Denies the install command without any pre-configured scope.","commands":{"allow":[],"deny":["install"]}}},"permission_sets":{},"global_scope_schema":null},"window-state":{"default_permission":{"identifier":"default","description":"This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n","permissions":["allow-filename","allow-restore-state","allow-save-window-state"]},"permissions":{"allow-filename":{"identifier":"allow-filename","description":"Enables the filename command without any pre-configured scope.","commands":{"allow":["filename"],"deny":[]}},"allow-restore-state":{"identifier":"allow-restore-state","description":"Enables the restore_state command without any pre-configured scope.","commands":{"allow":["restore_state"],"deny":[]}},"allow-save-window-state":{"identifier":"allow-save-window-state","description":"Enables the save_window_state command without any pre-configured scope.","commands":{"allow":["save_window_state"],"deny":[]}},"deny-filename":{"identifier":"deny-filename","description":"Denies the filename command without any pre-configured scope.","commands":{"allow":[],"deny":["filename"]}},"deny-restore-state":{"identifier":"deny-restore-state","description":"Denies the restore_state command without any pre-configured scope.","commands":{"allow":[],"deny":["restore_state"]}},"deny-save-window-state":{"identifier":"deny-save-window-state","description":"Denies the save_window_state command without any pre-configured scope.","commands":{"allow":[],"deny":["save_window_state"]}}},"permission_sets":{},"global_scope_schema":null}} \ No newline at end of file diff --git a/backend/tauri-app/gen/schemas/capabilities.json b/backend/tauri-app/gen/schemas/capabilities.json deleted file mode 100644 index 7c46b0fd..00000000 --- a/backend/tauri-app/gen/schemas/capabilities.json +++ /dev/null @@ -1 +0,0 @@ -{"main-capabilities":{"identifier":"main-capabilities","description":"","local":true,"windows":["main"],"permissions":["core:path:default","core:event:default","core:window:default","core:app:default","core:resources:default","dialog:allow-open","dialog:allow-ask","updater:allow-check"]}} \ No newline at end of file diff --git a/backend/tauri-app/gen/schemas/desktop-schema.json b/backend/tauri-app/gen/schemas/desktop-schema.json deleted file mode 100644 index c184ff68..00000000 --- a/backend/tauri-app/gen/schemas/desktop-schema.json +++ /dev/null @@ -1,2448 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CapabilityFile", - "description": "Capability formats accepted in a capability file.", - "anyOf": [ - { - "description": "A single capability.", - "allOf": [ - { - "$ref": "#/definitions/Capability" - } - ] - }, - { - "description": "A list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - }, - { - "description": "A list of capabilities.", - "type": "object", - "required": [ - "capabilities" - ], - "properties": { - "capabilities": { - "description": "The list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - } - } - } - ], - "definitions": { - "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", - "type": "object", - "required": [ - "identifier", - "permissions" - ], - "properties": { - "identifier": { - "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", - "type": "string" - }, - "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", - "default": "", - "type": "string" - }, - "remote": { - "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", - "anyOf": [ - { - "$ref": "#/definitions/CapabilityRemote" - }, - { - "type": "null" - } - ] - }, - "local": { - "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", - "default": true, - "type": "boolean" - }, - "windows": { - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "webviews": { - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", - "type": "array", - "items": { - "$ref": "#/definitions/PermissionEntry" - }, - "uniqueItems": true - }, - "platforms": { - "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Target" - } - } - } - }, - "CapabilityRemote": { - "description": "Configuration for remote URLs that are associated with the capability.", - "type": "object", - "required": [ - "urls" - ], - "properties": { - "urls": { - "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PermissionEntry": { - "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", - "anyOf": [ - { - "description": "Reference a permission or permission set by identifier.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - { - "description": "Reference a permission or permission set by identifier and extends its scope.", - "type": "object", - "required": [ - "identifier" - ], - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - "allow": { - "description": "Data that defines what is allowed by the scope.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - }, - "deny": { - "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - } - } - } - ] - }, - "Identifier": { - "oneOf": [ - { - "description": "core:app:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:app:default" - ] - }, - { - "description": "core:app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-app-hide" - ] - }, - { - "description": "core:app:allow-app-show -> Enables the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-app-show" - ] - }, - { - "description": "core:app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-default-window-icon" - ] - }, - { - "description": "core:app:allow-name -> Enables the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-name" - ] - }, - { - "description": "core:app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-tauri-version" - ] - }, - { - "description": "core:app:allow-version -> Enables the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-version" - ] - }, - { - "description": "core:app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-app-hide" - ] - }, - { - "description": "core:app:deny-app-show -> Denies the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-app-show" - ] - }, - { - "description": "core:app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-default-window-icon" - ] - }, - { - "description": "core:app:deny-name -> Denies the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-name" - ] - }, - { - "description": "core:app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-tauri-version" - ] - }, - { - "description": "core:app:deny-version -> Denies the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-version" - ] - }, - { - "description": "core:event:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:event:default" - ] - }, - { - "description": "core:event:allow-emit -> Enables the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-emit" - ] - }, - { - "description": "core:event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-emit-to" - ] - }, - { - "description": "core:event:allow-listen -> Enables the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-listen" - ] - }, - { - "description": "core:event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-unlisten" - ] - }, - { - "description": "core:event:deny-emit -> Denies the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-emit" - ] - }, - { - "description": "core:event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-emit-to" - ] - }, - { - "description": "core:event:deny-listen -> Denies the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-listen" - ] - }, - { - "description": "core:event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-unlisten" - ] - }, - { - "description": "core:image:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:image:default" - ] - }, - { - "description": "core:image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-from-bytes" - ] - }, - { - "description": "core:image:allow-from-path -> Enables the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-from-path" - ] - }, - { - "description": "core:image:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-new" - ] - }, - { - "description": "core:image:allow-rgba -> Enables the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-rgba" - ] - }, - { - "description": "core:image:allow-size -> Enables the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-size" - ] - }, - { - "description": "core:image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-from-bytes" - ] - }, - { - "description": "core:image:deny-from-path -> Denies the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-from-path" - ] - }, - { - "description": "core:image:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-new" - ] - }, - { - "description": "core:image:deny-rgba -> Denies the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-rgba" - ] - }, - { - "description": "core:image:deny-size -> Denies the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-size" - ] - }, - { - "description": "core:menu:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:menu:default" - ] - }, - { - "description": "core:menu:allow-append -> Enables the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-append" - ] - }, - { - "description": "core:menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-create-default" - ] - }, - { - "description": "core:menu:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-get" - ] - }, - { - "description": "core:menu:allow-insert -> Enables the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-insert" - ] - }, - { - "description": "core:menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-is-checked" - ] - }, - { - "description": "core:menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-is-enabled" - ] - }, - { - "description": "core:menu:allow-items -> Enables the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-items" - ] - }, - { - "description": "core:menu:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-new" - ] - }, - { - "description": "core:menu:allow-popup -> Enables the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-popup" - ] - }, - { - "description": "core:menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-prepend" - ] - }, - { - "description": "core:menu:allow-remove -> Enables the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-remove" - ] - }, - { - "description": "core:menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-remove-at" - ] - }, - { - "description": "core:menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-accelerator" - ] - }, - { - "description": "core:menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-app-menu" - ] - }, - { - "description": "core:menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "core:menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-window-menu" - ] - }, - { - "description": "core:menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "core:menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-checked" - ] - }, - { - "description": "core:menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-enabled" - ] - }, - { - "description": "core:menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-icon" - ] - }, - { - "description": "core:menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-text" - ] - }, - { - "description": "core:menu:allow-text -> Enables the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-text" - ] - }, - { - "description": "core:menu:deny-append -> Denies the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-append" - ] - }, - { - "description": "core:menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-create-default" - ] - }, - { - "description": "core:menu:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-get" - ] - }, - { - "description": "core:menu:deny-insert -> Denies the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-insert" - ] - }, - { - "description": "core:menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-is-checked" - ] - }, - { - "description": "core:menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-is-enabled" - ] - }, - { - "description": "core:menu:deny-items -> Denies the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-items" - ] - }, - { - "description": "core:menu:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-new" - ] - }, - { - "description": "core:menu:deny-popup -> Denies the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-popup" - ] - }, - { - "description": "core:menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-prepend" - ] - }, - { - "description": "core:menu:deny-remove -> Denies the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-remove" - ] - }, - { - "description": "core:menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-remove-at" - ] - }, - { - "description": "core:menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-accelerator" - ] - }, - { - "description": "core:menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-app-menu" - ] - }, - { - "description": "core:menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "core:menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-window-menu" - ] - }, - { - "description": "core:menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "core:menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-checked" - ] - }, - { - "description": "core:menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-enabled" - ] - }, - { - "description": "core:menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-icon" - ] - }, - { - "description": "core:menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-text" - ] - }, - { - "description": "core:menu:deny-text -> Denies the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-text" - ] - }, - { - "description": "core:path:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:path:default" - ] - }, - { - "description": "core:path:allow-basename -> Enables the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-basename" - ] - }, - { - "description": "core:path:allow-dirname -> Enables the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-dirname" - ] - }, - { - "description": "core:path:allow-extname -> Enables the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-extname" - ] - }, - { - "description": "core:path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-is-absolute" - ] - }, - { - "description": "core:path:allow-join -> Enables the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-join" - ] - }, - { - "description": "core:path:allow-normalize -> Enables the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-normalize" - ] - }, - { - "description": "core:path:allow-resolve -> Enables the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-resolve" - ] - }, - { - "description": "core:path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-resolve-directory" - ] - }, - { - "description": "core:path:deny-basename -> Denies the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-basename" - ] - }, - { - "description": "core:path:deny-dirname -> Denies the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-dirname" - ] - }, - { - "description": "core:path:deny-extname -> Denies the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-extname" - ] - }, - { - "description": "core:path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-is-absolute" - ] - }, - { - "description": "core:path:deny-join -> Denies the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-join" - ] - }, - { - "description": "core:path:deny-normalize -> Denies the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-normalize" - ] - }, - { - "description": "core:path:deny-resolve -> Denies the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-resolve" - ] - }, - { - "description": "core:path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-resolve-directory" - ] - }, - { - "description": "core:resources:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:resources:default" - ] - }, - { - "description": "core:resources:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:resources:allow-close" - ] - }, - { - "description": "core:resources:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:resources:deny-close" - ] - }, - { - "description": "core:tray:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:tray:default" - ] - }, - { - "description": "core:tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-get-by-id" - ] - }, - { - "description": "core:tray:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-new" - ] - }, - { - "description": "core:tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-remove-by-id" - ] - }, - { - "description": "core:tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-icon" - ] - }, - { - "description": "core:tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-icon-as-template" - ] - }, - { - "description": "core:tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-menu" - ] - }, - { - "description": "core:tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-show-menu-on-left-click" - ] - }, - { - "description": "core:tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-temp-dir-path" - ] - }, - { - "description": "core:tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-title" - ] - }, - { - "description": "core:tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-tooltip" - ] - }, - { - "description": "core:tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-visible" - ] - }, - { - "description": "core:tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-get-by-id" - ] - }, - { - "description": "core:tray:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-new" - ] - }, - { - "description": "core:tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-remove-by-id" - ] - }, - { - "description": "core:tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-icon" - ] - }, - { - "description": "core:tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-icon-as-template" - ] - }, - { - "description": "core:tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-menu" - ] - }, - { - "description": "core:tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-show-menu-on-left-click" - ] - }, - { - "description": "core:tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-temp-dir-path" - ] - }, - { - "description": "core:tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-title" - ] - }, - { - "description": "core:tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-tooltip" - ] - }, - { - "description": "core:tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-visible" - ] - }, - { - "description": "core:webview:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:webview:default" - ] - }, - { - "description": "core:webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-create-webview" - ] - }, - { - "description": "core:webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-create-webview-window" - ] - }, - { - "description": "core:webview:allow-get-all-webviews -> Enables the get_all_webviews command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-get-all-webviews" - ] - }, - { - "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-internal-toggle-devtools" - ] - }, - { - "description": "core:webview:allow-print -> Enables the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-print" - ] - }, - { - "description": "core:webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-reparent" - ] - }, - { - "description": "core:webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-focus" - ] - }, - { - "description": "core:webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-position" - ] - }, - { - "description": "core:webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-size" - ] - }, - { - "description": "core:webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-zoom" - ] - }, - { - "description": "core:webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-close" - ] - }, - { - "description": "core:webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-position" - ] - }, - { - "description": "core:webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-size" - ] - }, - { - "description": "core:webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-create-webview" - ] - }, - { - "description": "core:webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-create-webview-window" - ] - }, - { - "description": "core:webview:deny-get-all-webviews -> Denies the get_all_webviews command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-get-all-webviews" - ] - }, - { - "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-internal-toggle-devtools" - ] - }, - { - "description": "core:webview:deny-print -> Denies the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-print" - ] - }, - { - "description": "core:webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-reparent" - ] - }, - { - "description": "core:webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-focus" - ] - }, - { - "description": "core:webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-position" - ] - }, - { - "description": "core:webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-size" - ] - }, - { - "description": "core:webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-zoom" - ] - }, - { - "description": "core:webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-close" - ] - }, - { - "description": "core:webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-position" - ] - }, - { - "description": "core:webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-size" - ] - }, - { - "description": "core:window:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:window:default" - ] - }, - { - "description": "core:window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-available-monitors" - ] - }, - { - "description": "core:window:allow-center -> Enables the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-center" - ] - }, - { - "description": "core:window:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-close" - ] - }, - { - "description": "core:window:allow-create -> Enables the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-create" - ] - }, - { - "description": "core:window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-current-monitor" - ] - }, - { - "description": "core:window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-cursor-position" - ] - }, - { - "description": "core:window:allow-destroy -> Enables the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-destroy" - ] - }, - { - "description": "core:window:allow-get-all-windows -> Enables the get_all_windows command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-get-all-windows" - ] - }, - { - "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-hide" - ] - }, - { - "description": "core:window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-inner-position" - ] - }, - { - "description": "core:window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-inner-size" - ] - }, - { - "description": "core:window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-internal-toggle-maximize" - ] - }, - { - "description": "core:window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-closable" - ] - }, - { - "description": "core:window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-decorated" - ] - }, - { - "description": "core:window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-focused" - ] - }, - { - "description": "core:window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-fullscreen" - ] - }, - { - "description": "core:window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-maximizable" - ] - }, - { - "description": "core:window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-maximized" - ] - }, - { - "description": "core:window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-minimizable" - ] - }, - { - "description": "core:window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-minimized" - ] - }, - { - "description": "core:window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-resizable" - ] - }, - { - "description": "core:window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-visible" - ] - }, - { - "description": "core:window:allow-maximize -> Enables the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-maximize" - ] - }, - { - "description": "core:window:allow-minimize -> Enables the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-minimize" - ] - }, - { - "description": "core:window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-monitor-from-point" - ] - }, - { - "description": "core:window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-outer-position" - ] - }, - { - "description": "core:window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-outer-size" - ] - }, - { - "description": "core:window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-primary-monitor" - ] - }, - { - "description": "core:window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-request-user-attention" - ] - }, - { - "description": "core:window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-scale-factor" - ] - }, - { - "description": "core:window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-always-on-bottom" - ] - }, - { - "description": "core:window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-always-on-top" - ] - }, - { - "description": "core:window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-closable" - ] - }, - { - "description": "core:window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-content-protected" - ] - }, - { - "description": "core:window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-grab" - ] - }, - { - "description": "core:window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-icon" - ] - }, - { - "description": "core:window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-position" - ] - }, - { - "description": "core:window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-visible" - ] - }, - { - "description": "core:window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-decorations" - ] - }, - { - "description": "core:window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-effects" - ] - }, - { - "description": "core:window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-focus" - ] - }, - { - "description": "core:window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-fullscreen" - ] - }, - { - "description": "core:window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-icon" - ] - }, - { - "description": "core:window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-ignore-cursor-events" - ] - }, - { - "description": "core:window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-max-size" - ] - }, - { - "description": "core:window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-maximizable" - ] - }, - { - "description": "core:window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-min-size" - ] - }, - { - "description": "core:window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-minimizable" - ] - }, - { - "description": "core:window:allow-set-position -> Enables the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-position" - ] - }, - { - "description": "core:window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-progress-bar" - ] - }, - { - "description": "core:window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-resizable" - ] - }, - { - "description": "core:window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-shadow" - ] - }, - { - "description": "core:window:allow-set-size -> Enables the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-size" - ] - }, - { - "description": "core:window:allow-set-size-constraints -> Enables the set_size_constraints command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-size-constraints" - ] - }, - { - "description": "core:window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-skip-taskbar" - ] - }, - { - "description": "core:window:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-title" - ] - }, - { - "description": "core:window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-title-bar-style" - ] - }, - { - "description": "core:window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-visible-on-all-workspaces" - ] - }, - { - "description": "core:window:allow-show -> Enables the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-show" - ] - }, - { - "description": "core:window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-start-dragging" - ] - }, - { - "description": "core:window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-start-resize-dragging" - ] - }, - { - "description": "core:window:allow-theme -> Enables the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-theme" - ] - }, - { - "description": "core:window:allow-title -> Enables the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-title" - ] - }, - { - "description": "core:window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-toggle-maximize" - ] - }, - { - "description": "core:window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-unmaximize" - ] - }, - { - "description": "core:window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-unminimize" - ] - }, - { - "description": "core:window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-available-monitors" - ] - }, - { - "description": "core:window:deny-center -> Denies the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-center" - ] - }, - { - "description": "core:window:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-close" - ] - }, - { - "description": "core:window:deny-create -> Denies the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-create" - ] - }, - { - "description": "core:window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-current-monitor" - ] - }, - { - "description": "core:window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-cursor-position" - ] - }, - { - "description": "core:window:deny-destroy -> Denies the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-destroy" - ] - }, - { - "description": "core:window:deny-get-all-windows -> Denies the get_all_windows command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-get-all-windows" - ] - }, - { - "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-hide" - ] - }, - { - "description": "core:window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-inner-position" - ] - }, - { - "description": "core:window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-inner-size" - ] - }, - { - "description": "core:window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-internal-toggle-maximize" - ] - }, - { - "description": "core:window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-closable" - ] - }, - { - "description": "core:window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-decorated" - ] - }, - { - "description": "core:window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-focused" - ] - }, - { - "description": "core:window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-fullscreen" - ] - }, - { - "description": "core:window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-maximizable" - ] - }, - { - "description": "core:window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-maximized" - ] - }, - { - "description": "core:window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-minimizable" - ] - }, - { - "description": "core:window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-minimized" - ] - }, - { - "description": "core:window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-resizable" - ] - }, - { - "description": "core:window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-visible" - ] - }, - { - "description": "core:window:deny-maximize -> Denies the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-maximize" - ] - }, - { - "description": "core:window:deny-minimize -> Denies the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-minimize" - ] - }, - { - "description": "core:window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-monitor-from-point" - ] - }, - { - "description": "core:window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-outer-position" - ] - }, - { - "description": "core:window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-outer-size" - ] - }, - { - "description": "core:window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-primary-monitor" - ] - }, - { - "description": "core:window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-request-user-attention" - ] - }, - { - "description": "core:window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-scale-factor" - ] - }, - { - "description": "core:window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-always-on-bottom" - ] - }, - { - "description": "core:window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-always-on-top" - ] - }, - { - "description": "core:window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-closable" - ] - }, - { - "description": "core:window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-content-protected" - ] - }, - { - "description": "core:window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-grab" - ] - }, - { - "description": "core:window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-icon" - ] - }, - { - "description": "core:window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-position" - ] - }, - { - "description": "core:window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-visible" - ] - }, - { - "description": "core:window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-decorations" - ] - }, - { - "description": "core:window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-effects" - ] - }, - { - "description": "core:window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-focus" - ] - }, - { - "description": "core:window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-fullscreen" - ] - }, - { - "description": "core:window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-icon" - ] - }, - { - "description": "core:window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-ignore-cursor-events" - ] - }, - { - "description": "core:window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-max-size" - ] - }, - { - "description": "core:window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-maximizable" - ] - }, - { - "description": "core:window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-min-size" - ] - }, - { - "description": "core:window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-minimizable" - ] - }, - { - "description": "core:window:deny-set-position -> Denies the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-position" - ] - }, - { - "description": "core:window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-progress-bar" - ] - }, - { - "description": "core:window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-resizable" - ] - }, - { - "description": "core:window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-shadow" - ] - }, - { - "description": "core:window:deny-set-size -> Denies the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-size" - ] - }, - { - "description": "core:window:deny-set-size-constraints -> Denies the set_size_constraints command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-size-constraints" - ] - }, - { - "description": "core:window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-skip-taskbar" - ] - }, - { - "description": "core:window:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-title" - ] - }, - { - "description": "core:window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-title-bar-style" - ] - }, - { - "description": "core:window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-visible-on-all-workspaces" - ] - }, - { - "description": "core:window:deny-show -> Denies the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-show" - ] - }, - { - "description": "core:window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-start-dragging" - ] - }, - { - "description": "core:window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-start-resize-dragging" - ] - }, - { - "description": "core:window:deny-theme -> Denies the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-theme" - ] - }, - { - "description": "core:window:deny-title -> Denies the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-title" - ] - }, - { - "description": "core:window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-toggle-maximize" - ] - }, - { - "description": "core:window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-unmaximize" - ] - }, - { - "description": "core:window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-unminimize" - ] - }, - { - "description": "dialog:default -> This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", - "type": "string", - "enum": [ - "dialog:default" - ] - }, - { - "description": "dialog:allow-ask -> Enables the ask command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-ask" - ] - }, - { - "description": "dialog:allow-confirm -> Enables the confirm command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-confirm" - ] - }, - { - "description": "dialog:allow-message -> Enables the message command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-message" - ] - }, - { - "description": "dialog:allow-open -> Enables the open command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-open" - ] - }, - { - "description": "dialog:allow-save -> Enables the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-save" - ] - }, - { - "description": "dialog:deny-ask -> Denies the ask command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-ask" - ] - }, - { - "description": "dialog:deny-confirm -> Denies the confirm command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-confirm" - ] - }, - { - "description": "dialog:deny-message -> Denies the message command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-message" - ] - }, - { - "description": "dialog:deny-open -> Denies the open command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-open" - ] - }, - { - "description": "dialog:deny-save -> Denies the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-save" - ] - }, - { - "description": "log:default -> Allows the log command", - "type": "string", - "enum": [ - "log:default" - ] - }, - { - "description": "log:allow-log -> Enables the log command without any pre-configured scope.", - "type": "string", - "enum": [ - "log:allow-log" - ] - }, - { - "description": "log:deny-log -> Denies the log command without any pre-configured scope.", - "type": "string", - "enum": [ - "log:deny-log" - ] - }, - { - "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", - "type": "string", - "enum": [ - "updater:default" - ] - }, - { - "description": "updater:allow-check -> Enables the check command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-check" - ] - }, - { - "description": "updater:allow-download -> Enables the download command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-download" - ] - }, - { - "description": "updater:allow-download-and-install -> Enables the download_and_install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-download-and-install" - ] - }, - { - "description": "updater:allow-install -> Enables the install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-install" - ] - }, - { - "description": "updater:deny-check -> Denies the check command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-check" - ] - }, - { - "description": "updater:deny-download -> Denies the download command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-download" - ] - }, - { - "description": "updater:deny-download-and-install -> Denies the download_and_install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-download-and-install" - ] - }, - { - "description": "updater:deny-install -> Denies the install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-install" - ] - }, - { - "description": "window-state:default -> This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "enum": [ - "window-state:default" - ] - }, - { - "description": "window-state:allow-filename -> Enables the filename command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-filename" - ] - }, - { - "description": "window-state:allow-restore-state -> Enables the restore_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-restore-state" - ] - }, - { - "description": "window-state:allow-save-window-state -> Enables the save_window_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-save-window-state" - ] - }, - { - "description": "window-state:deny-filename -> Denies the filename command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-filename" - ] - }, - { - "description": "window-state:deny-restore-state -> Denies the restore_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-restore-state" - ] - }, - { - "description": "window-state:deny-save-window-state -> Denies the save_window_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-save-window-state" - ] - } - ] - }, - "Value": { - "description": "All supported ACL values.", - "anyOf": [ - { - "description": "Represents a null JSON value.", - "type": "null" - }, - { - "description": "Represents a [`bool`].", - "type": "boolean" - }, - { - "description": "Represents a valid ACL [`Number`].", - "allOf": [ - { - "$ref": "#/definitions/Number" - } - ] - }, - { - "description": "Represents a [`String`].", - "type": "string" - }, - { - "description": "Represents a list of other [`Value`]s.", - "type": "array", - "items": { - "$ref": "#/definitions/Value" - } - }, - { - "description": "Represents a map of [`String`] keys to [`Value`]s.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Value" - } - } - ] - }, - "Number": { - "description": "A valid ACL number.", - "anyOf": [ - { - "description": "Represents an [`i64`].", - "type": "integer", - "format": "int64" - }, - { - "description": "Represents a [`f64`].", - "type": "number", - "format": "double" - } - ] - }, - "Target": { - "description": "Platform target.", - "oneOf": [ - { - "description": "MacOS.", - "type": "string", - "enum": [ - "macOS" - ] - }, - { - "description": "Windows.", - "type": "string", - "enum": [ - "windows" - ] - }, - { - "description": "Linux.", - "type": "string", - "enum": [ - "linux" - ] - }, - { - "description": "Android.", - "type": "string", - "enum": [ - "android" - ] - }, - { - "description": "iOS.", - "type": "string", - "enum": [ - "iOS" - ] - } - ] - } - } -} \ No newline at end of file diff --git a/backend/tauri-app/gen/schemas/linux-schema.json b/backend/tauri-app/gen/schemas/linux-schema.json deleted file mode 100644 index 2a80568d..00000000 --- a/backend/tauri-app/gen/schemas/linux-schema.json +++ /dev/null @@ -1,2595 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CapabilityFile", - "description": "Capability formats accepted in a capability file.", - "anyOf": [ - { - "description": "A single capability.", - "allOf": [ - { - "$ref": "#/definitions/Capability" - } - ] - }, - { - "description": "A list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - }, - { - "description": "A list of capabilities.", - "type": "object", - "required": [ - "capabilities" - ], - "properties": { - "capabilities": { - "description": "The list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - } - } - } - ], - "definitions": { - "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", - "type": "object", - "required": [ - "identifier", - "permissions" - ], - "properties": { - "identifier": { - "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", - "type": "string" - }, - "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", - "default": "", - "type": "string" - }, - "remote": { - "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", - "anyOf": [ - { - "$ref": "#/definitions/CapabilityRemote" - }, - { - "type": "null" - } - ] - }, - "local": { - "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", - "default": true, - "type": "boolean" - }, - "windows": { - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "webviews": { - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", - "type": "array", - "items": { - "$ref": "#/definitions/PermissionEntry" - }, - "uniqueItems": true - }, - "platforms": { - "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Target" - } - } - } - }, - "CapabilityRemote": { - "description": "Configuration for remote URLs that are associated with the capability.", - "type": "object", - "required": [ - "urls" - ], - "properties": { - "urls": { - "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PermissionEntry": { - "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", - "anyOf": [ - { - "description": "Reference a permission or permission set by identifier.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - { - "description": "Reference a permission or permission set by identifier and extends its scope.", - "type": "object", - "required": [ - "identifier" - ], - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - "allow": { - "description": "Data that defines what is allowed by the scope.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - }, - "deny": { - "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - } - } - } - ] - }, - "Identifier": { - "oneOf": [ - { - "description": "core:app:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:app:default" - ] - }, - { - "description": "core:app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-app-hide" - ] - }, - { - "description": "core:app:allow-app-show -> Enables the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-app-show" - ] - }, - { - "description": "core:app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-default-window-icon" - ] - }, - { - "description": "core:app:allow-name -> Enables the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-name" - ] - }, - { - "description": "core:app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-tauri-version" - ] - }, - { - "description": "core:app:allow-version -> Enables the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-version" - ] - }, - { - "description": "core:app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-app-hide" - ] - }, - { - "description": "core:app:deny-app-show -> Denies the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-app-show" - ] - }, - { - "description": "core:app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-default-window-icon" - ] - }, - { - "description": "core:app:deny-name -> Denies the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-name" - ] - }, - { - "description": "core:app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-tauri-version" - ] - }, - { - "description": "core:app:deny-version -> Denies the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-version" - ] - }, - { - "description": "core:event:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:event:default" - ] - }, - { - "description": "core:event:allow-emit -> Enables the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-emit" - ] - }, - { - "description": "core:event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-emit-to" - ] - }, - { - "description": "core:event:allow-listen -> Enables the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-listen" - ] - }, - { - "description": "core:event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-unlisten" - ] - }, - { - "description": "core:event:deny-emit -> Denies the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-emit" - ] - }, - { - "description": "core:event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-emit-to" - ] - }, - { - "description": "core:event:deny-listen -> Denies the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-listen" - ] - }, - { - "description": "core:event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-unlisten" - ] - }, - { - "description": "core:image:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:image:default" - ] - }, - { - "description": "core:image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-from-bytes" - ] - }, - { - "description": "core:image:allow-from-path -> Enables the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-from-path" - ] - }, - { - "description": "core:image:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-new" - ] - }, - { - "description": "core:image:allow-rgba -> Enables the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-rgba" - ] - }, - { - "description": "core:image:allow-size -> Enables the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-size" - ] - }, - { - "description": "core:image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-from-bytes" - ] - }, - { - "description": "core:image:deny-from-path -> Denies the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-from-path" - ] - }, - { - "description": "core:image:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-new" - ] - }, - { - "description": "core:image:deny-rgba -> Denies the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-rgba" - ] - }, - { - "description": "core:image:deny-size -> Denies the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-size" - ] - }, - { - "description": "core:menu:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:menu:default" - ] - }, - { - "description": "core:menu:allow-append -> Enables the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-append" - ] - }, - { - "description": "core:menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-create-default" - ] - }, - { - "description": "core:menu:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-get" - ] - }, - { - "description": "core:menu:allow-insert -> Enables the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-insert" - ] - }, - { - "description": "core:menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-is-checked" - ] - }, - { - "description": "core:menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-is-enabled" - ] - }, - { - "description": "core:menu:allow-items -> Enables the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-items" - ] - }, - { - "description": "core:menu:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-new" - ] - }, - { - "description": "core:menu:allow-popup -> Enables the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-popup" - ] - }, - { - "description": "core:menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-prepend" - ] - }, - { - "description": "core:menu:allow-remove -> Enables the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-remove" - ] - }, - { - "description": "core:menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-remove-at" - ] - }, - { - "description": "core:menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-accelerator" - ] - }, - { - "description": "core:menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-app-menu" - ] - }, - { - "description": "core:menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "core:menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-window-menu" - ] - }, - { - "description": "core:menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "core:menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-checked" - ] - }, - { - "description": "core:menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-enabled" - ] - }, - { - "description": "core:menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-icon" - ] - }, - { - "description": "core:menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-text" - ] - }, - { - "description": "core:menu:allow-text -> Enables the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-text" - ] - }, - { - "description": "core:menu:deny-append -> Denies the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-append" - ] - }, - { - "description": "core:menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-create-default" - ] - }, - { - "description": "core:menu:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-get" - ] - }, - { - "description": "core:menu:deny-insert -> Denies the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-insert" - ] - }, - { - "description": "core:menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-is-checked" - ] - }, - { - "description": "core:menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-is-enabled" - ] - }, - { - "description": "core:menu:deny-items -> Denies the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-items" - ] - }, - { - "description": "core:menu:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-new" - ] - }, - { - "description": "core:menu:deny-popup -> Denies the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-popup" - ] - }, - { - "description": "core:menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-prepend" - ] - }, - { - "description": "core:menu:deny-remove -> Denies the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-remove" - ] - }, - { - "description": "core:menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-remove-at" - ] - }, - { - "description": "core:menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-accelerator" - ] - }, - { - "description": "core:menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-app-menu" - ] - }, - { - "description": "core:menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "core:menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-window-menu" - ] - }, - { - "description": "core:menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "core:menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-checked" - ] - }, - { - "description": "core:menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-enabled" - ] - }, - { - "description": "core:menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-icon" - ] - }, - { - "description": "core:menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-text" - ] - }, - { - "description": "core:menu:deny-text -> Denies the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-text" - ] - }, - { - "description": "core:path:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:path:default" - ] - }, - { - "description": "core:path:allow-basename -> Enables the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-basename" - ] - }, - { - "description": "core:path:allow-dirname -> Enables the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-dirname" - ] - }, - { - "description": "core:path:allow-extname -> Enables the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-extname" - ] - }, - { - "description": "core:path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-is-absolute" - ] - }, - { - "description": "core:path:allow-join -> Enables the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-join" - ] - }, - { - "description": "core:path:allow-normalize -> Enables the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-normalize" - ] - }, - { - "description": "core:path:allow-resolve -> Enables the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-resolve" - ] - }, - { - "description": "core:path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-resolve-directory" - ] - }, - { - "description": "core:path:deny-basename -> Denies the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-basename" - ] - }, - { - "description": "core:path:deny-dirname -> Denies the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-dirname" - ] - }, - { - "description": "core:path:deny-extname -> Denies the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-extname" - ] - }, - { - "description": "core:path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-is-absolute" - ] - }, - { - "description": "core:path:deny-join -> Denies the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-join" - ] - }, - { - "description": "core:path:deny-normalize -> Denies the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-normalize" - ] - }, - { - "description": "core:path:deny-resolve -> Denies the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-resolve" - ] - }, - { - "description": "core:path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-resolve-directory" - ] - }, - { - "description": "core:resources:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:resources:default" - ] - }, - { - "description": "core:resources:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:resources:allow-close" - ] - }, - { - "description": "core:resources:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:resources:deny-close" - ] - }, - { - "description": "core:tray:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:tray:default" - ] - }, - { - "description": "core:tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-get-by-id" - ] - }, - { - "description": "core:tray:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-new" - ] - }, - { - "description": "core:tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-remove-by-id" - ] - }, - { - "description": "core:tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-icon" - ] - }, - { - "description": "core:tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-icon-as-template" - ] - }, - { - "description": "core:tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-menu" - ] - }, - { - "description": "core:tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-show-menu-on-left-click" - ] - }, - { - "description": "core:tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-temp-dir-path" - ] - }, - { - "description": "core:tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-title" - ] - }, - { - "description": "core:tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-tooltip" - ] - }, - { - "description": "core:tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-visible" - ] - }, - { - "description": "core:tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-get-by-id" - ] - }, - { - "description": "core:tray:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-new" - ] - }, - { - "description": "core:tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-remove-by-id" - ] - }, - { - "description": "core:tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-icon" - ] - }, - { - "description": "core:tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-icon-as-template" - ] - }, - { - "description": "core:tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-menu" - ] - }, - { - "description": "core:tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-show-menu-on-left-click" - ] - }, - { - "description": "core:tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-temp-dir-path" - ] - }, - { - "description": "core:tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-title" - ] - }, - { - "description": "core:tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-tooltip" - ] - }, - { - "description": "core:tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-visible" - ] - }, - { - "description": "core:webview:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:webview:default" - ] - }, - { - "description": "core:webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-create-webview" - ] - }, - { - "description": "core:webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-create-webview-window" - ] - }, - { - "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-internal-toggle-devtools" - ] - }, - { - "description": "core:webview:allow-print -> Enables the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-print" - ] - }, - { - "description": "core:webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-reparent" - ] - }, - { - "description": "core:webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-focus" - ] - }, - { - "description": "core:webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-position" - ] - }, - { - "description": "core:webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-size" - ] - }, - { - "description": "core:webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-zoom" - ] - }, - { - "description": "core:webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-close" - ] - }, - { - "description": "core:webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-position" - ] - }, - { - "description": "core:webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-size" - ] - }, - { - "description": "core:webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-create-webview" - ] - }, - { - "description": "core:webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-create-webview-window" - ] - }, - { - "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-internal-toggle-devtools" - ] - }, - { - "description": "core:webview:deny-print -> Denies the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-print" - ] - }, - { - "description": "core:webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-reparent" - ] - }, - { - "description": "core:webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-focus" - ] - }, - { - "description": "core:webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-position" - ] - }, - { - "description": "core:webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-size" - ] - }, - { - "description": "core:webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-zoom" - ] - }, - { - "description": "core:webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-close" - ] - }, - { - "description": "core:webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-position" - ] - }, - { - "description": "core:webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-size" - ] - }, - { - "description": "core:window:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:window:default" - ] - }, - { - "description": "core:window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-available-monitors" - ] - }, - { - "description": "core:window:allow-center -> Enables the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-center" - ] - }, - { - "description": "core:window:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-close" - ] - }, - { - "description": "core:window:allow-create -> Enables the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-create" - ] - }, - { - "description": "core:window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-current-monitor" - ] - }, - { - "description": "core:window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-cursor-position" - ] - }, - { - "description": "core:window:allow-destroy -> Enables the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-destroy" - ] - }, - { - "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-hide" - ] - }, - { - "description": "core:window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-inner-position" - ] - }, - { - "description": "core:window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-inner-size" - ] - }, - { - "description": "core:window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-internal-toggle-maximize" - ] - }, - { - "description": "core:window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-closable" - ] - }, - { - "description": "core:window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-decorated" - ] - }, - { - "description": "core:window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-focused" - ] - }, - { - "description": "core:window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-fullscreen" - ] - }, - { - "description": "core:window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-maximizable" - ] - }, - { - "description": "core:window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-maximized" - ] - }, - { - "description": "core:window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-minimizable" - ] - }, - { - "description": "core:window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-minimized" - ] - }, - { - "description": "core:window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-resizable" - ] - }, - { - "description": "core:window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-visible" - ] - }, - { - "description": "core:window:allow-maximize -> Enables the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-maximize" - ] - }, - { - "description": "core:window:allow-minimize -> Enables the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-minimize" - ] - }, - { - "description": "core:window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-monitor-from-point" - ] - }, - { - "description": "core:window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-outer-position" - ] - }, - { - "description": "core:window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-outer-size" - ] - }, - { - "description": "core:window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-primary-monitor" - ] - }, - { - "description": "core:window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-request-user-attention" - ] - }, - { - "description": "core:window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-scale-factor" - ] - }, - { - "description": "core:window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-always-on-bottom" - ] - }, - { - "description": "core:window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-always-on-top" - ] - }, - { - "description": "core:window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-closable" - ] - }, - { - "description": "core:window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-content-protected" - ] - }, - { - "description": "core:window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-grab" - ] - }, - { - "description": "core:window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-icon" - ] - }, - { - "description": "core:window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-position" - ] - }, - { - "description": "core:window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-visible" - ] - }, - { - "description": "core:window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-decorations" - ] - }, - { - "description": "core:window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-effects" - ] - }, - { - "description": "core:window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-focus" - ] - }, - { - "description": "core:window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-fullscreen" - ] - }, - { - "description": "core:window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-icon" - ] - }, - { - "description": "core:window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-ignore-cursor-events" - ] - }, - { - "description": "core:window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-max-size" - ] - }, - { - "description": "core:window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-maximizable" - ] - }, - { - "description": "core:window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-min-size" - ] - }, - { - "description": "core:window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-minimizable" - ] - }, - { - "description": "core:window:allow-set-position -> Enables the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-position" - ] - }, - { - "description": "core:window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-progress-bar" - ] - }, - { - "description": "core:window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-resizable" - ] - }, - { - "description": "core:window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-shadow" - ] - }, - { - "description": "core:window:allow-set-size -> Enables the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-size" - ] - }, - { - "description": "core:window:allow-set-size-constraints -> Enables the set_size_constraints command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-size-constraints" - ] - }, - { - "description": "core:window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-skip-taskbar" - ] - }, - { - "description": "core:window:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-title" - ] - }, - { - "description": "core:window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-title-bar-style" - ] - }, - { - "description": "core:window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-visible-on-all-workspaces" - ] - }, - { - "description": "core:window:allow-show -> Enables the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-show" - ] - }, - { - "description": "core:window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-start-dragging" - ] - }, - { - "description": "core:window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-start-resize-dragging" - ] - }, - { - "description": "core:window:allow-theme -> Enables the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-theme" - ] - }, - { - "description": "core:window:allow-title -> Enables the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-title" - ] - }, - { - "description": "core:window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-toggle-maximize" - ] - }, - { - "description": "core:window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-unmaximize" - ] - }, - { - "description": "core:window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-unminimize" - ] - }, - { - "description": "core:window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-available-monitors" - ] - }, - { - "description": "core:window:deny-center -> Denies the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-center" - ] - }, - { - "description": "core:window:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-close" - ] - }, - { - "description": "core:window:deny-create -> Denies the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-create" - ] - }, - { - "description": "core:window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-current-monitor" - ] - }, - { - "description": "core:window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-cursor-position" - ] - }, - { - "description": "core:window:deny-destroy -> Denies the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-destroy" - ] - }, - { - "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-hide" - ] - }, - { - "description": "core:window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-inner-position" - ] - }, - { - "description": "core:window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-inner-size" - ] - }, - { - "description": "core:window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-internal-toggle-maximize" - ] - }, - { - "description": "core:window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-closable" - ] - }, - { - "description": "core:window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-decorated" - ] - }, - { - "description": "core:window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-focused" - ] - }, - { - "description": "core:window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-fullscreen" - ] - }, - { - "description": "core:window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-maximizable" - ] - }, - { - "description": "core:window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-maximized" - ] - }, - { - "description": "core:window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-minimizable" - ] - }, - { - "description": "core:window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-minimized" - ] - }, - { - "description": "core:window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-resizable" - ] - }, - { - "description": "core:window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-visible" - ] - }, - { - "description": "core:window:deny-maximize -> Denies the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-maximize" - ] - }, - { - "description": "core:window:deny-minimize -> Denies the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-minimize" - ] - }, - { - "description": "core:window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-monitor-from-point" - ] - }, - { - "description": "core:window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-outer-position" - ] - }, - { - "description": "core:window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-outer-size" - ] - }, - { - "description": "core:window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-primary-monitor" - ] - }, - { - "description": "core:window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-request-user-attention" - ] - }, - { - "description": "core:window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-scale-factor" - ] - }, - { - "description": "core:window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-always-on-bottom" - ] - }, - { - "description": "core:window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-always-on-top" - ] - }, - { - "description": "core:window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-closable" - ] - }, - { - "description": "core:window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-content-protected" - ] - }, - { - "description": "core:window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-grab" - ] - }, - { - "description": "core:window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-icon" - ] - }, - { - "description": "core:window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-position" - ] - }, - { - "description": "core:window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-visible" - ] - }, - { - "description": "core:window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-decorations" - ] - }, - { - "description": "core:window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-effects" - ] - }, - { - "description": "core:window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-focus" - ] - }, - { - "description": "core:window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-fullscreen" - ] - }, - { - "description": "core:window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-icon" - ] - }, - { - "description": "core:window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-ignore-cursor-events" - ] - }, - { - "description": "core:window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-max-size" - ] - }, - { - "description": "core:window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-maximizable" - ] - }, - { - "description": "core:window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-min-size" - ] - }, - { - "description": "core:window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-minimizable" - ] - }, - { - "description": "core:window:deny-set-position -> Denies the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-position" - ] - }, - { - "description": "core:window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-progress-bar" - ] - }, - { - "description": "core:window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-resizable" - ] - }, - { - "description": "core:window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-shadow" - ] - }, - { - "description": "core:window:deny-set-size -> Denies the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-size" - ] - }, - { - "description": "core:window:deny-set-size-constraints -> Denies the set_size_constraints command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-size-constraints" - ] - }, - { - "description": "core:window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-skip-taskbar" - ] - }, - { - "description": "core:window:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-title" - ] - }, - { - "description": "core:window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-title-bar-style" - ] - }, - { - "description": "core:window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-visible-on-all-workspaces" - ] - }, - { - "description": "core:window:deny-show -> Denies the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-show" - ] - }, - { - "description": "core:window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-start-dragging" - ] - }, - { - "description": "core:window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-start-resize-dragging" - ] - }, - { - "description": "core:window:deny-theme -> Denies the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-theme" - ] - }, - { - "description": "core:window:deny-title -> Denies the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-title" - ] - }, - { - "description": "core:window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-toggle-maximize" - ] - }, - { - "description": "core:window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-unmaximize" - ] - }, - { - "description": "core:window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-unminimize" - ] - }, - { - "description": "dialog:default -> This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", - "type": "string", - "enum": [ - "dialog:default" - ] - }, - { - "description": "dialog:allow-ask -> Enables the ask command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-ask" - ] - }, - { - "description": "dialog:allow-confirm -> Enables the confirm command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-confirm" - ] - }, - { - "description": "dialog:allow-message -> Enables the message command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-message" - ] - }, - { - "description": "dialog:allow-open -> Enables the open command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-open" - ] - }, - { - "description": "dialog:allow-save -> Enables the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-save" - ] - }, - { - "description": "dialog:deny-ask -> Denies the ask command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-ask" - ] - }, - { - "description": "dialog:deny-confirm -> Denies the confirm command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-confirm" - ] - }, - { - "description": "dialog:deny-message -> Denies the message command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-message" - ] - }, - { - "description": "dialog:deny-open -> Denies the open command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-open" - ] - }, - { - "description": "dialog:deny-save -> Denies the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-save" - ] - }, - { - "description": "log:default -> Allows the log command", - "type": "string", - "enum": [ - "log:default" - ] - }, - { - "description": "log:allow-log -> Enables the log command without any pre-configured scope.", - "type": "string", - "enum": [ - "log:allow-log" - ] - }, - { - "description": "log:deny-log -> Denies the log command without any pre-configured scope.", - "type": "string", - "enum": [ - "log:deny-log" - ] - }, - { - "description": "store:default -> This permission set configures what kind of\noperations are available from the store plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "enum": [ - "store:default" - ] - }, - { - "description": "store:allow-clear -> Enables the clear command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-clear" - ] - }, - { - "description": "store:allow-delete -> Enables the delete command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-delete" - ] - }, - { - "description": "store:allow-entries -> Enables the entries command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-entries" - ] - }, - { - "description": "store:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-get" - ] - }, - { - "description": "store:allow-has -> Enables the has command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-has" - ] - }, - { - "description": "store:allow-keys -> Enables the keys command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-keys" - ] - }, - { - "description": "store:allow-length -> Enables the length command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-length" - ] - }, - { - "description": "store:allow-load -> Enables the load command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-load" - ] - }, - { - "description": "store:allow-reset -> Enables the reset command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-reset" - ] - }, - { - "description": "store:allow-save -> Enables the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-save" - ] - }, - { - "description": "store:allow-set -> Enables the set command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-set" - ] - }, - { - "description": "store:allow-values -> Enables the values command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:allow-values" - ] - }, - { - "description": "store:deny-clear -> Denies the clear command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-clear" - ] - }, - { - "description": "store:deny-delete -> Denies the delete command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-delete" - ] - }, - { - "description": "store:deny-entries -> Denies the entries command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-entries" - ] - }, - { - "description": "store:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-get" - ] - }, - { - "description": "store:deny-has -> Denies the has command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-has" - ] - }, - { - "description": "store:deny-keys -> Denies the keys command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-keys" - ] - }, - { - "description": "store:deny-length -> Denies the length command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-length" - ] - }, - { - "description": "store:deny-load -> Denies the load command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-load" - ] - }, - { - "description": "store:deny-reset -> Denies the reset command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-reset" - ] - }, - { - "description": "store:deny-save -> Denies the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-save" - ] - }, - { - "description": "store:deny-set -> Denies the set command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-set" - ] - }, - { - "description": "store:deny-values -> Denies the values command without any pre-configured scope.", - "type": "string", - "enum": [ - "store:deny-values" - ] - }, - { - "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", - "type": "string", - "enum": [ - "updater:default" - ] - }, - { - "description": "updater:allow-check -> Enables the check command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-check" - ] - }, - { - "description": "updater:allow-download -> Enables the download command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-download" - ] - }, - { - "description": "updater:allow-download-and-install -> Enables the download_and_install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-download-and-install" - ] - }, - { - "description": "updater:allow-install -> Enables the install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-install" - ] - }, - { - "description": "updater:deny-check -> Denies the check command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-check" - ] - }, - { - "description": "updater:deny-download -> Denies the download command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-download" - ] - }, - { - "description": "updater:deny-download-and-install -> Denies the download_and_install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-download-and-install" - ] - }, - { - "description": "updater:deny-install -> Denies the install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-install" - ] - }, - { - "description": "window-state:default -> This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "enum": [ - "window-state:default" - ] - }, - { - "description": "window-state:allow-filename -> Enables the filename command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-filename" - ] - }, - { - "description": "window-state:allow-restore-state -> Enables the restore_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-restore-state" - ] - }, - { - "description": "window-state:allow-save-window-state -> Enables the save_window_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-save-window-state" - ] - }, - { - "description": "window-state:deny-filename -> Denies the filename command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-filename" - ] - }, - { - "description": "window-state:deny-restore-state -> Denies the restore_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-restore-state" - ] - }, - { - "description": "window-state:deny-save-window-state -> Denies the save_window_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-save-window-state" - ] - } - ] - }, - "Value": { - "description": "All supported ACL values.", - "anyOf": [ - { - "description": "Represents a null JSON value.", - "type": "null" - }, - { - "description": "Represents a [`bool`].", - "type": "boolean" - }, - { - "description": "Represents a valid ACL [`Number`].", - "allOf": [ - { - "$ref": "#/definitions/Number" - } - ] - }, - { - "description": "Represents a [`String`].", - "type": "string" - }, - { - "description": "Represents a list of other [`Value`]s.", - "type": "array", - "items": { - "$ref": "#/definitions/Value" - } - }, - { - "description": "Represents a map of [`String`] keys to [`Value`]s.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Value" - } - } - ] - }, - "Number": { - "description": "A valid ACL number.", - "anyOf": [ - { - "description": "Represents an [`i64`].", - "type": "integer", - "format": "int64" - }, - { - "description": "Represents a [`f64`].", - "type": "number", - "format": "double" - } - ] - }, - "Target": { - "description": "Platform target.", - "oneOf": [ - { - "description": "MacOS.", - "type": "string", - "enum": [ - "macOS" - ] - }, - { - "description": "Windows.", - "type": "string", - "enum": [ - "windows" - ] - }, - { - "description": "Linux.", - "type": "string", - "enum": [ - "linux" - ] - }, - { - "description": "Android.", - "type": "string", - "enum": [ - "android" - ] - }, - { - "description": "iOS.", - "type": "string", - "enum": [ - "iOS" - ] - } - ] - } - } -} \ No newline at end of file diff --git a/backend/tauri-app/gen/schemas/windows-schema.json b/backend/tauri-app/gen/schemas/windows-schema.json deleted file mode 100644 index c184ff68..00000000 --- a/backend/tauri-app/gen/schemas/windows-schema.json +++ /dev/null @@ -1,2448 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "CapabilityFile", - "description": "Capability formats accepted in a capability file.", - "anyOf": [ - { - "description": "A single capability.", - "allOf": [ - { - "$ref": "#/definitions/Capability" - } - ] - }, - { - "description": "A list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - }, - { - "description": "A list of capabilities.", - "type": "object", - "required": [ - "capabilities" - ], - "properties": { - "capabilities": { - "description": "The list of capabilities.", - "type": "array", - "items": { - "$ref": "#/definitions/Capability" - } - } - } - } - ], - "definitions": { - "Capability": { - "description": "A grouping and boundary mechanism developers can use to isolate access to the IPC layer.\n\nIt controls application windows fine grained access to the Tauri core, application, or plugin commands. If a window is not matching any capability then it has no access to the IPC layer at all.\n\nThis can be done to create groups of windows, based on their required system access, which can reduce impact of frontend vulnerabilities in less privileged windows. Windows can be added to a capability by exact name (e.g. `main-window`) or glob patterns like `*` or `admin-*`. A Window can have none, one, or multiple associated capabilities.\n\n## Example\n\n```json { \"identifier\": \"main-user-files-write\", \"description\": \"This capability allows the `main` window on macOS and Windows access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.\", \"windows\": [ \"main\" ], \"permissions\": [ \"core:default\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] }, \"platforms\": [\"macOS\",\"windows\"] } ```", - "type": "object", - "required": [ - "identifier", - "permissions" - ], - "properties": { - "identifier": { - "description": "Identifier of the capability.\n\n## Example\n\n`main-user-files-write`", - "type": "string" - }, - "description": { - "description": "Description of what the capability is intended to allow on associated windows.\n\nIt should contain a description of what the grouped permissions should allow.\n\n## Example\n\nThis capability allows the `main` window access to `filesystem` write related commands and `dialog` commands to enable programatic access to files selected by the user.", - "default": "", - "type": "string" - }, - "remote": { - "description": "Configure remote URLs that can use the capability permissions.\n\nThis setting is optional and defaults to not being set, as our default use case is that the content is served from our local application.\n\n:::caution Make sure you understand the security implications of providing remote sources with local system access. :::\n\n## Example\n\n```json { \"urls\": [\"https://*.mydomain.dev\"] } ```", - "anyOf": [ - { - "$ref": "#/definitions/CapabilityRemote" - }, - { - "type": "null" - } - ] - }, - "local": { - "description": "Whether this capability is enabled for local app URLs or not. Defaults to `true`.", - "default": true, - "type": "boolean" - }, - "windows": { - "description": "List of windows that are affected by this capability. Can be a glob pattern.\n\nOn multiwebview windows, prefer [`Self::webviews`] for a fine grained access control.\n\n## Example\n\n`[\"main\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "webviews": { - "description": "List of webviews that are affected by this capability. Can be a glob pattern.\n\nThis is only required when using on multiwebview contexts, by default all child webviews of a window that matches [`Self::windows`] are linked.\n\n## Example\n\n`[\"sub-webview-one\", \"sub-webview-two\"]`", - "type": "array", - "items": { - "type": "string" - } - }, - "permissions": { - "description": "List of permissions attached to this capability.\n\nMust include the plugin name as prefix in the form of `${plugin-name}:${permission-name}`. For commands directly implemented in the application itself only `${permission-name}` is required.\n\n## Example\n\n```json [ \"core:default\", \"shell:allow-open\", \"dialog:open\", { \"identifier\": \"fs:allow-write-text-file\", \"allow\": [{ \"path\": \"$HOME/test.txt\" }] } ```", - "type": "array", - "items": { - "$ref": "#/definitions/PermissionEntry" - }, - "uniqueItems": true - }, - "platforms": { - "description": "Limit which target platforms this capability applies to.\n\nBy default all platforms are targeted.\n\n## Example\n\n`[\"macOS\",\"windows\"]`", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Target" - } - } - } - }, - "CapabilityRemote": { - "description": "Configuration for remote URLs that are associated with the capability.", - "type": "object", - "required": [ - "urls" - ], - "properties": { - "urls": { - "description": "Remote domains this capability refers to using the [URLPattern standard](https://urlpattern.spec.whatwg.org/).\n\n## Examples\n\n- \"https://*.mydomain.dev\": allows subdomains of mydomain.dev - \"https://mydomain.dev/api/*\": allows any subpath of mydomain.dev/api", - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "PermissionEntry": { - "description": "An entry for a permission value in a [`Capability`] can be either a raw permission [`Identifier`] or an object that references a permission and extends its scope.", - "anyOf": [ - { - "description": "Reference a permission or permission set by identifier.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - { - "description": "Reference a permission or permission set by identifier and extends its scope.", - "type": "object", - "required": [ - "identifier" - ], - "properties": { - "identifier": { - "description": "Identifier of the permission or permission set.", - "allOf": [ - { - "$ref": "#/definitions/Identifier" - } - ] - }, - "allow": { - "description": "Data that defines what is allowed by the scope.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - }, - "deny": { - "description": "Data that defines what is denied by the scope. This should be prioritized by validation logic.", - "type": [ - "array", - "null" - ], - "items": { - "$ref": "#/definitions/Value" - } - } - } - } - ] - }, - "Identifier": { - "oneOf": [ - { - "description": "core:app:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:app:default" - ] - }, - { - "description": "core:app:allow-app-hide -> Enables the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-app-hide" - ] - }, - { - "description": "core:app:allow-app-show -> Enables the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-app-show" - ] - }, - { - "description": "core:app:allow-default-window-icon -> Enables the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-default-window-icon" - ] - }, - { - "description": "core:app:allow-name -> Enables the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-name" - ] - }, - { - "description": "core:app:allow-tauri-version -> Enables the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-tauri-version" - ] - }, - { - "description": "core:app:allow-version -> Enables the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:allow-version" - ] - }, - { - "description": "core:app:deny-app-hide -> Denies the app_hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-app-hide" - ] - }, - { - "description": "core:app:deny-app-show -> Denies the app_show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-app-show" - ] - }, - { - "description": "core:app:deny-default-window-icon -> Denies the default_window_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-default-window-icon" - ] - }, - { - "description": "core:app:deny-name -> Denies the name command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-name" - ] - }, - { - "description": "core:app:deny-tauri-version -> Denies the tauri_version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-tauri-version" - ] - }, - { - "description": "core:app:deny-version -> Denies the version command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:app:deny-version" - ] - }, - { - "description": "core:event:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:event:default" - ] - }, - { - "description": "core:event:allow-emit -> Enables the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-emit" - ] - }, - { - "description": "core:event:allow-emit-to -> Enables the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-emit-to" - ] - }, - { - "description": "core:event:allow-listen -> Enables the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-listen" - ] - }, - { - "description": "core:event:allow-unlisten -> Enables the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:allow-unlisten" - ] - }, - { - "description": "core:event:deny-emit -> Denies the emit command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-emit" - ] - }, - { - "description": "core:event:deny-emit-to -> Denies the emit_to command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-emit-to" - ] - }, - { - "description": "core:event:deny-listen -> Denies the listen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-listen" - ] - }, - { - "description": "core:event:deny-unlisten -> Denies the unlisten command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:event:deny-unlisten" - ] - }, - { - "description": "core:image:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:image:default" - ] - }, - { - "description": "core:image:allow-from-bytes -> Enables the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-from-bytes" - ] - }, - { - "description": "core:image:allow-from-path -> Enables the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-from-path" - ] - }, - { - "description": "core:image:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-new" - ] - }, - { - "description": "core:image:allow-rgba -> Enables the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-rgba" - ] - }, - { - "description": "core:image:allow-size -> Enables the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:allow-size" - ] - }, - { - "description": "core:image:deny-from-bytes -> Denies the from_bytes command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-from-bytes" - ] - }, - { - "description": "core:image:deny-from-path -> Denies the from_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-from-path" - ] - }, - { - "description": "core:image:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-new" - ] - }, - { - "description": "core:image:deny-rgba -> Denies the rgba command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-rgba" - ] - }, - { - "description": "core:image:deny-size -> Denies the size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:image:deny-size" - ] - }, - { - "description": "core:menu:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:menu:default" - ] - }, - { - "description": "core:menu:allow-append -> Enables the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-append" - ] - }, - { - "description": "core:menu:allow-create-default -> Enables the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-create-default" - ] - }, - { - "description": "core:menu:allow-get -> Enables the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-get" - ] - }, - { - "description": "core:menu:allow-insert -> Enables the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-insert" - ] - }, - { - "description": "core:menu:allow-is-checked -> Enables the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-is-checked" - ] - }, - { - "description": "core:menu:allow-is-enabled -> Enables the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-is-enabled" - ] - }, - { - "description": "core:menu:allow-items -> Enables the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-items" - ] - }, - { - "description": "core:menu:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-new" - ] - }, - { - "description": "core:menu:allow-popup -> Enables the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-popup" - ] - }, - { - "description": "core:menu:allow-prepend -> Enables the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-prepend" - ] - }, - { - "description": "core:menu:allow-remove -> Enables the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-remove" - ] - }, - { - "description": "core:menu:allow-remove-at -> Enables the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-remove-at" - ] - }, - { - "description": "core:menu:allow-set-accelerator -> Enables the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-accelerator" - ] - }, - { - "description": "core:menu:allow-set-as-app-menu -> Enables the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-app-menu" - ] - }, - { - "description": "core:menu:allow-set-as-help-menu-for-nsapp -> Enables the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "core:menu:allow-set-as-window-menu -> Enables the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-window-menu" - ] - }, - { - "description": "core:menu:allow-set-as-windows-menu-for-nsapp -> Enables the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "core:menu:allow-set-checked -> Enables the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-checked" - ] - }, - { - "description": "core:menu:allow-set-enabled -> Enables the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-enabled" - ] - }, - { - "description": "core:menu:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-icon" - ] - }, - { - "description": "core:menu:allow-set-text -> Enables the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-set-text" - ] - }, - { - "description": "core:menu:allow-text -> Enables the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:allow-text" - ] - }, - { - "description": "core:menu:deny-append -> Denies the append command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-append" - ] - }, - { - "description": "core:menu:deny-create-default -> Denies the create_default command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-create-default" - ] - }, - { - "description": "core:menu:deny-get -> Denies the get command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-get" - ] - }, - { - "description": "core:menu:deny-insert -> Denies the insert command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-insert" - ] - }, - { - "description": "core:menu:deny-is-checked -> Denies the is_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-is-checked" - ] - }, - { - "description": "core:menu:deny-is-enabled -> Denies the is_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-is-enabled" - ] - }, - { - "description": "core:menu:deny-items -> Denies the items command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-items" - ] - }, - { - "description": "core:menu:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-new" - ] - }, - { - "description": "core:menu:deny-popup -> Denies the popup command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-popup" - ] - }, - { - "description": "core:menu:deny-prepend -> Denies the prepend command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-prepend" - ] - }, - { - "description": "core:menu:deny-remove -> Denies the remove command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-remove" - ] - }, - { - "description": "core:menu:deny-remove-at -> Denies the remove_at command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-remove-at" - ] - }, - { - "description": "core:menu:deny-set-accelerator -> Denies the set_accelerator command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-accelerator" - ] - }, - { - "description": "core:menu:deny-set-as-app-menu -> Denies the set_as_app_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-app-menu" - ] - }, - { - "description": "core:menu:deny-set-as-help-menu-for-nsapp -> Denies the set_as_help_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-help-menu-for-nsapp" - ] - }, - { - "description": "core:menu:deny-set-as-window-menu -> Denies the set_as_window_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-window-menu" - ] - }, - { - "description": "core:menu:deny-set-as-windows-menu-for-nsapp -> Denies the set_as_windows_menu_for_nsapp command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-as-windows-menu-for-nsapp" - ] - }, - { - "description": "core:menu:deny-set-checked -> Denies the set_checked command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-checked" - ] - }, - { - "description": "core:menu:deny-set-enabled -> Denies the set_enabled command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-enabled" - ] - }, - { - "description": "core:menu:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-icon" - ] - }, - { - "description": "core:menu:deny-set-text -> Denies the set_text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-set-text" - ] - }, - { - "description": "core:menu:deny-text -> Denies the text command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:menu:deny-text" - ] - }, - { - "description": "core:path:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:path:default" - ] - }, - { - "description": "core:path:allow-basename -> Enables the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-basename" - ] - }, - { - "description": "core:path:allow-dirname -> Enables the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-dirname" - ] - }, - { - "description": "core:path:allow-extname -> Enables the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-extname" - ] - }, - { - "description": "core:path:allow-is-absolute -> Enables the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-is-absolute" - ] - }, - { - "description": "core:path:allow-join -> Enables the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-join" - ] - }, - { - "description": "core:path:allow-normalize -> Enables the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-normalize" - ] - }, - { - "description": "core:path:allow-resolve -> Enables the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-resolve" - ] - }, - { - "description": "core:path:allow-resolve-directory -> Enables the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:allow-resolve-directory" - ] - }, - { - "description": "core:path:deny-basename -> Denies the basename command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-basename" - ] - }, - { - "description": "core:path:deny-dirname -> Denies the dirname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-dirname" - ] - }, - { - "description": "core:path:deny-extname -> Denies the extname command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-extname" - ] - }, - { - "description": "core:path:deny-is-absolute -> Denies the is_absolute command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-is-absolute" - ] - }, - { - "description": "core:path:deny-join -> Denies the join command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-join" - ] - }, - { - "description": "core:path:deny-normalize -> Denies the normalize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-normalize" - ] - }, - { - "description": "core:path:deny-resolve -> Denies the resolve command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-resolve" - ] - }, - { - "description": "core:path:deny-resolve-directory -> Denies the resolve_directory command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:path:deny-resolve-directory" - ] - }, - { - "description": "core:resources:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:resources:default" - ] - }, - { - "description": "core:resources:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:resources:allow-close" - ] - }, - { - "description": "core:resources:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:resources:deny-close" - ] - }, - { - "description": "core:tray:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:tray:default" - ] - }, - { - "description": "core:tray:allow-get-by-id -> Enables the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-get-by-id" - ] - }, - { - "description": "core:tray:allow-new -> Enables the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-new" - ] - }, - { - "description": "core:tray:allow-remove-by-id -> Enables the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-remove-by-id" - ] - }, - { - "description": "core:tray:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-icon" - ] - }, - { - "description": "core:tray:allow-set-icon-as-template -> Enables the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-icon-as-template" - ] - }, - { - "description": "core:tray:allow-set-menu -> Enables the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-menu" - ] - }, - { - "description": "core:tray:allow-set-show-menu-on-left-click -> Enables the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-show-menu-on-left-click" - ] - }, - { - "description": "core:tray:allow-set-temp-dir-path -> Enables the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-temp-dir-path" - ] - }, - { - "description": "core:tray:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-title" - ] - }, - { - "description": "core:tray:allow-set-tooltip -> Enables the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-tooltip" - ] - }, - { - "description": "core:tray:allow-set-visible -> Enables the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:allow-set-visible" - ] - }, - { - "description": "core:tray:deny-get-by-id -> Denies the get_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-get-by-id" - ] - }, - { - "description": "core:tray:deny-new -> Denies the new command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-new" - ] - }, - { - "description": "core:tray:deny-remove-by-id -> Denies the remove_by_id command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-remove-by-id" - ] - }, - { - "description": "core:tray:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-icon" - ] - }, - { - "description": "core:tray:deny-set-icon-as-template -> Denies the set_icon_as_template command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-icon-as-template" - ] - }, - { - "description": "core:tray:deny-set-menu -> Denies the set_menu command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-menu" - ] - }, - { - "description": "core:tray:deny-set-show-menu-on-left-click -> Denies the set_show_menu_on_left_click command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-show-menu-on-left-click" - ] - }, - { - "description": "core:tray:deny-set-temp-dir-path -> Denies the set_temp_dir_path command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-temp-dir-path" - ] - }, - { - "description": "core:tray:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-title" - ] - }, - { - "description": "core:tray:deny-set-tooltip -> Denies the set_tooltip command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-tooltip" - ] - }, - { - "description": "core:tray:deny-set-visible -> Denies the set_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:tray:deny-set-visible" - ] - }, - { - "description": "core:webview:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:webview:default" - ] - }, - { - "description": "core:webview:allow-create-webview -> Enables the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-create-webview" - ] - }, - { - "description": "core:webview:allow-create-webview-window -> Enables the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-create-webview-window" - ] - }, - { - "description": "core:webview:allow-get-all-webviews -> Enables the get_all_webviews command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-get-all-webviews" - ] - }, - { - "description": "core:webview:allow-internal-toggle-devtools -> Enables the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-internal-toggle-devtools" - ] - }, - { - "description": "core:webview:allow-print -> Enables the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-print" - ] - }, - { - "description": "core:webview:allow-reparent -> Enables the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-reparent" - ] - }, - { - "description": "core:webview:allow-set-webview-focus -> Enables the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-focus" - ] - }, - { - "description": "core:webview:allow-set-webview-position -> Enables the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-position" - ] - }, - { - "description": "core:webview:allow-set-webview-size -> Enables the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-size" - ] - }, - { - "description": "core:webview:allow-set-webview-zoom -> Enables the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-set-webview-zoom" - ] - }, - { - "description": "core:webview:allow-webview-close -> Enables the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-close" - ] - }, - { - "description": "core:webview:allow-webview-position -> Enables the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-position" - ] - }, - { - "description": "core:webview:allow-webview-size -> Enables the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:allow-webview-size" - ] - }, - { - "description": "core:webview:deny-create-webview -> Denies the create_webview command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-create-webview" - ] - }, - { - "description": "core:webview:deny-create-webview-window -> Denies the create_webview_window command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-create-webview-window" - ] - }, - { - "description": "core:webview:deny-get-all-webviews -> Denies the get_all_webviews command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-get-all-webviews" - ] - }, - { - "description": "core:webview:deny-internal-toggle-devtools -> Denies the internal_toggle_devtools command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-internal-toggle-devtools" - ] - }, - { - "description": "core:webview:deny-print -> Denies the print command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-print" - ] - }, - { - "description": "core:webview:deny-reparent -> Denies the reparent command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-reparent" - ] - }, - { - "description": "core:webview:deny-set-webview-focus -> Denies the set_webview_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-focus" - ] - }, - { - "description": "core:webview:deny-set-webview-position -> Denies the set_webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-position" - ] - }, - { - "description": "core:webview:deny-set-webview-size -> Denies the set_webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-size" - ] - }, - { - "description": "core:webview:deny-set-webview-zoom -> Denies the set_webview_zoom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-set-webview-zoom" - ] - }, - { - "description": "core:webview:deny-webview-close -> Denies the webview_close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-close" - ] - }, - { - "description": "core:webview:deny-webview-position -> Denies the webview_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-position" - ] - }, - { - "description": "core:webview:deny-webview-size -> Denies the webview_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:webview:deny-webview-size" - ] - }, - { - "description": "core:window:default -> Default permissions for the plugin.", - "type": "string", - "enum": [ - "core:window:default" - ] - }, - { - "description": "core:window:allow-available-monitors -> Enables the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-available-monitors" - ] - }, - { - "description": "core:window:allow-center -> Enables the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-center" - ] - }, - { - "description": "core:window:allow-close -> Enables the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-close" - ] - }, - { - "description": "core:window:allow-create -> Enables the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-create" - ] - }, - { - "description": "core:window:allow-current-monitor -> Enables the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-current-monitor" - ] - }, - { - "description": "core:window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-cursor-position" - ] - }, - { - "description": "core:window:allow-destroy -> Enables the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-destroy" - ] - }, - { - "description": "core:window:allow-get-all-windows -> Enables the get_all_windows command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-get-all-windows" - ] - }, - { - "description": "core:window:allow-hide -> Enables the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-hide" - ] - }, - { - "description": "core:window:allow-inner-position -> Enables the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-inner-position" - ] - }, - { - "description": "core:window:allow-inner-size -> Enables the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-inner-size" - ] - }, - { - "description": "core:window:allow-internal-toggle-maximize -> Enables the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-internal-toggle-maximize" - ] - }, - { - "description": "core:window:allow-is-closable -> Enables the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-closable" - ] - }, - { - "description": "core:window:allow-is-decorated -> Enables the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-decorated" - ] - }, - { - "description": "core:window:allow-is-focused -> Enables the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-focused" - ] - }, - { - "description": "core:window:allow-is-fullscreen -> Enables the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-fullscreen" - ] - }, - { - "description": "core:window:allow-is-maximizable -> Enables the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-maximizable" - ] - }, - { - "description": "core:window:allow-is-maximized -> Enables the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-maximized" - ] - }, - { - "description": "core:window:allow-is-minimizable -> Enables the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-minimizable" - ] - }, - { - "description": "core:window:allow-is-minimized -> Enables the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-minimized" - ] - }, - { - "description": "core:window:allow-is-resizable -> Enables the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-resizable" - ] - }, - { - "description": "core:window:allow-is-visible -> Enables the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-is-visible" - ] - }, - { - "description": "core:window:allow-maximize -> Enables the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-maximize" - ] - }, - { - "description": "core:window:allow-minimize -> Enables the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-minimize" - ] - }, - { - "description": "core:window:allow-monitor-from-point -> Enables the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-monitor-from-point" - ] - }, - { - "description": "core:window:allow-outer-position -> Enables the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-outer-position" - ] - }, - { - "description": "core:window:allow-outer-size -> Enables the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-outer-size" - ] - }, - { - "description": "core:window:allow-primary-monitor -> Enables the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-primary-monitor" - ] - }, - { - "description": "core:window:allow-request-user-attention -> Enables the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-request-user-attention" - ] - }, - { - "description": "core:window:allow-scale-factor -> Enables the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-scale-factor" - ] - }, - { - "description": "core:window:allow-set-always-on-bottom -> Enables the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-always-on-bottom" - ] - }, - { - "description": "core:window:allow-set-always-on-top -> Enables the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-always-on-top" - ] - }, - { - "description": "core:window:allow-set-closable -> Enables the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-closable" - ] - }, - { - "description": "core:window:allow-set-content-protected -> Enables the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-content-protected" - ] - }, - { - "description": "core:window:allow-set-cursor-grab -> Enables the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-grab" - ] - }, - { - "description": "core:window:allow-set-cursor-icon -> Enables the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-icon" - ] - }, - { - "description": "core:window:allow-set-cursor-position -> Enables the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-position" - ] - }, - { - "description": "core:window:allow-set-cursor-visible -> Enables the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-cursor-visible" - ] - }, - { - "description": "core:window:allow-set-decorations -> Enables the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-decorations" - ] - }, - { - "description": "core:window:allow-set-effects -> Enables the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-effects" - ] - }, - { - "description": "core:window:allow-set-focus -> Enables the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-focus" - ] - }, - { - "description": "core:window:allow-set-fullscreen -> Enables the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-fullscreen" - ] - }, - { - "description": "core:window:allow-set-icon -> Enables the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-icon" - ] - }, - { - "description": "core:window:allow-set-ignore-cursor-events -> Enables the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-ignore-cursor-events" - ] - }, - { - "description": "core:window:allow-set-max-size -> Enables the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-max-size" - ] - }, - { - "description": "core:window:allow-set-maximizable -> Enables the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-maximizable" - ] - }, - { - "description": "core:window:allow-set-min-size -> Enables the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-min-size" - ] - }, - { - "description": "core:window:allow-set-minimizable -> Enables the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-minimizable" - ] - }, - { - "description": "core:window:allow-set-position -> Enables the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-position" - ] - }, - { - "description": "core:window:allow-set-progress-bar -> Enables the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-progress-bar" - ] - }, - { - "description": "core:window:allow-set-resizable -> Enables the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-resizable" - ] - }, - { - "description": "core:window:allow-set-shadow -> Enables the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-shadow" - ] - }, - { - "description": "core:window:allow-set-size -> Enables the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-size" - ] - }, - { - "description": "core:window:allow-set-size-constraints -> Enables the set_size_constraints command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-size-constraints" - ] - }, - { - "description": "core:window:allow-set-skip-taskbar -> Enables the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-skip-taskbar" - ] - }, - { - "description": "core:window:allow-set-title -> Enables the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-title" - ] - }, - { - "description": "core:window:allow-set-title-bar-style -> Enables the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-title-bar-style" - ] - }, - { - "description": "core:window:allow-set-visible-on-all-workspaces -> Enables the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-set-visible-on-all-workspaces" - ] - }, - { - "description": "core:window:allow-show -> Enables the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-show" - ] - }, - { - "description": "core:window:allow-start-dragging -> Enables the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-start-dragging" - ] - }, - { - "description": "core:window:allow-start-resize-dragging -> Enables the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-start-resize-dragging" - ] - }, - { - "description": "core:window:allow-theme -> Enables the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-theme" - ] - }, - { - "description": "core:window:allow-title -> Enables the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-title" - ] - }, - { - "description": "core:window:allow-toggle-maximize -> Enables the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-toggle-maximize" - ] - }, - { - "description": "core:window:allow-unmaximize -> Enables the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-unmaximize" - ] - }, - { - "description": "core:window:allow-unminimize -> Enables the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:allow-unminimize" - ] - }, - { - "description": "core:window:deny-available-monitors -> Denies the available_monitors command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-available-monitors" - ] - }, - { - "description": "core:window:deny-center -> Denies the center command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-center" - ] - }, - { - "description": "core:window:deny-close -> Denies the close command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-close" - ] - }, - { - "description": "core:window:deny-create -> Denies the create command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-create" - ] - }, - { - "description": "core:window:deny-current-monitor -> Denies the current_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-current-monitor" - ] - }, - { - "description": "core:window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-cursor-position" - ] - }, - { - "description": "core:window:deny-destroy -> Denies the destroy command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-destroy" - ] - }, - { - "description": "core:window:deny-get-all-windows -> Denies the get_all_windows command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-get-all-windows" - ] - }, - { - "description": "core:window:deny-hide -> Denies the hide command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-hide" - ] - }, - { - "description": "core:window:deny-inner-position -> Denies the inner_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-inner-position" - ] - }, - { - "description": "core:window:deny-inner-size -> Denies the inner_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-inner-size" - ] - }, - { - "description": "core:window:deny-internal-toggle-maximize -> Denies the internal_toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-internal-toggle-maximize" - ] - }, - { - "description": "core:window:deny-is-closable -> Denies the is_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-closable" - ] - }, - { - "description": "core:window:deny-is-decorated -> Denies the is_decorated command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-decorated" - ] - }, - { - "description": "core:window:deny-is-focused -> Denies the is_focused command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-focused" - ] - }, - { - "description": "core:window:deny-is-fullscreen -> Denies the is_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-fullscreen" - ] - }, - { - "description": "core:window:deny-is-maximizable -> Denies the is_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-maximizable" - ] - }, - { - "description": "core:window:deny-is-maximized -> Denies the is_maximized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-maximized" - ] - }, - { - "description": "core:window:deny-is-minimizable -> Denies the is_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-minimizable" - ] - }, - { - "description": "core:window:deny-is-minimized -> Denies the is_minimized command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-minimized" - ] - }, - { - "description": "core:window:deny-is-resizable -> Denies the is_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-resizable" - ] - }, - { - "description": "core:window:deny-is-visible -> Denies the is_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-is-visible" - ] - }, - { - "description": "core:window:deny-maximize -> Denies the maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-maximize" - ] - }, - { - "description": "core:window:deny-minimize -> Denies the minimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-minimize" - ] - }, - { - "description": "core:window:deny-monitor-from-point -> Denies the monitor_from_point command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-monitor-from-point" - ] - }, - { - "description": "core:window:deny-outer-position -> Denies the outer_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-outer-position" - ] - }, - { - "description": "core:window:deny-outer-size -> Denies the outer_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-outer-size" - ] - }, - { - "description": "core:window:deny-primary-monitor -> Denies the primary_monitor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-primary-monitor" - ] - }, - { - "description": "core:window:deny-request-user-attention -> Denies the request_user_attention command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-request-user-attention" - ] - }, - { - "description": "core:window:deny-scale-factor -> Denies the scale_factor command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-scale-factor" - ] - }, - { - "description": "core:window:deny-set-always-on-bottom -> Denies the set_always_on_bottom command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-always-on-bottom" - ] - }, - { - "description": "core:window:deny-set-always-on-top -> Denies the set_always_on_top command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-always-on-top" - ] - }, - { - "description": "core:window:deny-set-closable -> Denies the set_closable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-closable" - ] - }, - { - "description": "core:window:deny-set-content-protected -> Denies the set_content_protected command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-content-protected" - ] - }, - { - "description": "core:window:deny-set-cursor-grab -> Denies the set_cursor_grab command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-grab" - ] - }, - { - "description": "core:window:deny-set-cursor-icon -> Denies the set_cursor_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-icon" - ] - }, - { - "description": "core:window:deny-set-cursor-position -> Denies the set_cursor_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-position" - ] - }, - { - "description": "core:window:deny-set-cursor-visible -> Denies the set_cursor_visible command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-cursor-visible" - ] - }, - { - "description": "core:window:deny-set-decorations -> Denies the set_decorations command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-decorations" - ] - }, - { - "description": "core:window:deny-set-effects -> Denies the set_effects command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-effects" - ] - }, - { - "description": "core:window:deny-set-focus -> Denies the set_focus command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-focus" - ] - }, - { - "description": "core:window:deny-set-fullscreen -> Denies the set_fullscreen command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-fullscreen" - ] - }, - { - "description": "core:window:deny-set-icon -> Denies the set_icon command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-icon" - ] - }, - { - "description": "core:window:deny-set-ignore-cursor-events -> Denies the set_ignore_cursor_events command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-ignore-cursor-events" - ] - }, - { - "description": "core:window:deny-set-max-size -> Denies the set_max_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-max-size" - ] - }, - { - "description": "core:window:deny-set-maximizable -> Denies the set_maximizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-maximizable" - ] - }, - { - "description": "core:window:deny-set-min-size -> Denies the set_min_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-min-size" - ] - }, - { - "description": "core:window:deny-set-minimizable -> Denies the set_minimizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-minimizable" - ] - }, - { - "description": "core:window:deny-set-position -> Denies the set_position command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-position" - ] - }, - { - "description": "core:window:deny-set-progress-bar -> Denies the set_progress_bar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-progress-bar" - ] - }, - { - "description": "core:window:deny-set-resizable -> Denies the set_resizable command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-resizable" - ] - }, - { - "description": "core:window:deny-set-shadow -> Denies the set_shadow command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-shadow" - ] - }, - { - "description": "core:window:deny-set-size -> Denies the set_size command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-size" - ] - }, - { - "description": "core:window:deny-set-size-constraints -> Denies the set_size_constraints command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-size-constraints" - ] - }, - { - "description": "core:window:deny-set-skip-taskbar -> Denies the set_skip_taskbar command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-skip-taskbar" - ] - }, - { - "description": "core:window:deny-set-title -> Denies the set_title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-title" - ] - }, - { - "description": "core:window:deny-set-title-bar-style -> Denies the set_title_bar_style command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-title-bar-style" - ] - }, - { - "description": "core:window:deny-set-visible-on-all-workspaces -> Denies the set_visible_on_all_workspaces command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-set-visible-on-all-workspaces" - ] - }, - { - "description": "core:window:deny-show -> Denies the show command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-show" - ] - }, - { - "description": "core:window:deny-start-dragging -> Denies the start_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-start-dragging" - ] - }, - { - "description": "core:window:deny-start-resize-dragging -> Denies the start_resize_dragging command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-start-resize-dragging" - ] - }, - { - "description": "core:window:deny-theme -> Denies the theme command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-theme" - ] - }, - { - "description": "core:window:deny-title -> Denies the title command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-title" - ] - }, - { - "description": "core:window:deny-toggle-maximize -> Denies the toggle_maximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-toggle-maximize" - ] - }, - { - "description": "core:window:deny-unmaximize -> Denies the unmaximize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-unmaximize" - ] - }, - { - "description": "core:window:deny-unminimize -> Denies the unminimize command without any pre-configured scope.", - "type": "string", - "enum": [ - "core:window:deny-unminimize" - ] - }, - { - "description": "dialog:default -> This permission set configures the types of dialogs\navailable from the dialog plugin.\n\n#### Granted Permissions\n\nAll dialog types are enabled.\n\n\n", - "type": "string", - "enum": [ - "dialog:default" - ] - }, - { - "description": "dialog:allow-ask -> Enables the ask command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-ask" - ] - }, - { - "description": "dialog:allow-confirm -> Enables the confirm command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-confirm" - ] - }, - { - "description": "dialog:allow-message -> Enables the message command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-message" - ] - }, - { - "description": "dialog:allow-open -> Enables the open command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-open" - ] - }, - { - "description": "dialog:allow-save -> Enables the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:allow-save" - ] - }, - { - "description": "dialog:deny-ask -> Denies the ask command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-ask" - ] - }, - { - "description": "dialog:deny-confirm -> Denies the confirm command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-confirm" - ] - }, - { - "description": "dialog:deny-message -> Denies the message command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-message" - ] - }, - { - "description": "dialog:deny-open -> Denies the open command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-open" - ] - }, - { - "description": "dialog:deny-save -> Denies the save command without any pre-configured scope.", - "type": "string", - "enum": [ - "dialog:deny-save" - ] - }, - { - "description": "log:default -> Allows the log command", - "type": "string", - "enum": [ - "log:default" - ] - }, - { - "description": "log:allow-log -> Enables the log command without any pre-configured scope.", - "type": "string", - "enum": [ - "log:allow-log" - ] - }, - { - "description": "log:deny-log -> Denies the log command without any pre-configured scope.", - "type": "string", - "enum": [ - "log:deny-log" - ] - }, - { - "description": "updater:default -> This permission set configures which kind of\nupdater functions are exposed to the frontend.\n\n#### Granted Permissions\n\nThe full workflow from checking for updates to installing them\nis enabled.\n\n", - "type": "string", - "enum": [ - "updater:default" - ] - }, - { - "description": "updater:allow-check -> Enables the check command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-check" - ] - }, - { - "description": "updater:allow-download -> Enables the download command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-download" - ] - }, - { - "description": "updater:allow-download-and-install -> Enables the download_and_install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-download-and-install" - ] - }, - { - "description": "updater:allow-install -> Enables the install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:allow-install" - ] - }, - { - "description": "updater:deny-check -> Denies the check command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-check" - ] - }, - { - "description": "updater:deny-download -> Denies the download command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-download" - ] - }, - { - "description": "updater:deny-download-and-install -> Denies the download_and_install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-download-and-install" - ] - }, - { - "description": "updater:deny-install -> Denies the install command without any pre-configured scope.", - "type": "string", - "enum": [ - "updater:deny-install" - ] - }, - { - "description": "window-state:default -> This permission set configures what kind of\noperations are available from the window state plugin.\n\n#### Granted Permissions\n\nAll operations are enabled by default.\n\n", - "type": "string", - "enum": [ - "window-state:default" - ] - }, - { - "description": "window-state:allow-filename -> Enables the filename command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-filename" - ] - }, - { - "description": "window-state:allow-restore-state -> Enables the restore_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-restore-state" - ] - }, - { - "description": "window-state:allow-save-window-state -> Enables the save_window_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:allow-save-window-state" - ] - }, - { - "description": "window-state:deny-filename -> Denies the filename command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-filename" - ] - }, - { - "description": "window-state:deny-restore-state -> Denies the restore_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-restore-state" - ] - }, - { - "description": "window-state:deny-save-window-state -> Denies the save_window_state command without any pre-configured scope.", - "type": "string", - "enum": [ - "window-state:deny-save-window-state" - ] - } - ] - }, - "Value": { - "description": "All supported ACL values.", - "anyOf": [ - { - "description": "Represents a null JSON value.", - "type": "null" - }, - { - "description": "Represents a [`bool`].", - "type": "boolean" - }, - { - "description": "Represents a valid ACL [`Number`].", - "allOf": [ - { - "$ref": "#/definitions/Number" - } - ] - }, - { - "description": "Represents a [`String`].", - "type": "string" - }, - { - "description": "Represents a list of other [`Value`]s.", - "type": "array", - "items": { - "$ref": "#/definitions/Value" - } - }, - { - "description": "Represents a map of [`String`] keys to [`Value`]s.", - "type": "object", - "additionalProperties": { - "$ref": "#/definitions/Value" - } - } - ] - }, - "Number": { - "description": "A valid ACL number.", - "anyOf": [ - { - "description": "Represents an [`i64`].", - "type": "integer", - "format": "int64" - }, - { - "description": "Represents a [`f64`].", - "type": "number", - "format": "double" - } - ] - }, - "Target": { - "description": "Platform target.", - "oneOf": [ - { - "description": "MacOS.", - "type": "string", - "enum": [ - "macOS" - ] - }, - { - "description": "Windows.", - "type": "string", - "enum": [ - "windows" - ] - }, - { - "description": "Linux.", - "type": "string", - "enum": [ - "linux" - ] - }, - { - "description": "Android.", - "type": "string", - "enum": [ - "android" - ] - }, - { - "description": "iOS.", - "type": "string", - "enum": [ - "iOS" - ] - } - ] - } - } -} \ No newline at end of file From 7a38eebf97f54b7bf63a848bff278562d28775fb Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Mon, 16 Sep 2024 01:48:47 +0200 Subject: [PATCH 243/255] add tauri shell plugin (makes links work) --- backend/Cargo.lock | 42 ++++++++++++++++++++++++ backend/tauri-app/Cargo.toml | 17 +++++----- backend/tauri-app/capabilities/main.json | 3 +- backend/tauri-app/src/main.rs | 1 + package-lock.json | 13 +++++++- package.json | 29 ++++++++-------- 6 files changed, 81 insertions(+), 24 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index e9411c85..580b39f4 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2886,6 +2886,16 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "os_pipe" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "overload" version = "0.1.1" @@ -3476,6 +3486,7 @@ dependencies = [ "tauri-build", "tauri-plugin-dialog", "tauri-plugin-log", + "tauri-plugin-shell", "tauri-plugin-updater", "tauri-plugin-window-state", "tauri-runtime", @@ -4172,6 +4183,16 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shared_child" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -4747,6 +4768,27 @@ dependencies = [ "time", ] +[[package]] +name = "tauri-plugin-shell" +version = "2.0.0-rc.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e83800ddf78b820172efb5ed7310344e8e4f97fd30cd8237a3f20c12a79eb136" +dependencies = [ + "encoding_rs", + "log", + "open", + "os_pipe", + "regex", + "schemars", + "serde", + "serde_json", + "shared_child", + "tauri", + "tauri-plugin", + "thiserror", + "tokio", +] + [[package]] name = "tauri-plugin-updater" version = "2.0.0-rc.3" diff --git a/backend/tauri-app/Cargo.toml b/backend/tauri-app/Cargo.toml index daa91bab..8c305794 100644 --- a/backend/tauri-app/Cargo.toml +++ b/backend/tauri-app/Cargo.toml @@ -7,14 +7,6 @@ edition.workspace = true tauri-build = { version = "2.0.0-rc.11", features = [] } [dependencies] -tauri = { version = "2.0.0-rc.13", features = [] } -tauri-plugin-dialog = "2.0.0-rc.7" -tauri-plugin-log = "2.0.0-rc.2" -tauri-plugin-updater = "2.0.0-rc.3" -tauri-plugin-window-state = "2.0.0-rc.4" -tauri-runtime = "2.0.0-rc.11" -specta-typescript = "0.0.7" - log.workspace = true rai-pal-core.workspace = true rai-pal-proc-macros.workspace = true @@ -24,6 +16,15 @@ specta.workspace = true tauri-specta.workspace = true thiserror.workspace = true +specta-typescript = "0.0.7" +tauri = { version = "2.0.0-rc.13", features = [] } +tauri-plugin-dialog = "2.0.0-rc.7" +tauri-plugin-log = "2.0.0-rc.2" +tauri-plugin-shell = "2.0.0-rc" +tauri-plugin-updater = "2.0.0-rc.3" +tauri-plugin-window-state = "2.0.0-rc.4" +tauri-runtime = "2.0.0-rc.11" + [features] # this feature is used for production builds or when `devPath` points to the filesystem # DO NOT REMOVE!! diff --git a/backend/tauri-app/capabilities/main.json b/backend/tauri-app/capabilities/main.json index 0b9507f6..8959afb5 100644 --- a/backend/tauri-app/capabilities/main.json +++ b/backend/tauri-app/capabilities/main.json @@ -11,6 +11,7 @@ "core:resources:default", "dialog:allow-open", "dialog:allow-ask", - "updater:allow-check" + "updater:allow-check", + "shell:default" ] } diff --git a/backend/tauri-app/src/main.rs b/backend/tauri-app/src/main.rs index e412ad9c..b90797c9 100644 --- a/backend/tauri-app/src/main.rs +++ b/backend/tauri-app/src/main.rs @@ -622,6 +622,7 @@ fn main() { typescript::export(&builder); tauri::Builder::default() + .plugin(tauri_plugin_shell::init()) .plugin( tauri_plugin_window_state::Builder::default() .with_state_flags(StateFlags::POSITION | StateFlags::SIZE) diff --git a/package-lock.json b/package-lock.json index cde8bf16..fadcbebf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,6 +7,9 @@ "": { "name": "rai-mods", "version": "0.0.0", + "dependencies": { + "@tauri-apps/plugin-shell": "^2.0.0-rc" + }, "devDependencies": { "@mantine/code-highlight": "^7.11.0", "@mantine/core": "7.12.2", @@ -1439,7 +1442,6 @@ "version": "2.0.0-rc.4", "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-rc.4.tgz", "integrity": "sha512-UNiIhhKG08j4ooss2oEEVexffmWkgkYlC2M3GcX3VPtNsqFgVNL8Mcw/4Y7rO9M9S+ffAMnLOF5ypzyuyb8tyg==", - "dev": true, "license": "Apache-2.0 OR MIT", "funding": { "type": "opencollective", @@ -1665,6 +1667,15 @@ "@tauri-apps/api": "^2.0.0-rc.4" } }, + "node_modules/@tauri-apps/plugin-shell": { + "version": "2.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-shell/-/plugin-shell-2.0.0-rc.1.tgz", + "integrity": "sha512-JtNROc0rqEwN/g93ig5pK4cl1vUo2yn+osCpY9de64cy/d9hRzof7AuYOgvt/Xcd5VPQmlgo2AGvUh5sQRSR1A==", + "license": "MIT or APACHE-2.0", + "dependencies": { + "@tauri-apps/api": "^2.0.0-rc.4" + } + }, "node_modules/@tauri-apps/plugin-store": { "version": "2.0.0-rc.1", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-store/-/plugin-store-2.0.0-rc.1.tgz", diff --git a/package.json b/package.json index f8fb9183..64949659 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,15 @@ "frontend:dev": "vite", "lint": "prettier ./frontend --write && eslint . --ext .ts,.tsx --fix" }, - "devDependencies": { + "prettier": { + "useTabs": true, + "singleAttributePerLine": true, + "quoteProps": "as-needed" + }, + "engines": { + "node": ">=20.0.0" + }, + "dependencies": { "@mantine/code-highlight": "^7.11.0", "@mantine/core": "7.12.2", "@mantine/hooks": "7.12.2", @@ -24,36 +32,29 @@ "@tauri-apps/cli": "2.0.0-rc.15", "@tauri-apps/plugin-dialog": "2.0.0-rc.1", "@tauri-apps/plugin-process": "2.0.0-rc.1", + "@tauri-apps/plugin-shell": "^2.0.0-rc", "@tauri-apps/plugin-store": "^2.0.0-rc.1", "@tauri-apps/plugin-updater": "2.0.0-rc.2", - "@types/react": "18.3.5", "@types/react-dom": "^18.3.0", + "@types/react": "18.3.5", "@typescript-eslint/eslint-plugin": "8.4.0", "@typescript-eslint/parser": "8.4.0", "@vitejs/plugin-react": "^4.3.1", "cross-env": "^7.0.3", - "eslint": "8.57.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.34.3", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.7", + "eslint-plugin-react": "^7.34.3", + "eslint": "8.57.0", "jotai": "^2.8.4", - "postcss": "8.4.47", "postcss-preset-mantine": "^1.15.0", "postcss-simple-vars": "^7.0.1", + "postcss": "8.4.47", "prettier": "3.3.3", - "react": "^18.3.1", "react-dom": "^18.3.1", "react-virtuoso": "4.10.4", + "react": "^18.3.1", "typescript": "^5.5.2", "vite": "5.4.3" - }, - "prettier": { - "useTabs": true, - "singleAttributePerLine": true, - "quoteProps": "as-needed" - }, - "engines": { - "node": ">=20.0.0" } } From b27e8526be7bf317643b62f140507dd14994c75b Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 21 Sep 2024 12:34:43 +0200 Subject: [PATCH 244/255] update dependencies --- backend/Cargo.lock | 447 +++++++++++++++++++---------------- backend/Cargo.toml | 9 +- backend/tauri-app/Cargo.toml | 14 +- 3 files changed, 252 insertions(+), 218 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index 580b39f4..ff217b65 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -10,9 +10,9 @@ checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" dependencies = [ "gimli", ] @@ -23,6 +23,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "ahash" version = "0.7.8" @@ -104,9 +110,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.86" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] name = "arbitrary" @@ -119,9 +125,9 @@ dependencies = [ [[package]] name = "arrayvec" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "ashpd" @@ -179,9 +185,9 @@ dependencies = [ [[package]] name = "async-io" -version = "2.3.3" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d6baa8f0178795da0e71bc42c9e5d13261aac7ee549853162e66a241ba17964" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ "async-lock", "cfg-if", @@ -193,7 +199,7 @@ dependencies = [ "rustix", "slab", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -209,9 +215,9 @@ dependencies = [ [[package]] name = "async-process" -version = "2.2.3" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7eda79bbd84e29c2b308d1dc099d7de8dcc7035e48f4bf5dc4a531a44ff5e2a" +checksum = "63255f1dc2381611000436537bbedfe83183faa303a5a0edaf191edef06526bb" dependencies = [ "async-channel", "async-io", @@ -224,7 +230,6 @@ dependencies = [ "futures-lite", "rustix", "tracing", - "windows-sys 0.52.0", ] [[package]] @@ -240,9 +245,9 @@ dependencies = [ [[package]] name = "async-signal" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfb3634b73397aa844481f814fad23bbf07fdb0eabec10f2eb95e58944b1ec32" +checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3" dependencies = [ "async-io", "async-lock", @@ -253,7 +258,7 @@ dependencies = [ "rustix", "signal-hook-registry", "slab", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -264,9 +269,9 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.81" +version = "0.1.82" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107" +checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" dependencies = [ "proc-macro2", "quote", @@ -310,17 +315,17 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.8.0", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -495,9 +500,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.16.3" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" [[package]] name = "byteorder" @@ -507,9 +512,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.1" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" dependencies = [ "serde", ] @@ -541,9 +546,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.7" +version = "1.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +checksum = "8b96ec4966b5813e2c0507c1f86115c8c5abaadc3980879c3424042a02fd1ad3" dependencies = [ "serde", ] @@ -583,9 +588,12 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.8" +version = "1.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504bdec147f2cc13c8b57ed9401fd8a147cc66b67ad5cb241394244f2c947549" +checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +dependencies = [ + "shlex", +] [[package]] name = "cesu8" @@ -806,9 +814,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.12" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" dependencies = [ "libc", ] @@ -1259,9 +1267,9 @@ checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" [[package]] name = "fastrand" -version = "2.1.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] name = "fdeflate" @@ -1293,9 +1301,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.24" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", @@ -1305,12 +1313,12 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.31" +version = "1.0.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" +checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" dependencies = [ "crc32fast", - "miniz_oxide", + "miniz_oxide 0.8.0", ] [[package]] @@ -1635,9 +1643,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" [[package]] name = "gio" @@ -1726,9 +1734,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] name = "globset" -version = "0.4.14" +version = "0.4.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" dependencies = [ "aho-corasick", "bstr", @@ -1813,9 +1821,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ "atomic-waker", "bytes", @@ -1823,7 +1831,7 @@ dependencies = [ "futures-core", "futures-sink", "http", - "indexmap 2.3.0", + "indexmap 2.5.0", "slab", "tokio", "tokio-util", @@ -1963,9 +1971,9 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ee4be2c948921a1a5320b629c4193916ed787a7f7f293fd3f7f5a6c9de74155" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", "http", @@ -1997,9 +2005,9 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.7" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" +checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" dependencies = [ "bytes", "futures-channel", @@ -2017,9 +2025,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -2066,9 +2074,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.22" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" dependencies = [ "crossbeam-deque", "globset", @@ -2093,9 +2101,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.3.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ "equivalent", "hashbrown 0.14.5", @@ -2122,9 +2130,9 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.9.0" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" [[package]] name = "is-docker" @@ -2204,9 +2212,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1868808506b929d7b0cfa8f75951347aa71bb21144b7791bae35d9bccfcfe37a" dependencies = [ "wasm-bindgen", ] @@ -2282,9 +2290,9 @@ dependencies = [ [[package]] name = "lazy-regex" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "576c8060ecfdf2e56995cf3274b4f2d71fa5e4fa3607c1c0b63c10180ee58741" +checksum = "8d8e41c97e6bc7ecb552016274b99fbb5d035e8de288c582d9b933af6677bfda" dependencies = [ "lazy-regex-proc_macros", "once_cell", @@ -2293,9 +2301,9 @@ dependencies = [ [[package]] name = "lazy-regex-proc_macros" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9efb9e65d4503df81c615dc33ff07042a9408ac7f26b45abee25566f7fbfd12c" +checksum = "76e1d8b05d672c53cb9c7b920bbba8783845ae4f0b076e02a3db1d02c81b4163" dependencies = [ "proc-macro2", "quote", @@ -2335,9 +2343,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libloading" @@ -2484,9 +2492,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" [[package]] name = "minisign-verify" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "933dca44d65cdd53b355d0b73d380a2ff5da71f87f036053188bf1eab6a19881" +checksum = "a05b5d0594e0cb1ad8cee3373018d2b84e25905dc75b2468114cc9a8e86cfc20" [[package]] name = "miniz_oxide" @@ -2498,11 +2506,20 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "mio" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" dependencies = [ "hermit-abi 0.3.9", "libc", @@ -2752,7 +2769,6 @@ checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" dependencies = [ "bitflags 2.6.0", "block2", - "dispatch", "libc", "objc2", ] @@ -2802,9 +2818,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.3" +version = "0.36.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", ] @@ -2929,9 +2945,9 @@ dependencies = [ [[package]] name = "parking" -version = "2.2.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" @@ -2993,9 +3009,9 @@ checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd53dff83f26735fdc1ca837098ccf133605d794cdae66acfc2bfac3ec809d95" +checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" dependencies = [ "memchr", "thiserror", @@ -3004,9 +3020,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a548d2beca6773b1c244554d36fcf8548a8a58e74156968211567250e48e49a" +checksum = "4d3a6e3394ec80feb3b6393c725571754c6188490265c61aaf260810d6b95aa0" dependencies = [ "pest", "pest_generator", @@ -3014,9 +3030,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c93a82e8d145725dcbaf44e5ea887c8a869efdcc28706df2d08c69e17077183" +checksum = "94429506bde1ca69d1b5601962c73f4172ab4726571a59ea95931218cb0e930e" dependencies = [ "pest", "pest_meta", @@ -3027,9 +3043,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.7.11" +version = "2.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a941429fea7e08bedec25e4f6785b6ffaacc6b755da98df5ef3e7dcf4a124c4f" +checksum = "ac8a071862e93690b6e34e9a5fb8e33ff3734473ac0245b27232222c4906a33f" dependencies = [ "once_cell", "pest", @@ -3204,9 +3220,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "piper" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", "fastrand", @@ -3226,7 +3242,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" dependencies = [ "base64 0.22.1", - "indexmap 2.3.0", + "indexmap 2.5.0", "quick-xml", "serde", "time", @@ -3242,14 +3258,14 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide", + "miniz_oxide 0.7.4", ] [[package]] name = "polling" -version = "3.7.2" +version = "3.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3ed00ed3fbf728b5816498ecd316d1716eecaced9c0c8d2c5a6740ca214985b" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" dependencies = [ "cfg-if", "concurrent-queue", @@ -3257,7 +3273,7 @@ dependencies = [ "pin-project-lite", "rustix", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3371,9 +3387,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" dependencies = [ "bytes", "pin-project-lite", @@ -3389,9 +3405,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" dependencies = [ "bytes", "rand 0.8.5", @@ -3406,15 +3422,15 @@ dependencies = [ [[package]] name = "quinn-udp" -version = "0.5.4" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bffec3605b73c6f1754535084a85229fa8a30f86014e6c81aeec4abb68b0285" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" dependencies = [ "libc", "once_cell", "socket2", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3583,18 +3599,18 @@ checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "redox_syscall" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4" +checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" dependencies = [ "bitflags 2.6.0", ] [[package]] name = "redox_users" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd283d9651eeda4b2a83a43c1c91b266c40fd76ecd39a50a8c630ae69dc72891" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", @@ -3656,9 +3672,9 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.5" +version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7d6d2a27d57148378eb5e111173f4276ad26340ecc5c49a4a2152167a2d6a37" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ "async-compression", "base64 0.22.1", @@ -3702,7 +3718,7 @@ dependencies = [ "wasm-streams", "web-sys", "webpki-roots", - "winreg 0.52.0", + "windows-registry", ] [[package]] @@ -3746,9 +3762,9 @@ dependencies = [ [[package]] name = "rkyv" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" dependencies = [ "bitvec", "bytecheck", @@ -3764,9 +3780,9 @@ dependencies = [ [[package]] name = "rkyv_derive" -version = "0.7.44" +version = "0.7.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" dependencies = [ "proc-macro2", "quote", @@ -3789,9 +3805,9 @@ dependencies = [ [[package]] name = "rust_decimal" -version = "1.35.0" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1790d1c4c0ca81211399e0e0af16333276f375209e71a37b67698a373db5b47a" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" dependencies = [ "arrayvec", "borsh", @@ -3817,18 +3833,18 @@ checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustc_version" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ "semver", ] [[package]] name = "rustix" -version = "0.38.34" +version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ "bitflags 2.6.0", "errno", @@ -3839,9 +3855,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.12" +version = "0.23.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c58f8c84392efc0a126acce10fa59ff7b3d2ac06ab451a33f2741989b806b044" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" dependencies = [ "once_cell", "ring", @@ -3869,9 +3885,9 @@ checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" [[package]] name = "rustls-webpki" -version = "0.102.6" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e6b52d4fda176fd835fdc55a835d4a89b8499cad995885a21149d5ad62f852e" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ "ring", "rustls-pki-types", @@ -3901,11 +3917,11 @@ dependencies = [ [[package]] name = "schannel" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -3967,9 +3983,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.11.1" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" dependencies = [ "core-foundation-sys", "libc", @@ -4100,7 +4116,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.3.0", + "indexmap 2.5.0", "serde", "serde_derive", "serde_json", @@ -4193,6 +4209,12 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook-registry" version = "1.4.2" @@ -4247,25 +4269,24 @@ dependencies = [ [[package]] name = "softbuffer" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d623bff5d06f60d738990980d782c8c866997d9194cfe79ecad00aa2f76826dd" +checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "bytemuck", "cfg_aliases 0.2.1", - "core-graphics 0.23.2", + "core-graphics 0.24.0", "foreign-types 0.5.0", "js-sys", "log", "objc2", - "objc2-app-kit", "objc2-foundation", "objc2-quartz-core", "raw-window-handle", "redox_syscall", "wasm-bindgen", "web-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4467,23 +4488,26 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "system-configuration" -version = "0.5.1" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 1.3.2", + "bitflags 2.6.0", "core-foundation 0.9.4", "system-configuration-sys", ] [[package]] name = "system-configuration-sys" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" dependencies = [ "core-foundation-sys", "libc", @@ -4504,9 +4528,9 @@ dependencies = [ [[package]] name = "tao" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a93f2c6b8fdaeb7f417bda89b5bc767999745c3052969664ae1fa65892deb7e" +checksum = "82e7ede56f9ef03a0bb384c7b2bed4f3985ee7f3f79ec887c50d8466eec21096" dependencies = [ "bitflags 2.6.0", "cocoa 0.26.0", @@ -4543,13 +4567,13 @@ dependencies = [ [[package]] name = "tao-macros" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec114582505d158b669b136e6851f85840c109819d77c42bb7c0709f727d18c2" +checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.77", ] [[package]] @@ -4577,9 +4601,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.0-rc.13" +version = "2.0.0-rc.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a283cb3d25e46e2f5d99f0068928dadaca4a19558c555f91a5064e3299c691d" +checksum = "eb3c3b1c7ac5b72d59da307b84af900a0098c74c9d7369f65018cd8ec0eb50fb" dependencies = [ "anyhow", "bytes", @@ -4629,9 +4653,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-rc.11" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "148441d64674b2885c1ba5baf3ae61662bb8753859ffcfb541962cbc6b847f39" +checksum = "6ff5713e81e02e0b99f5219b275abbd7d2c0cc0f30180e25b1b650e08feeac63" dependencies = [ "anyhow", "cargo_toml", @@ -4651,9 +4675,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-rc.11" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a15c3f9282c82871c69ddb65d02ae552738bbac848c8adcab521bf14d8b9e6" +checksum = "5370f2591dcc93d4ff08d9dd168f5097f79b34e859883586a409c627544190e3" dependencies = [ "base64 0.22.1", "brotli", @@ -4678,9 +4702,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-rc.10" +version = "2.0.0-rc.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12d1aa317bec56f78388cf6012d788876d838595a48f95cbd7835642db356a0" +checksum = "19442dc8ee002ab1926586f6aecb90114f3a1226766008b0c9ac2d9fec9eeb7e" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4692,9 +4716,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-rc.11" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d82a2adea16b8a71b7a5ad23f720bb13f8d2830b820cc1c266512314ba99bf67" +checksum = "5e3368e91a98aa55ea4e3e8ccff516bc1ed2f85872c335ec35e9b345469032e0" dependencies = [ "anyhow", "glob", @@ -4820,9 +4844,9 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" -version = "2.0.0-rc.4" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c9b841c8164b949eac9e4fe8d56a23ed5e8ef0ac1c52e26a500709f7a50e50" +checksum = "2221224863eced96d800407f7ed8b8e6bd8f329e834b7b975bb553123fb79af0" dependencies = [ "bitflags 2.6.0", "log", @@ -4835,9 +4859,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-rc.11" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389f78c8e8e6eff3897d8d9581087943b5976ea96a0ab5036be691f28c2b0df0" +checksum = "c5f38d8aaa1e81d20e8e208e3e317f81b59fb75c530fbae8a90e72d02001d687" dependencies = [ "dpi", "gtk", @@ -4854,9 +4878,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-rc.12" +version = "2.0.0-rc.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17625b7cf63958d53945e199391d11c9f195fb3d1cb8aeb64dc3084d0091b92" +checksum = "cf1ef5171e14c8fe3b5a63e75004c20d057747bc3e7fdc5f8ded625f0b29f5c7" dependencies = [ "gtk", "http", @@ -4880,8 +4904,9 @@ dependencies = [ [[package]] name = "tauri-specta" -version = "2.0.0-rc.19" -source = "git+https://github.com/Raicuparta/tauri-specta?branch=main#7e06ac6c9349dc4d395e490a17ca667cecfc1773" +version = "2.0.0-rc.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d06336a2fa3ead0c8d08719e78cbc1fb73650845789605bd2ab908cbde72815" dependencies = [ "heck 0.5.0", "serde", @@ -4896,7 +4921,8 @@ dependencies = [ [[package]] name = "tauri-specta-macros" version = "2.0.0-rc.16" -source = "git+https://github.com/Raicuparta/tauri-specta?branch=main#7e06ac6c9349dc4d395e490a17ca667cecfc1773" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a4aa93823e07859546aa796b8a5d608190cd8037a3a5dce3eb63d491c34bda8" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -4906,9 +4932,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-rc.11" +version = "2.0.0-rc.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3019641087c9039b57ebfca95fa42a93c07056845b7d8d57c8966061bcee83b4" +checksum = "31fe4c9148e1b35225e1c00753f24b517ce00041d02eb4b4d6fd10613a47736c" dependencies = [ "brotli", "cargo_metadata", @@ -5059,9 +5085,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.39.2" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" dependencies = [ "backtrace", "bytes", @@ -5097,9 +5123,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.11" +version = "0.7.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf6b47b3771c49ac75ad09a6162f53ad4b8088b76ac60e8ec1455b31a189fe1" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" dependencies = [ "bytes", "futures-core", @@ -5147,7 +5173,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -5160,7 +5186,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" dependencies = [ - "indexmap 2.3.0", + "indexmap 2.5.0", "serde", "serde_spanned", "toml_datetime", @@ -5184,15 +5210,15 @@ dependencies = [ [[package]] name = "tower-layer" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20c8dbed6283a09604c3e69b4b7eeb54e298b8a600d4d5ecb5ad39de609f1d0" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" @@ -5284,9 +5310,9 @@ checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "typeid" -version = "1.0.0" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "059d83cc991e7a42fc37bd50941885db0888e34209f8cfd9aab07ddec03bc9cf" +checksum = "0e13db2e0ccd5e14a544e8a246ba2312cd25223f616442d7f2cb0e3db614236e" [[package]] name = "typenum" @@ -5360,24 +5386,24 @@ checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" [[package]] name = "unicode-normalization" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" dependencies = [ "tinyvec", ] [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" [[package]] name = "untrusted" @@ -5513,19 +5539,20 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "a82edfc16a6c469f5f44dc7b571814045d60404b55a0ee849f9bcfa2e63dd9b5" dependencies = [ "cfg-if", + "once_cell", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "9de396da306523044d3302746f1208fa71d7532227f15e347e2d93e4145dd77b" dependencies = [ "bumpalo", "log", @@ -5538,9 +5565,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.42" +version = "0.4.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +checksum = "61e9300f63a621e96ed275155c108eb6f843b6a26d053f122ab69724559dc8ed" dependencies = [ "cfg-if", "js-sys", @@ -5550,9 +5577,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "585c4c91a46b072c92e908d99cb1dcdf95c5218eeb6f3bf1efa991ee7a68cccf" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -5560,9 +5587,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", @@ -5573,9 +5600,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "c62a0a307cb4a311d3a07867860911ca130c3494e8c2719593806c08bc5d0484" [[package]] name = "wasm-streams" @@ -5592,9 +5619,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.69" +version = "0.3.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +checksum = "26fdeaafd9bd129f65e7c031593c24d62186301e0c72c8978fa1678be7d532c0" dependencies = [ "js-sys", "wasm-bindgen", @@ -5646,9 +5673,9 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "0.26.3" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7c23921eeb1713a4e851530e9b9756e4fb0e89978582942612524cf09f01cd" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ "rustls-pki-types", ] @@ -5722,14 +5749,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "window-vibrancy" -version = "0.5.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33082acd404763b315866e14a0d5193f3422c81086657583937a750cdd3ec340" +checksum = "3ea403deff7b51fff19e261330f71608ff2cdef5721d72b64180bb95be7c4150" dependencies = [ - "cocoa 0.25.0", - "objc", + "objc2", + "objc2-app-kit", + "objc2-foundation", "raw-window-handle", - "windows-sys 0.52.0", + "windows-sys 0.59.0", "windows-version", ] @@ -5796,6 +5824,17 @@ dependencies = [ "syn 2.0.77", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + [[package]] name = "windows-result" version = "0.2.0" @@ -6150,12 +6189,12 @@ dependencies = [ [[package]] name = "xdg-home" -version = "1.2.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca91dcf8f93db085f3a0a29358cd0b9d670915468f4290e8b85d118a34211ab8" +checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -6246,16 +6285,16 @@ checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zip" -version = "2.1.6" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40dd8c92efc296286ce1fbd16657c5dbefff44f1b4ca01cc5f517d8b7b3d3e2e" +checksum = "dc5e4288ea4057ae23afc69a4472434a87a2495cafce6632fd1c4ec9f5cf3494" dependencies = [ "arbitrary", "crc32fast", "crossbeam-utils", "displaydoc", "flate2", - "indexmap 2.3.0", + "indexmap 2.5.0", "memchr", "thiserror", "zopfli", diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 6c4893fa..f8f9a95d 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -15,13 +15,8 @@ rai-pal-core = { path = "./core" } rai-pal-proc-macros = { path = "./proc-macros" } serde = { version = "1.0.210", features = ["derive"] } serde_json = "1.0.128" -specta = "2.0.0-rc.20" -# tauri-specta = { version = "2.0.0-rc.19", features = ["derive", "typescript"] } -# get tauri-specta from git instead for now, so I can loosen the tauri dependency requirement: -tauri-specta = { git = "https://github.com/Raicuparta/tauri-specta", branch = "main", features = [ - "derive", - "typescript", -] } +specta = "2.0.0-rc" +tauri-specta = { version = "2.0.0-rc.20", features = ["derive", "typescript"] } thiserror = "1.0.63" [profile.release] diff --git a/backend/tauri-app/Cargo.toml b/backend/tauri-app/Cargo.toml index 8c305794..6c6e7666 100644 --- a/backend/tauri-app/Cargo.toml +++ b/backend/tauri-app/Cargo.toml @@ -4,7 +4,7 @@ version.workspace = true edition.workspace = true [build-dependencies] -tauri-build = { version = "2.0.0-rc.11", features = [] } +tauri-build = { version = "2.0.0-rc", features = [] } [dependencies] log.workspace = true @@ -17,13 +17,13 @@ tauri-specta.workspace = true thiserror.workspace = true specta-typescript = "0.0.7" -tauri = { version = "2.0.0-rc.13", features = [] } -tauri-plugin-dialog = "2.0.0-rc.7" -tauri-plugin-log = "2.0.0-rc.2" +tauri = { version = "=2.0.0-rc.15", features = [] } +tauri-plugin-dialog = "2.0.0-rc" +tauri-plugin-log = "2.0.0-rc" tauri-plugin-shell = "2.0.0-rc" -tauri-plugin-updater = "2.0.0-rc.3" -tauri-plugin-window-state = "2.0.0-rc.4" -tauri-runtime = "2.0.0-rc.11" +tauri-plugin-updater = "2.0.0-rc" +tauri-plugin-window-state = "2.0.0-rc" +tauri-runtime = "2.0.0-rc" [features] # this feature is used for production builds or when `devPath` points to the filesystem From 86c4ecf9ab9d05061668338f43fb7c5a897f94a8 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sat, 21 Sep 2024 12:42:54 +0200 Subject: [PATCH 245/255] update dependencies --- package-lock.json | 692 ++++++++++------------------------------------ package.json | 24 +- 2 files changed, 153 insertions(+), 563 deletions(-) diff --git a/package-lock.json b/package-lock.json index fadcbebf..b84ac631 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,32 +8,30 @@ "name": "rai-mods", "version": "0.0.0", "dependencies": { - "@tauri-apps/plugin-shell": "^2.0.0-rc" - }, - "devDependencies": { "@mantine/code-highlight": "^7.11.0", "@mantine/core": "7.12.2", "@mantine/hooks": "7.12.2", "@mantine/notifications": "7.12.2", - "@tabler/icons-react": "3.14.0", - "@tauri-apps/api": "2.0.0-rc.4", - "@tauri-apps/cli": "2.0.0-rc.15", + "@tabler/icons-react": "3.17.0", + "@tauri-apps/api": "2.0.0-rc.5", + "@tauri-apps/cli": "2.0.0-rc.16", "@tauri-apps/plugin-dialog": "2.0.0-rc.1", "@tauri-apps/plugin-process": "2.0.0-rc.1", + "@tauri-apps/plugin-shell": "^2.0.0-rc", "@tauri-apps/plugin-store": "^2.0.0-rc.1", "@tauri-apps/plugin-updater": "2.0.0-rc.2", - "@types/react": "18.3.5", + "@types/react": "18.3.8", "@types/react-dom": "^18.3.0", - "@typescript-eslint/eslint-plugin": "8.4.0", - "@typescript-eslint/parser": "8.4.0", + "@typescript-eslint/eslint-plugin": "8.6.0", + "@typescript-eslint/parser": "8.6.0", "@vitejs/plugin-react": "^4.3.1", "cross-env": "^7.0.3", - "eslint": "8.57.0", + "eslint": "8.57.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.34.3", + "eslint-plugin-react": "7.36.1", "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7", - "jotai": "^2.8.4", + "eslint-plugin-react-refresh": "0.4.12", + "jotai": "2.10.0", "postcss": "8.4.47", "postcss-preset-mantine": "^1.15.0", "postcss-simple-vars": "^7.0.1", @@ -41,8 +39,8 @@ "react": "^18.3.1", "react-dom": "^18.3.1", "react-virtuoso": "4.10.4", - "typescript": "^5.5.2", - "vite": "5.4.3" + "typescript": "5.6.2", + "vite": "5.4.7" }, "engines": { "node": ">=20.0.0" @@ -52,7 +50,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -66,7 +63,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/highlight": "^7.24.7", @@ -80,7 +76,6 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -90,7 +85,6 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", - "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -121,7 +115,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -131,7 +124,6 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.25.0", @@ -147,7 +139,6 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/compat-data": "^7.25.2", @@ -164,7 +155,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -174,7 +164,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", @@ -188,7 +177,6 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.24.7", @@ -207,7 +195,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -217,7 +204,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/traverse": "^7.24.7", @@ -231,7 +217,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -241,7 +226,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -251,7 +235,6 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -261,7 +244,6 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", @@ -275,7 +257,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", @@ -291,7 +272,6 @@ "version": "7.25.3", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.25.2" @@ -307,7 +287,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.7.tgz", "integrity": "sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" @@ -323,7 +302,6 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.7.tgz", "integrity": "sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.24.7" @@ -339,7 +317,6 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", - "dev": true, "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -352,7 +329,6 @@ "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -367,7 +343,6 @@ "version": "7.25.3", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -386,7 +361,6 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -404,7 +378,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -421,7 +394,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -438,7 +410,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -455,7 +426,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -472,7 +442,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -489,7 +458,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -506,7 +474,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -523,7 +490,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -540,7 +506,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -557,7 +522,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -574,7 +538,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -591,7 +554,6 @@ "cpu": [ "loong64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -608,7 +570,6 @@ "cpu": [ "mips64el" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -625,7 +586,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -642,7 +602,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -659,7 +618,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -676,7 +634,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -693,7 +650,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -710,7 +666,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -727,7 +682,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -744,7 +698,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -761,7 +714,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -778,7 +730,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -792,7 +743,6 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" @@ -808,7 +758,6 @@ "version": "4.11.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -818,7 +767,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", @@ -842,7 +790,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -853,7 +800,6 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -869,7 +815,6 @@ "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": { "brace-expansion": "^1.1.7" @@ -882,7 +827,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -892,10 +836,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -905,7 +848,6 @@ "version": "1.6.5", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/utils": "^0.2.5" @@ -915,7 +857,6 @@ "version": "1.6.8", "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", @@ -926,7 +867,6 @@ "version": "0.26.20", "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.20.tgz", "integrity": "sha512-RixKJJG92fcIsVoqrFr4Onpzh7hlOx4U7NV4aLhMLmtvjZ5oTB/WzXaANYUZATKqXvvW7t9sCxtzejip26N5Ag==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/react-dom": "^2.1.1", @@ -942,7 +882,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" @@ -956,18 +895,16 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==", - "dev": true, "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", - "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -979,7 +916,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -990,7 +926,6 @@ "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": { "brace-expansion": "^1.1.7" @@ -1003,7 +938,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, "license": "Apache-2.0", "engines": { "node": ">=12.22" @@ -1018,14 +952,12 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -1040,7 +972,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1050,7 +981,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -1060,14 +990,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1078,7 +1006,6 @@ "version": "7.12.2", "resolved": "https://registry.npmjs.org/@mantine/code-highlight/-/code-highlight-7.12.2.tgz", "integrity": "sha512-eVVA6ZmtV2qV60qiQW3wvFbs0ryCmzrCJaqU4GV0D+6lGVn8mwbbo36+Jt4Qz/6FrswPD99ALRBlOwHDJe0P8A==", - "dev": true, "license": "MIT", "dependencies": { "clsx": "^2.1.1", @@ -1095,7 +1022,6 @@ "version": "7.12.2", "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.12.2.tgz", "integrity": "sha512-FrMHOKq4s3CiPIxqZ9xnVX7H4PEGNmbtHMvWO/0YlfPgoV0Er/N/DNJOFW1ys4WSnidPTayYeB41riyxxGOpRQ==", - "dev": true, "license": "MIT", "dependencies": { "@floating-ui/react": "^0.26.9", @@ -1115,7 +1041,6 @@ "version": "7.12.2", "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.12.2.tgz", "integrity": "sha512-dVMw8jpM0hAzc8e7/GNvzkk9N0RN/m+PKycETB3H6lJGuXJJSRR4wzzgQKpEhHwPccktDpvb4rkukKDq2jA8Fg==", - "dev": true, "license": "MIT", "peerDependencies": { "react": "^18.2.0" @@ -1125,7 +1050,6 @@ "version": "7.12.2", "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.12.2.tgz", "integrity": "sha512-gTvLHkoAZ42v5bZxibP9A50djp5ndEwumVhHSa7mxQ8oSS23tt3It/6hOqH7M+9kHY0a8s+viMiflUzTByA9qg==", - "dev": true, "license": "MIT", "dependencies": { "@mantine/store": "7.12.2", @@ -1142,7 +1066,6 @@ "version": "7.12.2", "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.12.2.tgz", "integrity": "sha512-NqL31sO/KcAETEWP/CiXrQOQNoE4168vZsxyXacQHGBueVMJa64WIDQtKLHrCnFRMws3vsXF02/OO4bH4XGcMQ==", - "dev": true, "license": "MIT", "peerDependencies": { "react": "^18.2.0" @@ -1152,7 +1075,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -1166,7 +1088,6 @@ "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": { "node": ">= 8" @@ -1176,7 +1097,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -1193,7 +1113,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1207,7 +1126,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1221,7 +1139,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1235,7 +1152,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1249,7 +1165,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1263,7 +1178,6 @@ "cpu": [ "arm" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1277,7 +1191,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1291,7 +1204,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1305,7 +1217,6 @@ "cpu": [ "ppc64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1319,7 +1230,6 @@ "cpu": [ "riscv64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1333,7 +1243,6 @@ "cpu": [ "s390x" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1347,7 +1256,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1361,7 +1269,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1375,7 +1282,6 @@ "cpu": [ "arm64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1389,7 +1295,6 @@ "cpu": [ "ia32" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1403,7 +1308,6 @@ "cpu": [ "x64" ], - "dev": true, "license": "MIT", "optional": true, "os": [ @@ -1411,10 +1315,9 @@ ] }, "node_modules/@tabler/icons": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.14.0.tgz", - "integrity": "sha512-OakKjK1kuDWKoNwdnHHVMt11kTZAC10iZpN/8o/CSYdeBH7S3v5n8IyqAYynFxLI8yBGTyBvljtvWdmWh57zSg==", - "dev": true, + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@tabler/icons/-/icons-3.17.0.tgz", + "integrity": "sha512-sCSfAQ0w93KSnSL7tS08n73CdIKpuHP8foeLMWgDKiZaCs8ZE//N3ytazCk651ZtruTtByI3b+ZDj7nRf+hHvA==", "license": "MIT", "funding": { "type": "github", @@ -1422,13 +1325,12 @@ } }, "node_modules/@tabler/icons-react": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.14.0.tgz", - "integrity": "sha512-3XdbuyhBNq8aZW0qagR9YL8diACZYSAtaw6VuwcO2l6HzVFPN6N5TDex9WTz/3lf+uktAvOv1kNuuFBjSjN9yw==", - "dev": true, + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/@tabler/icons-react/-/icons-react-3.17.0.tgz", + "integrity": "sha512-Ndm9Htv7KpIU1PYYrzs5EMhyA3aZGcgaxUp9Q1XOxcRZ+I0X+Ub2WS5f4bkRyDdL1s0++k2T9XRgmg2pG113sw==", "license": "MIT", "dependencies": { - "@tabler/icons": "3.14.0" + "@tabler/icons": "3.17.0" }, "funding": { "type": "github", @@ -1439,9 +1341,9 @@ } }, "node_modules/@tauri-apps/api": { - "version": "2.0.0-rc.4", - "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-rc.4.tgz", - "integrity": "sha512-UNiIhhKG08j4ooss2oEEVexffmWkgkYlC2M3GcX3VPtNsqFgVNL8Mcw/4Y7rO9M9S+ffAMnLOF5ypzyuyb8tyg==", + "version": "2.0.0-rc.5", + "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-2.0.0-rc.5.tgz", + "integrity": "sha512-JWs69pE9NsQdcqTpEVBepAZ08+jgQWuthIiTiaWRq/YlCLgnqq0KfC9sDem55uJ0YpgsytZuyj+m6b6q8oiD2g==", "license": "Apache-2.0 OR MIT", "funding": { "type": "opencollective", @@ -1449,10 +1351,9 @@ } }, "node_modules/@tauri-apps/cli": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.15.tgz", - "integrity": "sha512-w5cq2WBKYRJDCE5wi5gyjM79Cq3AchTFImbcGBB+uyB/m3PDBXEidaTBTHqwiup2hKbMivuBAzGUCHt+OfgBhA==", - "dev": true, + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.0.0-rc.16.tgz", + "integrity": "sha512-wdjZg/M3dcxiqgWG6VRnABpX0dYxRww93t0d1MYoZxFDrnyoUz5kYwFQ0v4J9u0qenEgskjoypvon7V/Nj9qrg==", "license": "Apache-2.0 OR MIT", "bin": { "tauri": "tauri.js" @@ -1465,26 +1366,25 @@ "url": "https://opencollective.com/tauri" }, "optionalDependencies": { - "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.15", - "@tauri-apps/cli-darwin-x64": "2.0.0-rc.15", - "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.15", - "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.15", - "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.15", - "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.15", - "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.15", - "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.15", - "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.15", - "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.15" + "@tauri-apps/cli-darwin-arm64": "2.0.0-rc.16", + "@tauri-apps/cli-darwin-x64": "2.0.0-rc.16", + "@tauri-apps/cli-linux-arm-gnueabihf": "2.0.0-rc.16", + "@tauri-apps/cli-linux-arm64-gnu": "2.0.0-rc.16", + "@tauri-apps/cli-linux-arm64-musl": "2.0.0-rc.16", + "@tauri-apps/cli-linux-x64-gnu": "2.0.0-rc.16", + "@tauri-apps/cli-linux-x64-musl": "2.0.0-rc.16", + "@tauri-apps/cli-win32-arm64-msvc": "2.0.0-rc.16", + "@tauri-apps/cli-win32-ia32-msvc": "2.0.0-rc.16", + "@tauri-apps/cli-win32-x64-msvc": "2.0.0-rc.16" } }, "node_modules/@tauri-apps/cli-darwin-arm64": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.15.tgz", - "integrity": "sha512-WuzQRELJTeSHe/uLu6IClCCEkwQy4qtZdHUmcAW3baKD217WCytn4jQ5+NFs2GxhK1a2GLHMQtQZSFTLkKiXkw==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.0.0-rc.16.tgz", + "integrity": "sha512-lISZU4gG0c9PbY7h/j/gW7nJLxZEygNBrYEET6zN8R99Znf5rSO+CfjenaMcJUUj6yTAd8gzdakRpLqNSAWegA==", "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1495,13 +1395,12 @@ } }, "node_modules/@tauri-apps/cli-darwin-x64": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.15.tgz", - "integrity": "sha512-71H1dNWlEr+Hyi096Ir3SnlClw4CSR4MhJ8UG8IUBqYwydJPYFzA+GFWRAgnPgcV6sBzdt8trcV9BLV4teDzEw==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.0.0-rc.16.tgz", + "integrity": "sha512-D9uxPCxpyYcTSQulJGFX3POAKPOJd8WcWHFH8x6YVM1cIx6EWRXIE1sZnPUOjFr7qCg+bSdYdr8/BFHcZGcApQ==", "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1512,13 +1411,12 @@ } }, "node_modules/@tauri-apps/cli-linux-arm-gnueabihf": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.15.tgz", - "integrity": "sha512-hO7AS09l6XZRCu/vqvB/iv6CvIlD//h9njhyw++0tJPCNH3X4rl13ji6SnoO0V6ZUCEeCeQBTAALsanYAlZelQ==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.0.0-rc.16.tgz", + "integrity": "sha512-WsVdKm4D1I1XV8I9yRnmOINZRwwWfh6xcLV3m19+B9g6TohK8RkRxWfxvs3TLQlWOLQ6lo8BzS9rzXB+KtjDpg==", "cpu": [ "arm" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1529,13 +1427,12 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-gnu": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.15.tgz", - "integrity": "sha512-r9FrwY83TD4w3vX7J9zS3GPSeis0YWq52p/MVLYR1i8sSJppbvYY72EXi5pR2CZ3vb+6z9/w7LpYTv+hOd2RbA==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.0.0-rc.16.tgz", + "integrity": "sha512-2jpZDagNs6rrqposHJihHBayttgOl5aB2+bYiVEC6ye+haiFtmYmpdaPOaVIw+YVQs6lepf5PVrisCoU9DmYsg==", "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1546,13 +1443,12 @@ } }, "node_modules/@tauri-apps/cli-linux-arm64-musl": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.15.tgz", - "integrity": "sha512-PqMn3/GiqLAhs7p0jr5XqwWN1t7SAgvo6+bFuYNL/SWx1Ui6mOck3ncfDkf+dQAnXnrhX2Qfwkl3agiOZxUZtA==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.0.0-rc.16.tgz", + "integrity": "sha512-SNEDcB+sWOls/B0a+UpUHVa/oegvlXXKYWsTxuXtgWIr5VbWG7rXLZ3fZpLLP3SpRVGTGTnABcyqshFbWSqqKQ==", "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1563,13 +1459,12 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-gnu": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.15.tgz", - "integrity": "sha512-o8lvgVBGXwthMV8+8EzEwXQY5jk2q+c700xeC/LY+J0lBL5ai3i0revlhO+3RwKnjnRLZMCXatr5K3gGtXIsoQ==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.0.0-rc.16.tgz", + "integrity": "sha512-Zsq29MM1ooeH1+chQBa7ffDFnzAZebBBFdsvs4e05tS1H8gn4oKE+PSMn9p/okzVXykEk9ri2/n7BG1XFeifMA==", "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1580,13 +1475,12 @@ } }, "node_modules/@tauri-apps/cli-linux-x64-musl": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.15.tgz", - "integrity": "sha512-cmANCyhcdInZSfIM3CPjA0eDu1toYABapSttA1rHbNrcJrHIq2KPKRCNuXIjWiBggxfIhJKWX7mTgQCQIyHd/w==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.0.0-rc.16.tgz", + "integrity": "sha512-g+pwSuis2YMxhJJ/pJYwp/Nps5CWvlv/5MV5UfDvClkCkeAyzIqVX+HbBLPcs5S0CePUQNeP0j4d4jBWUqZZQg==", "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1597,13 +1491,12 @@ } }, "node_modules/@tauri-apps/cli-win32-arm64-msvc": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.15.tgz", - "integrity": "sha512-FyWwCQb+uCCBtEDTDKtILH3wv0TWCQ2mXwMyZlibpbZ4RbaV5yDY82h8h7usfEuPHtBtAJHknHvX5WV1ETl5kw==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.0.0-rc.16.tgz", + "integrity": "sha512-PpPqdMTwJSDAK4KnNjvh77ShSkY+7pih1f6e50EtXar8bjC17e3XcEqFhDNne5mxEVTLYhibs6p1JLPad0ZjRA==", "cpu": [ "arm64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1614,13 +1507,12 @@ } }, "node_modules/@tauri-apps/cli-win32-ia32-msvc": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.15.tgz", - "integrity": "sha512-+bOBX7EdpmkCSBxgd9HcC/p9LoG/q1a5dJebWFuL9GhmdPeb5hv4plB/OTUAtg1OnEVGPXhTiSkcdRatZVryfA==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.0.0-rc.16.tgz", + "integrity": "sha512-io2yIcEcG7YLP+9n13NbilB93SjcB7jIl8GbURC4XZT4/4t9D1PWHpJr5hySVsGRLCz5e8NzwC5RlnenNzmpPQ==", "cpu": [ "ia32" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1631,13 +1523,12 @@ } }, "node_modules/@tauri-apps/cli-win32-x64-msvc": { - "version": "2.0.0-rc.15", - "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.15.tgz", - "integrity": "sha512-Phpk18bs1YxC+OFYaZNWiddYRmiZvMjB9Rzjl6M128gIkgnqDGnZyfWtM5GZ85/BmX1HVGgILK/46RU6Q88z1g==", + "version": "2.0.0-rc.16", + "resolved": "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.0.0-rc.16.tgz", + "integrity": "sha512-Rfkmxe3k+cBVA/kVYt8O25QrQqWKJlH9AiH7Q3C6xBzzG9PCSRMBszCp+JhBF8jhVlwNmOBv6UG+lm85kspwGg==", "cpu": [ "x64" ], - "dev": true, "license": "Apache-2.0 OR MIT", "optional": true, "os": [ @@ -1651,7 +1542,6 @@ "version": "2.0.0-rc.1", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-dialog/-/plugin-dialog-2.0.0-rc.1.tgz", "integrity": "sha512-H28gh6BfZtjflHQ+HrmWwunDriBI3AQLAKnMs50GA6zeNUULqbQr7VXbAAKeJL/0CmWcecID4PKXVoSlaWRhEg==", - "dev": true, "license": "MIT or APACHE-2.0", "dependencies": { "@tauri-apps/api": "^2.0.0-rc.4" @@ -1661,7 +1551,6 @@ "version": "2.0.0-rc.1", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-process/-/plugin-process-2.0.0-rc.1.tgz", "integrity": "sha512-Bl22xdoiu+AqEP6rzjb7DUJwdLDnejuRFukpkdrqF1/VEWJK5PuE903l+8mIOsd17zZ1Ua8y8WaBWnOXx4QHmw==", - "dev": true, "license": "MIT or APACHE-2.0", "dependencies": { "@tauri-apps/api": "^2.0.0-rc.4" @@ -1680,7 +1569,6 @@ "version": "2.0.0-rc.1", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-store/-/plugin-store-2.0.0-rc.1.tgz", "integrity": "sha512-rW71Tkr7OifxoL8NkWgPy5Os4Gn3oJTbv/j/nJ03HDuYsq+F4+8kU8o4epRFJnr6VKmgB/2CtiacSC3dnSSRnA==", - "dev": true, "license": "MIT or APACHE-2.0", "dependencies": { "@tauri-apps/api": "^2.0.0-rc.4" @@ -1690,7 +1578,6 @@ "version": "2.0.0-rc.2", "resolved": "https://registry.npmjs.org/@tauri-apps/plugin-updater/-/plugin-updater-2.0.0-rc.2.tgz", "integrity": "sha512-Ngvpa/km/00KASvOsFqRQbVf/6BaAX/gYwQs9eFxjygDpxxlZkZDVP1Fg0urW8s5dY7ELD6UAFB/ZI/g8D0QvQ==", - "dev": true, "license": "MIT or APACHE-2.0", "dependencies": { "@tauri-apps/api": "^2.0.0-rc.4" @@ -1700,7 +1587,6 @@ "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": { "@babel/parser": "^7.20.7", @@ -1714,7 +1600,6 @@ "version": "7.6.8", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" @@ -1724,7 +1609,6 @@ "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": { "@babel/parser": "^7.1.0", @@ -1735,7 +1619,6 @@ "version": "7.20.6", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.20.7" @@ -1745,21 +1628,18 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true, "license": "MIT" }, "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true, "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.5", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.5.tgz", - "integrity": "sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA==", - "dev": true, + "version": "18.3.8", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.8.tgz", + "integrity": "sha512-syBUrW3/XpnW4WJ41Pft+I+aPoDVbrBVQGEnbD7NijDGlVC+8gV/XKRY+7vMDlfPpbwYt0l1vd/Sj8bJGMbs9Q==", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -1770,24 +1650,22 @@ "version": "18.3.0", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", - "dev": true, "license": "MIT", "dependencies": { "@types/react": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.4.0.tgz", - "integrity": "sha512-rg8LGdv7ri3oAlenMACk9e+AR4wUV0yrrG+XKsGKOK0EVgeEDqurkXMPILG2836fW4ibokTB5v4b6Z9+GYQDEw==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz", + "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==", "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/type-utils": "8.4.0", - "@typescript-eslint/utils": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/type-utils": "8.6.0", + "@typescript-eslint/utils": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1811,16 +1689,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.4.0.tgz", - "integrity": "sha512-NHgWmKSgJk5K9N16GIhQ4jSobBoJwrmURaLErad0qlLjrpP5bECYg+wxVTGlGZmJbU03jj/dfnb6V9bw+5icsA==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz", + "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==", "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/typescript-estree": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "debug": "^4.3.4" }, "engines": { @@ -1840,14 +1717,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.4.0.tgz", - "integrity": "sha512-n2jFxLeY0JmKfUqy3P70rs6vdoPjHK8P/w+zJcV3fk0b0BwRXC/zxRTEnAsgYT7MwdQDt/ZEbtdzdVC+hcpF0A==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz", + "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0" + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1858,14 +1734,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.4.0.tgz", - "integrity": "sha512-pu2PAmNrl9KX6TtirVOrbLPLwDmASpZhK/XU7WvoKoCUkdtq9zF7qQ7gna0GBZFN0hci0vHaSusiL2WpsQk37A==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz", + "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==", "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.4.0", - "@typescript-eslint/utils": "8.4.0", + "@typescript-eslint/typescript-estree": "8.6.0", + "@typescript-eslint/utils": "8.6.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1883,10 +1758,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.4.0.tgz", - "integrity": "sha512-T1RB3KQdskh9t3v/qv7niK6P8yvn7ja1mS7QK7XfRVL6wtZ8/mFs/FHf4fKvTA0rKnqnYxl/uHFNbnEt0phgbw==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz", + "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==", "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1897,14 +1771,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.4.0.tgz", - "integrity": "sha512-kJ2OIP4dQw5gdI4uXsaxUZHRwWAGpREJ9Zq6D5L0BweyOrWsL6Sz0YcAZGWhvKnH7fm1J5YFE1JrQL0c9dd53A==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz", + "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==", "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/visitor-keys": "8.4.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/visitor-keys": "8.6.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1926,16 +1799,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.4.0.tgz", - "integrity": "sha512-swULW8n1IKLjRAgciCkTCafyTHHfwVQFt8DovmaF69sKbOxTSFMmIZaSHjqO9i/RV0wIblaawhzvtva8Nmm7lQ==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz", + "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.4.0", - "@typescript-eslint/types": "8.4.0", - "@typescript-eslint/typescript-estree": "8.4.0" + "@typescript-eslint/scope-manager": "8.6.0", + "@typescript-eslint/types": "8.6.0", + "@typescript-eslint/typescript-estree": "8.6.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1949,13 +1821,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.4.0.tgz", - "integrity": "sha512-zTQD6WLNTre1hj5wp09nBIDiOc2U5r/qmzo7wxPn4ZgAjHql09EofqhF9WF+fZHzL5aCyaIpPcT2hyxl73kr9A==", - "dev": true, + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz", + "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==", "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.4.0", + "@typescript-eslint/types": "8.6.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1970,14 +1841,12 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, "license": "ISC" }, "node_modules/@vitejs/plugin-react": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", "integrity": "sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/core": "^7.24.5", @@ -1997,7 +1866,6 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -2010,7 +1878,6 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -2020,7 +1887,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2037,7 +1903,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -2047,7 +1912,6 @@ "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": { "color-convert": "^1.9.0" @@ -2060,14 +1924,12 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -2084,7 +1946,6 @@ "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2105,7 +1966,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2126,7 +1986,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -2145,7 +2004,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -2164,7 +2022,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2181,7 +2038,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -2204,7 +2060,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" @@ -2220,14 +2075,12 @@ "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/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -2237,7 +2090,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -2250,7 +2102,6 @@ "version": "4.23.3", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2283,7 +2134,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -2303,7 +2153,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2313,7 +2162,6 @@ "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": { "node": ">= 6" @@ -2323,7 +2171,6 @@ "version": "1.0.30001646", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", - "dev": true, "funding": [ { "type": "opencollective", @@ -2344,7 +2191,6 @@ "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": { "ansi-styles": "^3.2.1", @@ -2359,7 +2205,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2369,7 +2214,6 @@ "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": { "color-name": "1.1.3" @@ -2379,28 +2223,24 @@ "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/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/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, "license": "MIT" }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, "license": "MIT", "dependencies": { "cross-spawn": "^7.0.1" @@ -2419,7 +2259,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -2434,7 +2273,6 @@ "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": { "cssesc": "bin/cssesc" @@ -2447,14 +2285,12 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -2472,7 +2308,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2490,7 +2325,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -2508,7 +2342,6 @@ "version": "4.3.6", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, "license": "MIT", "dependencies": { "ms": "2.1.2" @@ -2526,14 +2359,12 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, "license": "MIT" }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -2551,7 +2382,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -2569,14 +2399,12 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true, "license": "MIT" }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -2589,7 +2417,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", @@ -2600,14 +2427,12 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", - "dev": true, "license": "ISC" }, "node_modules/es-abstract": { "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", @@ -2668,7 +2493,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" @@ -2681,7 +2505,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -2691,7 +2514,6 @@ "version": "1.0.19", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.19.tgz", "integrity": "sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -2717,7 +2539,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -2730,7 +2551,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", @@ -2745,7 +2565,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.0" @@ -2755,7 +2574,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.4", @@ -2773,7 +2591,6 @@ "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, "hasInstallScript": true, "license": "MIT", "bin": { @@ -2812,7 +2629,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -2822,24 +2638,22 @@ "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": { "node": ">=0.8.0" } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -2888,7 +2702,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" @@ -2898,10 +2711,9 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.35.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.2.tgz", - "integrity": "sha512-Rbj2R9zwP2GYNcIak4xoAMV57hrBh3hTaR0k7hVjwCQgryE/pw5px4b13EYjduOI0hfXyZhwBxaGpOTbWSGzKQ==", - "dev": true, + "version": "7.36.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz", + "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==", "license": "MIT", "dependencies": { "array-includes": "^3.1.8", @@ -2934,7 +2746,6 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -2944,10 +2755,9 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.11.tgz", - "integrity": "sha512-wrAKxMbVr8qhXTtIKfXqAn5SAtRZt0aXxe5P23Fh4pUAdC6XEsybGLB8P0PI4j1yYqOgUEUlzKAGDfo7rJOjcw==", - "dev": true, + "version": "0.4.12", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.12.tgz", + "integrity": "sha512-9neVjoGv20FwYtCP6CB1dzR1vr57ZDNOXst21wd2xJ/cTlM2xLq0GWVlSNTdMn/4BtP6cHYBMCSp1wFBJ9jBsg==", "license": "MIT", "peerDependencies": { "eslint": ">=7" @@ -2957,7 +2767,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -2968,7 +2777,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" @@ -2981,7 +2789,6 @@ "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": { "brace-expansion": "^1.1.7" @@ -2994,7 +2801,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -3004,7 +2810,6 @@ "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -3021,7 +2826,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3034,7 +2838,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -3050,7 +2853,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3061,7 +2863,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -3078,7 +2879,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -3091,14 +2891,12 @@ "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/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -3111,7 +2909,6 @@ "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, "license": "MIT", "dependencies": { "type-fest": "^0.20.2" @@ -3127,7 +2924,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -3137,7 +2933,6 @@ "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": { "brace-expansion": "^1.1.7" @@ -3150,7 +2945,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -3163,7 +2957,6 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -3176,7 +2969,6 @@ "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", @@ -3194,7 +2986,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" @@ -3207,7 +2998,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -3220,7 +3010,6 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -3230,7 +3019,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -3240,14 +3028,12 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3264,7 +3050,6 @@ "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": { "is-glob": "^4.0.1" @@ -3277,21 +3062,18 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -3301,7 +3083,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" @@ -3314,7 +3095,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -3327,7 +3107,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -3344,7 +3123,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", @@ -3359,14 +3137,12 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, "license": "MIT", "dependencies": { "is-callable": "^1.1.3" @@ -3376,14 +3152,12 @@ "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, @@ -3398,7 +3172,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3408,7 +3181,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -3427,7 +3199,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3437,7 +3208,6 @@ "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==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -3447,7 +3217,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3467,7 +3236,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -3477,7 +3245,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -3496,7 +3263,6 @@ "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": { "fs.realpath": "^1.0.0", @@ -3517,7 +3283,6 @@ "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": { "is-glob": "^4.0.3" @@ -3530,7 +3295,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -3541,7 +3305,6 @@ "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": { "brace-expansion": "^1.1.7" @@ -3554,7 +3317,6 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -3564,7 +3326,6 @@ "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": { "define-properties": "^1.2.1", @@ -3581,7 +3342,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" @@ -3594,14 +3354,12 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, "license": "MIT" }, "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3611,7 +3369,6 @@ "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": { "node": ">=4" @@ -3621,7 +3378,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -3634,7 +3390,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3647,7 +3402,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3660,7 +3414,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -3676,7 +3429,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -3689,7 +3441,6 @@ "version": "11.10.0", "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.10.0.tgz", "integrity": "sha512-SYVnVFswQER+zu1laSya563s+F8VDGt7o35d4utbamowvUNLLMovFqwCLSocpZTz3MgaSRA1IbqRWZv97dtErQ==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=12.0.0" @@ -3699,7 +3450,6 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -3709,7 +3459,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -3726,7 +3475,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.8.19" @@ -3737,7 +3485,6 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -3748,14 +3495,12 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, "license": "ISC" }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3770,7 +3515,6 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" @@ -3780,7 +3524,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -3797,7 +3540,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -3813,7 +3555,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" @@ -3826,7 +3567,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -3843,7 +3583,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3856,7 +3595,6 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", - "dev": true, "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -3872,7 +3610,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" @@ -3888,7 +3625,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -3904,7 +3640,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -3914,7 +3649,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2" @@ -3927,7 +3661,6 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -3943,7 +3676,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -3956,7 +3688,6 @@ "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==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3969,7 +3700,6 @@ "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": { "node": ">= 0.4" @@ -3982,7 +3712,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -3992,7 +3721,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4008,7 +3736,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4018,7 +3745,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -4035,7 +3761,6 @@ "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==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4048,7 +3773,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7" @@ -4064,7 +3788,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" @@ -4080,7 +3803,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" @@ -4096,7 +3818,6 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" @@ -4112,7 +3833,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4125,7 +3845,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2" @@ -4138,7 +3857,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -4155,21 +3873,18 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, "license": "ISC" }, "node_modules/iterator.prototype": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.2.1", @@ -4180,10 +3895,9 @@ } }, "node_modules/jotai": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.9.3.tgz", - "integrity": "sha512-IqMWKoXuEzWSShjd9UhalNsRGbdju5G2FrqNLQJT+Ih6p41VNYe2sav5hnwQx4HJr25jq9wRqvGSWGviGG6Gjw==", - "dev": true, + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/jotai/-/jotai-2.10.0.tgz", + "integrity": "sha512-8W4u0aRlOIwGlLQ0sqfl/c6+eExl5D8lZgAUolirZLktyaj4WnxO/8a0HEPmtriQAB6X5LMhXzZVmw02X0P0qQ==", "license": "MIT", "engines": { "node": ">=12.20.0" @@ -4205,14 +3919,12 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "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==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -4225,7 +3937,6 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -4238,28 +3949,24 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -4272,7 +3979,6 @@ "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.6", @@ -4288,7 +3994,6 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -4298,7 +4003,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", @@ -4312,7 +4016,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -4328,14 +4031,12 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, "license": "MIT" }, "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==", - "dev": true, "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -4348,7 +4049,6 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -4358,17 +4058,15 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, + "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", @@ -4382,7 +4080,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -4398,14 +4095,12 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true, "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -4424,21 +4119,18 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, "license": "MIT" }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true, "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==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4448,7 +4140,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4461,7 +4152,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4471,7 +4161,6 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.5", @@ -4490,7 +4179,6 @@ "version": "1.1.8", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -4505,7 +4193,6 @@ "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -4524,7 +4211,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -4542,7 +4228,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -4552,7 +4237,6 @@ "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, "license": "MIT", "dependencies": { "deep-is": "^0.1.3", @@ -4570,7 +4254,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -4586,7 +4269,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -4602,7 +4284,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -4615,7 +4296,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4625,7 +4305,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4635,7 +4314,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -4645,21 +4323,18 @@ "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/picocolors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true, "license": "ISC" }, "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": { "node": ">=8.6" @@ -4672,7 +4347,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4682,7 +4356,6 @@ "version": "8.4.47", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -4711,7 +4384,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", - "dev": true, "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" @@ -4731,7 +4403,6 @@ "version": "9.0.4", "resolved": "https://registry.npmjs.org/postcss-mixins/-/postcss-mixins-9.0.4.tgz", "integrity": "sha512-XVq5jwQJDRu5M1XGkdpgASqLk37OqkH4JCFDXl/Dn7janOJjCTEKL+36cnRVy7bMtoBzALfO7bV7nTIsFnUWLA==", - "dev": true, "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", @@ -4754,7 +4425,6 @@ "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": [ { "type": "opencollective", @@ -4780,7 +4450,6 @@ "version": "1.17.0", "resolved": "https://registry.npmjs.org/postcss-preset-mantine/-/postcss-preset-mantine-1.17.0.tgz", "integrity": "sha512-ji1PMDBUf2Vsx/HE5faMSs1+ff6qE6YRulTr4Ja+6HD3gop8rSMTCYdpN7KrdsEg079kfBKkO/PaKhG9uR0zwQ==", - "dev": true, "license": "MIT", "dependencies": { "postcss-mixins": "^9.0.4", @@ -4794,7 +4463,6 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", - "dev": true, "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -4808,7 +4476,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/postcss-simple-vars/-/postcss-simple-vars-7.0.1.tgz", "integrity": "sha512-5GLLXaS8qmzHMOjVxqkk1TZPf1jMqesiI7qLhnlyERalG0sMbHIbJqrcnrpmZdKCLglHnRHoEBB61RtGTsj++A==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.0" @@ -4825,7 +4492,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.8.0" @@ -4835,7 +4501,6 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" @@ -4851,7 +4516,6 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -4863,7 +4527,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -4873,7 +4536,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -4894,7 +4556,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -4907,7 +4568,6 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -4921,14 +4581,12 @@ "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true, "license": "MIT" }, "node_modules/react-number-format": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", - "dev": true, "license": "MIT", "dependencies": { "prop-types": "^15.7.2" @@ -4942,7 +4600,6 @@ "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -4952,7 +4609,6 @@ "version": "2.5.10", "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", - "dev": true, "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.6", @@ -4978,7 +4634,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", - "dev": true, "license": "MIT", "dependencies": { "react-style-singleton": "^2.2.1", @@ -5001,7 +4656,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", - "dev": true, "license": "MIT", "dependencies": { "get-nonce": "^1.0.0", @@ -5025,7 +4679,6 @@ "version": "8.5.3", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.3.tgz", "integrity": "sha512-XT1024o2pqCuZSuBt9FwHlaDeNtVrtCXu0Rnz88t1jUGheCLa3PhjE1GH8Ctm2axEtvdCl5SUHYschyQ0L5QHQ==", - "dev": true, "license": "MIT", "dependencies": { "@babel/runtime": "^7.20.13", @@ -5043,7 +4696,6 @@ "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", @@ -5060,7 +4712,6 @@ "version": "4.10.4", "resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.10.4.tgz", "integrity": "sha512-G/gprhTbK+lzMxoo/iStcZxVEGph/cIhc3WANEpt92RuMw+LiCZOmBfKoeoZOHlm/iyftTrDJhGaTCpxyucnkQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -5074,7 +4725,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5096,14 +4746,12 @@ "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true, "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -5122,7 +4770,6 @@ "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", @@ -5140,7 +4787,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -5150,7 +4796,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -5162,7 +4807,6 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -5178,7 +4822,6 @@ "version": "4.21.2", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "1.0.5" @@ -5214,7 +4857,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -5238,7 +4880,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5257,7 +4898,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.6", @@ -5275,7 +4915,6 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "dev": true, "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -5285,7 +4924,6 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -5298,7 +4936,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -5316,7 +4953,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -5332,7 +4968,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -5345,7 +4980,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5355,7 +4989,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5374,7 +5007,6 @@ "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": { "node": ">=0.10.0" @@ -5384,7 +5016,6 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5411,7 +5042,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", - "dev": true, "license": "MIT", "dependencies": { "define-properties": "^1.1.3", @@ -5422,7 +5052,6 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5441,7 +5070,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5456,7 +5084,6 @@ "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": { "call-bind": "^1.0.7", @@ -5474,7 +5101,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -5487,7 +5113,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -5500,7 +5125,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-4.0.1.tgz", "integrity": "sha512-WCjS5NfuVJjkQzK10s8WOBY+hhDxxNt/N6ZaGwxFZ+wN3/lKKFSaaKUNecULcTTvE4urLcKaZFQD8vO0mOZujw==", - "dev": true, "license": "MIT", "engines": { "node": ">=12.0" @@ -5517,7 +5141,6 @@ "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": { "has-flag": "^3.0.0" @@ -5530,7 +5153,6 @@ "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": { "node": ">= 0.4" @@ -5543,21 +5165,18 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "dev": true, "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, "license": "MIT" }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -5567,7 +5186,6 @@ "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==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -5580,7 +5198,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=16" @@ -5593,14 +5210,12 @@ "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true, "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" @@ -5613,7 +5228,6 @@ "version": "4.23.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", - "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -5626,7 +5240,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5641,7 +5254,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5661,7 +5273,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -5682,7 +5293,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", @@ -5700,10 +5310,9 @@ } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -5717,7 +5326,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.2", @@ -5733,7 +5341,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", - "dev": true, "funding": [ { "type": "opencollective", @@ -5764,7 +5371,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -5774,7 +5380,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", - "dev": true, "license": "MIT", "dependencies": { "tslib": "^2.0.0" @@ -5796,7 +5401,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "dev": true, "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -5806,7 +5410,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "dev": true, "license": "MIT", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" @@ -5821,7 +5424,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dev": true, "license": "MIT", "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" @@ -5839,7 +5441,6 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", - "dev": true, "license": "MIT", "dependencies": { "detect-node-es": "^1.1.0", @@ -5862,14 +5463,12 @@ "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/vite": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", - "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", - "dev": true, + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.7.tgz", + "integrity": "sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==", "license": "MIT", "dependencies": { "esbuild": "^0.21.3", @@ -5929,7 +5528,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -5945,7 +5543,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", @@ -5962,7 +5559,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", - "dev": true, "license": "MIT", "dependencies": { "function.prototype.name": "^1.1.6", @@ -5989,7 +5585,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, "license": "MIT", "dependencies": { "is-map": "^2.0.3", @@ -6008,7 +5603,6 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", @@ -6028,7 +5622,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6038,21 +5631,18 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, "license": "ISC" }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" diff --git a/package.json b/package.json index 64949659..5a0e80e1 100644 --- a/package.json +++ b/package.json @@ -27,26 +27,26 @@ "@mantine/core": "7.12.2", "@mantine/hooks": "7.12.2", "@mantine/notifications": "7.12.2", - "@tabler/icons-react": "3.14.0", - "@tauri-apps/api": "2.0.0-rc.4", - "@tauri-apps/cli": "2.0.0-rc.15", + "@tabler/icons-react": "3.17.0", + "@tauri-apps/api": "2.0.0-rc.5", + "@tauri-apps/cli": "2.0.0-rc.16", "@tauri-apps/plugin-dialog": "2.0.0-rc.1", "@tauri-apps/plugin-process": "2.0.0-rc.1", "@tauri-apps/plugin-shell": "^2.0.0-rc", "@tauri-apps/plugin-store": "^2.0.0-rc.1", "@tauri-apps/plugin-updater": "2.0.0-rc.2", "@types/react-dom": "^18.3.0", - "@types/react": "18.3.5", - "@typescript-eslint/eslint-plugin": "8.4.0", - "@typescript-eslint/parser": "8.4.0", + "@types/react": "18.3.8", + "@typescript-eslint/eslint-plugin": "8.6.0", + "@typescript-eslint/parser": "8.6.0", "@vitejs/plugin-react": "^4.3.1", "cross-env": "^7.0.3", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7", - "eslint-plugin-react": "^7.34.3", - "eslint": "8.57.0", - "jotai": "^2.8.4", + "eslint-plugin-react-refresh": "0.4.12", + "eslint-plugin-react": "7.36.1", + "eslint": "8.57.1", + "jotai": "2.10.0", "postcss-preset-mantine": "^1.15.0", "postcss-simple-vars": "^7.0.1", "postcss": "8.4.47", @@ -54,7 +54,7 @@ "react-dom": "^18.3.1", "react-virtuoso": "4.10.4", "react": "^18.3.1", - "typescript": "^5.5.2", - "vite": "5.4.3" + "typescript": "5.6.2", + "vite": "5.4.7" } } From 73b625792518f1acf3d172e446c48fb5e1945467 Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 22 Sep 2024 09:02:17 +0200 Subject: [PATCH 246/255] update more depdendencies --- .eslintrc | 25 - .vscode/settings.json | 1 + eslint.config.mjs | 54 ++ .../installed-games/add-game-button.tsx | 6 +- package-lock.json | 763 ++++++++---------- package.json | 11 +- 6 files changed, 402 insertions(+), 458 deletions(-) delete mode 100644 .eslintrc create mode 100644 eslint.config.mjs diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index b5800850..00000000 --- a/.eslintrc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "env": { "browser": true, "es2020": true }, - "extends": [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:@typescript-eslint/recommended", - "plugin:react-hooks/recommended", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { "ecmaVersion": "latest", "sourceType": "module" }, - "plugins": ["react-refresh"], - "rules": { - "react/prop-types": "off", - "react/prefer-read-only-props": "warn", - "react/jsx-curly-brace-presence": "warn" - }, - "settings": { - "react": { - "version": "detect" - } - }, - "ignorePatterns": ["frontend/api/", "backend/"] -} diff --git a/.vscode/settings.json b/.vscode/settings.json index d1ff0015..098c795a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,7 @@ "catcache", "chrono", "Clippy", + "compat", "compatdata", "ctypes", "dtolnay", diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..16a599b6 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,54 @@ +import { fixupConfigRules } from "@eslint/compat"; +import reactRefresh from "eslint-plugin-react-refresh"; +import globals from "globals"; +import tsParser from "@typescript-eslint/parser"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import js from "@eslint/js"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all +}); + +export default [{ + files: ["**/*.ts", "**/*.tsx"], + ignores: ["frontend/api/**/*", "**/backend/"], +}, ...fixupConfigRules(compat.extends( + "eslint:recommended", + "plugin:react/recommended", + "plugin:react/jsx-runtime", + "plugin:@typescript-eslint/recommended", + "plugin:react-hooks/recommended", + "prettier", +)), { + plugins: { + "react-refresh": reactRefresh, + }, + + languageOptions: { + globals: { + ...globals.browser, + }, + + parser: tsParser, + ecmaVersion: "latest", + sourceType: "module", + }, + + settings: { + react: { + version: "detect", + }, + }, + + rules: { + "react/prop-types": "off", + "react/prefer-read-only-props": "warn", + "react/jsx-curly-brace-presence": "warn", + }, +}]; \ No newline at end of file diff --git a/frontend/components/installed-games/add-game-button.tsx b/frontend/components/installed-games/add-game-button.tsx index d034353d..fcc1a1c7 100644 --- a/frontend/components/installed-games/add-game-button.tsx +++ b/frontend/components/installed-games/add-game-button.tsx @@ -14,7 +14,7 @@ export function AddGame() { const [executeAddGame] = useAsyncCommand(commands.addGame); const handleClick = useCallback(async () => { - const result = await openDialog({ + const path = await openDialog({ multiple: false, title: "Select the game executable", filters: [ @@ -28,9 +28,9 @@ export function AddGame() { }, ], }); - if (!result) return; + if (!path) return; - await executeAddGame(result.path).then(() => setIsOpen(false)); + await executeAddGame(path).then(() => setIsOpen(false)); }, [executeAddGame]); useEffect(() => { diff --git a/package-lock.json b/package-lock.json index b84ac631..7dfa6f05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,9 @@ "name": "rai-mods", "version": "0.0.0", "dependencies": { + "@eslint/compat": "^1.1.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.11.0", "@mantine/code-highlight": "^7.11.0", "@mantine/core": "7.12.2", "@mantine/hooks": "7.12.2", @@ -26,11 +29,12 @@ "@typescript-eslint/parser": "8.6.0", "@vitejs/plugin-react": "^4.3.1", "cross-env": "^7.0.3", - "eslint": "8.57.1", + "eslint": "9.11.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "7.36.1", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-hooks": "5.1.0-rc-fb9a90fa48-20240614", "eslint-plugin-react-refresh": "0.4.12", + "globals": "^15.9.0", "jotai": "2.10.0", "postcss": "8.4.47", "postcss-preset-mantine": "^1.15.0", @@ -73,9 +77,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.2.tgz", - "integrity": "sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==", + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -121,12 +125,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", - "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.0", + "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -241,13 +245,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.0.tgz", - "integrity": "sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", "license": "MIT", "dependencies": { "@babel/template": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/types": "^7.25.6" }, "engines": { "node": ">=6.9.0" @@ -269,12 +273,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", - "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", "license": "MIT", "dependencies": { - "@babel/types": "^7.25.2" + "@babel/types": "^7.25.6" }, "bin": { "parser": "bin/babel-parser.js" @@ -314,9 +318,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -340,16 +344,16 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.3.tgz", - "integrity": "sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/template": "^7.25.0", - "@babel/types": "^7.25.2", + "@babel/types": "^7.25.6", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -357,10 +361,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", - "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.24.8", @@ -755,24 +768,69 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.1.1.tgz", + "integrity": "sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -780,7 +838,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -797,15 +855,12 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -823,54 +878,63 @@ "node": "*" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", + "node_modules/@eslint/js": { + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz", + "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==", + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "license": "MIT", + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.5.tgz", - "integrity": "sha512-8GrTWmoFhm5BsMZOTHeGD2/0FLKLQQHvO/ZmQga4tKempYRLz8aqJGqXVuQgisnMObq2YZ2SgkwctN1LOOxcqA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.5" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.8.tgz", - "integrity": "sha512-kx62rP19VZ767Q653wsP1XZCGIirkE09E0QUGNYTM/ttbbQHqcGPdSfWFxUyyNLc/W6aoJRBajOSXhP6GXjC0Q==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", "license": "MIT", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.5" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react": { - "version": "0.26.20", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.20.tgz", - "integrity": "sha512-RixKJJG92fcIsVoqrFr4Onpzh7hlOx4U7NV4aLhMLmtvjZ5oTB/WzXaANYUZATKqXvvW7t9sCxtzejip26N5Ag==", + "version": "0.26.24", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.24.tgz", + "integrity": "sha512-2ly0pCkZIGEQUq5H8bBK0XJmc1xIK/RM3tvVzY3GBER7IOD1UgmC2Y2tjj4AuS+TC+vTE1KJv2053290jua0Sw==", "license": "MIT", "dependencies": { - "@floating-ui/react-dom": "^2.1.1", - "@floating-ui/utils": "^0.2.5", + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { @@ -879,9 +943,9 @@ } }, "node_modules/@floating-ui/react-dom": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.1.tgz", - "integrity": "sha512-4h84MJt3CHrtG18mGsXuLCHMrug49d7DFkU0RMIyshRveBeyV2hmV/pDaF2Uxtu8kgq5r46llp5E5FQiR0K2Yg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "license": "MIT", "dependencies": { "@floating-ui/dom": "^1.0.0" @@ -892,48 +956,11 @@ } }, "node_modules/@floating-ui/utils": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.5.tgz", - "integrity": "sha512-sTcG+QZ6fdEUObICavU+aB3Mp8HY4n14wYHdxK4fXjPmv3PXZZeY5RaguJmGyeH/CJQhX3fqKUtS4qc1LoHwhQ==", + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==", "license": "MIT" }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -947,12 +974,18 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "license": "BSD-3-Clause" + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", @@ -1107,9 +1140,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", - "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], @@ -1120,9 +1153,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", - "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], @@ -1133,9 +1166,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", - "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], @@ -1146,9 +1179,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", - "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], @@ -1159,9 +1192,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", - "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], @@ -1172,9 +1205,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", - "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], @@ -1185,9 +1218,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", - "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], @@ -1198,9 +1231,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", - "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], @@ -1211,9 +1244,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", - "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], @@ -1224,9 +1257,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", - "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], @@ -1237,9 +1270,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", - "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], @@ -1250,9 +1283,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", - "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], @@ -1263,9 +1296,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", - "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], @@ -1276,9 +1309,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", - "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], @@ -1289,9 +1322,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", - "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], @@ -1302,9 +1335,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", - "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], @@ -1631,9 +1664,9 @@ "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", "license": "MIT" }, "node_modules/@types/react": { @@ -1837,12 +1870,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "license": "ISC" - }, "node_modules/@vitejs/plugin-react": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.1.tgz", @@ -2168,9 +2195,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001646", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001646.tgz", - "integrity": "sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==", + "version": "1.0.30001662", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", + "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", "funding": [ { "type": "opencollective", @@ -2339,12 +2366,12 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2401,18 +2428,6 @@ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", "license": "MIT" }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", @@ -2424,9 +2439,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.4.tgz", - "integrity": "sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==", + "version": "1.5.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", + "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", "license": "ISC" }, "node_modules/es-abstract": { @@ -2626,9 +2641,9 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "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" @@ -2644,43 +2659,39 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.0.tgz", + "integrity": "sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==", "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.11.0", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", @@ -2692,10 +2703,18 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -2743,15 +2762,15 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "version": "5.1.0-rc-fb9a90fa48-20240614", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", + "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==", "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react-refresh": { @@ -2807,16 +2826,16 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2905,19 +2924,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/has-flag": { @@ -2953,30 +2969,30 @@ "node": ">=8" } }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.12.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3080,15 +3096,15 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -3120,17 +3136,16 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { @@ -3148,12 +3163,6 @@ "is-callable": "^1.1.3" } }, - "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==", - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3258,27 +3267,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3291,35 +3279,16 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "version": "15.9.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz", + "integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { @@ -3447,9 +3416,9 @@ } }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -3480,23 +3449,6 @@ "node": ">=0.8.19" } }, - "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.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, "node_modules/internal-slot": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", @@ -3592,9 +3544,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.0.tgz", - "integrity": "sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -4092,9 +4044,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "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/nanoid": { @@ -4224,15 +4176,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -4301,15 +4244,6 @@ "node": ">=8" } }, - "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==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4460,9 +4394,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", - "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", + "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==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -4584,13 +4518,10 @@ "license": "MIT" }, "node_modules/react-number-format": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.0.tgz", - "integrity": "sha512-NWdICrqLhI7rAS8yUeLVd6Wr4cN7UjJ9IBTS0f/a9i7UB4x4Ti70kGnksBtZ7o4Z7YRbvCMMR/jQmkoOBa/4fg==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/react-number-format/-/react-number-format-5.4.2.tgz", + "integrity": "sha512-cg//jVdS49PYDgmcYoBnMMHl4XNTMuV723ZnHD2aXYtWWWqbVF3hjQ8iB+UZEuXapLbeA8P8H+1o6ZB1lcw3vg==", "license": "MIT", - "dependencies": { - "prop-types": "^15.7.2" - }, "peerDependencies": { "react": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react-dom": "^0.14 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" @@ -4606,9 +4537,9 @@ } }, "node_modules/react-remove-scroll": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.10.tgz", - "integrity": "sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", "license": "MIT", "dependencies": { "react-remove-scroll-bar": "^2.3.6", @@ -4802,26 +4733,10 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", - "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "license": "MIT", "dependencies": { "@types/estree": "1.0.5" @@ -4834,22 +4749,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.2", - "@rollup/rollup-android-arm64": "4.21.2", - "@rollup/rollup-darwin-arm64": "4.21.2", - "@rollup/rollup-darwin-x64": "4.21.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", - "@rollup/rollup-linux-arm-musleabihf": "4.21.2", - "@rollup/rollup-linux-arm64-gnu": "4.21.2", - "@rollup/rollup-linux-arm64-musl": "4.21.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", - "@rollup/rollup-linux-riscv64-gnu": "4.21.2", - "@rollup/rollup-linux-s390x-gnu": "4.21.2", - "@rollup/rollup-linux-x64-gnu": "4.21.2", - "@rollup/rollup-linux-x64-musl": "4.21.2", - "@rollup/rollup-win32-arm64-msvc": "4.21.2", - "@rollup/rollup-win32-ia32-msvc": "4.21.2", - "@rollup/rollup-win32-x64-msvc": "4.21.2", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -5207,9 +5122,9 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "license": "0BSD" }, "node_modules/type-check": { @@ -5225,9 +5140,9 @@ } }, "node_modules/type-fest": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.23.0.tgz", - "integrity": "sha512-ZiBujro2ohr5+Z/hZWHESLz3g08BBdrdLMieYFULJO+tWc437sn8kQsWLJoZErY8alNhxre9K4p3GURAG11n+w==", + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" @@ -5627,12 +5542,6 @@ "node": ">=0.10.0" } }, - "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/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/package.json b/package.json index 5a0e80e1..e7cc26cb 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "update-icons": "tauri icon backend/icons/icon-source.png", "frontend:build": "tsc && vite build", "frontend:dev": "vite", - "lint": "prettier ./frontend --write && eslint . --ext .ts,.tsx --fix" + "lint": "prettier ./frontend --write && eslint . --fix", + "lint-only": "eslint eslint.config.mjs --fix" }, "prettier": { "useTabs": true, @@ -23,6 +24,9 @@ "node": ">=20.0.0" }, "dependencies": { + "@eslint/compat": "^1.1.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.11.0", "@mantine/code-highlight": "^7.11.0", "@mantine/core": "7.12.2", "@mantine/hooks": "7.12.2", @@ -42,10 +46,11 @@ "@vitejs/plugin-react": "^4.3.1", "cross-env": "^7.0.3", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-hooks": "5.1.0-rc-fb9a90fa48-20240614", "eslint-plugin-react-refresh": "0.4.12", "eslint-plugin-react": "7.36.1", - "eslint": "8.57.1", + "eslint": "9.11.0", + "globals": "^15.9.0", "jotai": "2.10.0", "postcss-preset-mantine": "^1.15.0", "postcss-simple-vars": "^7.0.1", From b35236557654b55374a03adc125e5d6c4d65585d Mon Sep 17 00:00:00 2001 From: Raicuparta Date: Sun, 22 Sep 2024 16:11:21 +0200 Subject: [PATCH 247/255] workaround for broken links --- backend/Cargo.lock | 43 +------------- backend/Cargo.toml | 1 + backend/core/Cargo.toml | 2 +- backend/tauri-app/Cargo.toml | 2 +- backend/tauri-app/capabilities/main.json | 3 +- backend/tauri-app/src/main.rs | 21 +++++-- backend/tauri-app/tauri.conf.json | 2 +- frontend/api/bindings.ts | 56 +++++++++++-------- .../components/thanks/thanks-link-button.tsx | 9 +++ package-lock.json | 10 ---- package.json | 1 - 11 files changed, 64 insertions(+), 86 deletions(-) diff --git a/backend/Cargo.lock b/backend/Cargo.lock index ff217b65..88374da4 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2902,16 +2902,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "os_pipe" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "overload" version = "0.1.1" @@ -3492,6 +3482,7 @@ name = "rai-pal-tauri" version = "0.13.0" dependencies = [ "log", + "open", "rai-pal-core", "rai-pal-proc-macros", "serde", @@ -3502,7 +3493,6 @@ dependencies = [ "tauri-build", "tauri-plugin-dialog", "tauri-plugin-log", - "tauri-plugin-shell", "tauri-plugin-updater", "tauri-plugin-window-state", "tauri-runtime", @@ -4199,16 +4189,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shared_child" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" -dependencies = [ - "libc", - "windows-sys 0.59.0", -] - [[package]] name = "shlex" version = "1.3.0" @@ -4792,27 +4772,6 @@ dependencies = [ "time", ] -[[package]] -name = "tauri-plugin-shell" -version = "2.0.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e83800ddf78b820172efb5ed7310344e8e4f97fd30cd8237a3f20c12a79eb136" -dependencies = [ - "encoding_rs", - "log", - "open", - "os_pipe", - "regex", - "schemars", - "serde", - "serde_json", - "shared_child", - "tauri", - "tauri-plugin", - "thiserror", - "tokio", -] - [[package]] name = "tauri-plugin-updater" version = "2.0.0-rc.3" diff --git a/backend/Cargo.toml b/backend/Cargo.toml index f8f9a95d..9cbcb398 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -18,6 +18,7 @@ serde_json = "1.0.128" specta = "2.0.0-rc" tauri-specta = { version = "2.0.0-rc.20", features = ["derive", "typescript"] } thiserror = "1.0.63" +open = "5.0.0" [profile.release] codegen-units = 1 diff --git a/backend/core/Cargo.toml b/backend/core/Cargo.toml index d7ce8872..0b6a4f33 100644 --- a/backend/core/Cargo.toml +++ b/backend/core/Cargo.toml @@ -12,6 +12,7 @@ serde_json.workspace = true serde.workspace = true specta.workspace = true thiserror.workspace = true +open.workspace = true base64 = "0.22.1" byteorder = "1.5.0" @@ -31,7 +32,6 @@ serde_urlencoded = "0.7.1" steamlocate = "2.0.0-beta.2" uuid = { version = "1.8.0", features = ["v4"] } zip = { version = "2.1.6", default-features = false, features = ["deflate"] } -open = "5.0.0" [target.'cfg(target_os = "windows")'.dependencies] winapi = { version = "0.3.9", features = ["winuser"] } diff --git a/backend/tauri-app/Cargo.toml b/backend/tauri-app/Cargo.toml index 6c6e7666..64bc431c 100644 --- a/backend/tauri-app/Cargo.toml +++ b/backend/tauri-app/Cargo.toml @@ -15,12 +15,12 @@ serde.workspace = true specta.workspace = true tauri-specta.workspace = true thiserror.workspace = true +open.workspace = true specta-typescript = "0.0.7" tauri = { version = "=2.0.0-rc.15", features = [] } tauri-plugin-dialog = "2.0.0-rc" tauri-plugin-log = "2.0.0-rc" -tauri-plugin-shell = "2.0.0-rc" tauri-plugin-updater = "2.0.0-rc" tauri-plugin-window-state = "2.0.0-rc" tauri-runtime = "2.0.0-rc" diff --git a/backend/tauri-app/capabilities/main.json b/backend/tauri-app/capabilities/main.json index 8959afb5..0b9507f6 100644 --- a/backend/tauri-app/capabilities/main.json +++ b/backend/tauri-app/capabilities/main.json @@ -11,7 +11,6 @@ "core:resources:default", "dialog:allow-open", "dialog:allow-ask", - "updater:allow-check", - "shell:default" + "updater:allow-check" ] } diff --git a/backend/tauri-app/src/main.rs b/backend/tauri-app/src/main.rs index b90797c9..8288eb56 100644 --- a/backend/tauri-app/src/main.rs +++ b/backend/tauri-app/src/main.rs @@ -565,6 +565,19 @@ async fn get_provider_data(handle: AppHandle, provider_id: ProviderId) -> Result }) } +#[tauri::command] +#[specta::specta] +async fn open_url(url: String) -> Result { + // TODO: I only need this because there's some bug with the tauri shell plugin. + // Without the shell plugin, clicking a link opens the url in another tauri window (which I don't want). + // With the shell plugin, clicking a link does open the url in the default browser, + // but also makes the Tauri app become unresponsive. + // Opening it manually like this seems to work fine though, so this is what I'm doing for now. + // Once that bug is fixed, I can just use the shell plugin and remove this command. + open::that_detached(url).unwrap(); + Ok(()) +} + #[tauri::command] #[specta::specta] async fn clear_cache() -> Result { @@ -586,13 +599,16 @@ fn main() { let builder = Builder::::new() .commands(tauri_specta::collect_commands![ add_game, + clear_cache, configure_mod, delete_mod, delete_steam_appinfo_cache, download_mod, + fetch_remote_games, frontend_ready, get_local_mods, get_mod_loaders, + get_provider_data, get_provider_games, get_provider_ids, get_remote_mods, @@ -604,6 +620,7 @@ fn main() { open_mod_folder, open_mod_loader_folder, open_mods_folder, + open_url, refresh_game, remove_game, run_provider_command, @@ -613,16 +630,12 @@ fn main() { uninstall_all_mods, uninstall_mod, update_local_mods, - fetch_remote_games, - get_provider_data, - clear_cache, ]) .events(events::collect_events()); typescript::export(&builder); tauri::Builder::default() - .plugin(tauri_plugin_shell::init()) .plugin( tauri_plugin_window_state::Builder::default() .with_state_flags(StateFlags::POSITION | StateFlags::SIZE) diff --git a/backend/tauri-app/tauri.conf.json b/backend/tauri-app/tauri.conf.json index a71b8821..de0e2635 100644 --- a/backend/tauri-app/tauri.conf.json +++ b/backend/tauri-app/tauri.conf.json @@ -1,5 +1,5 @@ { - "$schema": "../../node_modules/@tauri-apps/cli/schema.json", + "$schema": "../../node_modules/@tauri-apps/cli/config.schema.json", "build": { "beforeDevCommand": "npm run frontend:dev", "beforeBuildCommand": "npm run frontend:build", diff --git a/frontend/api/bindings.ts b/frontend/api/bindings.ts index 9af68468..9d56c86d 100644 --- a/frontend/api/bindings.ts +++ b/frontend/api/bindings.ts @@ -13,6 +13,14 @@ async addGame(path: string) : Promise> { else return { status: "error", error: e as any }; } }, +async clearCache() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("clear_cache") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, async configureMod(installedGame: InstalledGame, modId: string) : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("configure_mod", { installedGame, modId }) }; @@ -45,6 +53,14 @@ async downloadMod(modId: string) : Promise> { else return { status: "error", error: e as any }; } }, +async fetchRemoteGames() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("fetch_remote_games") }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, async frontendReady() : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("frontend_ready") }; @@ -69,6 +85,14 @@ async getModLoaders() : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("get_provider_data", { providerId }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, async getProviderGames(providerId: ProviderId) : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("get_provider_games", { providerId }) }; @@ -157,6 +181,14 @@ async openModsFolder() : Promise> { else return { status: "error", error: e as any }; } }, +async openUrl(url: string) : Promise> { + try { + return { status: "ok", data: await TAURI_INVOKE("open_url", { url }) }; +} catch (e) { + if(e instanceof Error) throw e; + else return { status: "error", error: e as any }; +} +}, async refreshGame(installedGame: InstalledGame) : Promise> { try { return { status: "ok", data: await TAURI_INVOKE("refresh_game", { installedGame }) }; @@ -228,30 +260,6 @@ async updateLocalMods() : Promise> { if(e instanceof Error) throw e; else return { status: "error", error: e as any }; } -}, -async fetchRemoteGames() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("fetch_remote_games") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async getProviderData(providerId: ProviderId) : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("get_provider_data", { providerId }) }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} -}, -async clearCache() : Promise> { - try { - return { status: "ok", data: await TAURI_INVOKE("clear_cache") }; -} catch (e) { - if(e instanceof Error) throw e; - else return { status: "error", error: e as any }; -} } } diff --git a/frontend/components/thanks/thanks-link-button.tsx b/frontend/components/thanks/thanks-link-button.tsx index 52f2c1c5..eb6f57df 100644 --- a/frontend/components/thanks/thanks-link-button.tsx +++ b/frontend/components/thanks/thanks-link-button.tsx @@ -1,10 +1,18 @@ import { Button, ButtonProps } from "@mantine/core"; import styles from "./thanks.module.css"; +import { commands } from "@api/bindings"; interface Props extends ButtonProps { readonly href: string; } +function handleClick(event: React.MouseEvent) { + event.preventDefault(); + // TODO: check the open_url command on the backend, + // there's a comment there explaining why this is needed. + commands.openUrl(event.currentTarget.href); +} + export function ThanksLinkButton(props: Props) { return (