From 046118c6af3bad1aa5fa11533f8148c1d4344477 Mon Sep 17 00:00:00 2001 From: Pauline Date: Sun, 14 Jul 2024 18:17:26 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix:=20idk?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Cargo.toml | 6 +- apps/desktop/package.json | 2 +- crates/core/src/api/cluster/create.rs | 7 +- crates/core/src/api/cluster/mod.rs | 6 +- crates/core/src/api/metadata.rs | 42 ++++---- crates/core/src/game/metadata.rs | 18 +++- crates/core/src/game/mod.rs | 11 +- crates/core/src/store/metadata.rs | 113 +++++++++----------- package.json | 2 +- packages/client/package.json | 2 +- packages/scripts/package.json | 2 +- pnpm-lock.yaml | 147 ++++++++++++++++++-------- 12 files changed, 197 insertions(+), 161 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7419b226..aa76db9e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,13 +39,13 @@ tauri-plugin-updater = { version = "2.0.0-beta", features = [ "rustls-tls" ] } # rspc is updated on the v0.x branch rspc = { git = "https://github.com/oscartbeaumont/rspc", rev = "9e56e7f5161043f1834594e38bb2bdcdb485d57a", features = [ "specta2" ] } # specta is updated on the main branch -specta = { git = "https://github.com/oscartbeaumont/specta", rev = "13fd87c6a1e5c64f296ff76f113314ed6a3fe685", features = [ +specta = { git = "https://github.com/oscartbeaumont/specta", rev = "d13ce97b70766c2681b63c80daf431c2bf4d255c", features = [ "chrono", "uuid", "serde", "serde_json", - "derive", - "function" + # "derive", + # "function", ] } # tauri-specta is updated via crates.io tauri-specta = { git = "https://github.com/oscartbeaumont/tauri-specta", rev = "a49885967adc01c80e33962e3ecac25fe7497839", features = [ diff --git a/apps/desktop/package.json b/apps/desktop/package.json index 93bf9422..b6bc8330 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -20,7 +20,7 @@ "@leeoniya/ufuzzy": "^1.0.14", "@onelauncher/client": "workspace:*", "@rspc/client": "^0.2.3", - "@rspc/solid": "^0.2.1", + "@rspc/solid-query": "^0.2.3", "@rspc/tauri": "^0.2.0", "@solid-primitives/refs": "^1.0.8", "@solidjs/router": "^0.14.1", diff --git a/crates/core/src/api/cluster/create.rs b/crates/core/src/api/cluster/create.rs index 73c55e8b..718e4730 100644 --- a/crates/core/src/api/cluster/create.rs +++ b/crates/core/src/api/cluster/create.rs @@ -7,7 +7,6 @@ use crate::proxy::ClusterPayloadType; pub use crate::store::{Cluster, ClusterPath, JavaOptions, PackageData, State}; use crate::utils::io::{self, canonicalize}; use crate::{cluster, package}; -use anyhow::anyhow; use interpulse::api::modded::LoaderVersion; use std::path::PathBuf; @@ -223,13 +222,11 @@ pub(crate) async fn get_loader_version( Loader::Fabric => &metadata.fabric, Loader::Quilt => &metadata.quilt, Loader::NeoForge => &metadata.neoforge, - Loader::LegacyFabric => &metadata.legacy_fabric, + // Loader::LegacyFabric => &metadata.legacy_fabric, _ => return Err(CreateClusterError::MissingManifest(loader.to_string()).into()), }; - let loader_meta = loader_meta - .to_owned() - .ok_or(anyhow!("missing loader meta"))?; + let loader_meta = loader_meta.to_owned(); let loaders = &loader_meta .game_versions diff --git a/crates/core/src/api/cluster/mod.rs b/crates/core/src/api/cluster/mod.rs index 61de6439..6e8e1e84 100644 --- a/crates/core/src/api/cluster/mod.rs +++ b/crates/core/src/api/cluster/mod.rs @@ -19,7 +19,6 @@ use std::future::Future; use std::path::{Path, PathBuf}; use std::sync::Arc; -use anyhow::anyhow; use tokio::process::Command; use tokio::sync::RwLock; @@ -312,10 +311,7 @@ pub async fn get_optimal_java_version(path: &ClusterPath) -> crate::Result crate::Result { .read() .await .minecraft - .clone() - .ok_or(anyhow!("missing minecraft metadata"))?; + .clone(); Ok(meta) } @@ -29,8 +27,7 @@ pub async fn get_fabric_versions() -> crate::Result { .read() .await .fabric - .clone() - .ok_or(anyhow!("missing fabric metadata"))?; + .clone(); Ok(meta) } @@ -44,8 +41,7 @@ pub async fn get_quilt_versions() -> crate::Result { .read() .await .quilt - .clone() - .ok_or(anyhow!("missing quilt metadata"))?; + .clone(); Ok(meta) } @@ -59,8 +55,7 @@ pub async fn get_forge_versions() -> crate::Result { .read() .await .forge - .clone() - .ok_or(anyhow!("missing forge metadata"))?; + .clone(); Ok(meta) } @@ -74,23 +69,22 @@ pub async fn get_neoforge_versions() -> crate::Result { .read() .await .neoforge - .clone() - .ok_or(anyhow!("missing neoforce metadata"))?; + .clone(); Ok(meta) } -/// Get a [`Manifest`] for all available Legacy Fabric versions. -#[tracing::instrument] -pub async fn get_legacy_fabric_versions() -> crate::Result { - let state = State::get().await?; - let meta = state - .metadata - .read() - .await - .legacy_fabric - .clone() - .ok_or(anyhow!("missing legacyfabric metadata"))?; +// /// Get a [`Manifest`] for all available Legacy Fabric versions. +// #[tracing::instrument] +// pub async fn get_legacy_fabric_versions() -> crate::Result { +// let state = State::get().await?; +// let meta = state +// .metadata +// .read() +// .await +// .legacy_fabric +// .clone() +// .ok_or(anyhow!("missing legacyfabric metadata"))?; - Ok(meta) -} +// Ok(meta) +// } diff --git a/crates/core/src/game/metadata.rs b/crates/core/src/game/metadata.rs index cccf2f46..9e33eafe 100644 --- a/crates/core/src/game/metadata.rs +++ b/crates/core/src/game/metadata.rs @@ -75,10 +75,10 @@ pub async fn download_version_info( "downloading minecraft version info for minecraft version {}", &version_id ); - let mut info = ip::api::minecraft::fetch_version_info(version).await?; + let mut info = fetch_version_info(version, &st.fetch_semaphore).await?; if let Some(loader) = loader { - let partial = ip::api::modded::fetch_partial_version(&loader.url).await?; + let partial = fetch_partial_version(&loader.url, &st.fetch_semaphore).await?; info = ip::api::modded::merge_partial_version(partial, info); } @@ -96,6 +96,14 @@ pub async fn download_version_info( Ok(result) } +pub async fn fetch_version_info(version: &ip::api::minecraft::Version, semaphore: &FetchSemaphore) -> crate::Result { + Ok(serde_json::from_slice(&fetch(&version.url, Some(&version.sha1), semaphore).await?)?) +} + +pub async fn fetch_partial_version(url: &str, semaphore: &FetchSemaphore) -> crate::Result { + Ok(serde_json::from_slice(&fetch(url, None, semaphore).await?)?) +} + #[tracing::instrument(skip_all)] #[onelauncher_debug::debugger] pub async fn download_assets_index( @@ -117,7 +125,7 @@ pub async fn download_assets_index( .await .and_then(|ref it| Ok(serde_json::from_slice(it)?)) } else { - let index = ip::api::minecraft::fetch_assets_index(version).await?; + let index = fetch_assets_index(version, &st.fetch_semaphore).await?; write(&path, &serde_json::to_vec(&index)?, &st.io_semaphore).await?; tracing::info!("downloaded assets index"); Ok(index) @@ -131,6 +139,10 @@ pub async fn download_assets_index( Ok(result) } +pub async fn fetch_assets_index(version: &ip::api::minecraft::VersionInfo, semaphore: &FetchSemaphore) -> crate::Result { + Ok(serde_json::from_slice(&fetch(&version.asset_index.url, Some(&version.asset_index.sha1), semaphore).await?)?) +} + #[tracing::instrument(skip(st, index))] #[onelauncher_debug::debugger] pub async fn download_assets( diff --git a/crates/core/src/game/mod.rs b/crates/core/src/game/mod.rs index 47329578..1e1c51e0 100644 --- a/crates/core/src/game/mod.rs +++ b/crates/core/src/game/mod.rs @@ -11,7 +11,6 @@ use crate::store::{ }; use crate::utils::io::{self, IOError}; -use anyhow::anyhow; use chrono::Utc; use interpulse as ip; use interpulse::api::minecraft::{RuleAction, VersionInfo}; @@ -72,10 +71,7 @@ pub async fn install_minecraft( let instance_path = &io::canonicalize(cluster.get_full_path().await?)?; let metadata = state.metadata.read().await; - let version_manifest = metadata - .minecraft - .to_owned() - .ok_or(anyhow!("missing metadata"))?; + let version_manifest = metadata.minecraft.to_owned(); let version_idx = version_manifest .versions @@ -277,10 +273,7 @@ pub async fn launch_minecraft( let instance_path = cluster.get_full_path().await?; let instance_path = &io::canonicalize(instance_path)?; - let version_manifest = metadata - .minecraft - .to_owned() - .ok_or(anyhow!("missing minecraft metadata"))?; + let version_manifest = metadata.minecraft.to_owned(); let version_index = version_manifest .versions diff --git a/crates/core/src/store/metadata.rs b/crates/core/src/store/metadata.rs index 64deb2e6..6ecf3074 100644 --- a/crates/core/src/store/metadata.rs +++ b/crates/core/src/store/metadata.rs @@ -1,96 +1,73 @@ //! Handles fetching metadata via interpulse. -use interpulse::api::minecraft::{ - // fetch_version_manifest, - VersionManifest as MinecraftManifest -}; -use interpulse::api::modded::{ - // fetch_manifest as fetch_modded_manifest, - Manifest as ModdedManifest, -}; +use interpulse::api::minecraft::VersionManifest as MinecraftManifest; +use interpulse::api::modded::Manifest as ModdedManifest; use serde::{Deserialize, Serialize}; -use crate::utils::http::{read_json, write, IoSemaphore}; +use crate::utils::http::{fetch, read_json, write, FetchSemaphore, IoSemaphore}; use crate::utils::io::copy; use crate::State; use super::Directories; -/// The metadata url used in production. -#[cfg(not(debug_assertions))] +/// The metadata url. const METADATA_URL: &str = "https://meta.polyfrost.org"; -/// The metadata url used in development. -#[cfg(debug_assertions)] -const METADATA_URL: &str = "localhost:5543"; - /// A structure of manifests and metadata fetching utilities. #[derive(Serialize, Deserialize, Debug, Clone)] pub struct Metadata { /// The [`MinecraftManifest`] associated with core Minecraft versions. - pub minecraft: Option, + pub minecraft: MinecraftManifest, /// The [`ModdedManifest`] associated with core Fabric versions. - pub fabric: Option, + pub fabric: ModdedManifest, /// The [`ModdedManifest`] associated with core Quilt versions. - pub quilt: Option, + pub quilt: ModdedManifest, /// The [`ModdedManifest`] associated with core NeoForge versions. - pub neoforge: Option, + pub neoforge: ModdedManifest, /// The [`ModdedManifest`] associated with core Forge versions. - pub forge: Option, - /// The [`ModdedManifest`] associated with core Legacy Fabric versions. - pub legacy_fabric: Option, + pub forge: ModdedManifest, + // /// The [`ModdedManifest`] associated with core Legacy Fabric versions. + // pub legacy_fabric: Option, } impl Metadata { /// Get the formatted manifest for a specific [`Metadata`] type. - fn get_manifest(name: &str) -> String { - format!("{METADATA_URL}/{name}/v0/manifest.json") + fn get_manifest(name: &str, version: usize) -> String { + format!("{METADATA_URL}/{name}/{version}/manifest.json") } /// Fetch all available metadata types and get a new [`Metadata`] structure. pub async fn fetch() -> crate::Result { - // let (minecraft, fabric, quilt, neoforge, forge, legacy_fabric) = tokio::try_join! { - // async { - // let url = Self::get_manifest("minecraft"); - // fetch_version_manifest(Some(&url)).await - // }, - // async { - // let url = Self::get_manifest("fabric"); - // fetch_modded_manifest(&url).await - // }, - // async { - // let url = Self::get_manifest("quilt"); - // fetch_modded_manifest(&url).await - // }, - // async { - // let url = Self::get_manifest("neo"); - // fetch_modded_manifest(&url).await - // }, - // async { - // let url = Self::get_manifest("forge"); - // fetch_modded_manifest(&url).await - // }, - // async { - // let url = Self::get_manifest("legacy-fabric"); - // fetch_modded_manifest(&url).await - // }, - // }?; + let semaphore = &State::get().await?.fetch_semaphore; + let (minecraft, fabric, quilt, neoforge, forge) = tokio::try_join! { + async { + let url = Self::get_manifest("minecraft", interpulse::api::minecraft::CURRENT_FORMAT_VERSION); + fetch_version_manifest(Some(&url), semaphore).await + }, + async { + let url = Self::get_manifest("fabric", interpulse::api::modded::CURRENT_FABRIC_FORMAT_VERSION); + fetch_modded_manifest(&url, semaphore).await + }, + async { + let url = Self::get_manifest("quilt", interpulse::api::modded::CURRENT_QUILT_FORMAT_VERSION); + fetch_modded_manifest(&url, &semaphore).await + }, + async { + let url = Self::get_manifest("neo", interpulse::api::modded::CURRENT_NEOFORGE_FORMAT_VERSION); + fetch_modded_manifest(&url, &semaphore).await + }, + async { + let url = Self::get_manifest("forge", interpulse::api::modded::CURRENT_FORGE_FORMAT_VERSION); + fetch_modded_manifest(&url, &semaphore).await + }, + }?; - // Ok(Self { - // minecraft, - // fabric, - // quilt, - // neoforge, - // forge, - // legacy_fabric, - // }) Ok(Self { - minecraft: None, - fabric: None, - quilt: None, - neoforge: None, - forge: None, - legacy_fabric: None, + minecraft, + fabric, + quilt, + neoforge, + forge, }) } @@ -187,3 +164,11 @@ impl Metadata { }; } } + +async fn fetch_version_manifest(url: Option<&str>, semaphore: &FetchSemaphore) -> crate::Result { + Ok(serde_json::from_slice(&fetch(url.unwrap_or(interpulse::api::minecraft::VERSION_MANIFEST_URL), None, semaphore).await?)?) +} + +async fn fetch_modded_manifest(url: &str, semaphore: &FetchSemaphore) -> crate::Result { + Ok(serde_json::from_slice(&fetch(url, None, semaphore).await?)?) +} diff --git a/package.json b/package.json index cee6a078..908204e5 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "release:node": "pnpm bumpp -r" }, "devDependencies": { - "@flowr/eslint-config": "^3.8.6", + "@flowr/eslint-config": "^3.8.7", "@types/node": "^20.14.10", "@vitest/ui": "^2.0.2", "bumpp": "^9.4.1", diff --git a/packages/client/package.json b/packages/client/package.json index ad766512..d65c859d 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -15,7 +15,7 @@ "types": "./src/index.ts", "dependencies": { "@rspc/client": "^0.2.3", - "@rspc/solid": "^0.2.1", + "@rspc/solid-query": "^0.2.3", "@rspc/tauri": "^0.2.0", "@solid-primitives/deep": "^0.2.9", "@tanstack/solid-query": "^5.51.2", diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 32aa28b4..20b4b1ea 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -17,7 +17,7 @@ "tauri": "tsx tauri.ts" }, "dependencies": { - "@flowr/utils": "^3.8.6", + "@flowr/utils": "^3.8.7", "@iarna/toml": "^2.2.5", "execa": "^9.3.0", "semver": "^7.6.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c5cff727..7622b9af 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@flowr/eslint-config': - specifier: ^3.8.6 - version: 3.8.6(@unocss/eslint-plugin@0.61.3(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-vue@9.27.0(eslint@9.7.0))(eslint-processor-vue-blocks@0.1.2(eslint@9.7.0))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.0.2(@types/node@20.14.10)(@vitest/ui@2.0.2)(jsdom@24.1.0)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0)) + specifier: ^3.8.7 + version: 3.8.7(@unocss/eslint-plugin@0.61.3(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-vue@9.27.0(eslint@9.7.0))(eslint-processor-vue-blocks@0.1.2(eslint@9.7.0))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.0.2(@types/node@20.14.10)(@vitest/ui@2.0.2)(jsdom@24.1.0)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0)) '@types/node': specifier: ^20.14.10 version: 20.14.10 @@ -59,9 +59,9 @@ importers: '@rspc/client': specifier: ^0.2.3 version: 0.2.3 - '@rspc/solid': - specifier: ^0.2.1 - version: 0.2.1(@tanstack/solid-query@5.51.2(solid-js@1.8.18))(solid-js@1.8.18) + '@rspc/solid-query': + specifier: ^0.2.3 + version: 0.2.3(@tanstack/solid-query@5.51.2(solid-js@1.8.18))(solid-js@1.8.18) '@rspc/tauri': specifier: ^0.2.0 version: 0.2.0(@tauri-apps/api@2.0.0-beta.14) @@ -144,9 +144,9 @@ importers: '@rspc/client': specifier: ^0.2.3 version: 0.2.3 - '@rspc/solid': - specifier: ^0.2.1 - version: 0.2.1(@tanstack/solid-query@5.51.2(solid-js@1.8.18))(solid-js@1.8.18) + '@rspc/solid-query': + specifier: ^0.2.3 + version: 0.2.3(@tanstack/solid-query@5.51.2(solid-js@1.8.18))(solid-js@1.8.18) '@rspc/tauri': specifier: ^0.2.0 version: 0.2.0(@tauri-apps/api@2.0.0-beta.15) @@ -172,8 +172,8 @@ importers: packages/scripts: dependencies: '@flowr/utils': - specifier: ^3.8.6 - version: 3.8.6 + specifier: ^3.8.7 + version: 3.8.7 '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 @@ -559,8 +559,8 @@ packages: resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@flowr/eslint-config@3.8.6': - resolution: {integrity: sha512-ZLUIShis4QuuBh5nkUlgYsjGxAQjMo7b7dd5L78b0jmSwlCuquFtYyt0OJTzFYgSDzmYaoXkWKNSOaPq8aO+/Q==} + '@flowr/eslint-config@3.8.7': + resolution: {integrity: sha512-OE/lqaN8MSuEsCpWnRvOkTWgpGO+1rQKhmfKEDFV/f+AXUgzdBQqkjxtIQ1xqBG/sOEYwnQAKrFZvopWoFiy6A==} engines: {node: '>=20'} peerDependencies: '@eslint-react/eslint-plugin': ^1.5.8 @@ -617,8 +617,8 @@ packages: vue-eslint-parser: optional: true - '@flowr/utils@3.8.6': - resolution: {integrity: sha512-yszQHaoJBHU9vaAK5cOgSZrDRi9QEyWdGNpbSP7jCYlAWa4rBeH6Y1en59y3uNnssm8FJcSM1KS9Bx83lK2wgA==} + '@flowr/utils@3.8.7': + resolution: {integrity: sha512-MLkaK/+wRSp9GrkwE6QE/ilUeYfWTl+6Satp2UQYeb+o1nMuRvCqYeqdVc0xtbdkAubi7YYKL1XMRFcQphpexg==} engines: {node: '>=20'} '@fontsource/poppins@5.0.14': @@ -786,20 +786,16 @@ packages: '@rspc/client@0.2.0': resolution: {integrity: sha512-IIOfAk4g+bzbfr3cmvm42EocsjtzMO9CRCc95ZMx9mFh5ixHzP4Na1lun+KipGzsFV1QsmV6uYSBg/4Kpnu9iA==} - '@rspc/client@0.2.1': - resolution: {integrity: sha512-sbZfaddxuK0Cwm65H+PeipB9QUCjkLSGWuZ1WE3Lqca7P0tEH1721kOfaS+7iJCkJ+RoVHy6hnVeus/TRc6hwA==} - '@rspc/client@0.2.3': resolution: {integrity: sha512-1TfoETE2Tt6vHCwcsu1YVNqStq7z0p6mgsMZxardNwMRBDGnpRMdOxU8Aj0ZmIRGEw1R38SXXlxqk5XeHs+mqQ==} - '@rspc/query-core@0.2.1': - resolution: {integrity: sha512-AQQHeQIddhRCVV1+VOGFpnLKuR7wVZnZMOr1V2QKoI6xHE3XJC55uWGQky45VOQZBH7cXwZuiZ0tAF4ao7RyUA==} + '@rspc/query-core@0.2.3': + resolution: {integrity: sha512-IvaWGlQNw5gVVTKPz5nhmtzFXA9MpJI7fWZsDSI8o4Z/5zpF1lrUcZIrDloqO1iQPJ76EgmtntUwa52VqvcqrA==} peerDependencies: - '@rspc/client': 0.2.1 + '@rspc/client': 0.2.3 - '@rspc/solid@0.2.1': - resolution: {integrity: sha512-Xcc4wUyM0iOmEvc3QfFv4snjwJi3dJPpyBkEBcb12VDmSAUcJAY5/n541wn77U6AGbpqRAbD0OQ1vtVFjGumUw==} - deprecated: Please use @rspc/solid-query + '@rspc/solid-query@0.2.3': + resolution: {integrity: sha512-S+UFwTf5BTeJgWLmiifQLDfVauIGRlTbk7tipd4knuDxrUXPTIyUHVUrPlZMdPTU+HLF4UZBe726jdhh6Q+Mug==} peerDependencies: '@tanstack/solid-query': ^5.0.0 solid-js: ^1.0.0 @@ -1102,6 +1098,10 @@ packages: resolution: {integrity: sha512-iNxuQ0TMVfFiMJ2al4bGd/mY9+aLtBxnHfo7B2xoVzR6cRFgUdBLlMa//MSIjSmVRpCEqNLQnkxpJb96tFG+xw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.0.0-alpha.42': + resolution: {integrity: sha512-3nS6VEzxUPEMvqadRaGkjZuL+fsjNf5lCYbvS0IQYzqJl7338yhxvPCraHmXe/xlB08p+5BAd6JYAbkTeSXxJw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/type-utils@8.0.0-alpha.41': resolution: {integrity: sha512-+QIA1z/jrox6bbvqlyqBQjotpevieLTycfiuoKuqGcKoskFZV5Rma51BV8LCJacnOafwJtSi+7b8zDo8OsXUvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1119,6 +1119,10 @@ packages: resolution: {integrity: sha512-n0P2FP3YC3pD3yoiCf4lHqbUP45xlnOk8HkjB+LtKSUZZWLLJ8k1ZXZtQj7MEX22tytCMj//Bmq403xFuCwfIg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.0.0-alpha.42': + resolution: {integrity: sha512-cvfuxLiSVi6EfsgE/1A07JD67pnv+Grf9YMhGAKUsokIvsMcusLSI1h2On6qoyZghJuFXkH3hiMsg7DtxZBtsw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@7.16.0': resolution: {integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1137,6 +1141,15 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@8.0.0-alpha.42': + resolution: {integrity: sha512-rIHLylSgsfY5hTE68hd8UXcacZxOq4DWAitRKF8xs33hEBDyxInj4FtUglYU420HvFqyVFtVdB7WEFY4cFQ+iA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/utils@7.16.0': resolution: {integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1149,6 +1162,12 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/utils@8.0.0-alpha.42': + resolution: {integrity: sha512-ousp9L07jDosMqnayZNF8QOJB2FDZP7lSN2lUI7BknV5B1beUoPizWZl0yDHxrk64ldZu5JoqkhAbOcbPNJu5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/visitor-keys@7.16.0': resolution: {integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==} engines: {node: ^18.18.0 || >=20.0.0} @@ -1157,6 +1176,10 @@ packages: resolution: {integrity: sha512-uetCAUBVC+YarBdZnWzDDgX11PpAEGV8Cw31I3d1xNrhx6/bJGThKX+holEmd3amMdnr4w/XUKH/4YuQOgtjDA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.0.0-alpha.42': + resolution: {integrity: sha512-Bf/BObckzDnCS9AslkTsuH1vU+h4rppUrmPbTbhGlPurmss6Lt/Ft9H8vQ8wXeN8rk0drRhML2Feo6aODLeKdA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@unocss/astro@0.61.3': resolution: {integrity: sha512-VTgO+nm7PW7/VJt1kf1/4qTqMp4X4CdNG1XjYRGmCTONW+yHhFUEC1NAXt7t2wKEvCYSf5ObmjYowr2qM+GafQ==} peerDependencies: @@ -1736,8 +1759,8 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-petal@3.8.6: - resolution: {integrity: sha512-Hb69JOW6n2flEzI1o6BwVlmxZzDg5Omkz515A2kPaAzV3VTOdRTIBGjYqFpGuE5ZBD/sMjdWHlNwfEUansO5EQ==} + eslint-plugin-petal@3.8.7: + resolution: {integrity: sha512-3TNPJOwA3+5iHoVoZgcfgDBMRW8P3ma4WAXSr2Ct83Pgdd2Ym/lqYDw+HymD8zE5o9LcVdo2b7M/SfrWfbd6CA==} engines: {node: '>=20'} peerDependencies: eslint: '*' @@ -2841,8 +2864,8 @@ packages: resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} engines: {node: '>=12.20'} - synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} tapable@2.2.1: @@ -3596,7 +3619,7 @@ snapshots: '@eslint/object-schema@2.1.4': {} - '@flowr/eslint-config@3.8.6(@unocss/eslint-plugin@0.61.3(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-vue@9.27.0(eslint@9.7.0))(eslint-processor-vue-blocks@0.1.2(eslint@9.7.0))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.0.2(@types/node@20.14.10)(@vitest/ui@2.0.2)(jsdom@24.1.0)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0))': + '@flowr/eslint-config@3.8.7(@unocss/eslint-plugin@0.61.3(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.3))(eslint-plugin-vue@9.27.0(eslint@9.7.0))(eslint-processor-vue-blocks@0.1.2(eslint@9.7.0))(eslint@9.7.0)(typescript@5.5.3)(vitest@2.0.2(@types/node@20.14.10)(@vitest/ui@2.0.2)(jsdom@24.1.0)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0))': dependencies: '@antfu/install-pkg': 0.3.3 '@clack/prompts': 0.7.0 @@ -3614,7 +3637,7 @@ snapshots: eslint-plugin-markdown: 5.1.0(eslint@9.7.0) eslint-plugin-n: 17.9.0(eslint@9.7.0) eslint-plugin-perfectionist: 2.11.0(eslint@9.7.0)(typescript@5.5.3)(vue-eslint-parser@9.4.3(eslint@9.7.0)) - eslint-plugin-petal: 3.8.6(eslint@9.7.0) + eslint-plugin-petal: 3.8.7(eslint@9.7.0) eslint-plugin-regexp: 2.6.0(eslint@9.7.0) eslint-plugin-toml: 0.11.1(eslint@9.7.0) eslint-plugin-unicorn: 54.0.0(eslint@9.7.0) @@ -3640,7 +3663,7 @@ snapshots: - typescript - vitest - '@flowr/utils@3.8.6': {} + '@flowr/utils@3.8.7': {} '@fontsource/poppins@5.0.14': {} @@ -3775,19 +3798,17 @@ snapshots: '@rspc/client@0.2.0': {} - '@rspc/client@0.2.1': {} - '@rspc/client@0.2.3': {} - '@rspc/query-core@0.2.1(@rspc/client@0.2.1)': + '@rspc/query-core@0.2.3(@rspc/client@0.2.3)': dependencies: - '@rspc/client': 0.2.1 + '@rspc/client': 0.2.3 '@tanstack/query-core': 5.51.1 - '@rspc/solid@0.2.1(@tanstack/solid-query@5.51.2(solid-js@1.8.18))(solid-js@1.8.18)': + '@rspc/solid-query@0.2.3(@tanstack/solid-query@5.51.2(solid-js@1.8.18))(solid-js@1.8.18)': dependencies: - '@rspc/client': 0.2.1 - '@rspc/query-core': 0.2.1(@rspc/client@0.2.1) + '@rspc/client': 0.2.3 + '@rspc/query-core': 0.2.3(@rspc/client@0.2.3) '@tanstack/solid-query': 5.51.2(solid-js@1.8.18) solid-js: 1.8.18 @@ -3865,7 +3886,7 @@ snapshots: '@stylistic/eslint-plugin-plus@2.6.0-beta.0(eslint@9.7.0)(typescript@5.5.3)': dependencies: '@types/eslint': 8.56.10 - '@typescript-eslint/utils': 8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.3) + '@typescript-eslint/utils': 8.0.0-alpha.42(eslint@9.7.0)(typescript@5.5.3) eslint: 9.7.0 transitivePeerDependencies: - supports-color @@ -3875,7 +3896,7 @@ snapshots: dependencies: '@stylistic/eslint-plugin-js': 2.6.0-beta.0(eslint@9.7.0) '@types/eslint': 8.56.10 - '@typescript-eslint/utils': 8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.3) + '@typescript-eslint/utils': 8.0.0-alpha.42(eslint@9.7.0)(typescript@5.5.3) eslint: 9.7.0 transitivePeerDependencies: - supports-color @@ -4086,6 +4107,11 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.41 '@typescript-eslint/visitor-keys': 8.0.0-alpha.41 + '@typescript-eslint/scope-manager@8.0.0-alpha.42': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.42 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.42 + '@typescript-eslint/type-utils@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.3)': dependencies: '@typescript-eslint/typescript-estree': 8.0.0-alpha.41(typescript@5.5.3) @@ -4102,6 +4128,8 @@ snapshots: '@typescript-eslint/types@8.0.0-alpha.41': {} + '@typescript-eslint/types@8.0.0-alpha.42': {} + '@typescript-eslint/typescript-estree@7.16.0(typescript@5.5.3)': dependencies: '@typescript-eslint/types': 7.16.0 @@ -4132,6 +4160,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.0.0-alpha.42(typescript@5.5.3)': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.42 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.42 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.5.3) + optionalDependencies: + typescript: 5.5.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@7.16.0(eslint@9.7.0)(typescript@5.5.3)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.7.0) @@ -4154,6 +4197,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@8.0.0-alpha.42(eslint@9.7.0)(typescript@5.5.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.7.0) + '@typescript-eslint/scope-manager': 8.0.0-alpha.42 + '@typescript-eslint/types': 8.0.0-alpha.42 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.42(typescript@5.5.3) + eslint: 9.7.0 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@7.16.0': dependencies: '@typescript-eslint/types': 7.16.0 @@ -4164,6 +4218,11 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.41 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.0.0-alpha.42': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.42 + eslint-visitor-keys: 3.4.3 + '@unocss/astro@0.61.3(rollup@4.18.1)(vite@5.3.3(@types/node@20.14.10)(sass@1.77.8))': dependencies: '@unocss/core': 0.61.3 @@ -4205,7 +4264,7 @@ snapshots: '@unocss/config': 0.61.3 '@unocss/core': 0.61.3 magic-string: 0.30.10 - synckit: 0.9.0 + synckit: 0.9.1 transitivePeerDependencies: - eslint - supports-color @@ -4821,7 +4880,7 @@ snapshots: parse-imports: 2.1.1 semver: 7.6.2 spdx-expression-parse: 4.0.0 - synckit: 0.9.0 + synckit: 0.9.1 transitivePeerDependencies: - supports-color @@ -4867,9 +4926,9 @@ snapshots: - supports-color - typescript - eslint-plugin-petal@3.8.6(eslint@9.7.0): + eslint-plugin-petal@3.8.7(eslint@9.7.0): dependencies: - '@flowr/utils': 3.8.6 + '@flowr/utils': 3.8.7 eslint: 9.7.0 eslint-plugin-regexp@2.6.0(eslint@9.7.0): @@ -6020,7 +6079,7 @@ snapshots: dependencies: tslib: 2.6.3 - synckit@0.9.0: + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.3