🐛 fix: h
Signed-off-by: Pauline <git@ethanlibs.co>
This commit is contained in:
parent
62184abf1b
commit
755eb0b371
13 changed files with 462 additions and 156 deletions
|
|
@ -22,7 +22,3 @@ trim_trailing_whitespace = true
|
||||||
[*.{yaml,yml}]
|
[*.{yaml,yml}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
|
|
||||||
[*.toml]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
|
|
|
||||||
103
Cargo.lock
generated
103
Cargo.lock
generated
|
|
@ -349,19 +349,19 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-tungstenite"
|
name = "async-tungstenite"
|
||||||
version = "0.26.2"
|
version = "0.27.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bb786dab48e539c5f17b23bac20d812ac027c01732ed7c7b58850c69a684e46c"
|
checksum = "c5359381fd414fbdb272c48f2111c16cb0bb3447bfacd59311ff3736da9f6664"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"futures-io",
|
"futures-io",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"log",
|
"log",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"rustls-native-certs",
|
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
"tungstenite",
|
"tungstenite",
|
||||||
|
"webpki-roots",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
@ -2283,6 +2283,25 @@ dependencies = [
|
||||||
"syn 2.0.74",
|
"syn 2.0.74",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "h2"
|
||||||
|
version = "0.4.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fa82e28a107a8cc405f0839610bdc9b15f1e25ec7d696aa5cf173edbcb1486ab"
|
||||||
|
dependencies = [
|
||||||
|
"atomic-waker",
|
||||||
|
"bytes",
|
||||||
|
"fnv",
|
||||||
|
"futures-core",
|
||||||
|
"futures-sink",
|
||||||
|
"http",
|
||||||
|
"indexmap 2.4.0",
|
||||||
|
"slab",
|
||||||
|
"tokio",
|
||||||
|
"tokio-util",
|
||||||
|
"tracing",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "half"
|
name = "half"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
|
|
@ -2444,6 +2463,7 @@ dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
"h2",
|
||||||
"http",
|
"http",
|
||||||
"http-body",
|
"http-body",
|
||||||
"httparse",
|
"httparse",
|
||||||
|
|
@ -2465,7 +2485,6 @@ dependencies = [
|
||||||
"hyper",
|
"hyper",
|
||||||
"hyper-util",
|
"hyper-util",
|
||||||
"rustls",
|
"rustls",
|
||||||
"rustls-native-certs",
|
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
|
|
@ -3650,12 +3669,6 @@ dependencies = [
|
||||||
"pathdiff",
|
"pathdiff",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-probe"
|
|
||||||
version = "0.1.5"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "option-ext"
|
name = "option-ext"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
|
@ -4423,9 +4436,11 @@ dependencies = [
|
||||||
"async-compression",
|
"async-compression",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
"encoding_rs",
|
||||||
"futures-channel",
|
"futures-channel",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
"h2",
|
||||||
"http",
|
"http",
|
||||||
"http-body",
|
"http-body",
|
||||||
"http-body-util",
|
"http-body-util",
|
||||||
|
|
@ -4442,13 +4457,13 @@ dependencies = [
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"quinn",
|
"quinn",
|
||||||
"rustls",
|
"rustls",
|
||||||
"rustls-native-certs",
|
|
||||||
"rustls-pemfile",
|
"rustls-pemfile",
|
||||||
"rustls-pki-types",
|
"rustls-pki-types",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serde_urlencoded",
|
"serde_urlencoded",
|
||||||
"sync_wrapper",
|
"sync_wrapper",
|
||||||
|
"system-configuration",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
|
|
@ -4594,19 +4609,6 @@ dependencies = [
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rustls-native-certs"
|
|
||||||
version = "0.7.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a88d6d420651b496bdd98684116959239430022a115c1240e6c3993be0b15fba"
|
|
||||||
dependencies = [
|
|
||||||
"openssl-probe",
|
|
||||||
"rustls-pemfile",
|
|
||||||
"rustls-pki-types",
|
|
||||||
"schannel",
|
|
||||||
"security-framework",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rustls-pemfile"
|
name = "rustls-pemfile"
|
||||||
version = "2.1.3"
|
version = "2.1.3"
|
||||||
|
|
@ -4664,15 +4666,6 @@ dependencies = [
|
||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "schannel"
|
|
||||||
version = "0.1.23"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
|
|
||||||
dependencies = [
|
|
||||||
"windows-sys 0.52.0",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "schemars"
|
name = "schemars"
|
||||||
version = "0.8.21"
|
version = "0.8.21"
|
||||||
|
|
@ -4736,29 +4729,6 @@ dependencies = [
|
||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "security-framework"
|
|
||||||
version = "2.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02"
|
|
||||||
dependencies = [
|
|
||||||
"bitflags 2.6.0",
|
|
||||||
"core-foundation 0.9.4",
|
|
||||||
"core-foundation-sys",
|
|
||||||
"libc",
|
|
||||||
"security-framework-sys",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "security-framework-sys"
|
|
||||||
version = "2.11.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "75da29fe9b9b08fe9d6b22b5b4bcbc75d8db3aa31e639aa56bb62e9d46bfceaf"
|
|
||||||
dependencies = [
|
|
||||||
"core-foundation-sys",
|
|
||||||
"libc",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "selectors"
|
name = "selectors"
|
||||||
version = "0.22.0"
|
version = "0.22.0"
|
||||||
|
|
@ -5387,6 +5357,27 @@ dependencies = [
|
||||||
"windows 0.57.0",
|
"windows 0.57.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "system-configuration"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7"
|
||||||
|
dependencies = [
|
||||||
|
"bitflags 1.3.2",
|
||||||
|
"core-foundation 0.9.4",
|
||||||
|
"system-configuration-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "system-configuration-sys"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9"
|
||||||
|
dependencies = [
|
||||||
|
"core-foundation-sys",
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "system-deps"
|
name = "system-deps"
|
||||||
version = "6.2.2"
|
version = "6.2.2"
|
||||||
|
|
|
||||||
15
Cargo.toml
15
Cargo.toml
|
|
@ -101,14 +101,6 @@ tracing = { version = "0.1" }
|
||||||
tracing-subscriber = { version = "0.3", features = [ "chrono", "env-filter" ] }
|
tracing-subscriber = { version = "0.3", features = [ "chrono", "env-filter" ] }
|
||||||
tracing-error = { version = "0.2" }
|
tracing-error = { version = "0.2" }
|
||||||
tracing-appender = { version = "0.2" }
|
tracing-appender = { version = "0.2" }
|
||||||
sentry = { version = "0.34", default-features = false, features = [
|
|
||||||
"rustls",
|
|
||||||
"reqwest",
|
|
||||||
"backtrace",
|
|
||||||
"panic",
|
|
||||||
"anyhow",
|
|
||||||
"debug-images"
|
|
||||||
] }
|
|
||||||
iota_stronghold = { version = "2.1" }
|
iota_stronghold = { version = "2.1" }
|
||||||
zeroize = { version = "1.8", features = [ "zeroize_derive" ] }
|
zeroize = { version = "1.8", features = [ "zeroize_derive" ] }
|
||||||
|
|
||||||
|
|
@ -132,12 +124,15 @@ reqwest = { version = "0.12", default-features = false, features = [
|
||||||
"stream",
|
"stream",
|
||||||
"multipart",
|
"multipart",
|
||||||
"blocking",
|
"blocking",
|
||||||
"rustls-tls-native-roots",
|
"rustls-tls",
|
||||||
|
"charset",
|
||||||
|
"http2",
|
||||||
|
"macos-system-configuration",
|
||||||
"deflate",
|
"deflate",
|
||||||
"gzip",
|
"gzip",
|
||||||
"brotli"
|
"brotli"
|
||||||
] }
|
] }
|
||||||
async-tungstenite = { version = "0.26", features = [ "tokio-runtime", "tokio-rustls-native-certs" ] }
|
async-tungstenite = { version = "0.27", features = [ "tokio-runtime", "tokio-rustls-webpki-roots" ] }
|
||||||
webbrowser = { version = "1.0" }
|
webbrowser = { version = "1.0" }
|
||||||
|
|
||||||
# # ============= SYSTEM ============= # #
|
# # ============= SYSTEM ============= # #
|
||||||
|
|
|
||||||
7
TODO.md
7
TODO.md
|
|
@ -8,3 +8,10 @@
|
||||||
- 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>
|
||||||
- shared cluster resources and options (<https://github.com/enjarai/shared-resources>)
|
- shared cluster resources and options (<https://github.com/enjarai/shared-resources>)
|
||||||
|
- ftb, technic, and tlauncher importing
|
||||||
|
- better debug logging and mc logging, for the launcher and spawn
|
||||||
|
- implement forgewrapper instead of processing ourselves
|
||||||
|
- allow per-cluster sandboxing
|
||||||
|
- implement gamemode
|
||||||
|
- better toml support
|
||||||
|
- make all tauri events into tauri_specta events
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fontsource/poppins": "^5.0.14",
|
"@fontsource/poppins": "^5.0.15",
|
||||||
"@formatjs/intl-durationformat": "^0.2.4",
|
"@formatjs/intl-durationformat": "^0.2.4",
|
||||||
"@iconify-json/logos": "^1.1.44",
|
"@iconify-json/logos": "^1.1.44",
|
||||||
"@leeoniya/ufuzzy": "^1.0.14",
|
"@leeoniya/ufuzzy": "^1.0.14",
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,8 @@ export default defineConfig(async ({ mode }) => {
|
||||||
authToken: process.env.SENTRY_AUTH_TOKEN,
|
authToken: process.env.SENTRY_AUTH_TOKEN,
|
||||||
org: 'polyfrost',
|
org: 'polyfrost',
|
||||||
project: 'onelauncher_frontend',
|
project: 'onelauncher_frontend',
|
||||||
|
url: 'https://sentry.polyfrost.org',
|
||||||
|
telemetry: false,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@
|
||||||
"@vitest/ui": "^2.0.5",
|
"@vitest/ui": "^2.0.5",
|
||||||
"bumpp": "^9.5.1",
|
"bumpp": "^9.5.1",
|
||||||
"eslint": "^9.9.0",
|
"eslint": "^9.9.0",
|
||||||
"eslint-plugin-solid": "^0.14.1",
|
"eslint-plugin-solid": "^0.14.2",
|
||||||
"jiti": "^1.21.6",
|
"jiti": "^1.21.6",
|
||||||
"ts-node": "^10.9.2",
|
"ts-node": "^10.9.2",
|
||||||
"tsx": "^4.17.0",
|
"tsx": "^4.17.0",
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
//! Launcher Import: Technic Launcher
|
//! Launcher Import: TLauncher
|
||||||
//! Closed source (technically) ;3
|
//! Closed source (technically) ;3
|
||||||
|
|
|
||||||
|
|
@ -2,10 +2,14 @@
|
||||||
|
|
||||||
TODO: Don't pre-build binaries. That is a huge security issue.
|
TODO: Don't pre-build binaries. That is a huge security issue.
|
||||||
|
|
||||||
## JavaCheck
|
## `JavaCheck`
|
||||||
|
|
||||||
Yoinked from <https://github.com/PrismLauncher/PrismLauncher/tree/develop/libraries/javacheck>.
|
A simple prebuilt Java class that prints the architecture and version of a JVM, [GitHub repository](https://github.com/PrismLauncher/PrismLauncher/tree/develop/libraries/javacheck) (Available under the Unlicense, sublicensed from ["Do what you want with it. It is so trivial that noone cares."](https://github.com/PrismLauncher/PrismLauncher/blob/develop/libraries/README.md#javacheck))
|
||||||
|
|
||||||
(Relicensed to the Unlicense from ["Do what you want with it. It is so trivial that noone cares."](https://github.com/PrismLauncher/PrismLauncher/blob/develop/libraries/README.md#javacheck))
|
## `Gamemmode`
|
||||||
|
|
||||||
## Gamemmode
|
A performance optimization daemon, [GitHub repository](https://github.com/FeralInteractive/gamemode). (Available under `BSD-3-Clause` on their GitHub repository)
|
||||||
|
|
||||||
|
## `ForgeWrapper`
|
||||||
|
|
||||||
|
An interface for the launching systems of modern Minecraft Forge, [GitHub repository](https://github.com/PrismLauncher/ForgeWrapper). (Available under `MIT` on their GitHub repository)
|
||||||
|
|
|
||||||
0
packages/core/wrapper/forge/.gitkeep
Normal file
0
packages/core/wrapper/forge/.gitkeep
Normal file
376
packages/core/wrapper/gamemode/include/gamemode_client.h
Normal file
376
packages/core/wrapper/gamemode/include/gamemode_client.h
Normal file
|
|
@ -0,0 +1,376 @@
|
||||||
|
/*
|
||||||
|
|
||||||
|
Copyright (c) 2017-2019, Feral Interactive
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of Feral Interactive nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software
|
||||||
|
without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
#ifndef CLIENT_GAMEMODE_H
|
||||||
|
#define CLIENT_GAMEMODE_H
|
||||||
|
/*
|
||||||
|
* GameMode supports the following client functions
|
||||||
|
* Requests are refcounted in the daemon
|
||||||
|
*
|
||||||
|
* int gamemode_request_start() - Request gamemode starts
|
||||||
|
* 0 if the request was sent successfully
|
||||||
|
* -1 if the request failed
|
||||||
|
*
|
||||||
|
* int gamemode_request_end() - Request gamemode ends
|
||||||
|
* 0 if the request was sent successfully
|
||||||
|
* -1 if the request failed
|
||||||
|
*
|
||||||
|
* GAMEMODE_AUTO can be defined to make the above two functions apply during static init and
|
||||||
|
* destruction, as appropriate. In this configuration, errors will be printed to stderr
|
||||||
|
*
|
||||||
|
* int gamemode_query_status() - Query the current status of gamemode
|
||||||
|
* 0 if gamemode is inactive
|
||||||
|
* 1 if gamemode is active
|
||||||
|
* 2 if gamemode is active and this client is registered
|
||||||
|
* -1 if the query failed
|
||||||
|
*
|
||||||
|
* int gamemode_request_start_for(pid_t pid) - Request gamemode starts for another process
|
||||||
|
* 0 if the request was sent successfully
|
||||||
|
* -1 if the request failed
|
||||||
|
* -2 if the request was rejected
|
||||||
|
*
|
||||||
|
* int gamemode_request_end_for(pid_t pid) - Request gamemode ends for another process
|
||||||
|
* 0 if the request was sent successfully
|
||||||
|
* -1 if the request failed
|
||||||
|
* -2 if the request was rejected
|
||||||
|
*
|
||||||
|
* int gamemode_query_status_for(pid_t pid) - Query status of gamemode for another process
|
||||||
|
* 0 if gamemode is inactive
|
||||||
|
* 1 if gamemode is active
|
||||||
|
* 2 if gamemode is active and this client is registered
|
||||||
|
* -1 if the query failed
|
||||||
|
*
|
||||||
|
* const char* gamemode_error_string() - Get an error string
|
||||||
|
* returns a string describing any of the above errors
|
||||||
|
*
|
||||||
|
* Note: All the above requests can be blocking - dbus requests can and will block while the daemon
|
||||||
|
* handles the request. It is not recommended to make these calls in performance critical code
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include <dlfcn.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
static char internal_gamemode_client_error_string[512] = { 0 };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load libgamemode dynamically to dislodge us from most dependencies.
|
||||||
|
* This allows clients to link and/or use this regardless of runtime.
|
||||||
|
* See SDL2 for an example of the reasoning behind this in terms of
|
||||||
|
* dynamic versioning as well.
|
||||||
|
*/
|
||||||
|
static volatile int internal_libgamemode_loaded = 1;
|
||||||
|
|
||||||
|
/* Typedefs for the functions to load */
|
||||||
|
typedef int (*api_call_return_int)(void);
|
||||||
|
typedef const char *(*api_call_return_cstring)(void);
|
||||||
|
typedef int (*api_call_pid_return_int)(pid_t);
|
||||||
|
|
||||||
|
/* Storage for functors */
|
||||||
|
static api_call_return_int REAL_internal_gamemode_request_start = NULL;
|
||||||
|
static api_call_return_int REAL_internal_gamemode_request_end = NULL;
|
||||||
|
static api_call_return_int REAL_internal_gamemode_query_status = NULL;
|
||||||
|
static api_call_return_cstring REAL_internal_gamemode_error_string = NULL;
|
||||||
|
static api_call_pid_return_int REAL_internal_gamemode_request_start_for = NULL;
|
||||||
|
static api_call_pid_return_int REAL_internal_gamemode_request_end_for = NULL;
|
||||||
|
static api_call_pid_return_int REAL_internal_gamemode_query_status_for = NULL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal helper to perform the symbol binding safely.
|
||||||
|
*
|
||||||
|
* Returns 0 on success and -1 on failure
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline)) static inline int internal_bind_libgamemode_symbol(
|
||||||
|
void *handle, const char *name, void **out_func, size_t func_size, bool required)
|
||||||
|
{
|
||||||
|
void *symbol_lookup = NULL;
|
||||||
|
char *dl_error = NULL;
|
||||||
|
|
||||||
|
/* Safely look up the symbol */
|
||||||
|
symbol_lookup = dlsym(handle, name);
|
||||||
|
dl_error = dlerror();
|
||||||
|
if (required && (dl_error || !symbol_lookup)) {
|
||||||
|
snprintf(internal_gamemode_client_error_string,
|
||||||
|
sizeof(internal_gamemode_client_error_string),
|
||||||
|
"dlsym failed - %s",
|
||||||
|
dl_error);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Have the symbol correctly, copy it to make it usable */
|
||||||
|
memcpy(out_func, &symbol_lookup, func_size);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads libgamemode and needed functions
|
||||||
|
*
|
||||||
|
* Returns 0 on success and -1 on failure
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline)) static inline int internal_load_libgamemode(void)
|
||||||
|
{
|
||||||
|
/* We start at 1, 0 is a success and -1 is a fail */
|
||||||
|
if (internal_libgamemode_loaded != 1) {
|
||||||
|
return internal_libgamemode_loaded;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Anonymous struct type to define our bindings */
|
||||||
|
struct binding {
|
||||||
|
const char *name;
|
||||||
|
void **functor;
|
||||||
|
size_t func_size;
|
||||||
|
bool required;
|
||||||
|
} bindings[] = {
|
||||||
|
{ "real_gamemode_request_start",
|
||||||
|
(void **)&REAL_internal_gamemode_request_start,
|
||||||
|
sizeof(REAL_internal_gamemode_request_start),
|
||||||
|
true },
|
||||||
|
{ "real_gamemode_request_end",
|
||||||
|
(void **)&REAL_internal_gamemode_request_end,
|
||||||
|
sizeof(REAL_internal_gamemode_request_end),
|
||||||
|
true },
|
||||||
|
{ "real_gamemode_query_status",
|
||||||
|
(void **)&REAL_internal_gamemode_query_status,
|
||||||
|
sizeof(REAL_internal_gamemode_query_status),
|
||||||
|
false },
|
||||||
|
{ "real_gamemode_error_string",
|
||||||
|
(void **)&REAL_internal_gamemode_error_string,
|
||||||
|
sizeof(REAL_internal_gamemode_error_string),
|
||||||
|
true },
|
||||||
|
{ "real_gamemode_request_start_for",
|
||||||
|
(void **)&REAL_internal_gamemode_request_start_for,
|
||||||
|
sizeof(REAL_internal_gamemode_request_start_for),
|
||||||
|
false },
|
||||||
|
{ "real_gamemode_request_end_for",
|
||||||
|
(void **)&REAL_internal_gamemode_request_end_for,
|
||||||
|
sizeof(REAL_internal_gamemode_request_end_for),
|
||||||
|
false },
|
||||||
|
{ "real_gamemode_query_status_for",
|
||||||
|
(void **)&REAL_internal_gamemode_query_status_for,
|
||||||
|
sizeof(REAL_internal_gamemode_query_status_for),
|
||||||
|
false },
|
||||||
|
};
|
||||||
|
|
||||||
|
void *libgamemode = NULL;
|
||||||
|
|
||||||
|
/* Try and load libgamemode */
|
||||||
|
libgamemode = dlopen("libgamemode.so.0", RTLD_NOW);
|
||||||
|
if (!libgamemode) {
|
||||||
|
/* Attempt to load unversioned library for compatibility with older
|
||||||
|
* versions (as of writing, there are no ABI changes between the two -
|
||||||
|
* this may need to change if ever ABI-breaking changes are made) */
|
||||||
|
libgamemode = dlopen("libgamemode.so", RTLD_NOW);
|
||||||
|
if (!libgamemode) {
|
||||||
|
snprintf(internal_gamemode_client_error_string,
|
||||||
|
sizeof(internal_gamemode_client_error_string),
|
||||||
|
"dlopen failed - %s",
|
||||||
|
dlerror());
|
||||||
|
internal_libgamemode_loaded = -1;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Attempt to bind all symbols */
|
||||||
|
for (size_t i = 0; i < sizeof(bindings) / sizeof(bindings[0]); i++) {
|
||||||
|
struct binding *binder = &bindings[i];
|
||||||
|
|
||||||
|
if (internal_bind_libgamemode_symbol(libgamemode,
|
||||||
|
binder->name,
|
||||||
|
binder->functor,
|
||||||
|
binder->func_size,
|
||||||
|
binder->required)) {
|
||||||
|
internal_libgamemode_loaded = -1;
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Success */
|
||||||
|
internal_libgamemode_loaded = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect to the real libgamemode
|
||||||
|
*/
|
||||||
|
__attribute__((always_inline)) static inline const char *gamemode_error_string(void)
|
||||||
|
{
|
||||||
|
/* If we fail to load the system gamemode, or we have an error string already, return our error
|
||||||
|
* string instead of diverting to the system version */
|
||||||
|
if (internal_load_libgamemode() < 0 || internal_gamemode_client_error_string[0] != '\0') {
|
||||||
|
return internal_gamemode_client_error_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Assert for static analyser that the function is not NULL */
|
||||||
|
assert(REAL_internal_gamemode_error_string != NULL);
|
||||||
|
|
||||||
|
return REAL_internal_gamemode_error_string();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redirect to the real libgamemode
|
||||||
|
* Allow automatically requesting game mode
|
||||||
|
* Also prints errors as they happen.
|
||||||
|
*/
|
||||||
|
#ifdef GAMEMODE_AUTO
|
||||||
|
__attribute__((constructor))
|
||||||
|
#else
|
||||||
|
__attribute__((always_inline)) static inline
|
||||||
|
#endif
|
||||||
|
int gamemode_request_start(void)
|
||||||
|
{
|
||||||
|
/* Need to load gamemode */
|
||||||
|
if (internal_load_libgamemode() < 0) {
|
||||||
|
#ifdef GAMEMODE_AUTO
|
||||||
|
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Assert for static analyser that the function is not NULL */
|
||||||
|
assert(REAL_internal_gamemode_request_start != NULL);
|
||||||
|
|
||||||
|
if (REAL_internal_gamemode_request_start() < 0) {
|
||||||
|
#ifdef GAMEMODE_AUTO
|
||||||
|
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redirect to the real libgamemode */
|
||||||
|
#ifdef GAMEMODE_AUTO
|
||||||
|
__attribute__((destructor))
|
||||||
|
#else
|
||||||
|
__attribute__((always_inline)) static inline
|
||||||
|
#endif
|
||||||
|
int gamemode_request_end(void)
|
||||||
|
{
|
||||||
|
/* Need to load gamemode */
|
||||||
|
if (internal_load_libgamemode() < 0) {
|
||||||
|
#ifdef GAMEMODE_AUTO
|
||||||
|
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Assert for static analyser that the function is not NULL */
|
||||||
|
assert(REAL_internal_gamemode_request_end != NULL);
|
||||||
|
|
||||||
|
if (REAL_internal_gamemode_request_end() < 0) {
|
||||||
|
#ifdef GAMEMODE_AUTO
|
||||||
|
fprintf(stderr, "gamemodeauto: %s\n", gamemode_error_string());
|
||||||
|
#endif
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redirect to the real libgamemode */
|
||||||
|
__attribute__((always_inline)) static inline int gamemode_query_status(void)
|
||||||
|
{
|
||||||
|
/* Need to load gamemode */
|
||||||
|
if (internal_load_libgamemode() < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (REAL_internal_gamemode_query_status == NULL) {
|
||||||
|
snprintf(internal_gamemode_client_error_string,
|
||||||
|
sizeof(internal_gamemode_client_error_string),
|
||||||
|
"gamemode_query_status missing (older host?)");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return REAL_internal_gamemode_query_status();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redirect to the real libgamemode */
|
||||||
|
__attribute__((always_inline)) static inline int gamemode_request_start_for(pid_t pid)
|
||||||
|
{
|
||||||
|
/* Need to load gamemode */
|
||||||
|
if (internal_load_libgamemode() < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (REAL_internal_gamemode_request_start_for == NULL) {
|
||||||
|
snprintf(internal_gamemode_client_error_string,
|
||||||
|
sizeof(internal_gamemode_client_error_string),
|
||||||
|
"gamemode_request_start_for missing (older host?)");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return REAL_internal_gamemode_request_start_for(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redirect to the real libgamemode */
|
||||||
|
__attribute__((always_inline)) static inline int gamemode_request_end_for(pid_t pid)
|
||||||
|
{
|
||||||
|
/* Need to load gamemode */
|
||||||
|
if (internal_load_libgamemode() < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (REAL_internal_gamemode_request_end_for == NULL) {
|
||||||
|
snprintf(internal_gamemode_client_error_string,
|
||||||
|
sizeof(internal_gamemode_client_error_string),
|
||||||
|
"gamemode_request_end_for missing (older host?)");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return REAL_internal_gamemode_request_end_for(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Redirect to the real libgamemode */
|
||||||
|
__attribute__((always_inline)) static inline int gamemode_query_status_for(pid_t pid)
|
||||||
|
{
|
||||||
|
/* Need to load gamemode */
|
||||||
|
if (internal_load_libgamemode() < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (REAL_internal_gamemode_query_status_for == NULL) {
|
||||||
|
snprintf(internal_gamemode_client_error_string,
|
||||||
|
sizeof(internal_gamemode_client_error_string),
|
||||||
|
"gamemode_query_status_for missing (older host?)");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return REAL_internal_gamemode_query_status_for(pid);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // CLIENT_GAMEMODE_H
|
||||||
0
packages/distribution/macos/.gitkeep
Normal file
0
packages/distribution/macos/.gitkeep
Normal file
93
pnpm-lock.yaml
generated
93
pnpm-lock.yaml
generated
|
|
@ -10,7 +10,7 @@ importers:
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@flowr/eslint-config':
|
'@flowr/eslint-config':
|
||||||
specifier: ^3.12.0
|
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.1(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.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)))
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^22.4.0
|
specifier: ^22.4.0
|
||||||
version: 22.4.0
|
version: 22.4.0
|
||||||
|
|
@ -27,8 +27,8 @@ importers:
|
||||||
specifier: ^9.9.0
|
specifier: ^9.9.0
|
||||||
version: 9.9.0(jiti@1.21.6)
|
version: 9.9.0(jiti@1.21.6)
|
||||||
eslint-plugin-solid:
|
eslint-plugin-solid:
|
||||||
specifier: ^0.14.1
|
specifier: ^0.14.2
|
||||||
version: 0.14.1(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
|
version: 0.14.2(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)
|
||||||
jiti:
|
jiti:
|
||||||
specifier: ^1.21.6
|
specifier: ^1.21.6
|
||||||
version: 1.21.6
|
version: 1.21.6
|
||||||
|
|
@ -117,8 +117,8 @@ importers:
|
||||||
apps/frontend:
|
apps/frontend:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@fontsource/poppins':
|
'@fontsource/poppins':
|
||||||
specifier: ^5.0.14
|
specifier: ^5.0.15
|
||||||
version: 5.0.14
|
version: 5.0.15
|
||||||
'@formatjs/intl-durationformat':
|
'@formatjs/intl-durationformat':
|
||||||
specifier: ^0.2.4
|
specifier: ^0.2.4
|
||||||
version: 0.2.4
|
version: 0.2.4
|
||||||
|
|
@ -996,8 +996,8 @@ packages:
|
||||||
resolution: {integrity: sha512-ZAyinoGoyVWNBl0iAjiiWYaRrAPgu2ApCRVBHh5Kb/abpcsfQnybZzeu6Rz9olxPmtp/OjvBmS36/xLK+9ZJZQ==}
|
resolution: {integrity: sha512-ZAyinoGoyVWNBl0iAjiiWYaRrAPgu2ApCRVBHh5Kb/abpcsfQnybZzeu6Rz9olxPmtp/OjvBmS36/xLK+9ZJZQ==}
|
||||||
engines: {node: '>=20'}
|
engines: {node: '>=20'}
|
||||||
|
|
||||||
'@fontsource/poppins@5.0.14':
|
'@fontsource/poppins@5.0.15':
|
||||||
resolution: {integrity: sha512-nmM1zpPo3Uh4JcGAVSQuWaZNYh2FbbwWhZ5t6hRaynmJaNTBW85d3nEh9zMmzI0HX7X5xqQVdRHeDatKpOGsnA==}
|
resolution: {integrity: sha512-hN8jhlb01v0f8F3X5h8XUiqz/dMYg/RrhyHmU1o4gZIgk+Yj2SeqmRLBj88Lh+pEjdVTmbDXSHGCVlbyPaSm8A==}
|
||||||
|
|
||||||
'@formatjs/ecma402-abstract@2.0.0':
|
'@formatjs/ecma402-abstract@2.0.0':
|
||||||
resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==}
|
resolution: {integrity: sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==}
|
||||||
|
|
@ -1597,10 +1597,6 @@ packages:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@7.16.0':
|
|
||||||
resolution: {integrity: sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==}
|
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@7.18.0':
|
'@typescript-eslint/scope-manager@7.18.0':
|
||||||
resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
|
resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==}
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
engines: {node: ^18.18.0 || >=20.0.0}
|
||||||
|
|
@ -1618,10 +1614,6 @@ packages:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@typescript-eslint/types@7.16.0':
|
|
||||||
resolution: {integrity: sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==}
|
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
|
||||||
|
|
||||||
'@typescript-eslint/types@7.18.0':
|
'@typescript-eslint/types@7.18.0':
|
||||||
resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
|
resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==}
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
engines: {node: ^18.18.0 || >=20.0.0}
|
||||||
|
|
@ -1630,15 +1622,6 @@ packages:
|
||||||
resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==}
|
resolution: {integrity: sha512-q2/Bxa0gMOu/2/AKALI0tCKbG2zppccnRIRCW6BaaTlRVaPKft4oVYPp7WOPpcnsgbr0qROAVCVKCvIQ0tbWog==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@7.16.0':
|
|
||||||
resolution: {integrity: sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==}
|
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
typescript: '*'
|
|
||||||
peerDependenciesMeta:
|
|
||||||
typescript:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@7.18.0':
|
'@typescript-eslint/typescript-estree@7.18.0':
|
||||||
resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
|
resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==}
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
engines: {node: ^18.18.0 || >=20.0.0}
|
||||||
|
|
@ -1657,12 +1640,6 @@ packages:
|
||||||
typescript:
|
typescript:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@typescript-eslint/utils@7.16.0':
|
|
||||||
resolution: {integrity: sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==}
|
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
|
||||||
peerDependencies:
|
|
||||||
eslint: ^8.56.0
|
|
||||||
|
|
||||||
'@typescript-eslint/utils@7.18.0':
|
'@typescript-eslint/utils@7.18.0':
|
||||||
resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
|
resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==}
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
engines: {node: ^18.18.0 || >=20.0.0}
|
||||||
|
|
@ -1675,10 +1652,6 @@ packages:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@7.16.0':
|
|
||||||
resolution: {integrity: sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==}
|
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@7.18.0':
|
'@typescript-eslint/visitor-keys@7.18.0':
|
||||||
resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
|
resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==}
|
||||||
engines: {node: ^18.18.0 || >=20.0.0}
|
engines: {node: ^18.18.0 || >=20.0.0}
|
||||||
|
|
@ -2451,8 +2424,8 @@ packages:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: '>=8.44.0'
|
eslint: '>=8.44.0'
|
||||||
|
|
||||||
eslint-plugin-solid@0.14.1:
|
eslint-plugin-solid@0.14.2:
|
||||||
resolution: {integrity: sha512-2bR21xTGhXufK5qqib0h8fQkoZbVm0Xmsgioj+D6ynLXvVq20Atf5F/qyu2WUVNukKJkpd6WsYW0JRWFo2yZvQ==}
|
resolution: {integrity: sha512-uyX+/ONsM0IoVBV9EBv7uAhhFXqTfAGd3lxUCNfC+XmJazme1f4UAPhPNbqSfqnzaCbXwB1rsD/9ZpAgO6mzew==}
|
||||||
engines: {node: '>=12.0.0'}
|
engines: {node: '>=12.0.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
|
eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
|
||||||
|
|
@ -4930,7 +4903,7 @@ snapshots:
|
||||||
|
|
||||||
'@fastify/busboy@2.1.1': {}
|
'@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.1(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.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)))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@antfu/install-pkg': 0.3.5
|
'@antfu/install-pkg': 0.3.5
|
||||||
'@clack/prompts': 0.7.0
|
'@clack/prompts': 0.7.0
|
||||||
|
|
@ -4964,7 +4937,7 @@ snapshots:
|
||||||
yaml-eslint-parser: 1.2.3
|
yaml-eslint-parser: 1.2.3
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@unocss/eslint-plugin': 0.62.2(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.1(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-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-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.38)(eslint@9.9.0(jiti@1.21.6))
|
||||||
vue-eslint-parser: 9.4.3(eslint@9.9.0(jiti@1.21.6))
|
vue-eslint-parser: 9.4.3(eslint@9.9.0(jiti@1.21.6))
|
||||||
|
|
@ -4977,7 +4950,7 @@ snapshots:
|
||||||
|
|
||||||
'@flowr/utils@3.12.0': {}
|
'@flowr/utils@3.12.0': {}
|
||||||
|
|
||||||
'@fontsource/poppins@5.0.14': {}
|
'@fontsource/poppins@5.0.15': {}
|
||||||
|
|
||||||
'@formatjs/ecma402-abstract@2.0.0':
|
'@formatjs/ecma402-abstract@2.0.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -5606,11 +5579,6 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@7.16.0':
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 7.16.0
|
|
||||||
'@typescript-eslint/visitor-keys': 7.16.0
|
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@7.18.0':
|
'@typescript-eslint/scope-manager@7.18.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 7.18.0
|
'@typescript-eslint/types': 7.18.0
|
||||||
|
|
@ -5633,27 +5601,10 @@ snapshots:
|
||||||
- eslint
|
- eslint
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/types@7.16.0': {}
|
|
||||||
|
|
||||||
'@typescript-eslint/types@7.18.0': {}
|
'@typescript-eslint/types@7.18.0': {}
|
||||||
|
|
||||||
'@typescript-eslint/types@8.1.0': {}
|
'@typescript-eslint/types@8.1.0': {}
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@7.16.0(typescript@5.5.4)':
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 7.16.0
|
|
||||||
'@typescript-eslint/visitor-keys': 7.16.0
|
|
||||||
debug: 4.3.6
|
|
||||||
globby: 11.1.0
|
|
||||||
is-glob: 4.0.3
|
|
||||||
minimatch: 9.0.5
|
|
||||||
semver: 7.6.3
|
|
||||||
ts-api-utils: 1.3.0(typescript@5.5.4)
|
|
||||||
optionalDependencies:
|
|
||||||
typescript: 5.5.4
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
|
'@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 7.18.0
|
'@typescript-eslint/types': 7.18.0
|
||||||
|
|
@ -5684,17 +5635,6 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/utils@7.16.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)':
|
|
||||||
dependencies:
|
|
||||||
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6))
|
|
||||||
'@typescript-eslint/scope-manager': 7.16.0
|
|
||||||
'@typescript-eslint/types': 7.16.0
|
|
||||||
'@typescript-eslint/typescript-estree': 7.16.0(typescript@5.5.4)
|
|
||||||
eslint: 9.9.0(jiti@1.21.6)
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
- typescript
|
|
||||||
|
|
||||||
'@typescript-eslint/utils@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)':
|
'@typescript-eslint/utils@7.18.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6))
|
'@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6))
|
||||||
|
|
@ -5717,11 +5657,6 @@ snapshots:
|
||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@7.16.0':
|
|
||||||
dependencies:
|
|
||||||
'@typescript-eslint/types': 7.16.0
|
|
||||||
eslint-visitor-keys: 3.4.3
|
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@7.18.0':
|
'@typescript-eslint/visitor-keys@7.18.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 7.18.0
|
'@typescript-eslint/types': 7.18.0
|
||||||
|
|
@ -6659,9 +6594,9 @@ snapshots:
|
||||||
regexp-ast-analysis: 0.7.1
|
regexp-ast-analysis: 0.7.1
|
||||||
scslre: 0.3.0
|
scslre: 0.3.0
|
||||||
|
|
||||||
eslint-plugin-solid@0.14.1(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):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/utils': 7.16.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)
|
||||||
eslint: 9.9.0(jiti@1.21.6)
|
eslint: 9.9.0(jiti@1.21.6)
|
||||||
estraverse: 5.3.0
|
estraverse: 5.3.0
|
||||||
is-html: 2.0.0
|
is-html: 2.0.0
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue