✨ feature: backport non-prisma stuff from prisma branch

This commit is contained in:
Pauline 2024-07-25 11:20:39 +02:00
parent 2f80658db9
commit 3bff4fbab1
No known key found for this signature in database
GPG key ID: 722BB181973296AE
45 changed files with 430 additions and 370 deletions

View file

@ -1 +0,0 @@
allow-unwrap-in-tests = true

23
.editorconfig Normal file
View file

@ -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

1
.envrc
View file

@ -1 +0,0 @@
use flake

View file

@ -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

124
CONTRIBUTING.md Normal file
View file

@ -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

View file

@ -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" }

View file

@ -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 <https://api.polyfrost.org>, 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.

View file

@ -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"
},

View file

@ -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 }

View file

@ -2,12 +2,12 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<!-- registers our uri handler on macos -->
<!-- registers our uri handler on macos -->
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>org.polyfrost.launcher</string>
<string>OneLauncher</string>
<key>CFBundleURLSchemes</key>
<array>
<string>onelauncher</string>

View file

@ -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,

View file

@ -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 }

View file

@ -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<C
/// Get the latest [`LoaderVersion`] from a [`Loader`].
#[tracing::instrument]
#[onelauncher_debug::debugger]
pub(crate) async fn get_loader_version(
mc_version: String,
loader: Loader,

View file

@ -86,7 +86,6 @@ pub async fn run(path: &ClusterPath) -> crate::Result<Arc<RwLock<ProcessorChild>
/// 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<Optio
/// Try to update a [`Cluster`]'s playtime.
#[tracing::instrument]
#[onelauncher_debug::debugger]
pub async fn update_playtime(path: &ClusterPath) -> crate::Result<()> {
let state = State::get().await?;
let cluster = get(path, None)

View file

@ -27,7 +27,6 @@ pub async fn filter_java_version(java_version: Option<u32>) -> crate::Result<Vec
})
}
#[onelauncher_debug::debugger]
pub async fn install_java(java_version: u32) -> crate::Result<PathBuf> {
let state = State::get().await?;

View file

@ -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,

View file

@ -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,

View file

@ -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<PathBuf> {
/// 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<Option<PathBuf>> {
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<PathBuf>`] of all subfiles.
#[onelauncher_debug::debugger]
#[async_recursion::async_recursion]
#[tracing::instrument]
pub async fn sub(path: &Path) -> crate::Result<Vec<PathBuf>> {

View file

@ -169,7 +169,6 @@ async fn load_instance_cfg(file_path: &Path) -> crate::Result<MMCInstance> {
}
#[tracing::instrument]
#[onelauncher_debug::debugger]
pub async fn import_mmc(
mmc_base_path: PathBuf,
instance_folder: String,

View file

@ -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,

View file

@ -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,

View file

@ -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<I, F, Fut, T>(
stream: I,
limit: Option<usize>,

View file

@ -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.

View file

@ -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,

View file

@ -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<IngressId>,
@ -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,

View file

@ -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<RecommendedWatcher>,
@ -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<RecommendedWatcher>,
@ -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,

View file

@ -30,7 +30,7 @@ impl Directories {
/// Bootstrap the initial settings directory on first startup.
pub fn init_settings_dir() -> Option<PathBuf> {
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.

View file

@ -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,

View file

@ -112,7 +112,6 @@ impl State {
/// Initializes the core OneLauncher state fully.
#[tracing::instrument]
#[onelauncher_debug::debugger]
async fn initialize() -> crate::Result<RwLock<State>> {
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 {

View file

@ -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<PathBuf>,
@ -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<String>,
cache_path: &Path,

View file

@ -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<String>,

View file

@ -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<T>(
url: &str,
json_body: serde_json::Value,

View file

@ -183,7 +183,6 @@ pub async fn locate_java() -> Result<Vec<JavaVersion>, JavaError> {
/// Locate JRE's auto-installed by the launcher instance.
#[tracing::instrument]
#[onelauncher_debug::debugger]
async fn locate_installed_java() -> Result<HashSet<PathBuf>, 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<PathBuf>) -> HashSet<JavaVersion> {
/// 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<JavaVersion> {
let Ok(path) = io::canonicalize(path) else {
return None;

View file

@ -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 }

View file

@ -1,36 +0,0 @@
extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, ItemFn};
/// Macro that isolates <Box>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)
}

View file

@ -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 }

View file

@ -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 {
}
);
}

View file

@ -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",

View file

@ -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"
}
}

View file

@ -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

View file

@ -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": {}
}

View file

@ -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",

View file

@ -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: <PROJECT_ROOT>\scripts\setup.ps1)
# gets project dir (get grandparent dir from script location: <PROJECT_ROOT>\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"
}

View file

@ -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..."

325
pnpm-lock.yaml generated
View file

@ -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: {}