✨ feature: fully implement gamemode and bump deps

Signed-off-by: Pauline <git@ethanlibs.co>
This commit is contained in:
Pauline 2024-08-19 08:52:44 +02:00
parent a87dd17a6e
commit 6e0ed8ee7a
No known key found for this signature in database
GPG key ID: 722BB181973296AE
16 changed files with 331 additions and 283 deletions

View file

@ -12,12 +12,8 @@ charset = utf-8
indent_style = space indent_style = space
indent_size = 2 indent_size = 2
# Rust
# https://github.com/rust-lang/rust/blob/master/src/doc/style/style/whitespace.md
[*.rs] [*.rs]
indent_size = 4
insert_final_newline = false insert_final_newline = false
trim_trailing_whitespace = true
[*.{yaml,yml}] [*.{yaml,yml}]
indent_style = space indent_style = space

View file

@ -21,7 +21,7 @@ You should have received a copy of the GNU General Public License along with thi
Any files depicting [Polyfrost branding](https://polyfrost.org/legal/branding), including the Polyfrost logo, any landing and background images, the OneConfig logo, the OneLauncher logo, and variations thereof, are licensed under the following: Any files depicting [Polyfrost branding](https://polyfrost.org/legal/branding), including the Polyfrost logo, any landing and background images, the OneConfig logo, the OneLauncher logo, and variations thereof, are licensed under the following:
```txt ```txt
All rights reserved. Copyright (C) 2022~2024 Polyfrost All rights reserved. Copyright (C) 2022~CURRENT Polyfrost
``` ```
This includes, but may not be limited to, the following files: This includes, but may not be limited to, the following files:
@ -31,9 +31,9 @@ This includes, but may not be limited to, the following files:
## Additional Libraries ## Additional Libraries
The following are libraries, projects, and codebases which we (Polyfrost and Contributors) copied or modified from, with additional attribution inline (THIS IS A NON-EXHAUSTIVE LIST, IF WE ARE MISSING A LICENSE, PLEASE CHECK OUR [attributions page](https://polyfrost.org/attributions), OR LEAVE A TICKET IN [our Discord server](https://polyfrost.org/discord)): The following are libraries, projects, and codebases which we (Polyfrost and Contributors) copied or modified, with additional attribution inline (THIS IS A NON-EXHAUSTIVE LIST, IF WE ARE MISSING A LICENSE, PLEASE CHECK OUR [attributions page](https://polyfrost.org/attributions), OR LEAVE A TICKET IN [our Discord server](https://polyfrost.org/discord)):
## Prism Launcher ## [Prism Launcher]
```txt ```txt
Prism Launcher - Minecraft Launcher Prism Launcher - Minecraft Launcher
@ -69,7 +69,7 @@ permission notice:
limitations under the License. limitations under the License.
``` ```
## Modrinth App ## [Modrinth App]
```txt ```txt
Modrinth App Modrinth App

397
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -30,7 +30,7 @@ onelauncher_gamemode = { path = "./packages/gamemode" }
# # ============= TAURI ============= # # # # ============= TAURI ============= # #
# tauri uses latest crates.io rc channel # tauri uses latest crates.io rc channel
tauri = { version = "=2.0.0-rc.2", features = [ tauri = { version = "=2.0.0-rc.3", features = [
"rustls-tls", "rustls-tls",
"tracing", "tracing",
"specta", "specta",
@ -39,21 +39,21 @@ tauri = { version = "=2.0.0-rc.2", features = [
] } ] }
# tauri-build is the codegen utility for our tauri buildscript. # tauri-build is the codegen utility for our tauri buildscript.
tauri-build = { version = "=2.0.0-rc.2" } tauri-build = { version = "=2.0.0-rc.3" }
# tauri-plugin-shell adds a bridge for opening urls and paths in the frontend. # tauri-plugin-shell adds a bridge for opening urls and paths in the frontend.
tauri-plugin-shell = { version = "=2.0.0-rc.0" } tauri-plugin-shell = { version = "=2.0.0-rc.1" }
# tauri-plugin-window-state saves the window position and size to be restored. # tauri-plugin-window-state saves the window position and size to be restored.
tauri-plugin-window-state = { version = "=2.0.0-rc.0" } tauri-plugin-window-state = { version = "=2.0.0-rc.1" }
# tauri-plugin-single-instance ensures that only one instance of the app is running. # tauri-plugin-single-instance ensures that only one instance of the app is running.
tauri-plugin-single-instance = { version = "=2.0.0-rc.0" } tauri-plugin-single-instance = { version = "=2.0.0-rc.0" }
# tauri-plugin-clipboard-manager adds a bridge for reading/writing to the clipboard. # tauri-plugin-clipboard-manager adds a bridge for reading/writing to the clipboard.
tauri-plugin-clipboard-manager = { version = "=2.0.0-rc.0" } tauri-plugin-clipboard-manager = { version = "=2.0.0-rc.1" }
# tauri-plugin-updater allows for us to use it's functionality for in-app updates. # tauri-plugin-updater allows for us to use it's functionality for in-app updates.
tauri-plugin-updater = { version = "=2.0.0-rc.0" } tauri-plugin-updater = { version = "=2.0.0-rc.1" }
# tauri-plugin-dialog adds a bridge for opening file manager and message dialogs. # tauri-plugin-dialog adds a bridge for opening file manager and message dialogs.
tauri-plugin-dialog = { version = "=2.0.0-rc.0" } tauri-plugin-dialog = { version = "=2.0.0-rc.1" }
# tauri-plugin-deep-link adds a way to handle custom uri schemes (onelauncher://) # tauri-plugin-deep-link adds a way to handle custom uri schemes (onelauncher://)
tauri-plugin-deep-link = { version = "=2.0.0-rc.0" } tauri-plugin-deep-link = { version = "=2.0.0-rc.1" }
# # ============= CORE ============= # # # # ============= CORE ============= # #
# rspc is used as a faster and more intuitive replacement for tauri-specta # rspc is used as a faster and more intuitive replacement for tauri-specta
@ -84,15 +84,11 @@ specta = { version = "=2.0.0-rc.20", features = [
] } ] }
# tauri-specta is the tauri adapter for specta. # tauri-specta is the tauri adapter for specta.
tauri-specta = { version = "=2.0.0-rc.16", features = [ "javascript", "typescript", "derive" ] } tauri-specta = { version = "=2.0.0-rc.17", features = [ "javascript", "typescript", "derive" ] }
# specta-typescript is the typescript adapter for specta. # specta-typescript is the typescript adapter for specta.
specta-typescript = { version = "=0.0.7" } specta-typescript = { version = "=0.0.7" }
# rspc-specta2 is the specta v2 (rc) adapter for rspc. # rspc-specta2 is the specta v2 (rc) adapter for rspc.
rspc-tauri2 = { version = "=0.0.1" } rspc-tauri2 = { version = "=0.0.1" }
# # ============= MINECRAFT ============= # #
# core utilities for minecraft and mod management with pulseflow apis # core utilities for minecraft and mod management with pulseflow apis
interpulse = { version = "1", features = [ "specta" ] } interpulse = { version = "1", features = [ "specta" ] }
@ -195,7 +191,7 @@ features = [
] ]
default-features = false default-features = false
[patch.crates-io] # we hack to the high heavens [patch.crates-io]
# rspc = { git = "https://github.com/oscartbeaumont/rspc", rev = "9f26d6400affdb501837cb023678268ad72feb9b" } # rspc = { git = "https://github.com/oscartbeaumont/rspc", rev = "9f26d6400affdb501837cb023678268ad72feb9b" }
# rspc-tauri2 = { git = "https://github.com/specta-rs/tauri2", rev = "6b9419566e2a826fb2a62538c7647f4524ab0fea" } # rspc-tauri2 = { git = "https://github.com/specta-rs/tauri2", rev = "6b9419566e2a826fb2a62538c7647f4524ab0fea" }

View file

@ -4,6 +4,7 @@
- [ ] migrate api commands that currently use `tauri-specta` but don't actually rely on `tauri` to `rspc` - [ ] migrate api commands that currently use `tauri-specta` but don't actually rely on `tauri` to `rspc`
- waiting on `rspc` to update to the latest version (hopefully once tauri comes out of rc) - waiting on `rspc` to update to the latest version (hopefully once tauri comes out of rc)
- [ ] bump `tauri` to stable v2 when it releases. - [ ] bump `tauri` to stable v2 when it releases.
- [x] bump `tauri` to latest rc v2.
- [ ] test all major version/loader combos launching and mod loading. - [ ] test all major version/loader combos launching and mod loading.
- legacy fabric, babric, nilloader, java agent support - legacy fabric, babric, nilloader, java agent support
- nilloader <https://github.com/modrinth/labrinth/issues/903> <https://github.com/orgs/modrinth/discussions/45> - nilloader <https://github.com/modrinth/labrinth/issues/903> <https://github.com/orgs/modrinth/discussions/45>
@ -12,7 +13,7 @@
- [ ] better debug logging and mc logging, for the launcher and spawn - [ ] better debug logging and mc logging, for the launcher and spawn
- [ ] implement forgewrapper instead of processing ourselves - [ ] implement forgewrapper instead of processing ourselves
- [ ] allow per-cluster sandboxing - [ ] allow per-cluster sandboxing
- [ ] implement gamemode - [x] implement gamemode
- [ ] better toml support - [ ] better toml support
- [ ] make all tauri events into tauri_specta events - [ ] make all tauri events into tauri_specta events
- [ ] apple and windows signing - [ ] apple and windows signing

View file

@ -23,6 +23,6 @@
"@onelauncher/frontend": "workspace:*" "@onelauncher/frontend": "workspace:*"
}, },
"devDependencies": { "devDependencies": {
"@tauri-apps/cli": "=2.0.0-rc.3" "@tauri-apps/cli": "=2.0.0-rc.4"
} }
} }

