From a87dd17a6ede2a37f5516b587ccc38c21a9b648e Mon Sep 17 00:00:00 2001 From: Pauline Date: Sun, 18 Aug 2024 18:54:02 +0200 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feature(core):=20add=20gamemode=20s?= =?UTF-8?q?upport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pauline --- ATTRIBUTION.md | 35 ++- Cargo.lock | 9 + Cargo.toml | 4 +- apps/desktop/capabilities/default.json | 3 +- apps/desktop/tauri.conf.json | 2 +- package.json | 2 +- packages/client/package.json | 2 +- packages/core/Cargo.toml | 3 + packages/core/src/store/processor.rs | 5 + packages/gamemode/Cargo.toml | 17 ++ packages/gamemode/build.rs | 11 + .../gamemode/include/gamemode_client.h | 0 packages/gamemode/src/lib.rs | 23 ++ packages/gamemode/stub/stub.c | 5 + packages/scripts/package.json | 2 +- pnpm-lock.yaml | 216 +++++++++++++++--- 16 files changed, 301 insertions(+), 38 deletions(-) create mode 100644 packages/gamemode/Cargo.toml create mode 100644 packages/gamemode/build.rs rename packages/{core/wrapper => }/gamemode/include/gamemode_client.h (100%) create mode 100644 packages/gamemode/src/lib.rs create mode 100644 packages/gamemode/stub/stub.c diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 87033b3f..a1a28965 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -6,7 +6,7 @@ The source code of this repository is licensed under the GNU General Public Lice ```txt OneLauncher - Open source Rust-based Minecraft Launcher -Copyright (C) 2023~2024 Polyfrost and Contributors +Copyright (C) 2023~CURRENT Polyfrost and Contributors This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 3 of the License. @@ -88,7 +88,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ``` -## Gamemode +## [Gamemode] ```txt Copyright (c) 2017-2022, Feral Interactive @@ -118,3 +118,34 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ``` + +## [Rust Gamemode Internal Linking] + +```txt +MIT License + +Copyright (c) 2024 Sophie Leochina + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` + +[Prism Launcher]: https://github.com/PrismLauncher/PrismLauncher +[Modrinth App]: https://github.com/modrinth/code +[Gamemode]: https://github.com/FeralInteractive/gamemode +[Rust Gamemode Internal Linking]: https://github.com/SophieSilver/linking-gamemode diff --git a/Cargo.lock b/Cargo.lock index ca416c82..0d64e498 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3568,6 +3568,7 @@ dependencies = [ "lazy_static", "notify", "notify-debouncer-mini", + "onelauncher_gamemode", "onelauncher_macros", "p256", "paste", @@ -3599,6 +3600,14 @@ dependencies = [ "zip", ] +[[package]] +name = "onelauncher_gamemode" +version = "1.0.0-alpha.1" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "onelauncher_gui" version = "1.0.0-alpha.1" diff --git a/Cargo.toml b/Cargo.toml index 1b09c0c1..3ba4625c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,8 @@ members = [ "apps/testing", # onelauncher_test -- test the core crate in a cli setting "apps/desktop", # onelauncher_gui -- the rust code for our tauri app "packages/core", # onelauncher -- the rust core for onelauncher - "packages/macros" # onelauncher_macros -- utility procedural macros for onelauncher + "packages/macros", # onelauncher_macros -- utility procedural macros for onelauncher + "packages/gamemode" # onelauncher_gamemode -- rust wrapper for feral gamemode ] [workspace.package] # sets default [package] settings for workspace members @@ -25,6 +26,7 @@ onelauncher = { path = "./packages/core" } onelauncher_macros = { path = "./packages/macros" } onelauncher_gui = { path = "./apps/desktop" } onelauncher_test = { path = "./apps/testing" } +onelauncher_gamemode = { path = "./packages/gamemode" } # # ============= TAURI ============= # # # tauri uses latest crates.io rc channel diff --git a/apps/desktop/capabilities/default.json b/apps/desktop/capabilities/default.json index cc1df3bd..ab2b6378 100644 --- a/apps/desktop/capabilities/default.json +++ b/apps/desktop/capabilities/default.json @@ -29,6 +29,7 @@ "dialog:allow-open", "dialog:allow-save", "dialog:allow-confirm", - "deep-link:default" + "deep-link:default", + "updater:default" ] } diff --git a/apps/desktop/tauri.conf.json b/apps/desktop/tauri.conf.json index 252846f0..404f434d 100644 --- a/apps/desktop/tauri.conf.json +++ b/apps/desktop/tauri.conf.json @@ -149,7 +149,7 @@ "plugins": { "updater": { "pubkey": "", - "endpoints": ["https://polyfrost.org/releases/tauri/{{version}}/{{target}}/{{arch}}"] + "endpoints": ["https://polyfrost.org/releases/tauri/{{current_version}}/{{target}}/{{arch}}"] }, "deep-link": { "mobile": [], diff --git a/package.json b/package.json index 483e78b0..25c5f778 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ ] }, "devDependencies": { - "@flowr/eslint-config": "^3.12.0", + "@flowr/eslint-config": "^3.12.1", "@types/node": "^22.4.0", "@unocss/eslint-plugin": "^0.62.2", "@vitest/ui": "^2.0.5", diff --git a/packages/client/package.json b/packages/client/package.json index 582c2767..ac9f840d 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -16,7 +16,7 @@ "types": "./src/index.ts", "scripts": {}, "dependencies": { - "@flowr/utils": "^3.12.0", + "@flowr/utils": "^3.12.1", "@solid-primitives/deep": "^0.2.9", "@tanstack/solid-query": "^5.51.21", "fast-equals": "^5.0.1", diff --git a/packages/core/Cargo.toml b/packages/core/Cargo.toml index 2a66db89..66d5ca4b 100644 --- a/packages/core/Cargo.toml +++ b/packages/core/Cargo.toml @@ -76,3 +76,6 @@ flate2 = { workspace = true } [target.'cfg(windows)'.dependencies] winreg = { workspace = true } + +[target.'cfg(linux)'.dependencies] +onelauncher_gamemode = { workspace = true } diff --git a/packages/core/src/store/processor.rs b/packages/core/src/store/processor.rs index c3925db7..64bbe61f 100644 --- a/packages/core/src/store/processor.rs +++ b/packages/core/src/store/processor.rs @@ -449,6 +449,11 @@ impl Processor { let stdout = proc.stdout.take().unwrap(); let stderr = proc.stderr.take().unwrap(); + // #[cfg(target_os = "linux")] + // { + // onelauncher_gamemode:: + // } + tokio::spawn(async move { let mut stdout = BufReader::new(stdout).lines(); let mut stderr = BufReader::new(stderr).lines(); diff --git a/packages/gamemode/Cargo.toml b/packages/gamemode/Cargo.toml new file mode 100644 index 00000000..2cbb96d6 --- /dev/null +++ b/packages/gamemode/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "onelauncher_gamemode" +description = "Rust wrapper for Gamemode" +version = { workspace = true } +license = { workspace = true } +edition = { workspace = true } +repository = { workspace = true } +documentation = { workspace = true } +readme = { workspace = true } +homepage = { workspace = true } +authors = { workspace = true } + +[dependencies] +libc = { version = "0.2" } + +[build-dependencies] +cc = { version = "1.1" } diff --git a/packages/gamemode/build.rs b/packages/gamemode/build.rs new file mode 100644 index 00000000..0236147e --- /dev/null +++ b/packages/gamemode/build.rs @@ -0,0 +1,11 @@ +fn main() { + cc::Build::new() + .include("include") + .file("stub/stub.c") + .opt_level(3) + .debug(false) + .warnings(true) + .compile("stub"); + + println!("cargo::rerun-if-changed=stub.c"); +} diff --git a/packages/core/wrapper/gamemode/include/gamemode_client.h b/packages/gamemode/include/gamemode_client.h similarity index 100% rename from packages/core/wrapper/gamemode/include/gamemode_client.h rename to packages/gamemode/include/gamemode_client.h diff --git a/packages/gamemode/src/lib.rs b/packages/gamemode/src/lib.rs new file mode 100644 index 00000000..e19f3600 --- /dev/null +++ b/packages/gamemode/src/lib.rs @@ -0,0 +1,23 @@ +use libc::pid_t; +use std::ffi::c_int; + +#[link(name = "stub", kind = "static")] +extern "C" { + fn gamemode_request_start_for_wrapper(pid: pid_t) -> c_int; +} + +pub fn request_start_for_wrapper(pid: u32) -> Result<(), String> { + match pid.try_into() { + Ok(signed) => { + unsafe { + let result = gamemode_request_start_for_wrapper(signed); + if result == 0 { + Ok(()) + } else { + Err(format!("failed to request gamemode for pid {}: {}", pid, result)) + } + } + } + Err(e) => Err(format!("failed to request gamemode for pid {}: {}", pid, e)), + } +} diff --git a/packages/gamemode/stub/stub.c b/packages/gamemode/stub/stub.c new file mode 100644 index 00000000..2bc94ebd --- /dev/null +++ b/packages/gamemode/stub/stub.c @@ -0,0 +1,5 @@ +#include "gamemode_client.h" + +int gamemode_start_for_wrapper(pid_t pid) { + return gamemode_request_start_for(pid); +} diff --git a/packages/scripts/package.json b/packages/scripts/package.json index d1ff3738..ec52a338 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -19,7 +19,7 @@ "int:prepare": "pnpm tsx prepare.ts" }, "dependencies": { - "@flowr/utils": "^3.12.0", + "@flowr/utils": "^3.12.1", "execa": "^9.3.1", "mustache": "^4.2.0", "pathe": "^1.1.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a5e73e2e..c75a6706 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@flowr/eslint-config': - specifier: ^3.12.0 - version: 3.12.0(@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))) + 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))) '@types/node': specifier: ^22.4.0 version: 22.4.0 @@ -215,7 +215,7 @@ importers: version: 1.77.8 unocss: specifier: ^0.62.2 - version: 0.62.2(postcss@8.4.41)(rollup@4.20.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.0)(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.21)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) @@ -231,8 +231,8 @@ importers: packages/client: dependencies: '@flowr/utils': - specifier: ^3.12.0 - version: 3.12.0 + specifier: ^3.12.1 + version: 3.12.1 '@solid-primitives/deep': specifier: ^0.2.9 version: 0.2.9(solid-js@1.8.21) @@ -268,8 +268,8 @@ importers: packages/scripts: dependencies: '@flowr/utils': - specifier: ^3.12.0 - version: 3.12.0 + specifier: ^3.12.1 + version: 3.12.1 execa: specifier: ^9.3.1 version: 9.3.1 @@ -928,8 +928,8 @@ packages: resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@flowr/eslint-config@3.12.0': - resolution: {integrity: sha512-5Xl0ScnpO0SiW+hCyQe9yPVzmAgSBAnjtyvsRujuUL3AomUi1sknF+3JoiaEfd2V278EeaHornsZOinpIdzXVQ==} + '@flowr/eslint-config@3.12.1': + resolution: {integrity: sha512-bJednVfzn0HJrXuDAlb3r2WM4dMmLMVkKXUpM0HhEWt2TFtVUHS7JJqJU/fSBxMw/hA8eOwkNXqMRJ5KmjL8rQ==} engines: {node: '>=20'} peerDependencies: '@eslint-react/eslint-plugin': ^1.5.8 @@ -992,8 +992,8 @@ packages: vue-eslint-parser: optional: true - '@flowr/utils@3.12.0': - resolution: {integrity: sha512-ZAyinoGoyVWNBl0iAjiiWYaRrAPgu2ApCRVBHh5Kb/abpcsfQnybZzeu6Rz9olxPmtp/OjvBmS36/xLK+9ZJZQ==} + '@flowr/utils@3.12.1': + resolution: {integrity: sha512-ec+E0EWqnriL8q1nQSyIb+SQLEB0r466AJjX94cKYpEgTNIXRehHRdRsPflAYG4EP7odJlPKppfNq/ZNh7G5+w==} engines: {node: '>=20'} '@fontsource/poppins@5.0.15': @@ -1166,81 +1166,161 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.21.0': + resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.20.0': resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.21.0': + resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.20.0': resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.21.0': + resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.20.0': resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.21.0': + resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.20.0': resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} cpu: [arm] os: [linux] + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} + cpu: [arm] + os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.20.0': resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-gnu@4.21.0': + resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-arm64-musl@4.20.0': resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} cpu: [arm64] os: [linux] + '@rollup/rollup-linux-arm64-musl@4.21.0': + resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} + cpu: [arm64] + os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} cpu: [ppc64] os: [linux] + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} + cpu: [ppc64] + os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.20.0': resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} cpu: [riscv64] os: [linux] + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} + cpu: [riscv64] + os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.20.0': resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} cpu: [s390x] os: [linux] + '@rollup/rollup-linux-s390x-gnu@4.21.0': + resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} + cpu: [s390x] + os: [linux] + '@rollup/rollup-linux-x64-gnu@4.20.0': resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-gnu@4.21.0': + resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} + cpu: [x64] + os: [linux] + '@rollup/rollup-linux-x64-musl@4.20.0': resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} cpu: [x64] os: [linux] + '@rollup/rollup-linux-x64-musl@4.21.0': + resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} + cpu: [x64] + os: [linux] + '@rollup/rollup-win32-arm64-msvc@4.20.0': resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.21.0': + resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.20.0': resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.21.0': + resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.20.0': resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.21.0': + resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} + cpu: [x64] + os: [win32] + '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} @@ -2412,8 +2492,8 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-petal@3.12.0: - resolution: {integrity: sha512-EE1dB1HfHT9YsdjPARgB4r2FtekPDKVE+GKfReDdyWdJa+WZ3E8C/44ZkXMDntzlRJvaGnk22REtB26RC6q+zA==} + eslint-plugin-petal@3.12.1: + resolution: {integrity: sha512-6RSOjybHAJ1vg89xLg7KvIUqlOVnPc9YGAkbVVXkw8q/NZUCvGYDD8elg01OZCarTaej0MU4yG3Xtd5GoDM5cw==} engines: {node: '>=20'} peerDependencies: eslint: '>=8.40.0' @@ -3529,6 +3609,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.21.0: + resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -4903,7 +4988,7 @@ snapshots: '@fastify/busboy@2.1.1': {} - '@flowr/eslint-config@3.12.0(@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.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)))': dependencies: '@antfu/install-pkg': 0.3.5 '@clack/prompts': 0.7.0 @@ -4922,7 +5007,7 @@ snapshots: eslint-plugin-markdown: 5.1.0(eslint@9.9.0(jiti@1.21.6)) eslint-plugin-n: 17.10.2(eslint@9.9.0(jiti@1.21.6)) eslint-plugin-perfectionist: 3.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)(vue-eslint-parser@9.4.3(eslint@9.9.0(jiti@1.21.6))) - eslint-plugin-petal: 3.12.0(eslint@9.9.0(jiti@1.21.6)) + eslint-plugin-petal: 3.12.1(eslint@9.9.0(jiti@1.21.6)) eslint-plugin-regexp: 2.6.0(eslint@9.9.0(jiti@1.21.6)) eslint-plugin-toml: 0.11.1(eslint@9.9.0(jiti@1.21.6)) eslint-plugin-unicorn: 55.0.0(eslint@9.9.0(jiti@1.21.6)) @@ -4948,7 +5033,7 @@ snapshots: - typescript - vitest - '@flowr/utils@3.12.0': {} + '@flowr/utils@3.12.1': {} '@fontsource/poppins@5.0.15': {} @@ -5156,62 +5241,110 @@ snapshots: '@protobuf-ts/runtime@2.9.4': {} - '@rollup/pluginutils@5.1.0(rollup@4.20.0)': + '@rollup/pluginutils@5.1.0(rollup@4.21.0)': dependencies: '@types/estree': 1.0.5 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.20.0 + rollup: 4.21.0 '@rollup/rollup-android-arm-eabi@4.20.0': optional: true + '@rollup/rollup-android-arm-eabi@4.21.0': + optional: true + '@rollup/rollup-android-arm64@4.20.0': optional: true + '@rollup/rollup-android-arm64@4.21.0': + optional: true + '@rollup/rollup-darwin-arm64@4.20.0': optional: true + '@rollup/rollup-darwin-arm64@4.21.0': + optional: true + '@rollup/rollup-darwin-x64@4.20.0': optional: true + '@rollup/rollup-darwin-x64@4.21.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.20.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.20.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.20.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.21.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.20.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.21.0': + optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': optional: true + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.20.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.20.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.21.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.20.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.21.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.20.0': optional: true + '@rollup/rollup-linux-x64-musl@4.21.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.20.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.21.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.20.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.21.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.20.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.21.0': + optional: true + '@sec-ant/readable-stream@0.4.1': {} '@sentry/babel-plugin-component-annotate@2.22.2': {} @@ -5667,21 +5800,21 @@ snapshots: '@typescript-eslint/types': 8.1.0 eslint-visitor-keys: 3.4.3 - '@unocss/astro@0.62.2(rollup@4.20.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.0)(sass@1.77.8))': dependencies: '@unocss/core': 0.62.2 '@unocss/reset': 0.62.2 - '@unocss/vite': 0.62.2(rollup@4.20.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.0)(sass@1.77.8)) optionalDependencies: vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.62.2(rollup@4.20.0)': + '@unocss/cli@0.62.2(rollup@4.21.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@unocss/config': 0.62.2 '@unocss/core': 0.62.2 '@unocss/preset-uno': 0.62.2 @@ -5822,10 +5955,10 @@ snapshots: dependencies: '@unocss/core': 0.62.2 - '@unocss/vite@0.62.2(rollup@4.20.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.0)(sass@1.77.8))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.20.0) + '@rollup/pluginutils': 5.1.0(rollup@4.21.0) '@unocss/config': 0.62.2 '@unocss/core': 0.62.2 '@unocss/inspector': 0.62.2 @@ -6578,9 +6711,9 @@ snapshots: - supports-color - typescript - eslint-plugin-petal@3.12.0(eslint@9.9.0(jiti@1.21.6)): + eslint-plugin-petal@3.12.1(eslint@9.9.0(jiti@1.21.6)): dependencies: - '@flowr/utils': 3.12.0 + '@flowr/utils': 3.12.1 eslint: 9.9.0(jiti@1.21.6) eslint-plugin-regexp@2.6.0(eslint@9.9.0(jiti@1.21.6)): @@ -7749,6 +7882,29 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.20.0 fsevents: 2.3.3 + rollup@4.21.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.0 + '@rollup/rollup-android-arm64': 4.21.0 + '@rollup/rollup-darwin-arm64': 4.21.0 + '@rollup/rollup-darwin-x64': 4.21.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.0 + '@rollup/rollup-linux-arm-musleabihf': 4.21.0 + '@rollup/rollup-linux-arm64-gnu': 4.21.0 + '@rollup/rollup-linux-arm64-musl': 4.21.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0 + '@rollup/rollup-linux-riscv64-gnu': 4.21.0 + '@rollup/rollup-linux-s390x-gnu': 4.21.0 + '@rollup/rollup-linux-x64-gnu': 4.21.0 + '@rollup/rollup-linux-x64-musl': 4.21.0 + '@rollup/rollup-win32-arm64-msvc': 4.21.0 + '@rollup/rollup-win32-ia32-msvc': 4.21.0 + '@rollup/rollup-win32-x64-msvc': 4.21.0 + fsevents: 2.3.3 + optional: true + rrweb-cssom@0.6.0: {} rrweb-cssom@0.7.1: {} @@ -8113,10 +8269,10 @@ snapshots: universalify@0.2.0: {} - unocss@0.62.2(postcss@8.4.41)(rollup@4.20.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.0)(sass@1.77.8)): dependencies: - '@unocss/astro': 0.62.2(rollup@4.20.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) - '@unocss/cli': 0.62.2(rollup@4.20.0) + '@unocss/astro': 0.62.2(rollup@4.21.0)(vite@5.4.1(@types/node@22.4.0)(sass@1.77.8)) + '@unocss/cli': 0.62.2(rollup@4.21.0) '@unocss/core': 0.62.2 '@unocss/extractor-arbitrary-variants': 0.62.2 '@unocss/postcss': 0.62.2(postcss@8.4.41) @@ -8134,7 +8290,7 @@ snapshots: '@unocss/transformer-compile-class': 0.62.2 '@unocss/transformer-directives': 0.62.2 '@unocss/transformer-variant-group': 0.62.2 - '@unocss/vite': 0.62.2(rollup@4.20.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.0)(sass@1.77.8)) optionalDependencies: vite: 5.4.1(@types/node@22.4.0)(sass@1.77.8) transitivePeerDependencies: