diff --git a/.clippy.toml b/.clippy.toml deleted file mode 100644 index 154626ef..00000000 --- a/.clippy.toml +++ /dev/null @@ -1 +0,0 @@ -allow-unwrap-in-tests = true diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..1405749a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,23 @@ +root = true + +[*] +indent_style = tab +indent_size = 4 +end_of_line = lf +trim_trailing_whitespace = true +insert_final_newline = true + +[*.nix] +indent_style = space +indent_size = 2 + +# Rust +# https://github.com/rust-lang/rust/blob/master/src/doc/style/style/whitespace.md +[*.rs] +indent_size = 4 +insert_final_newline = false +trim_trailing_whitespace = true + +[*.{yaml,yml}] +indent_style = space +indent_size = 2 diff --git a/.envrc b/.envrc deleted file mode 100644 index 3550a30f..00000000 --- a/.envrc +++ /dev/null @@ -1 +0,0 @@ -use flake diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index c6ad26d7..4102e35c 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -26,8 +26,8 @@ All rights reserved. Copyright (C) 2022~2024 Polyfrost This includes, but may not be limited to, the following files: -* [`desktop/.icons/*`](./desktop/.icons/) -* [`desktop/src/assets/licensed/*`](./desktop/src/assets/licensed/) +* [`apps/desktop/.icons/*`](./apps/desktop/.icons/) +* [`apps/desktop/src/assets/licensed/*`](./apps/desktop/src/assets/licensed/) ## Additional Libraries diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..d8eb1911 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,124 @@ +# Contributing to OneLauncher + +Welcome! + +Please read our [Code of Conduct] to keep our community approachable and respectable. + +## New Contributor Guide + +To familiarize yourself with the project, please read the [README]. Here are some resources to help you get started with open-source contributions: + +- [Finding ways to contribute to open-source on GitHub] +- [Setting up Git] +- [GitHub flow] +- [Collaborating with pull requests] +- [Tauri essentials] +- [the `pnpm` CLI] + +## Getting Started + +### Issues + +#### Creating a New Issue + +If you come across an issue or have a feature request for OneLauncher, please [search if a related issue has already been reported]. If no relevant issue exists, you can open a new issue using the appropriate [issue form]. + +#### Solving an Issue + +To find an issue that interests you, you can browse through our [existing issues] and use the available `labels` to narrow down your search (See [Labels] for more information). As a general rule, if you find an issue you want to work on, you are welcome to open a PR with a fix. + +### Making Changes + +#### Making Changes Locally + +This project uses [`Cargo`] and [`pnpm`]. Make ensure you have them installed before proceeding. + +To make changes locally, follow these steps: + +1. Clone the repository: `git clone https://github.com/polyfrost/onelauncher` +2. Navigate to the project directory: `cd onelauncher` +3. Configure your system environment for OneLauncher development: + 1. For Linux users, run: `./packages/scripts/setup.sh` + > The [Unix script] will check if Rust and pnpm are installed then proceed to install Clang, NASM, LLVM, libvips, [Tauri essentials] and any other required dependencies for OneLauncher to build. + 2. For macOS users, run: `./packages/scripts/setup.sh` + > The [Unix script] will check if Rust, pnpm and Xcode are installed and proceed to use Homebrew to install NASM, [Tauri essentials] and install any other required dependencies for OneLauncher to build. + 3. For Windows users, run in PowerShell: `.\packages\scripts\setup.ps1` + > The [Unix script] will install pnpm, LLVM, C++ build tools, NASM, Rust + Cargo, Rust tools, Edge Webview 2, [Tauri essentials] and any other required dependencies for OneLauncher to build. +4. Install dependencies: `pnpm i` +5. Prepare the build: `pnpm prep` (This will run all necessary codegen and build required dependencies) + +To quickly run only the desktop app after `prep`, you can use: + +- `pnpm dev` + + If necessary, the webview devtools can be opened by pressing `Ctrl + Shift + I` (Linux and Windows) or `Command + Option + I` (macOS) in the desktop app. + +If you encounter any issues, ensure that you are using the following versions (or later) of Rust, Node and Pnpm: + +- Rust version: **1.79** +- Node version: **18.18** +- Pnpm version: **9.4.0** + +After cleaning out your build artifacts using `pnpm clean`, `git clean`, or `cargo clean`, it is necessary to re-run the `setup` script. + +After you finish making your changes and committed them to your branch, make sure to execute `pnpm format` to fix any style inconsistency in your code. + +### Pull Request + +Once you have finished making your changes, create a pull request (PR) to submit them. + +- Fill out the template to help reviewers understand your changes and the purpose of your PR. +- If you are addressing an existing issue, don't forget to [link your PR to the issue]. +- Enable the checkbox to [allow maintainer edits] so that the branch can be updated for merging. +- Once you submit your PR, a team member will review your proposal. They may ask questions or request additional information. +- You may be asked to make changes before the PR can be merged, either through [suggested changes] or pull request comments. You can apply suggested changes directly through the UI. For other changes, you can make them in your fork and commit them to your branch. +- As you update your PR and apply changes, [mark each conversation as resolved]. +- If you run into any merge issues, refer to this [git tutorial] to help you resolve merge conflicts and other issues. + +### Your PR is Merged! + +Congratulations! 🎉🎉 Polyfrost thanks you for your contribution! ✨ +Once your PR is merged, your changes will be included in the next release. + +### Common Errors + +#### macOS errors with XCode tools & Rosetta + +This error occurs when Xcode is not installed or when the Xcode command line tools are not in your `PATH`. + +Run `xcode-select --install` in the terminal to install the command line tools. If they are already installed, ensure that you update macOS to the latest version available. + +If that doesn't work, ensure that macOS is fully updated, and that you have Xcode installed (via the app store). + +Also ensure that Rosetta is installed, as a few of our dependencies require it. You can install Rosetta with `softwareupdate --install-rosetta --agree-to-license`. + +### Translations + +Check out the [i18n README](apps/desktop/locales/README.md) for more information on how to contribute to translations. + +### Credits + +This CONTRIBUTING.md file was inspired by the [`github/docs` CONTRIBUTING.md] file, and we extend our gratitude to the original authors. + +[Tauri essentials]: https://v2.tauri.app/start/prerequisites/ +[Unix script]: https://github.com/polyfrost/onelauncher/blob/main/packages/scripts/setup.sh +[Windows script]: https://github.com/polyfrost/onelauncher/blob/main/packages/scripts/setup.ps1 +[`cargo`]: https://doc.rust-lang.org/cargo/getting-started/installation.html +[`pnpm`]: https://pnpm.io/installation +[Labels]: https://github.com/polyfrost/onelauncher/labels +[the `pnpm` CLI]: https://pnpm.io/pnpm-cli +[Collaborating with pull requests]: https://docs.github.com/en/github/collaborating-with-pull-requests +[GitHub flow]: https://docs.github.com/en/get-started/quickstart/github-flow +[Setting up Git]: https://docs.github.com/en/get-started/quickstart/set-up-git +[Finding ways to contribute to open-source on GitHub]: https://docs.github.com/en/get-started/exploring-projects-on-github/finding-ways-to-contribute-to-open-source-on-github +[Code of Conduct]: ./CODE_OF_CONDUCT.md +[README]: ./README.md +[search if a related issue has already been reported]: https://docs.github.com/en/github/searching-for-information-on-github/searching-on-github/searching-issues-and-pull-requests#search-by-the-title-body-or-comments +[issue form]: https://github.com/polyfrost/onelauncher/issues/new/choose +[existing issues]: https://github.com/polyfrost/onelauncher/issues +[`github/docs` CONTRIBUTING.md]: https://github.com/github/docs/blob/main/CONTRIBUTING.md +[link your PR to the issue]: https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue +[allow maintainer edits]: https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork +[suggested changes]: https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request +[mark each conversation as resolved]: https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/commenting-on-a-pull-request#resolving-conversations +[git tutorial]: https://lab.github.com/githubtraining/managing-merge-conflicts diff --git a/Cargo.toml b/Cargo.toml index d22b5fbb..36ec9a2e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,19 +16,21 @@ authors = [ "Polyfrost", "Polyfrost Contributors" ] +version = "1.0.0" [workspace.dependencies] # tauri uses latest crates.io beta channel (temporarily can use v2 and main branches if necessary) -tauri = { version = "=2.0.0-beta.23", features = [ +tauri = { version = "=2.0.0-beta.24", features = [ "rustls-tls", "tracing", - "specta" + "specta", + "uuid" ] } -tauri-utils = { version = "=2.0.0-beta.18" } -tauri-build = { version = "=2.0.0-beta.18" } -tauri-codegen = { version = "=2.0.0-beta.18" } -tauri-macros = { version = "=2.0.0-beta.18" } -tauri-plugin = { version = "=2.0.0-beta.18" } +tauri-utils = { version = "=2.0.0-beta.19" } +tauri-build = { version = "=2.0.0-beta.19" } +tauri-codegen = { version = "=2.0.0-beta.19" } +tauri-macros = { version = "=2.0.0-beta.19" } +tauri-plugin = { version = "=2.0.0-beta.19" } tauri-plugin-authenticator = { version = "2.0.0-beta" } tauri-plugin-shell = { version = "2.0.0-beta" } tauri-plugin-window-state = { version = "2.0.0-beta" } diff --git a/README.md b/README.md index 757c0101..e90e94af 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,7 @@ Rust-based Minecraft launcher utilizing Tauri, SolidJS, and Tailwind ## Project Structure -* [`desktop`](./desktop/) - Rust-based Minecraft launcher utilizing Tauri, SolidJS, and Tailwind. -* [`core`](./core/) - The core for our Minecraft launcher (platform agnostic), along with Rust-based utilities for other Polyfrost projects and interactions. -* [`backend`](./backend/) - Our `actix-web` based API, accessible at , with documentation on our [docs(docs)](https://contributing.polyfrost.org/api/). -* [`testing`](./testing/) - Testing playground for our Rust core, independant of Tauri. -* [`debugger`](./debugger/) - Procedural macro utilities for our Rust libraries. -* [`distribution`](./distribution/) - Distribution utilties and meta files for the [`desktop`](./desktop/) app. +* [`apps/desktop`](./apps/desktop/) - Rust-based Minecraft launcher utilizing Tauri, SolidJS, and Tailwind. +* [`crates/core`](./crates/core/) - The core for our Minecraft launcher (platform agnostic), along with Rust-based utilities for other Polyfrost projects and interactions. +* [`testing`](./crates/testing/) - Testing playground for our Rust core, independant of Tauri. +* [`distribution`](./packages/distribution/) - Distribution utilties and meta files for the [`apps/desktop`](./apps/desktop/) app. diff --git a/apps/desktop/package.json b/apps/desktop/package.json index be8af1b3..fcc5fb28 100644 --- a/apps/desktop/package.json +++ b/apps/desktop/package.json @@ -7,7 +7,7 @@ "repository": { "type": "git", "url": "git@github.com:polyfrost/onelauncher", - "directory": "desktop" + "directory": "apps/desktop" }, "scripts": { "tauri": "tauri", @@ -34,7 +34,7 @@ "@untitled-theme/icons-solid": "^0.10.5", "overlayscrollbars": "^2.9.2", "overlayscrollbars-solid": "^0.5.5", - "solid-js": "^1.8.18", + "solid-js": "^1.8.19", "solid-transition-group": "^0.2.3", "uuid": "^10.0.0" }, diff --git a/apps/desktop/src-tauri/Cargo.toml b/apps/desktop/src-tauri/Cargo.toml index ad5d5053..e8e7740b 100644 --- a/apps/desktop/src-tauri/Cargo.toml +++ b/apps/desktop/src-tauri/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "onelauncher_gui" -version = "1.0.0" description = "Next-generation open source Minecraft launcher" +version = { workspace = true } license = { workspace = true } edition = { workspace = true } repository = { workspace = true } diff --git a/apps/desktop/src-tauri/Info.plist b/apps/desktop/src-tauri/Info.plist index 6534396c..a2f70cdb 100644 --- a/apps/desktop/src-tauri/Info.plist +++ b/apps/desktop/src-tauri/Info.plist @@ -2,12 +2,12 @@ - + CFBundleURLTypes CFBundleURLName - org.polyfrost.launcher + OneLauncher CFBundleURLSchemes onelauncher diff --git a/apps/desktop/src-tauri/tauri.conf.json b/apps/desktop/src-tauri/tauri.conf.json index 2eed77bd..cc11f880 100644 --- a/apps/desktop/src-tauri/tauri.conf.json +++ b/apps/desktop/src-tauri/tauri.conf.json @@ -1,8 +1,8 @@ { "$schema": "https://raw.githubusercontent.com/tauri-apps/tauri/dev/core/tauri-config-schema/schema.json", - "productName": "onelauncher", + "productName": "OneLauncher", "version": "../package.json", - "identifier": "org.polyfrost.launcher", + "identifier": "OneLauncher", "app": { "withGlobalTauri": true, "macOSPrivateApi": true, diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 3b423ae0..0dd48e2c 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "onelauncher" -version = "0.0.0" description = "The core of OneLauncher" +version = { workspace = true } license = { workspace = true } edition = { workspace = true } repository = { workspace = true } @@ -22,8 +22,6 @@ tauri = [ cli = [ "dep:indicatif" ] [dependencies] -onelauncher_debug = { path = "../debugger" } - # GUI-only deps tauri = { workspace = true, optional = true } tauri-specta = { workspace = true, optional = true } diff --git a/crates/core/src/api/cluster/create.rs b/crates/core/src/api/cluster/create.rs index d7e63895..1292b4ca 100644 --- a/crates/core/src/api/cluster/create.rs +++ b/crates/core/src/api/cluster/create.rs @@ -13,7 +13,6 @@ use std::path::PathBuf; /// Creates a [`Cluster`] and adds it to the memory [`State`]. /// Returns a relative filepath ([`ClusterPath`]) which can be used to access the cluster. #[tracing::instrument] -#[onelauncher_debug::debugger] #[allow(clippy::too_many_arguments)] pub async fn create_cluster( mut name: String, @@ -207,7 +206,6 @@ pub async fn create_cluster_from_duplicate(from: ClusterPath) -> crate::Result crate::Result /// run a Minecraft [`Cluster`] using [`MinecraftCredentials`] for authentication. /// returns an [`Arc`] pointer to [`RwLock`] to [`ProcessorChild`]. #[tracing::instrument(skip(creds))] -#[onelauncher_debug::debugger] pub async fn run_credentials( path: &ClusterPath, creds: &MinecraftCredentials, @@ -359,7 +358,6 @@ pub async fn get_optimal_java_version(path: &ClusterPath) -> crate::Result crate::Result<()> { let state = State::get().await?; let cluster = get(path, None) diff --git a/crates/core/src/api/java.rs b/crates/core/src/api/java.rs index 6b0cf46a..e666d498 100644 --- a/crates/core/src/api/java.rs +++ b/crates/core/src/api/java.rs @@ -27,7 +27,6 @@ pub async fn filter_java_version(java_version: Option) -> crate::Result crate::Result { let state = State::get().await?; diff --git a/crates/core/src/api/package/from.rs b/crates/core/src/api/package/from.rs index 55f928ba..f5a128d4 100644 --- a/crates/core/src/api/package/from.rs +++ b/crates/core/src/api/package/from.rs @@ -185,7 +185,6 @@ pub fn get_cluster_from_pack(location: CreatePackLocation) -> CreatePackCluster } #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn generate_pack_from_version_id( package_id: String, version_id: String, @@ -295,7 +294,6 @@ pub async fn generate_pack_from_version_id( } #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn generate_pack_from_file( path: PathBuf, cluster_path: ClusterPath, @@ -316,7 +314,6 @@ pub async fn generate_pack_from_file( /// Sets generated cluster attributes to the pack attributes (using `cluster::edit`). /// This includes the pack name, icon, game version, loader version, and loader. -#[onelauncher_debug::debugger] pub async fn set_cluster_information( cluster_path: ClusterPath, description: &CreatePackDescription, diff --git a/crates/core/src/api/package/import/atlauncher.rs b/crates/core/src/api/package/import/atlauncher.rs index afa0ea3c..b3d48188 100644 --- a/crates/core/src/api/package/import/atlauncher.rs +++ b/crates/core/src/api/package/import/atlauncher.rs @@ -113,7 +113,6 @@ pub async fn is_valid_atlauncher(instance_folder: PathBuf) -> bool { } #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn import_atlauncher( // The path to the base ATLauncher folder. atlauncher_base_path: PathBuf, diff --git a/crates/core/src/api/package/import/mod.rs b/crates/core/src/api/package/import/mod.rs index d6571ed8..814794db 100644 --- a/crates/core/src/api/package/import/mod.rs +++ b/crates/core/src/api/package/import/mod.rs @@ -107,7 +107,6 @@ pub async fn import_instances(import: ImportType, path: PathBuf) -> crate::Resul } #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn import_instance( cluster_path: ClusterPath, import: ImportType, @@ -185,7 +184,6 @@ pub fn default_launcher_path(r#type: ImportType) -> Option { /// Checks if a [`PathBuf`] is a valid instance for a given [`ImportType`] #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn is_valid_instance(instance_path: PathBuf, r#type: ImportType) -> bool { match r#type { ImportType::MultiMC | ImportType::PrismLauncher => { @@ -204,7 +202,6 @@ pub async fn is_valid_instance(instance_path: PathBuf, r#type: ImportType) -> bo } #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn cache_icon(icon_path: PathBuf) -> crate::Result> { let state = crate::State::get().await?; let bytes = tokio::fs::read(&icon_path).await; @@ -254,7 +251,6 @@ pub async fn copy_minecraft( } /// recursively get a [`Vec`] of all subfiles. -#[onelauncher_debug::debugger] #[async_recursion::async_recursion] #[tracing::instrument] pub async fn sub(path: &Path) -> crate::Result> { diff --git a/crates/core/src/api/package/import/multibased.rs b/crates/core/src/api/package/import/multibased.rs index 8fc99efa..379ec917 100644 --- a/crates/core/src/api/package/import/multibased.rs +++ b/crates/core/src/api/package/import/multibased.rs @@ -169,7 +169,6 @@ async fn load_instance_cfg(file_path: &Path) -> crate::Result { } #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn import_mmc( mmc_base_path: PathBuf, instance_folder: String, diff --git a/crates/core/src/api/package/mrpack.rs b/crates/core/src/api/package/mrpack.rs index bdf24df2..cc285e92 100644 --- a/crates/core/src/api/package/mrpack.rs +++ b/crates/core/src/api/package/mrpack.rs @@ -25,7 +25,6 @@ use super::from::{ /// Wrapper around [`install_pack_files`] that generates a pack creation description, and /// attempts to install the pack files. If it fails, it will remove the cluster (fail safely) /// Install a modpack from a mrpack file (a modrinth .zip format) -#[onelauncher_debug::debugger] pub async fn install_zipped_mrpack( location: CreatePackLocation, cluster_path: ClusterPath, @@ -66,7 +65,6 @@ pub async fn install_zipped_mrpack( } /// Install all pack files from a description. Does not remove the cluster if it fails -#[onelauncher_debug::debugger] pub async fn install_zipped_mrpack_files( create_pack: CreatePack, ignore_lock: bool, @@ -241,7 +239,6 @@ pub async fn install_zipped_mrpack_files( } #[tracing::instrument(skip(mrpack_file))] -#[onelauncher_debug::debugger] pub async fn remove_all_related_files( cluster_path: ClusterPath, mrpack_file: bytes::Bytes, diff --git a/crates/core/src/api/proxy/send.rs b/crates/core/src/api/proxy/send.rs index 4449fcd0..0e961c12 100644 --- a/crates/core/src/api/proxy/send.rs +++ b/crates/core/src/api/proxy/send.rs @@ -11,7 +11,6 @@ use crate::api::proxy::{ClusterPayload, IngressPayload, MessagePayload, ProcessP #[cfg(feature = "tauri")] use tauri::Manager; -#[onelauncher_debug::debugger] pub async fn init_ingress( ingress_type: IngressType, total: f64, @@ -25,7 +24,6 @@ pub async fn init_ingress( #[cfg(feature = "cli")] const CLI_TOTAL_INGRESS: u64 = 1000; -#[onelauncher_debug::debugger] pub async fn init_ingress_internal( ingress_type: IngressType, total: f64, @@ -100,7 +98,6 @@ pub async fn edit_ingress( #[allow(unused_variables)] #[tracing::instrument(level = "debug")] -#[onelauncher_debug::debugger] pub async fn send_ingress( key: &IngressId, increment: f64, diff --git a/crates/core/src/api/proxy/utils.rs b/crates/core/src/api/proxy/utils.rs index 7463b8e4..f7379356 100644 --- a/crates/core/src/api/proxy/utils.rs +++ b/crates/core/src/api/proxy/utils.rs @@ -45,7 +45,6 @@ macro_rules! ingress_join { /// TryStreamExt concurrently for Ingress feeds #[tracing::instrument(skip(stream, f))] -#[onelauncher_debug::debugger] pub async fn ingress_try_for_each( stream: I, limit: Option, diff --git a/crates/core/src/constants.rs b/crates/core/src/constants.rs index 2f721576..37b6f578 100644 --- a/crates/core/src/constants.rs +++ b/crates/core/src/constants.rs @@ -7,9 +7,7 @@ /// The name of the launcher. pub const NAME: &str = "OneLauncher"; /// The version of the launcher -pub const VERSION: &str = "0.1.0"; // todo: env -/// The ID of the launcher. -pub const ID: &str = "org.polyfrost.launcher"; +pub const VERSION: &str = "1.0.0"; // todo: env // =========== Authentication =========== /// The Discord RPC client ID. diff --git a/crates/core/src/game/metadata.rs b/crates/core/src/game/metadata.rs index 492aa578..c4f1b960 100644 --- a/crates/core/src/game/metadata.rs +++ b/crates/core/src/game/metadata.rs @@ -50,7 +50,6 @@ pub async fn download_minecraft( } #[tracing::instrument(skip_all, fields(version = version.id.as_str(), loader = ?loader))] -#[onelauncher_debug::debugger] pub async fn download_version_info( st: &State, version: &GameVersion, @@ -113,7 +112,6 @@ pub async fn fetch_partial_version( } #[tracing::instrument(skip_all)] -#[onelauncher_debug::debugger] pub async fn download_assets_index( st: &State, version: &GameVersionInfo, @@ -162,7 +160,6 @@ pub async fn fetch_assets_index( } #[tracing::instrument(skip(st, index))] -#[onelauncher_debug::debugger] pub async fn download_assets( st: &State, legacy: bool, @@ -224,7 +221,6 @@ pub async fn download_assets( } #[tracing::instrument(skip(st, libraries))] -#[onelauncher_debug::debugger] #[allow(clippy::too_many_arguments)] pub async fn download_libraries( st: &State, @@ -319,7 +315,6 @@ pub async fn download_libraries( } #[tracing::instrument(skip_all)] -#[onelauncher_debug::debugger] pub async fn download_client( st: &State, version: &GameVersionInfo, diff --git a/crates/core/src/game/mod.rs b/crates/core/src/game/mod.rs index 5943f1f4..2a96aceb 100644 --- a/crates/core/src/game/mod.rs +++ b/crates/core/src/game/mod.rs @@ -36,7 +36,6 @@ macro_rules! data_entry { } #[tracing::instrument(skip(cluster))] -#[onelauncher_debug::debugger] pub async fn install_minecraft( cluster: &Cluster, old_ingress: Option, @@ -243,7 +242,6 @@ pub async fn install_minecraft( } #[tracing::instrument(skip_all)] -#[onelauncher_debug::debugger] #[allow(clippy::too_many_arguments)] pub async fn launch_minecraft( cluster: &Cluster, diff --git a/crates/core/src/store/clusters.rs b/crates/core/src/store/clusters.rs index 6488e961..61be7b2e 100644 --- a/crates/core/src/store/clusters.rs +++ b/crates/core/src/store/clusters.rs @@ -512,7 +512,6 @@ impl Cluster { /// watch the filesystem for changes with [`notify`]. #[tracing::instrument(skip(watcher))] - #[onelauncher_debug::debugger] pub async fn watch( cluster_path: &Path, watcher: &mut Debouncer, @@ -543,7 +542,6 @@ impl Cluster { impl Clusters { /// Initialize the cluster manager and HashMap. #[tracing::instrument(skip(watcher))] - #[onelauncher_debug::debugger] pub async fn initialize( dirs: &Directories, watcher: &mut Debouncer, @@ -580,7 +578,6 @@ impl Clusters { /// update registered packages #[tracing::instrument] - #[onelauncher_debug::debugger] pub async fn update_packages() { let res = async { let state = State::get().await?; @@ -634,7 +631,6 @@ impl Clusters { /// update all available package versions #[tracing::instrument] - #[onelauncher_debug::debugger] pub async fn update_versions() { let res = async { let state = State::get().await?; @@ -670,7 +666,6 @@ impl Clusters { /// insert a cluster into the HashMap #[tracing::instrument(skip(self, cluster))] - #[onelauncher_debug::debugger] pub async fn insert(&mut self, cluster: Cluster, dont_watch: bool) -> crate::Result<&Self> { send_cluster( cluster.uuid, diff --git a/crates/core/src/store/dirs.rs b/crates/core/src/store/dirs.rs index 38aa9b36..4104791a 100644 --- a/crates/core/src/store/dirs.rs +++ b/crates/core/src/store/dirs.rs @@ -30,7 +30,7 @@ impl Directories { /// Bootstrap the initial settings directory on first startup. pub fn init_settings_dir() -> Option { Self::env_path("ONELAUNCHER_CONFIG") - .or_else(|| Some(dirs::config_dir()?.join(constants::ID))) + .or_else(|| Some(dirs::data_dir()?.join(constants::NAME))) } /// Bootstrap the initial settings directory on first startup. diff --git a/crates/core/src/store/metadata.rs b/crates/core/src/store/metadata.rs index af8ed387..dcaf2fa7 100644 --- a/crates/core/src/store/metadata.rs +++ b/crates/core/src/store/metadata.rs @@ -144,7 +144,6 @@ impl Metadata { /// Initialize the core Metadata manager. #[tracing::instrument(skip(io_semaphore, fetch_semaphore))] - #[onelauncher_debug::debugger] pub async fn initialize( dirs: &Directories, online: bool, diff --git a/crates/core/src/store/mod.rs b/crates/core/src/store/mod.rs index 38f978bb..40797868 100644 --- a/crates/core/src/store/mod.rs +++ b/crates/core/src/store/mod.rs @@ -112,7 +112,6 @@ impl State { /// Initializes the core OneLauncher state fully. #[tracing::instrument] - #[onelauncher_debug::debugger] async fn initialize() -> crate::Result> { let ingress = init_ingress_internal(crate::IngressType::Initialize, 100.0, "initializing state") @@ -205,7 +204,6 @@ impl State { /// Synchronizes data that can change outside of our control. #[tracing::instrument] - #[onelauncher_debug::debugger] pub async fn sync() -> crate::Result<()> { let state = Self::get().await?; let sync_settings = async { diff --git a/crates/core/src/store/package.rs b/crates/core/src/store/package.rs index cc5916b8..846d9ec9 100644 --- a/crates/core/src/store/package.rs +++ b/crates/core/src/store/package.rs @@ -21,7 +21,6 @@ use super::{Cluster, PackagePath}; /// Creates [`Package`] data for a given [`Cluster`] from on-device files and APIs. /// Paths must be the full paths and not relative paths. #[tracing::instrument(skip(paths, _cluster, _io_semaphore, _fetch_semaphore))] -#[onelauncher_debug::debugger] pub async fn generate_context( _cluster: Cluster, paths: Vec, @@ -255,7 +254,7 @@ impl ManagedVersionFile { tracing::info!("downloading mod '{}' to cluster '{}'", self.file_name, cluster.meta.name); let path = cluster.get_full_path().await?.join("mods").join(&self.file_name); let state = State::get().await?; - + // TODO: Implement hashes let bytes = http::fetch(&self.url, None, &state.fetch_semaphore).await?; http::write(&path, &bytes, &state.io_semaphore).await?; @@ -319,7 +318,6 @@ pub enum PackageFile { } #[tracing::instrument(skip(io_semaphore))] -#[onelauncher_debug::debugger] async fn read_icon( icon_path: Option, cache_path: &Path, diff --git a/crates/core/src/store/processor.rs b/crates/core/src/store/processor.rs index 05a11342..423d80c7 100644 --- a/crates/core/src/store/processor.rs +++ b/crates/core/src/store/processor.rs @@ -412,7 +412,6 @@ impl Processor { /// insert a process with a command and [`ClusterPath`]. #[tracing::instrument(skip(self, uuid, command, post, censors))] #[tracing::instrument(level = "trace", skip(self))] - #[onelauncher_debug::debugger] pub async fn insert_process( &mut self, uuid: Uuid, @@ -456,7 +455,6 @@ impl Processor { /// Insert a cached process with a [`ProcessorCache`]. #[tracing::instrument(skip(self, cache))] #[tracing::instrument(level = "trace", skip(self))] - #[onelauncher_debug::debugger] pub async fn insert_restored( &mut self, cache: ProcessorCache, @@ -544,7 +542,6 @@ impl Processor { /// Get a process manager and runner awaiting for the exit status. #[tracing::instrument(skip(current_child))] - #[onelauncher_debug::debugger] async fn manager( uuid: Uuid, post: Option, diff --git a/crates/core/src/utils/http.rs b/crates/core/src/utils/http.rs index 5dd6bd55..ca7ea9cf 100644 --- a/crates/core/src/utils/http.rs +++ b/crates/core/src/utils/http.rs @@ -76,7 +76,6 @@ where /// Advanced HTTP fetch interface with json, sha1 validation, and ingress support. #[tracing::instrument(skip(json_body, semaphore))] -#[onelauncher_debug::debugger] pub async fn fetch_advanced( method: Method, url: &str, @@ -167,7 +166,6 @@ pub async fn fetch_advanced( /// A utility to fetch from multiple mirrored sources. #[tracing::instrument(skip(semaphore))] -#[onelauncher_debug::debugger] pub async fn fetch_from_mirrors( mirrors: &[&str], sha1: Option<&str>, @@ -189,7 +187,6 @@ pub async fn fetch_from_mirrors( /// Checks if we are playing offline by contacting a reliable server. #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn check_internet_connection(timeout: u64) -> bool { REQWEST_CLIENT .get("https://api.polyfrost.org/") @@ -201,7 +198,6 @@ pub async fn check_internet_connection(timeout: u64) -> bool { /// Post JSON to a specified URL (helpful for Microsoft auth) #[tracing::instrument(skip(json_body, semaphore))] -#[onelauncher_debug::debugger] pub async fn post_json( url: &str, json_body: serde_json::Value, diff --git a/crates/core/src/utils/java.rs b/crates/core/src/utils/java.rs index a299faad..22c6cb5f 100644 --- a/crates/core/src/utils/java.rs +++ b/crates/core/src/utils/java.rs @@ -183,7 +183,6 @@ pub async fn locate_java() -> Result, JavaError> { /// Locate JRE's auto-installed by the launcher instance. #[tracing::instrument] -#[onelauncher_debug::debugger] async fn locate_installed_java() -> Result, JavaError> { Box::pin(async move { let state = State::get().await.map_err(|_| JavaError::MutexError)?; @@ -245,7 +244,6 @@ pub async fn check_java(paths: HashSet) -> HashSet { /// Verifies that a java instance [`Path`] is valid. /// java_check from https://github.com/modrinth/theseus/blob/master/theseus/library/JavaInfo.class under MIT #[tracing::instrument] -#[onelauncher_debug::debugger] pub async fn check_java_instance(path: &Path) -> Option { let Ok(path) = io::canonicalize(path) else { return None; diff --git a/crates/debugger/Cargo.toml b/crates/debugger/Cargo.toml deleted file mode 100644 index 18bbbfe3..00000000 --- a/crates/debugger/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "onelauncher_debug" -version = "0.0.0" -description = "Debugger macros for OneLauncher" -license = { workspace = true } -edition = { workspace = true } -repository = { workspace = true } -documentation = { workspace = true } -readme = { workspace = true } -homepage = { workspace = true } -authors = { workspace = true } - -[lib] -proc-macro = true - -[dependencies] -syn = { workspace = true } -quote = { workspace = true } diff --git a/crates/debugger/src/lib.rs b/crates/debugger/src/lib.rs deleted file mode 100644 index 84c8666d..00000000 --- a/crates/debugger/src/lib.rs +++ /dev/null @@ -1,36 +0,0 @@ -extern crate proc_macro; - -use proc_macro::TokenStream; -use quote::quote; -use syn::{parse_macro_input, ItemFn}; - -/// Macro that isolates s that automatically are isolated in Tauri Debug environments -/// This is useful for debugging functions that manage memory. -#[proc_macro_attribute] -pub fn debugger(_attr: TokenStream, item: TokenStream) -> TokenStream { - let input = parse_macro_input!(item as ItemFn); - - let attrs = &input.attrs; - let vis = &input.vis; - let sig = &input.sig; - let body = &input.block; - - #[cfg(debug_assertions)] - let result = quote! { - #(#attrs)* - #vis #sig { - Box::pin(async move { - #body - }).await - } - }; - #[cfg(not(debug_assertions))] - let result = quote! { - #(#attrs)* - #vis #sig { - #body - } - }; - - TokenStream::from(result) -} diff --git a/crates/testing/Cargo.toml b/crates/testing/Cargo.toml index 35c98890..5c3fce65 100644 --- a/crates/testing/Cargo.toml +++ b/crates/testing/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "onelauncher_test" -version = "0.0.0" description = "test implementation of onelauncher" +version = { workspace = true } license = { workspace = true } edition = { workspace = true } repository = { workspace = true } diff --git a/flake.nix b/flake.nix deleted file mode 100644 index 423d4b0c..00000000 --- a/flake.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ - description = "OneLauncher: Next-generation open source Minecraft launcher"; - - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; - - inputs.crane.url = "github:ipetkov/crane"; - inputs.crane.inputs.nixpkgs.follows = "nixpkgs"; - - inputs.fenix.url = "github:nix-community/fenix"; - inputs.fenix.inputs.nixpkgs.follows = "nixpkgs"; - - inputs.utils.url = "github:numtide/flake-utils"; - inputs.utils.inputs.nixpkgs.follows = "nixpkgs"; - - inputs.rust.url = "github:numtide/rust-overlay"; - inputs.rust.inputs.nixpkgs.follows = "nixpkgs"; - - inputs.advisory.url = "github:rustsec/advisory-db"; - inputs.advisory.flake = false; - - outputs = { self, nixpkgs, crane, fenix, utils, rust, advisory, ... }: - utils.lib.eachDefaultSystem (system: - let - pkgs = nixpkgs.legacyPackages.${system}; - inherit (pkgs) lib; - - craneLib = crane.lib.${system}; - cargoSrc = craneLib.cleanCargoSource (craneLib.path ./.); - arguments = { - inherit cargoSrc; - strictDeps = true; - - }; - in { - - } - ); -} diff --git a/package.json b/package.json index 30134038..27d7de08 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@onelauncher/root", "type": "module", "version": "1.0.0", - "packageManager": "pnpm@9.5.0", + "packageManager": "pnpm@9.6.0", "description": "Next-generation open source Minecraft launcher and tools for interacting with Polyfrost", "license": "GPL-3.0-only", "repository": { @@ -12,17 +12,23 @@ "bugs": { "url": "https://github.com/polyfrost/onelauncher/issues" }, + "engines": { + "pnpm": "9.6.0", + "npm": "pnpm", + "yarn": "pnpm", + "node": ">=18" + }, "scripts": { - "gui": "pnpm --filter @onelauncher/gui", - "client": "pnpm --filter @onelauncher/client", - "dev": "pnpm gui tauri dev", - "build": "pnpm gui tauri build", + "gui": "pnpm --filter @onelauncher/gui -- ", + "client": "pnpm --filter @onelauncher/client --", + "tauri": "pnpm gui tauri", "lint": "pnpm eslint . --cache", - "format": "pnpm lint --fix", - "release:node": "pnpm bumpp -r" + "lint:fix": "pnpm lint --fix", + "release:node": "pnpm bumpp -r", + "core": "cd crates/core && cargo" }, "devDependencies": { - "@flowr/eslint-config": "^3.9.1", + "@flowr/eslint-config": "^3.10.0", "@types/node": "^20.14.12", "@vitest/ui": "^2.0.4", "bumpp": "^9.4.1", diff --git a/packages/client/package.json b/packages/client/package.json index a24f4996..c5343317 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -8,7 +8,7 @@ "repository": { "type": "git", "url": "git@github.com:polyfrost/onelauncher", - "directory": "client" + "directory": "packages/client" }, "sideEffects": false, "main": "./src/index.ts", @@ -21,7 +21,7 @@ "@tanstack/solid-query": "^5.51.9", "fast-equals": "^5.0.1", "plausible-tracker": "^0.3.9", - "solid-js": "^1.8.18", + "solid-js": "^1.8.19", "zod": "^3.23.8" } } diff --git a/packages/distribution/brew/onelauncher.rb b/packages/distribution/brew/onelauncher.rb index e9cd12bd..f0d995a2 100644 --- a/packages/distribution/brew/onelauncher.rb +++ b/packages/distribution/brew/onelauncher.rb @@ -17,12 +17,12 @@ cask "onelauncher" do app "OneLauncher.app" - uninstall quit: "org.polyfrost.launcher" + uninstall quit: "OneLauncher" zap trash: [ - "~/Library/Application Support/org.polyfrost.launcher", - "~/Library/Caches/org.polyfrost.launcher", - "~/Library/Saved Application State/org.polyfrost.launcher.savedState", - "~/Library/WebKit/org.polyfrost.launcher", + "~/Library/Application Support/OneLauncher", + "~/Library/Caches/OneLauncher", + "~/Library/Saved Application State/OneLauncher.savedState", + "~/Library/WebKit/OneLauncher", ] end diff --git a/packages/distribution/package.json b/packages/distribution/package.json new file mode 100644 index 00000000..4c43f780 --- /dev/null +++ b/packages/distribution/package.json @@ -0,0 +1,17 @@ +{ + "name": "@onelauncher/distribution", + "type": "module", + "version": "1.0.0", + "private": true, + "description": "distribution files for OneLauncher", + "license": "GPL-3.0-only", + "repository": { + "type": "git", + "url": "git@github.com:polyfrost/onelauncher", + "directory": "packages/distribution" + }, + "sideEffects": false, + "scripts": {}, + "dependencies": {}, + "devDependencies": {} +} diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 9ef0a3cf..f2c5d165 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -8,7 +8,7 @@ "repository": { "type": "git", "url": "git@github.com:polyfrost/onelauncher", - "directory": "client" + "directory": "packages/scripts" }, "sideEffects": false, "main": "./src/index.ts", @@ -17,7 +17,7 @@ "tauri": "tsx tauri.ts" }, "dependencies": { - "@flowr/utils": "^3.9.1", + "@flowr/utils": "^3.10.0", "@iarna/toml": "^2.2.5", "execa": "^9.3.0", "semver": "^7.6.3", diff --git a/packages/scripts/setup.ps1 b/packages/scripts/setup.ps1 index b375ce39..e605a595 100644 --- a/packages/scripts/setup.ps1 +++ b/packages/scripts/setup.ps1 @@ -1,6 +1,6 @@ -# Set default value of 0 for external command exit code +# set default value of 0 for external command exit code $LASTEXITCODE = 0 -# Enables strict mode, which causes PowerShell to treat uninitialized variables, undefined functions, and other common errors as terminating errors. +# enables strict mode, which causes PowerShell to treat uninitialized variables, undefined functions, and other common errors as terminating errors. $ErrorActionPreference = if ($env:CI) { 'Stop' } else { 'Inquire' } Set-StrictMode -Version Latest @@ -12,7 +12,7 @@ function Reset-Path { ) } -# Verify if environment is Windows 64-bit and if the user is an administrator +# verifies if the environment is Windows 64-bit and if the user is an administrator if ((-not [string]::IsNullOrEmpty($env:PROCESSOR_ARCHITEW6432)) -or ( "$env:PROCESSOR_ARCHITECTURE" -eq 'ARM64' ) -or ( @@ -25,19 +25,20 @@ if ((-not [string]::IsNullOrEmpty($env:PROCESSOR_ARCHITEW6432)) -or ( if (Test-Path "$($env:WINDIR)\SysNative\WindowsPowerShell\v1.0\powershell.exe" -PathType Leaf) { throw 'You are using PowerShell (32-bit), please re-run in PowerShell (64-bit)' } else { - throw 'This script is only supported on Windows 64-bit' + throw 'This script is only supported on Windows 64-bit operating systems, use the script.sh for Unix systems.' } Exit 1 } elseif ( -not ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator) ) { - # Start a new PowerShell process with administrator privileges and set the working directory to the directory where the script is located + # starts a new PowerShell process with administrator privileges and set the working directory to the directory where the script is located $proc = Start-Process -PassThru -Wait -FilePath 'PowerShell.exe' -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -File `"$($MyInvocation.MyCommand.Definition)`"" -WorkingDirectory "$PSScriptRoot" - # Reset path so the user doesn't have to restart the shell to use the tools installed by this script + # resets path so the user doesn't have to restart the shell to use the tools installed by this script Reset-Path Exit $proc.ExitCode } +# exits the script with an error function Exit-WithError($err, $help = $null) { if ($null -ne $help) { Write-Host @@ -47,6 +48,7 @@ function Exit-WithError($err, $help = $null) { Exit 1 } +# adds a directory to the path env variable function Add-DirectoryToPath($directory) { Reset-Path if ($env:Path.Split([IO.Path]::PathSeparator) -notcontains $directory) { @@ -57,21 +59,21 @@ function Add-DirectoryToPath($directory) { ) if ($env:CI) { - # If running in CI, we need to use GITHUB_PATH instead of the normal PATH env variables + # if running in CI, we need to use GITHUB_PATH instead of the normal PATH env variables Add-Content $env:GITHUB_PATH "$directory`n" } } Reset-Path } -# Reset PATH to ensure the script doesn't have stale Path entries +# resets PATH to ensure the script doesn't have stale Path entries Reset-Path -# Get project dir (get grandparent dir from script location: \scripts\setup.ps1) +# gets project dir (get grandparent dir from script location: \packages\scripts\setup.ps1) $projectRoot = Split-Path -Path $PSScriptRoot -Parent $packageJson = Get-Content -Raw -Path "$projectRoot\package.json" | ConvertFrom-Json -# Valid winget exit status +# valid winget exit statuses $wingetValidExit = 0, -1978335189, -1978335153, -1978335135 Write-Host 'OneLauncher Development Environment Setup' -ForegroundColor Magenta @@ -81,8 +83,8 @@ To set up your machine for OneLauncher development, this script will do the foll 1) Install Windows C++ build tools 2) Install Edge Webview 2 3) Install Rust and Cargo -4) Install Rust tools -5) Install Node.js, npm and pnpm +4) Install Rust tools (if not already installed) +5) Install Node.js, npm and pnpm (if not already installed) "@ # Install System dependencies (GitHub Actions already has all of those installed) @@ -94,7 +96,7 @@ https://learn.microsoft.com/windows/package-manager/winget/ '@ } - # Check system winget version is greater or equal to v1.4.10052 + # check system winget version is greater or equal to v1.4.10052 $wingetVersion = [Version]((winget --version) -replace '.*?(\d+)\.(\d+)\.(\d+).*', '$1.$2.$3') $requiredVersion = [Version]'1.4.10052' if ($wingetVersion.CompareTo($requiredVersion) -lt 0) { @@ -102,7 +104,7 @@ https://learn.microsoft.com/windows/package-manager/winget/ Exit-WithError $errorMessage } - # Check connectivity to GitHub + # check connectivity to github $ProgressPreference = 'SilentlyContinue' if (-not ((Test-NetConnection -ComputerName 'github.com' -Port 80).TcpTestSucceeded)) { Exit-WithError "Can't connect to github, check your internet connection and run this script again" @@ -118,7 +120,7 @@ https://learn.microsoft.com/windows/package-manager/winget/ Write-Host 'This will take some time as it involves downloading several gigabytes of data....' -ForegroundColor Cyan winget install -e --accept-source-agreements --force --disable-interactivity --id Microsoft.VisualStudio.2022.BuildTools ` --override 'updateall --quiet --wait' - # Force install because BuildTools is itself a package manager, so let it decide if something needs to be installed or not + # force install because BuildTools is itself a package manager, so let it decide if something needs to be installed or not winget install -e --accept-source-agreements --force --disable-interactivity --id Microsoft.VisualStudio.2022.BuildTools ` --override '--wait --quiet --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended' if (-not ($wingetValidExit -contains $LASTEXITCODE)) { @@ -129,7 +131,7 @@ https://learn.microsoft.com/windows/package-manager/winget/ Write-Host Write-Host 'Installing Edge Webview 2...' -ForegroundColor Yellow - # This is normally already available, but on some early Windows 10 versions it isn't + # this is normally already available, but on some early windows 10 versions it isn't winget install -e --accept-source-agreements --disable-interactivity --id Microsoft.EdgeWebView2Runtime if (-not ($wingetValidExit -contains $LASTEXITCODE)) { Exit-WithError 'Failed to install Edge Webview 2' @@ -157,7 +159,7 @@ https://learn.microsoft.com/windows/package-manager/winget/ Write-Host Write-Host 'Installing NodeJS...' -ForegroundColor Yellow - # Check if Node.JS is already installed and if it's compatible with the project + # check if nodejs is already installed and if it's compatible with the project $currentNode = Get-Command node -ea 0 $currentNodeVersion = if (-not $currentNode) { $null } elseif ($currentNode.Version) { $currentNode.Version } elseif ((node --version) -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null } $enginesNodeVersion = if ($packageJson.engines.node -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null } @@ -165,17 +167,17 @@ https://learn.microsoft.com/windows/package-manager/winget/ Exit-WithError "Current Node.JS version: $currentNodeVersion (required: $enginesNodeVersion)" ` 'Uninstall the current version of Node.JS and run this script again' } - # Install Node.JS + # installs nodejs winget install -e --accept-source-agreements --disable-interactivity --id OpenJS.NodeJS if (-not ($wingetValidExit -contains $LASTEXITCODE)) { Exit-WithError 'Failed to install NodeJS' } else { $LASTEXITCODE = 0 } - # Add NodeJS to the PATH + # adds nodejs to the PATH Add-DirectoryToPath "$env:SystemDrive\Program Files\nodejs" - # Reset Path to ensure that executable installed above are available to rest of the script + # rests PATH to ensure that executable installed above are available to rest of the script Reset-Path Write-Host @@ -194,22 +196,22 @@ https://learn.microsoft.com/windows/package-manager/winget/ Write-Host Write-Host 'Installing for pnpm...' -ForegroundColor Yellow - # Check if pnpm is already installed and if it's compatible with the project + # checks if pnpm is already installed and if it's compatible with the project $currentPnpmVersion = if (-not (Get-Command pnpm -ea 0)) { $null } elseif ((pnpm --version) -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null } $enginesPnpmVersion = if ($packageJson.engines.pnpm -match '(?sm)(\d+(\.\d+)*)') { [Version]$matches[1] } else { $null } if (-not $currentPnpmVersion) { - # Remove possible remaining envvars from old pnpm installation + # removes possible remaining envvars from old pnpm installation [System.Environment]::SetEnvironmentVariable('PNPM_HOME', $null, [System.EnvironmentVariableTarget]::Machine) [System.Environment]::SetEnvironmentVariable('PNPM_HOME', $null, [System.EnvironmentVariableTarget]::User) - # Install pnpm + # installs pnpm npm install -g "pnpm@latest-$($enginesPnpmVersion.Major)" if ($LASTEXITCODE -ne 0) { Exit-WithError 'Failed to install pnpm' } - # Add NPM global modules to the PATH + # adds NPM global modules to the PATH if (Test-Path "$env:APPDATA\npm" -PathType Container) { Add-DirectoryToPath "$env:APPDATA\npm" } diff --git a/packages/scripts/setup.sh b/packages/scripts/setup.sh index e880ce4e..a4dafefa 100755 --- a/packages/scripts/setup.sh +++ b/packages/scripts/setup.sh @@ -6,6 +6,7 @@ if [ "${CI:-}" = "true" ]; then set -x fi +# displays an error message and exits the script err() { for _line in "$@"; do echo "$_line" >&2 @@ -13,6 +14,7 @@ err() { exit 1 } +# checks if a command/program exists has() { for prog in "$@"; do if ! command -v "$prog" 1>/dev/null 2>&1; then @@ -21,6 +23,7 @@ has() { done } +# runs a specified command with sudo sudo() { if [ "$(id -u)" -eq 0 ]; then "$@" @@ -29,6 +32,7 @@ sudo() { fi } +# fails the script at a specific line with an unknown error script_failure() { if [ -n "${1:-}" ]; then _line="on line $1" @@ -40,9 +44,10 @@ script_failure() { trap 'script_failure ${LINENO:-}' ERR +# checks if we are running in a windows environment case "${OSTYPE:-}" in 'msys' | 'mingw' | 'cygwin') - err 'Bash for Windows is not supported, please use Powershell or CMD' + err 'Bash for Windows is not supported, please use Powershell or CMD and run setup.ps1' ;; esac @@ -53,6 +58,7 @@ if [ "${CI:-}" != "true" ]; then echo 'Press Enter to continue' read -r + # checks if pnpm is installed if ! has pnpm; then err 'pnpm was not found.' \ "Ensure the 'pnpm' command is in your \$PATH." \ @@ -60,6 +66,7 @@ if [ "${CI:-}" != "true" ]; then 'https://pnpm.io/installation' fi + # checks if rustc and cargo are installed if ! has rustc cargo; then err 'Rust was not found.' \ "Ensure the 'rustc' and 'cargo' binaries are in your \$PATH." \ @@ -69,12 +76,14 @@ if [ "${CI:-}" != "true" ]; then echo fi -# Install system deps +# installs system deps case "$(uname)" in "Darwin") if [ "$(uname -m)" = 'x86_64' ] && ! [ "${CI:-}" = "true" ]; then brew install nasm fi + + echo ;; "Linux") # https://v2.tauri.app/start/prerequisites/ @@ -84,7 +93,7 @@ case "$(uname)" in # Tauri dependencies set -- build-essential curl wget file libssl-dev libgtk-3-dev librsvg2-dev \ - libwebkit2gtk-4.1-dev libayatana-appindicator3-dev libxdo-dev libvips42 + libwebkit2gtk-4.1-dev libayatana-appindicator3-dev libxdo-dev libdbus-1-dev libvips42 sudo apt-get -y update sudo apt-get -y install "$@" @@ -93,7 +102,7 @@ case "$(uname)" in echo "Installing dependencies with pacman..." # Tauri dependencies - set -- appmenu-gtk-module libappindicator-gtk3 base-devel curl wget file openssl gtk3 librsvg webkit2gtk-4.1 libayatana-appindicator xdotool libvips + set -- appmenu-gtk-module libappindicator-gtk3 base-devel curl wget file openssl gtk3 librsvg webkit2gtk-4.1 libayatana-appindicator dbus xdotool libvips sudo pacman -Sy --needed "$@" elif has dnf; then @@ -107,7 +116,7 @@ case "$(uname)" in fi # Tauri dependencies - set -- openssl webkit2gtk4.1-devel openssl-devel curl wget file libappindicator-gtk3-devel librsvg2-devel libxdo-devel vips + set -- openssl webkit2gtk4.1-devel openssl-devel curl wget file libappindicator-gtk3-devel librsvg2-devel libxdo-devel dbus vips sudo dnf install "$@" elif has apk; then @@ -117,7 +126,7 @@ case "$(uname)" in # Tauri dependencies set -- build-base curl wget file openssl-dev gtk+3.0-dev librsvg-dev \ - webkit2gtk-4.1-dev libayatana-indicator-dev xdotool vips + webkit2gtk-4.1-dev libayatana-indicator-dev xdotool-dev dbus-dev vips sudo apk add "$@" elif has emerge; then @@ -154,6 +163,7 @@ case "$(uname)" in ;; esac +# installs cargo-watch for development purposes if [ "${CI:-}" != "true" ]; then echo "Installing Rust tools..." diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 81282ad5..87002b5c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@flowr/eslint-config': - specifier: ^3.9.1 - version: 3.9.1(@unocss/eslint-plugin@0.61.5(eslint@9.7.0)(typescript@5.5.4))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.4))(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.4)(vitest@2.0.4(@types/node@20.14.12)(@vitest/ui@2.0.4)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0)) + specifier: ^3.10.0 + version: 3.10.0(@unocss/eslint-plugin@0.61.5(eslint@9.7.0)(typescript@5.5.4))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.4))(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.4)(vitest@2.0.4(@types/node@20.14.12)(@vitest/ui@2.0.4)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0)) '@types/node': specifier: ^20.14.12 version: 20.14.12 @@ -61,19 +61,19 @@ importers: version: 0.2.3 '@rspc/solid-query': specifier: ^0.2.3 - version: 0.2.3(@tanstack/solid-query@5.51.9(solid-js@1.8.18))(solid-js@1.8.18) + version: 0.2.3(@tanstack/solid-query@5.51.9(solid-js@1.8.19))(solid-js@1.8.19) '@rspc/tauri': specifier: ^0.2.0 version: 0.2.0(@tauri-apps/api@2.0.0-beta.14) '@solid-primitives/refs': specifier: ^1.0.8 - version: 1.0.8(solid-js@1.8.18) + version: 1.0.8(solid-js@1.8.19) '@solidjs/router': specifier: ^0.14.1 - version: 0.14.1(solid-js@1.8.18) + version: 0.14.1(solid-js@1.8.19) '@tanstack/solid-query': specifier: ^5.51.9 - version: 5.51.9(solid-js@1.8.18) + version: 5.51.9(solid-js@1.8.19) '@tauri-apps/api': specifier: ^2.0.0-beta.13 version: 2.0.0-beta.14 @@ -85,35 +85,35 @@ importers: version: https://codeload.github.com/tauri-apps/tauri-plugin-shell/tar.gz/adb938ddf434547ae35f74dc1a080908da03ea96 '@thisbeyond/solid-dnd': specifier: ^0.7.5 - version: 0.7.5(solid-js@1.8.18) + version: 0.7.5(solid-js@1.8.19) '@thisbeyond/solid-select': specifier: ^0.15.0 - version: 0.15.0(solid-js@1.8.18) + version: 0.15.0(solid-js@1.8.19) '@unocss/reset': specifier: ^0.61.5 version: 0.61.5 '@untitled-theme/icons-solid': specifier: ^0.10.5 - version: 0.10.5(solid-js@1.8.18) + version: 0.10.5(solid-js@1.8.19) overlayscrollbars: specifier: ^2.9.2 version: 2.9.2 overlayscrollbars-solid: specifier: ^0.5.5 - version: 0.5.5(overlayscrollbars@2.9.2)(solid-js@1.8.18) + version: 0.5.5(overlayscrollbars@2.9.2)(solid-js@1.8.19) solid-js: - specifier: ^1.8.18 - version: 1.8.18 + specifier: ^1.8.19 + version: 1.8.19 solid-transition-group: specifier: ^0.2.3 - version: 0.2.3(solid-js@1.8.18) + version: 0.2.3(solid-js@1.8.19) uuid: specifier: ^10.0.0 version: 10.0.0 devDependencies: '@solidjs/testing-library': specifier: ^0.8.9 - version: 0.8.9(@solidjs/router@0.14.1(solid-js@1.8.18))(solid-js@1.8.18) + version: 0.8.9(@solidjs/router@0.14.1(solid-js@1.8.19))(solid-js@1.8.19) '@tauri-apps/cli': specifier: ^2.0.0-beta.20 version: 2.0.0-beta.20 @@ -131,13 +131,13 @@ importers: version: 1.77.8 unocss: specifier: ^0.61.5 - version: 0.61.5(postcss@8.4.39)(rollup@4.19.0)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) + version: 0.61.5(postcss@8.4.40)(rollup@4.19.0)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) vite-plugin-solid: specifier: ^2.10.2 - version: 2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.18)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) + version: 2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.19)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) vite-plugin-solid-svg: specifier: ^0.8.1 - version: 0.8.1(solid-js@1.8.18)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) + version: 0.8.1(solid-js@1.8.19)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) vite-tsconfig-paths: specifier: ^4.3.2 version: 4.3.2(typescript@5.5.4)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) @@ -149,16 +149,16 @@ importers: version: 0.2.3 '@rspc/solid-query': specifier: ^0.2.3 - version: 0.2.3(@tanstack/solid-query@5.51.9(solid-js@1.8.18))(solid-js@1.8.18) + version: 0.2.3(@tanstack/solid-query@5.51.9(solid-js@1.8.19))(solid-js@1.8.19) '@rspc/tauri': specifier: ^0.2.0 version: 0.2.0(@tauri-apps/api@2.0.0-beta.15) '@solid-primitives/deep': specifier: ^0.2.9 - version: 0.2.9(solid-js@1.8.18) + version: 0.2.9(solid-js@1.8.19) '@tanstack/solid-query': specifier: ^5.51.9 - version: 5.51.9(solid-js@1.8.18) + version: 5.51.9(solid-js@1.8.19) fast-equals: specifier: ^5.0.1 version: 5.0.1 @@ -166,8 +166,8 @@ importers: specifier: ^0.3.9 version: 0.3.9 solid-js: - specifier: ^1.8.18 - version: 1.8.18 + specifier: ^1.8.19 + version: 1.8.19 zod: specifier: ^3.23.8 version: 3.23.8 @@ -175,8 +175,8 @@ importers: packages/scripts: dependencies: '@flowr/utils': - specifier: ^3.9.1 - version: 3.9.1 + specifier: ^3.10.0 + version: 3.10.0 '@iarna/toml': specifier: ^2.2.5 version: 2.2.5 @@ -206,16 +206,6 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/eslint-plugin-unused-imports@4.0.0': - resolution: {integrity: sha512-bvM3EnoradE3WbdOWafEGj0VzTi455gWvjmIHsmpWoIHJ6XehjnJh8Dq3+sz8t3bh14LQyFBKTx3m24q2zE1dw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^8.0.0-0 - eslint: ^9.0.0 - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - '@antfu/install-pkg@0.1.1': resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} @@ -590,24 +580,25 @@ packages: resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@flowr/eslint-config@3.9.1': - resolution: {integrity: sha512-xKukUf250BQ/FsEzzdNcCRfuSZ9lgzfTWnkWU8OaTgtLukOUyk+qhVCKIswG5jvoEpZeGHU43fGbOyGVB0PIBQ==} + '@flowr/eslint-config@3.10.0': + resolution: {integrity: sha512-ESQnoQGUU/48Jn/M+2EKQGpr2taz2+2bIc6ypk6yxhYEOgKIx6QMesxKwOEyS4h4qLn2JwUuYQ4bKX2jAh5Yrg==} engines: {node: '>=20'} peerDependencies: '@eslint-react/eslint-plugin': ^1.5.8 '@prettier/plugin-xml': ^3.4.1 '@tanstack/eslint-plugin-query': ^5.50.1 - '@unocss/eslint-plugin': '>=0.50.0' + '@unocss/eslint-plugin': '>=0.59.4 < 1' astro-eslint-parser: ^1.0.2 eslint: '>=8.40.0' eslint-plugin-astro: ^1.2.0 eslint-plugin-format: '>=0.1.0' + eslint-plugin-jsx-a11y: ^6.9.0 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-solid: ^0.14.0 eslint-plugin-svelte: '>=2.39.0' eslint-plugin-vue: ^9.26.0 eslint-plugin-vuejs-accessibility: ^2.3.0 - eslint-processor-vue-blocks: ^0.1.2 + eslint-processor-vue-blocks: '>=0.1.2' prettier-plugin-astro: ^0.14.0 prettier-plugin-slidev: ^1.0.5 svelte-eslint-parser: '>=0.36.0' @@ -627,6 +618,8 @@ packages: optional: true eslint-plugin-format: optional: true + eslint-plugin-jsx-a11y: + optional: true eslint-plugin-react-hooks: optional: true eslint-plugin-solid: @@ -648,8 +641,8 @@ packages: vue-eslint-parser: optional: true - '@flowr/utils@3.9.1': - resolution: {integrity: sha512-SArBTE/8r9T0y0GPcGMEwtwpDxrJF/qrDRBt2s8XGAgDmj7msLRXe2EX0IsuIw6i3PPSOaTYbEAn8EawHn0MJw==} + '@flowr/utils@3.10.0': + resolution: {integrity: sha512-tr8c3m0rzBDab1A14yi6y19rapB8isULCYnYvpJacZmbyYaGCx6Ijmu00gtvv+RGkJcIhrJVueqC5B6YZ8KSVA==} engines: {node: '>=20'} '@fontsource/poppins@5.0.14': @@ -1205,8 +1198,8 @@ 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.51': - resolution: {integrity: sha512-zT8Ib31deJCqRVJepZOMFoHiFAsSHOh5TmedcFeqyiMuzrqBMtF95iv6mPJqFDIXNgxmTkahpRan1z043ckBnA==} + '@typescript-eslint/scope-manager@8.0.0-alpha.54': + resolution: {integrity: sha512-z+5GlCAskUTTWOFF2G7olTyKZyn+AVdDkiNCP2fhDtOCV1ePX1EaXy1uwqRRROf8p8uryj7vR7OtIErZE5yAng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/type-utils@8.0.0-alpha.41': @@ -1230,8 +1223,8 @@ 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.51': - resolution: {integrity: sha512-joqeu3jITe9BbgXAggKKg9mBIGDL6mAf2JVlo00zWP50u4qnsa3NWKMwWp77pjtI9E2DPU0vlTEdL+v/3aTPJA==} + '@typescript-eslint/types@8.0.0-alpha.54': + resolution: {integrity: sha512-p4CGzb2UW2tJgk7zRL1Iwyd4qMuPnF2TL5/VdEcz2KANHkTReagQ6B3MzJGcuNIK7t+ysolZZILJpj+8cHBzsQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.16.0': @@ -1261,8 +1254,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.0.0-alpha.51': - resolution: {integrity: sha512-p3kD3rVdqmr4Iga86xzUR5wTsIKof/GsqnUMWZbmFpD3fmMXs1VLoXJegTqVMtWncu14dZUohRV2xPSScBAnxg==} + '@typescript-eslint/typescript-estree@8.0.0-alpha.54': + resolution: {integrity: sha512-oCgHCQm88pBx9QwfGVE42LXVRG3M5PUIP4w521yGMijHn5FEt+E/NGMPU3NXWKUvp0LpEkxABSinYdz69aZITA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1288,8 +1281,8 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.0.0-alpha.51': - resolution: {integrity: sha512-OJac7/t6M/jQlgAQSM2yffKXZL8d/6vTbQPChC5v4oGHFuKHF2dEFeevNJlIS9iR6EtquRsHup2GDwqw6bWyrw==} + '@typescript-eslint/utils@8.0.0-alpha.54': + resolution: {integrity: sha512-Xu+dl3SJ4NOuzSHpRj1nIJPsoNTcPuG6EFVolrEVl+GZReaiBdexwpTo4/gV64khZEVewEIdYV3FBs5elIjI0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1306,8 +1299,8 @@ 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.51': - resolution: {integrity: sha512-bOLfR14nLfhO9BBD1YpmnQSTNTapAIegKsb4Ms1RAQXkJRKIeuLS42AEYRM8uvLiNLk0hDIBjCnMPTAyDAWLbw==} + '@typescript-eslint/visitor-keys@8.0.0-alpha.54': + resolution: {integrity: sha512-lS8wrI6Vxw6ebIi+ehocAjXLG43bN5JCC8+wtGDD3Xw9O/EVpanAVdftefJs/mlK87eyccvVIiiHgD294TpIEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@unocss/astro@0.61.5': @@ -1871,13 +1864,14 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-perfectionist@2.11.0: - resolution: {integrity: sha512-XrtBtiu5rbQv88gl+1e2RQud9te9luYNvKIgM9emttQ2zutHPzY/AQUucwxscDKV4qlTkvLTxjOFvxqeDpPorw==} + eslint-plugin-perfectionist@3.0.0: + resolution: {integrity: sha512-B+leJTo1YjxiNIm8Yv0rCHp4eWh9RaJHO6T1ifxd26wg8NCbEiWSdqZVeYLWPCI+zS1dlf89WpOkUzG7cE4vtQ==} + engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: astro-eslint-parser: ^1.0.2 eslint: '>=8.0.0' svelte: '>=3.0.0' - svelte-eslint-parser: ^0.37.0 + svelte-eslint-parser: ^0.40.0 vue-eslint-parser: '>=9.0.0' peerDependenciesMeta: astro-eslint-parser: @@ -1889,8 +1883,8 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-petal@3.9.1: - resolution: {integrity: sha512-SmH9iIHgbqGMOzAOlHaznZfNf2ievd/IlWjCKSYIq8daRt0QZLsJqEtvevxDL+KXjp6ctMEXkmJKA4sQein+tQ==} + eslint-plugin-petal@3.10.0: + resolution: {integrity: sha512-0wGN+/9pPmCEHHatLluj/lOH14I5IYGPXOdNO5ihCFT4ubDWIDDhHyruJCiSncQ3fVikz5HS2PArqTYiELSMVg==} engines: {node: '>=20'} peerDependencies: eslint: '>=8.40.0' @@ -1919,6 +1913,16 @@ packages: peerDependencies: eslint: '>=8.56.0' + eslint-plugin-unused-imports@4.0.1: + resolution: {integrity: sha512-rax76s05z64uQgG9YXsWFmXrgjkaK79AvfeAWiSxhPP6RVGxeRaj4+2u+wxxu/mDy2pmJoOy1QTOEALMia2xGQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 + eslint: ^9.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + eslint-plugin-vitest@0.5.4: resolution: {integrity: sha512-um+odCkccAHU53WdKAw39MY61+1x990uXjSPguUCq3VcEHdqJrOb8OTMrbYlY6f9jAKx7x98kLVlIe3RJeJqoQ==} engines: {node: ^18.0.0 || >= 20.0.0} @@ -2484,6 +2488,10 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -2717,6 +2725,10 @@ packages: resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -2853,14 +2865,14 @@ packages: engines: {node: '>=10'} hasBin: true - seroval-plugins@1.0.7: - resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} + seroval-plugins@1.1.0: + resolution: {integrity: sha512-KtcJg590L3X3dd7ixs6am4UGVcV69TyjYhHtanIdQJq4dy2OceWXmmvWrYx7oFDNe+LNdxdWd0I5BQXuV5fBhA==} engines: {node: '>=10'} peerDependencies: seroval: ^1.0 - seroval@1.0.7: - resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} + seroval@1.1.0: + resolution: {integrity: sha512-74Wpe+hhPx4V8NFe00I2Fu9gTJopKoH5vE7nCqFzVgKOXV8AnN23T58K79QLYQotzGpH93UZ+UN2Y11j9huZJg==} engines: {node: '>=10'} shebang-command@2.0.0: @@ -2895,8 +2907,8 @@ packages: slashes@3.0.12: resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} - solid-js@1.8.18: - resolution: {integrity: sha512-cpkxDPvO/AuKBugVv6xKFd1C9VC0XZMu4VtF56IlHoux8HgyW44uqNSWbozMnVcpIzHIhS3vVXPAVZYM26jpWw==} + solid-js@1.8.19: + resolution: {integrity: sha512-h8z/TvTQYsf894LM9Iau/ZW2iAKrCzAWDwjPhMcXnonmW1OIIihc28wp82b1wwei1p81fH5+gnfNOe8RzLbDRQ==} solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} @@ -3339,8 +3351,8 @@ packages: resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} engines: {node: ^14.17.0 || >=16.0.0} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true @@ -3372,13 +3384,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-plugin-unused-imports@4.0.0(@typescript-eslint/eslint-plugin@8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)': - dependencies: - eslint: 9.7.0 - eslint-rule-composer: 0.3.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4) - '@antfu/install-pkg@0.1.1': dependencies: execa: 5.1.1 @@ -3806,9 +3811,8 @@ snapshots: '@eslint/object-schema@2.1.4': {} - '@flowr/eslint-config@3.9.1(@unocss/eslint-plugin@0.61.5(eslint@9.7.0)(typescript@5.5.4))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.4))(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.4)(vitest@2.0.4(@types/node@20.14.12)(@vitest/ui@2.0.4)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0))': + '@flowr/eslint-config@3.10.0(@unocss/eslint-plugin@0.61.5(eslint@9.7.0)(typescript@5.5.4))(eslint-plugin-solid@0.14.1(eslint@9.7.0)(typescript@5.5.4))(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.4)(vitest@2.0.4(@types/node@20.14.12)(@vitest/ui@2.0.4)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.7.0))': dependencies: - '@antfu/eslint-plugin-unused-imports': 4.0.0(@typescript-eslint/eslint-plugin@8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0) '@antfu/install-pkg': 0.3.3 '@clack/prompts': 0.7.0 '@eslint-community/eslint-plugin-eslint-comments': 4.3.0(eslint@9.7.0) @@ -3824,11 +3828,12 @@ snapshots: eslint-plugin-jsonc: 2.16.0(eslint@9.7.0) 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.4)(vue-eslint-parser@9.4.3(eslint@9.7.0)) - eslint-plugin-petal: 3.9.1(eslint@9.7.0) + eslint-plugin-perfectionist: 3.0.0(eslint@9.7.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.7.0)) + eslint-plugin-petal: 3.10.0(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) + eslint-plugin-unused-imports: 4.0.1(@typescript-eslint/eslint-plugin@8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0) eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4)(vitest@2.0.4(@types/node@20.14.12)(@vitest/ui@2.0.4)(jsdom@24.1.1)(sass@1.77.8)) eslint-plugin-yml: 1.14.0(eslint@9.7.0) find-up: 7.0.0 @@ -3850,7 +3855,7 @@ snapshots: - typescript - vitest - '@flowr/utils@3.9.1': {} + '@flowr/utils@3.10.0': {} '@fontsource/poppins@5.0.14': {} @@ -4040,12 +4045,12 @@ snapshots: '@rspc/client': 0.2.3 '@tanstack/query-core': 5.51.1 - '@rspc/solid-query@0.2.3(@tanstack/solid-query@5.51.9(solid-js@1.8.18))(solid-js@1.8.18)': + '@rspc/solid-query@0.2.3(@tanstack/solid-query@5.51.9(solid-js@1.8.19))(solid-js@1.8.19)': dependencies: '@rspc/client': 0.2.3 '@rspc/query-core': 0.2.3(@rspc/client@0.2.3) - '@tanstack/solid-query': 5.51.9(solid-js@1.8.18) - solid-js: 1.8.18 + '@tanstack/solid-query': 5.51.9(solid-js@1.8.19) + solid-js: 1.8.19 '@rspc/tauri@0.2.0(@tauri-apps/api@2.0.0-beta.14)': dependencies: @@ -4061,44 +4066,44 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} - '@solid-primitives/deep@0.2.9(solid-js@1.8.18)': + '@solid-primitives/deep@0.2.9(solid-js@1.8.19)': dependencies: - '@solid-primitives/memo': 1.3.9(solid-js@1.8.18) - solid-js: 1.8.18 + '@solid-primitives/memo': 1.3.9(solid-js@1.8.19) + solid-js: 1.8.19 - '@solid-primitives/memo@1.3.9(solid-js@1.8.18)': + '@solid-primitives/memo@1.3.9(solid-js@1.8.19)': dependencies: - '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.18) - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 + '@solid-primitives/scheduled': 1.4.3(solid-js@1.8.19) + '@solid-primitives/utils': 6.2.3(solid-js@1.8.19) + solid-js: 1.8.19 - '@solid-primitives/refs@1.0.8(solid-js@1.8.18)': + '@solid-primitives/refs@1.0.8(solid-js@1.8.19)': dependencies: - '@solid-primitives/utils': 6.2.3(solid-js@1.8.18) - solid-js: 1.8.18 + '@solid-primitives/utils': 6.2.3(solid-js@1.8.19) + solid-js: 1.8.19 - '@solid-primitives/scheduled@1.4.3(solid-js@1.8.18)': + '@solid-primitives/scheduled@1.4.3(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 - '@solid-primitives/transition-group@1.0.5(solid-js@1.8.18)': + '@solid-primitives/transition-group@1.0.5(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 - '@solid-primitives/utils@6.2.3(solid-js@1.8.18)': + '@solid-primitives/utils@6.2.3(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 - '@solidjs/router@0.14.1(solid-js@1.8.18)': + '@solidjs/router@0.14.1(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 - '@solidjs/testing-library@0.8.9(@solidjs/router@0.14.1(solid-js@1.8.18))(solid-js@1.8.18)': + '@solidjs/testing-library@0.8.9(@solidjs/router@0.14.1(solid-js@1.8.19))(solid-js@1.8.19)': dependencies: '@testing-library/dom': 10.4.0 - solid-js: 1.8.18 + solid-js: 1.8.19 optionalDependencies: - '@solidjs/router': 0.14.1(solid-js@1.8.18) + '@solidjs/router': 0.14.1(solid-js@1.8.19) '@stylistic/eslint-plugin-js@2.6.0-beta.0(eslint@9.7.0)': dependencies: @@ -4119,7 +4124,7 @@ snapshots: '@stylistic/eslint-plugin-plus@2.6.0-beta.0(eslint@9.7.0)(typescript@5.5.4)': dependencies: '@types/eslint': 8.56.11 - '@typescript-eslint/utils': 8.0.0-alpha.51(eslint@9.7.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.0-alpha.54(eslint@9.7.0)(typescript@5.5.4) eslint: 9.7.0 transitivePeerDependencies: - supports-color @@ -4129,7 +4134,7 @@ snapshots: dependencies: '@stylistic/eslint-plugin-js': 2.6.0-beta.0(eslint@9.7.0) '@types/eslint': 8.56.11 - '@typescript-eslint/utils': 8.0.0-alpha.51(eslint@9.7.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.0.0-alpha.54(eslint@9.7.0)(typescript@5.5.4) eslint: 9.7.0 transitivePeerDependencies: - supports-color @@ -4151,10 +4156,10 @@ snapshots: '@tanstack/query-core@5.51.9': {} - '@tanstack/solid-query@5.51.9(solid-js@1.8.18)': + '@tanstack/solid-query@5.51.9(solid-js@1.8.19)': dependencies: '@tanstack/query-core': 5.51.9 - solid-js: 1.8.18 + solid-js: 1.8.19 '@tauri-apps/api@2.0.0-beta.14': {} @@ -4233,13 +4238,13 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@thisbeyond/solid-dnd@0.7.5(solid-js@1.8.18)': + '@thisbeyond/solid-dnd@0.7.5(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 - '@thisbeyond/solid-select@0.15.0(solid-js@1.8.18)': + '@thisbeyond/solid-select@0.15.0(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 '@trysound/sax@0.2.0': {} @@ -4353,10 +4358,10 @@ 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.51': + '@typescript-eslint/scope-manager@8.0.0-alpha.54': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.51 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.51 + '@typescript-eslint/types': 8.0.0-alpha.54 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.54 '@typescript-eslint/type-utils@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4)': dependencies: @@ -4376,7 +4381,7 @@ snapshots: '@typescript-eslint/types@8.0.0-alpha.41': {} - '@typescript-eslint/types@8.0.0-alpha.51': {} + '@typescript-eslint/types@8.0.0-alpha.54': {} '@typescript-eslint/typescript-estree@7.16.0(typescript@5.5.4)': dependencies: @@ -4423,10 +4428,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.0.0-alpha.51(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.0.0-alpha.54(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.51 - '@typescript-eslint/visitor-keys': 8.0.0-alpha.51 + '@typescript-eslint/types': 8.0.0-alpha.54 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.54 debug: 4.3.5 globby: 11.1.0 is-glob: 4.0.3 @@ -4471,12 +4476,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.0.0-alpha.51(eslint@9.7.0)(typescript@5.5.4)': + '@typescript-eslint/utils@8.0.0-alpha.54(eslint@9.7.0)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@9.7.0) - '@typescript-eslint/scope-manager': 8.0.0-alpha.51 - '@typescript-eslint/types': 8.0.0-alpha.51 - '@typescript-eslint/typescript-estree': 8.0.0-alpha.51(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.0.0-alpha.54 + '@typescript-eslint/types': 8.0.0-alpha.54 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.54(typescript@5.5.4) eslint: 9.7.0 transitivePeerDependencies: - supports-color @@ -4497,9 +4502,9 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.41 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.0.0-alpha.51': + '@typescript-eslint/visitor-keys@8.0.0-alpha.54': dependencies: - '@typescript-eslint/types': 8.0.0-alpha.51 + '@typescript-eslint/types': 8.0.0-alpha.54 eslint-visitor-keys: 3.4.3 '@unocss/astro@0.61.5(rollup@4.19.0)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8))': @@ -4561,7 +4566,7 @@ snapshots: gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/postcss@0.61.5(postcss@8.4.39)': + '@unocss/postcss@0.61.5(postcss@8.4.40)': dependencies: '@unocss/config': 0.61.5 '@unocss/core': 0.61.5 @@ -4569,7 +4574,7 @@ snapshots: css-tree: 2.3.1 fast-glob: 3.3.2 magic-string: 0.30.10 - postcss: 8.4.39 + postcss: 8.4.40 '@unocss/preset-attributify@0.61.5': dependencies: @@ -4668,9 +4673,9 @@ snapshots: transitivePeerDependencies: - rollup - '@untitled-theme/icons-solid@0.10.5(solid-js@1.8.18)': + '@untitled-theme/icons-solid@0.10.5(solid-js@1.8.19)': dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 '@vitest/expect@2.0.4': dependencies: @@ -5192,11 +5197,12 @@ snapshots: minimatch: 9.0.5 semver: 7.6.3 - eslint-plugin-perfectionist@2.11.0(eslint@9.7.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.7.0)): + eslint-plugin-perfectionist@3.0.0(eslint@9.7.0)(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.7.0)): dependencies: + '@typescript-eslint/types': 7.17.0 '@typescript-eslint/utils': 7.17.0(eslint@9.7.0)(typescript@5.5.4) eslint: 9.7.0 - minimatch: 9.0.5 + minimatch: 10.0.1 natural-compare-lite: 1.4.0 optionalDependencies: vue-eslint-parser: 9.4.3(eslint@9.7.0) @@ -5204,9 +5210,9 @@ snapshots: - supports-color - typescript - eslint-plugin-petal@3.9.1(eslint@9.7.0): + eslint-plugin-petal@3.10.0(eslint@9.7.0): dependencies: - '@flowr/utils': 3.9.1 + '@flowr/utils': 3.10.0 eslint: 9.7.0 eslint-plugin-regexp@2.6.0(eslint@9.7.0): @@ -5265,6 +5271,13 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-unused-imports@4.0.1(@typescript-eslint/eslint-plugin@8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0): + dependencies: + eslint: 9.7.0 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4) + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@8.0.0-alpha.41(@typescript-eslint/parser@8.0.0-alpha.41(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4))(eslint@9.7.0)(typescript@5.5.4)(vitest@2.0.4(@types/node@20.14.12)(@vitest/ui@2.0.4)(jsdom@24.1.1)(sass@1.77.8)): dependencies: '@typescript-eslint/utils': 7.17.0(eslint@9.7.0)(typescript@5.5.4) @@ -5857,6 +5870,10 @@ snapshots: min-indent@1.0.1: {} + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -5971,10 +5988,10 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - overlayscrollbars-solid@0.5.5(overlayscrollbars@2.9.2)(solid-js@1.8.18): + overlayscrollbars-solid@0.5.5(overlayscrollbars@2.9.2)(solid-js@1.8.19): dependencies: overlayscrollbars: 2.9.2 - solid-js: 1.8.18 + solid-js: 1.8.19 overlayscrollbars@2.9.2: {} @@ -6089,6 +6106,12 @@ snapshots: picocolors: 1.0.1 source-map-js: 1.2.0 + postcss@8.4.40: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + prelude-ls@1.2.1: {} pretty-format@27.5.1: @@ -6251,11 +6274,11 @@ snapshots: semver@7.6.3: {} - seroval-plugins@1.0.7(seroval@1.0.7): + seroval-plugins@1.1.0(seroval@1.1.0): dependencies: - seroval: 1.0.7 + seroval: 1.1.0 - seroval@1.0.7: {} + seroval@1.1.0: {} shebang-command@2.0.0: dependencies: @@ -6281,26 +6304,26 @@ snapshots: slashes@3.0.12: {} - solid-js@1.8.18: + solid-js@1.8.19: dependencies: csstype: 3.1.3 - seroval: 1.0.7 - seroval-plugins: 1.0.7(seroval@1.0.7) + seroval: 1.1.0 + seroval-plugins: 1.1.0(seroval@1.1.0) - solid-refresh@0.6.3(solid-js@1.8.18): + solid-refresh@0.6.3(solid-js@1.8.19): dependencies: '@babel/generator': 7.24.8 '@babel/helper-module-imports': 7.24.7 '@babel/types': 7.24.8 - solid-js: 1.8.18 + solid-js: 1.8.19 transitivePeerDependencies: - supports-color - solid-transition-group@0.2.3(solid-js@1.8.18): + solid-transition-group@0.2.3(solid-js@1.8.19): dependencies: - '@solid-primitives/refs': 1.0.8(solid-js@1.8.18) - '@solid-primitives/transition-group': 1.0.5(solid-js@1.8.18) - solid-js: 1.8.18 + '@solid-primitives/refs': 1.0.8(solid-js@1.8.19) + '@solid-primitives/transition-group': 1.0.5(solid-js@1.8.19) + solid-js: 1.8.19 source-map-js@1.2.0: {} @@ -6498,13 +6521,13 @@ snapshots: universalify@0.2.0: {} - unocss@0.61.5(postcss@8.4.39)(rollup@4.19.0)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)): + unocss@0.61.5(postcss@8.4.40)(rollup@4.19.0)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)): dependencies: '@unocss/astro': 0.61.5(rollup@4.19.0)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) '@unocss/cli': 0.61.5(rollup@4.19.0) '@unocss/core': 0.61.5 '@unocss/extractor-arbitrary-variants': 0.61.5 - '@unocss/postcss': 0.61.5(postcss@8.4.39) + '@unocss/postcss': 0.61.5(postcss@8.4.40) '@unocss/preset-attributify': 0.61.5 '@unocss/preset-icons': 0.61.5 '@unocss/preset-mini': 0.61.5 @@ -6573,20 +6596,20 @@ snapshots: - supports-color - terser - vite-plugin-solid-svg@0.8.1(solid-js@1.8.18)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)): + vite-plugin-solid-svg@0.8.1(solid-js@1.8.19)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)): dependencies: - solid-js: 1.8.18 + solid-js: 1.8.19 svgo: 3.3.2 vite: 5.3.4(@types/node@20.14.12)(sass@1.77.8) - vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.18)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)): + vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.19)(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)): dependencies: '@babel/core': 7.24.8 '@types/babel__core': 7.20.5 babel-preset-solid: 1.8.16(@babel/core@7.24.8) merge-anything: 5.1.7 - solid-js: 1.8.18 - solid-refresh: 0.6.3(solid-js@1.8.18) + solid-js: 1.8.19 + solid-refresh: 0.6.3(solid-js@1.8.19) vite: 5.3.4(@types/node@20.14.12)(sass@1.77.8) vitefu: 0.2.5(vite@5.3.4(@types/node@20.14.12)(sass@1.77.8)) optionalDependencies: @@ -6712,9 +6735,9 @@ snapshots: dependencies: eslint-visitor-keys: 3.4.3 lodash: 4.17.21 - yaml: 2.4.5 + yaml: 2.5.0 - yaml@2.4.5: {} + yaml@2.5.0: {} yn@3.1.1: {}