View file

@ -28,7 +28,7 @@
"@solidjs/router": "^0.14.3", "@solidjs/router": "^0.14.3",
"@t3-oss/env-core": "^0.11.0", "@t3-oss/env-core": "^0.11.0",
"@tanstack/solid-query": "^5.51.21", "@tanstack/solid-query": "^5.51.21",
"@tauri-apps/api": "=2.0.0-rc.0", "@tauri-apps/api": "=2.0.0-rc.1",
"@tauri-apps/plugin-clipboard-manager": "=2.0.0-rc.0", "@tauri-apps/plugin-clipboard-manager": "=2.0.0-rc.0",
"@tauri-apps/plugin-dialog": "=2.0.0-rc.0", "@tauri-apps/plugin-dialog": "=2.0.0-rc.0",
"@tauri-apps/plugin-shell": "=2.0.0-rc.0", "@tauri-apps/plugin-shell": "=2.0.0-rc.0",
@ -47,7 +47,7 @@
"devDependencies": { "devDependencies": {
"@sentry/vite-plugin": "^2.22.2", "@sentry/vite-plugin": "^2.22.2",
"@solidjs/testing-library": "^0.8.9", "@solidjs/testing-library": "^0.8.9",
"@tauri-apps/cli": "=2.0.0-rc.3", "@tauri-apps/cli": "=2.0.0-rc.4",
"@testing-library/jest-dom": "^6.4.8", "@testing-library/jest-dom": "^6.4.8",
"@types/uuid": "^10.0.0", "@types/uuid": "^10.0.0",
"jsdom": "^24.1.1", "jsdom": "^24.1.1",

View file

@ -56,7 +56,7 @@
}, },
"devDependencies": { "devDependencies": {
"@flowr/eslint-config": "^3.12.1", "@flowr/eslint-config": "^3.12.1",
"@types/node": "^22.4.0", "@types/node": "^22.4.1",
"@unocss/eslint-plugin": "^0.62.2", "@unocss/eslint-plugin": "^0.62.2",
"@vitest/ui": "^2.0.5", "@vitest/ui": "^2.0.5",
"bumpp": "^9.5.1", "bumpp": "^9.5.1",

View file

@ -19,22 +19,13 @@ specta = [ "dep:specta" ]
cli = [ "dep:indicatif" ] cli = [ "dep:indicatif" ]
[dependencies] [dependencies]
# features[default]
onelauncher_macros = { workspace = true } onelauncher_macros = { workspace = true }
# GUI-only deps
tauri = { workspace = true, optional = true }
tauri-specta = { workspace = true, optional = true }
specta = { workspace = true, optional = true }
# CLI-only deps
indicatif = { workspace = true, optional = true }
interpulse = { workspace = true } interpulse = { workspace = true }
tracing = { workspace = true } tracing = { workspace = true }
tracing-subscriber = { workspace = true } tracing-subscriber = { workspace = true }
tracing-error = { workspace = true } tracing-error = { workspace = true }
tracing-appender = { workspace = true } tracing-appender = { workspace = true }
# we use notify to track instance directories (i.e. if a user uses a file manager to change managed files, or if a crash happens)
notify = { workspace = true } notify = { workspace = true }
notify-debouncer-mini = { workspace = true } notify-debouncer-mini = { workspace = true }
iota_stronghold = { workspace = true } iota_stronghold = { workspace = true }
@ -74,8 +65,18 @@ base64 = { workspace = true }
async-compression = { workspace = true } async-compression = { workspace = true }
flate2 = { workspace = true } flate2 = { workspace = true }
[target.'cfg(windows)'.dependencies] # features[tauri]
tauri = { workspace = true, optional = true }
tauri-specta = { workspace = true, optional = true }
# features[specta]
specta = { workspace = true, optional = true }
# features[cli]
indicatif = { workspace = true, optional = true }
[target.'cfg(target_os = "windows")'.dependencies]
winreg = { workspace = true } winreg = { workspace = true }
[target.'cfg(linux)'.dependencies] [target.'cfg(target_os = "linux")'.dependencies]
onelauncher_gamemode = { workspace = true } onelauncher_gamemode = { workspace = true }

View file

@ -244,6 +244,7 @@ pub async fn download_libraries(
}?; }?;
let num_files = libraries.len(); let num_files = libraries.len();
// TODO: figure out why rustfmt won't format this (it's not a macro...)
ingress_try_for_each( ingress_try_for_each(
stream::iter(libraries.iter()) stream::iter(libraries.iter())
.map(Ok::<&Library, crate::Error>), .map(Ok::<&Library, crate::Error>),

View file

@ -370,19 +370,17 @@ pub async fn launch_minecraft(
) )
.current_dir(instance_path.clone()); .current_dir(instance_path.clone());
// when cargo makes the DYLD_LIBRARY_PATH it breaks Minecraft // when cargo sets the `DYLD_LIBRARY_PATH`` it breaks Minecraft
#[cfg(target_os = "macos")] #[cfg(target_os = "macos")]
if std::env::var("CARGO").is_ok() { if std::env::var("CARGO").is_ok() {
command.env_remove("DYLD_FALLBACK_LIBRARY_PATH"); command.env_remove("DYLD_FALLBACK_LIBRARY_PATH");
} }
// remove preexisting Java options, as they should be set in the cluster settings. // remove pre-existing java options, as they should be set in the cluster settings.
command.env_remove("_JAVA_OPTIONS"); command.env_remove("_JAVA_OPTIONS");
command.envs(env_args); command.envs(env_args);
// overrides `options.txt` with our settings: i can't believe it's not yaml // overrides `options.txt` with our settings: i can't believe it's not yaml
use regex::Regex;
if !mc_options.is_empty() { if !mc_options.is_empty() {
let options_path = instance_path.join("options.txt"); let options_path = instance_path.join("options.txt");
let mut options_string = String::new(); let mut options_string = String::new();
@ -390,7 +388,7 @@ pub async fn launch_minecraft(
options_string = io::read_to_string(&options_path).await?; options_string = io::read_to_string(&options_path).await?;
} }
for (key, value) in mc_options { for (key, value) in mc_options {
let re = Regex::new(&format!(r"(?m)^{}:.*$", regex::escape(key)))?; let re = regex::Regex::new(&format!(r"(?m)^{}:.*$", regex::escape(key)))?;
if !re.is_match(&options_string) { if !re.is_match(&options_string) {
options_string.push_str(&format!("\n{}:{}", key, value)); options_string.push_str(&format!("\n{}:{}", key, value));
} else { } else {
@ -456,6 +454,7 @@ pub async fn launch_minecraft(
.await; .await;
} }
let enable_gamemode = state.settings.read().await.enable_gamemode;
let mut state_processor = state.processor.write().await; let mut state_processor = state.processor.write().await;
state_processor state_processor
.insert_process( .insert_process(
@ -465,6 +464,7 @@ pub async fn launch_minecraft(
post_hook, post_hook,
censors, censors,
Some(credentials.id), Some(credentials.id),
Some(enable_gamemode),
) )
.await .await
} }

View file

@ -426,6 +426,7 @@ impl Processor {
#[tracing::instrument(skip(self, uuid, command, post, censors))] #[tracing::instrument(skip(self, uuid, command, post, censors))]
#[tracing::instrument(level = "trace", skip(self))] #[tracing::instrument(level = "trace", skip(self))]
#[onelauncher_macros::memory] #[onelauncher_macros::memory]
#[allow(clippy::too_many_arguments)]
pub async fn insert_process( pub async fn insert_process(
&mut self, &mut self,
uuid: Uuid, uuid: Uuid,
@ -434,6 +435,7 @@ impl Processor {
post: Option<String>, post: Option<String>,
censors: HashMap<String, String>, censors: HashMap<String, String>,
user: Option<Uuid>, user: Option<Uuid>,
enable_gamemode: Option<bool>,
) -> crate::Result<Arc<RwLock<ProcessorChild>>> { ) -> crate::Result<Arc<RwLock<ProcessorChild>>> {
command command
.stdout(Stdio::piped()) .stdout(Stdio::piped())
@ -449,10 +451,14 @@ impl Processor {
let stdout = proc.stdout.take().unwrap(); let stdout = proc.stdout.take().unwrap();
let stderr = proc.stderr.take().unwrap(); let stderr = proc.stderr.take().unwrap();
// #[cfg(target_os = "linux")] #[cfg(target_os = "linux")]
// { {
// onelauncher_gamemode:: if enable_gamemode.is_some_and(|x| x == true) {
// } // TODO: maybe just ignore the error...?
onelauncher_gamemode::request_start_for_wrapper(pid)
.map_err(|e| anyhow::anyhow!("failed to enable gamemode: {e}"))?;
}
}
tokio::spawn(async move { tokio::spawn(async move {
let mut stdout = BufReader::new(stdout).lines(); let mut stdout = BufReader::new(stdout).lines();

View file

@ -24,6 +24,9 @@ pub struct Settings {
/// Whether to allow launching the same cluster under the same account. /// Whether to allow launching the same cluster under the same account.
#[serde(default)] #[serde(default)]
pub allow_parallel_running_clusters: bool, pub allow_parallel_running_clusters: bool,
/// Whether to launch Feral Gamemode on Linux systems.
#[serde(default)]
pub enable_gamemode: bool,
/// A global default [`Resolution`] for Minecraft. /// A global default [`Resolution`] for Minecraft.
pub resolution: Resolution, pub resolution: Resolution,
/// A global [`JavaVersions`] list and default version. /// A global [`JavaVersions`] list and default version.
@ -99,6 +102,10 @@ impl Settings {
disable_animations: false, disable_animations: false,
force_fullscreen: false, force_fullscreen: false,
allow_parallel_running_clusters: false, allow_parallel_running_clusters: false,
#[cfg(target_os = "linux")]
enable_gamemode: true,
#[cfg(not(target_os = "linux"))]
enable_gamemode: false,
resolution: Resolution::default(), resolution: Resolution::default(),
java_versions: JavaVersions::new(), java_versions: JavaVersions::new(),
memory: Memory::default(), memory: Memory::default(),

View file

@ -283,7 +283,7 @@ pub async fn check_java_instance(path: &Path) -> Option<JavaVersion> {
.output() .output()
.ok()?; .ok()?;
let stdout = String::from_utf8_lossy(&output.stdout); let stdout = String::from_utf8_lossy(&output.stdout);
tracing::info!("{}", stdout); tracing::debug!("{stdout}");
let mut java_version = None; let mut java_version = None;
let mut java_arch = None; let mut java_arch = None;

View file

@ -8,16 +8,17 @@ extern "C" {
pub fn request_start_for_wrapper(pid: u32) -> Result<(), String> { pub fn request_start_for_wrapper(pid: u32) -> Result<(), String> {
match pid.try_into() { match pid.try_into() {
Ok(signed) => { Ok(signed) => unsafe {
unsafe { let result = gamemode_request_start_for_wrapper(signed);
let result = gamemode_request_start_for_wrapper(signed); if result == 0 {
if result == 0 { Ok(())
Ok(()) } else {
} else { Err(format!(
Err(format!("failed to request gamemode for pid {}: {}", pid, result)) "failed to request gamemode for pid {}: {}",
} pid, result
))
} }
} },
Err(e) => Err(format!("failed to request gamemode for pid {}: {}", pid, e)), Err(e) => Err(format!("failed to request gamemode for pid {}: {}", pid, e)),
} }
} }

92
pnpm-lock.yaml generated
View file

@ -10,10 +10,10 @@ importers:
devDependencies: devDependencies:
'@flowr/eslint-config': '@flowr/eslint-config':
specifier: ^3.12.1 specifier: ^3.12.1
version: 3.12.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(@unocss/eslint-plugin@0.62.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-solid@0.14.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-vue@9.27.0(eslint@9.9.0(jiti@1.21.6)))(eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.38)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.9.0(jiti@1.21.6))) version: 3.12.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(@unocss/eslint-plugin@0.62.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-solid@0.14.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-vue@9.27.0(eslint@9.9.0(jiti@1.21.6)))(eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.38)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.9.0(jiti@1.21.6)))
'@types/node': '@types/node':
specifier: ^22.4.0 specifier: ^22.4.1
version: 22.4.0 version: 22.4.1
'@unocss/eslint-plugin': '@unocss/eslint-plugin':
specifier: ^0.62.2 specifier: ^0.62.2
version: 0.62.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) version: 0.62.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
@ -34,7 +34,7 @@ importers:
version: 1.21.6 version: 1.21.6
ts-node: ts-node:
specifier: ^10.9.2 specifier: ^10.9.2
version: 10.9.2(@types/node@22.4.0)(typescript@5.5.4) version: 10.9.2(@types/node@22.4.1)(typescript@5.5.4)
tsx: tsx:
specifier: ^4.17.0 specifier: ^4.17.0
version: 4.17.0 version: 4.17.0
@ -43,10 +43,10 @@ importers:
version: 5.5.4 version: 5.5.4
vite: vite:
specifier: ^5.4.1 specifier: ^5.4.1
version: 5.4.1(@types/node@22.4.0)(sass@1.77.8) version: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
vitest: vitest:
specifier: ^2.0.5 specifier: ^2.0.5
version: 2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8) version: 2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)
.github/actions/clippy: .github/actions/clippy:
dependencies: dependencies:
@ -215,16 +215,16 @@ importers:
version: 1.77.8 version: 1.77.8
unocss: unocss:
specifier: ^0.62.2 specifier: ^0.62.2
version: 0.62.2(postcss@8.4.41)(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) version: 0.62.2(postcss@8.4.41)(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
vite-plugin-solid: vite-plugin-solid:
specifier: ^2.10.2 specifier: ^2.10.2
version: 2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) version: 2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
vite-plugin-solid-svg: vite-plugin-solid-svg:
specifier: ^0.8.1 specifier: ^0.8.1
version: 0.8.1(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) version: 0.8.1(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: ^5.0.1 specifier: ^5.0.1
version: 5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) version: 5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
apps/testing: {} apps/testing: {}
@ -1635,8 +1635,8 @@ packages:
'@types/node@20.14.10': '@types/node@20.14.10':
resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==}
'@types/node@22.4.0': '@types/node@22.4.1':
resolution: {integrity: sha512-49AbMDwYUz7EXxKU/r7mXOsxwFr4BYbvB7tWYxVuLdb2ibd30ijjXINSMAHiEEZk5PCRBmW1gUeisn2VMKt3cQ==} resolution: {integrity: sha512-1tbpb9325+gPnKK0dMm+/LMriX0vKxf6RnB0SZUqfyVkQ4fMgUSySqhxE/y8Jvs4NyF1yHzTfG9KlnkIODxPKg==}
'@types/normalize-package-data@2.4.4': '@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@ -4988,7 +4988,7 @@ snapshots:
'@fastify/busboy@2.1.1': {} '@fastify/busboy@2.1.1': {}
'@flowr/eslint-config@3.12.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(@unocss/eslint-plugin@0.62.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-solid@0.14.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-vue@9.27.0(eslint@9.9.0(jiti@1.21.6)))(eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.38)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.9.0(jiti@1.21.6)))': '@flowr/eslint-config@3.12.1(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(@unocss/eslint-plugin@0.62.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-solid@0.14.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint-plugin-vue@9.27.0(eslint@9.9.0(jiti@1.21.6)))(eslint-processor-vue-blocks@0.1.2(@vue/compiler-sfc@3.4.38)(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))(vue-eslint-parser@9.4.3(eslint@9.9.0(jiti@1.21.6)))':
dependencies: dependencies:
'@antfu/install-pkg': 0.3.5 '@antfu/install-pkg': 0.3.5
'@clack/prompts': 0.7.0 '@clack/prompts': 0.7.0
@ -4996,7 +4996,7 @@ snapshots:
'@stylistic/eslint-plugin': 2.6.4(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) '@stylistic/eslint-plugin': 2.6.4(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
'@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/eslint-plugin': 8.1.0(@typescript-eslint/parser@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
'@typescript-eslint/parser': 8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/parser': 8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
'@vitest/eslint-plugin': 1.0.3(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)) '@vitest/eslint-plugin': 1.0.3(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))
eslint: 9.9.0(jiti@1.21.6) eslint: 9.9.0(jiti@1.21.6)
eslint-flat-config-utils: 0.3.0 eslint-flat-config-utils: 0.3.0
eslint-merge-processors: 0.1.0(eslint@9.9.0(jiti@1.21.6)) eslint-merge-processors: 0.1.0(eslint@9.9.0(jiti@1.21.6))
@ -5662,7 +5662,7 @@ snapshots:
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
'@types/node@22.4.0': '@types/node@22.4.1':
dependencies: dependencies:
undici-types: 6.19.6 undici-types: 6.19.6
@ -5800,13 +5800,13 @@ snapshots:
'@typescript-eslint/types': 8.1.0 '@typescript-eslint/types': 8.1.0
eslint-visitor-keys: 3.4.3 eslint-visitor-keys: 3.4.3
'@unocss/astro@0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8))': '@unocss/astro@0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))':
dependencies: dependencies:
'@unocss/core': 0.62.2 '@unocss/core': 0.62.2
'@unocss/reset': 0.62.2 '@unocss/reset': 0.62.2
'@unocss/vite': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) '@unocss/vite': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
optionalDependencies: optionalDependencies:
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -5955,7 +5955,7 @@ snapshots:
dependencies: dependencies:
'@unocss/core': 0.62.2 '@unocss/core': 0.62.2
'@unocss/vite@0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8))': '@unocss/vite@0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@rollup/pluginutils': 5.1.0(rollup@4.21.0)
@ -5967,7 +5967,7 @@ snapshots:
chokidar: 3.6.0 chokidar: 3.6.0
magic-string: 0.30.11 magic-string: 0.30.11
tinyglobby: 0.2.2 tinyglobby: 0.2.2
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -5978,13 +5978,13 @@ snapshots:
'@vercel/ncc@0.38.1': {} '@vercel/ncc@0.38.1': {}
'@vitest/eslint-plugin@1.0.3(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))': '@vitest/eslint-plugin@1.0.3(@typescript-eslint/utils@8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vitest@2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8))':
dependencies: dependencies:
eslint: 9.9.0(jiti@1.21.6) eslint: 9.9.0(jiti@1.21.6)
optionalDependencies: optionalDependencies:
'@typescript-eslint/utils': 8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) '@typescript-eslint/utils': 8.1.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
typescript: 5.5.4 typescript: 5.5.4
vitest: 2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8) vitest: 2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)
'@vitest/expect@2.0.5': '@vitest/expect@2.0.5':
dependencies: dependencies:
@ -6021,7 +6021,7 @@ snapshots:
pathe: 1.1.2 pathe: 1.1.2
sirv: 2.0.4 sirv: 2.0.4
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vitest: 2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8) vitest: 2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8)
'@vitest/utils@2.0.5': '@vitest/utils@2.0.5':
dependencies: dependencies:
@ -8173,14 +8173,14 @@ snapshots:
dependencies: dependencies:
typescript: 5.5.4 typescript: 5.5.4
ts-node@10.9.2(@types/node@22.4.0)(typescript@5.5.4): ts-node@10.9.2(@types/node@22.4.1)(typescript@5.5.4):
dependencies: dependencies:
'@cspotcode/source-map-support': 0.8.1 '@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11 '@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11 '@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3 '@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4 '@tsconfig/node16': 1.0.4
'@types/node': 22.4.0 '@types/node': 22.4.1
acorn: 8.11.3 acorn: 8.11.3
acorn-walk: 8.3.2 acorn-walk: 8.3.2
arg: 4.1.3 arg: 4.1.3
@ -8269,9 +8269,9 @@ snapshots:
universalify@0.2.0: {} universalify@0.2.0: {}
unocss@0.62.2(postcss@8.4.41)(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)): unocss@0.62.2(postcss@8.4.41)(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8)):
dependencies: dependencies:
'@unocss/astro': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) '@unocss/astro': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
'@unocss/cli': 0.62.2(rollup@4.21.0) '@unocss/cli': 0.62.2(rollup@4.21.0)
'@unocss/core': 0.62.2 '@unocss/core': 0.62.2
'@unocss/extractor-arbitrary-variants': 0.62.2 '@unocss/extractor-arbitrary-variants': 0.62.2
@ -8290,9 +8290,9 @@ snapshots:
'@unocss/transformer-compile-class': 0.62.2 '@unocss/transformer-compile-class': 0.62.2
'@unocss/transformer-directives': 0.62.2 '@unocss/transformer-directives': 0.62.2
'@unocss/transformer-variant-group': 0.62.2 '@unocss/transformer-variant-group': 0.62.2
'@unocss/vite': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) '@unocss/vite': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
optionalDependencies: optionalDependencies:
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
transitivePeerDependencies: transitivePeerDependencies:
- postcss - postcss
- rollup - rollup
@ -8348,13 +8348,13 @@ snapshots:
spdx-correct: 3.2.0 spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1 spdx-expression-parse: 3.0.1
vite-node@2.0.5(@types/node@22.4.0)(sass@1.77.8): vite-node@2.0.5(@types/node@22.4.1)(sass@1.77.8):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.3.6 debug: 4.3.6
pathe: 1.1.2 pathe: 1.1.2
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -8366,13 +8366,13 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-plugin-solid-svg@0.8.1(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)): vite-plugin-solid-svg@0.8.1(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8)):
dependencies: dependencies:
solid-js: 1.8.21 solid-js: 1.8.21
svgo: 3.3.2 svgo: 3.3.2
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)): vite-plugin-solid@2.10.2(@testing-library/jest-dom@6.4.8)(solid-js@1.8.21)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8)):
dependencies: dependencies:
'@babel/core': 7.24.9 '@babel/core': 7.24.9
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
@ -8380,39 +8380,39 @@ snapshots:
merge-anything: 5.1.7 merge-anything: 5.1.7
solid-js: 1.8.21 solid-js: 1.8.21
solid-refresh: 0.6.3(solid-js@1.8.21) solid-refresh: 0.6.3(solid-js@1.8.21)
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
vitefu: 0.2.5(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) vitefu: 0.2.5(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8))
optionalDependencies: optionalDependencies:
'@testing-library/jest-dom': 6.4.8 '@testing-library/jest-dom': 6.4.8
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)): vite-tsconfig-paths@5.0.1(typescript@5.5.4)(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8)):
dependencies: dependencies:
debug: 4.3.6 debug: 4.3.6
globrex: 0.1.2 globrex: 0.1.2
tsconfck: 3.1.1(typescript@5.5.4) tsconfck: 3.1.1(typescript@5.5.4)
optionalDependencies: optionalDependencies:
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
vite@5.4.1(@types/node@22.4.0)(sass@1.77.8): vite@5.4.1(@types/node@22.4.1)(sass@1.77.8):
dependencies: dependencies:
esbuild: 0.21.5 esbuild: 0.21.5
postcss: 8.4.41 postcss: 8.4.41
rollup: 4.20.0 rollup: 4.20.0
optionalDependencies: optionalDependencies:
'@types/node': 22.4.0 '@types/node': 22.4.1
fsevents: 2.3.3 fsevents: 2.3.3
sass: 1.77.8 sass: 1.77.8
vitefu@0.2.5(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)): vitefu@0.2.5(vite@5.4.1(@types/node@22.4.1)(sass@1.77.8)):
optionalDependencies: optionalDependencies:
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
vitest@2.0.5(@types/node@22.4.0)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8): vitest@2.0.5(@types/node@22.4.1)(@vitest/ui@2.0.5)(jsdom@24.1.1)(sass@1.77.8):
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@vitest/expect': 2.0.5 '@vitest/expect': 2.0.5
@ -8430,11 +8430,11 @@ snapshots:
tinybench: 2.8.0 tinybench: 2.8.0
tinypool: 1.0.0 tinypool: 1.0.0
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) vite: 5.4.1(@types/node@22.4.1)(sass@1.77.8)
vite-node: 2.0.5(@types/node@22.4.0)(sass@1.77.8) vite-node: 2.0.5(@types/node@22.4.1)(sass@1.77.8)
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 22.4.0 '@types/node': 22.4.1
'@vitest/ui': 2.0.5(vitest@2.0.5) '@vitest/ui': 2.0.5(vitest@2.0.5)
jsdom: 24.1.1 jsdom: 24.1.1
transitivePeerDependencies: transitivePeerDependencies: