aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeckoEidechse <gecko.eidechse+git@pm.me>2023-10-08 23:26:20 +0200
committerGeckoEidechse <gecko.eidechse+git@pm.me>2023-10-08 23:26:20 +0200
commitedaa8f96980dc9483ce355218db1526b2d47fe6b (patch)
treefeb4caeda6fe972ef9f221c12e46d9b34eec86e7
parent081b7b0c87b03fbb2a5268b8c3f94a5890cfba1b (diff)
parent10e2b6f0c5e1b7bcd7e36f08f47e5c3d21f4dc5f (diff)
downloadFlightCore-edaa8f96980dc9483ce355218db1526b2d47fe6b.tar.gz
FlightCore-edaa8f96980dc9483ce355218db1526b2d47fe6b.zip
Merge branch 'main' into feat/upgrade-to-packgesfeat/upgrade-to-packges
-rw-r--r--.github/dependabot.yml19
-rw-r--r--docs/TROUBLESHOOTING.md13
-rw-r--r--src-tauri/Cargo.lock538
-rw-r--r--src-tauri/Cargo.toml24
-rw-r--r--src-tauri/bindings/InstallType.ts3
-rw-r--r--src-tauri/src/constants.rs36
-rw-r--r--src-tauri/src/development/mod.rs2
-rw-r--r--src-tauri/src/github/mod.rs1
-rw-r--r--src-tauri/src/github/pull_requests.rs22
-rw-r--r--src-tauri/src/main.rs19
-rw-r--r--src-tauri/src/mod_management/legacy.rs2
-rw-r--r--src-tauri/src/mod_management/mod.rs48
-rw-r--r--src-tauri/src/mod_management/plugins.rs26
-rw-r--r--src-tauri/src/northstar/install.rs79
-rw-r--r--src-tauri/src/northstar/mod.rs36
-rw-r--r--src-tauri/src/northstar/profile.rs76
-rw-r--r--src-tauri/src/repair_and_verify/mod.rs49
-rw-r--r--src-tauri/src/util.rs62
-rw-r--r--src-tauri/tauri.conf.json2
-rw-r--r--src-vue/package-lock.json1561
-rw-r--r--src-vue/package.json14
-rw-r--r--src-vue/src/components/LanguageSelector.vue8
-rw-r--r--src-vue/src/components/LocalModCard.vue15
-rw-r--r--src-vue/src/components/ThunderstoreModCard.vue19
-rw-r--r--src-vue/src/i18n/lang/da.json166
-rw-r--r--src-vue/src/i18n/lang/de.json12
-rw-r--r--src-vue/src/i18n/lang/en.json17
-rw-r--r--src-vue/src/i18n/lang/es.json166
-rw-r--r--src-vue/src/i18n/lang/fr.json25
-rw-r--r--src-vue/src/i18n/lang/pl.json18
-rw-r--r--src-vue/src/i18n/lang/ru.json23
-rw-r--r--src-vue/src/i18n/lang/vi.json1
-rw-r--r--src-vue/src/i18n/lang/zh_Hans.json16
-rw-r--r--src-vue/src/main.ts4
-rw-r--r--src-vue/src/plugins/modules/pull_requests.ts4
-rw-r--r--src-vue/src/plugins/store.ts96
-rw-r--r--src-vue/src/utils/GameInstall.ts1
-rw-r--r--src-vue/src/utils/InstallType.ts8
-rw-r--r--src-vue/src/views/ChangelogView.vue4
-rw-r--r--src-vue/src/views/DeveloperView.vue36
-rw-r--r--src-vue/src/views/RepairView.vue40
-rw-r--r--src-vue/src/views/SettingsView.vue90
42 files changed, 2022 insertions, 1379 deletions
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..19bb8c4c
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,19 @@
+# Configures dependabot
+
+version: 2
+updates:
+ # NPM packages
+ - package-ecosystem: 'npm'
+ directory: '/src-vue'
+ schedule:
+ interval: "daily"
+ commit-message:
+ prefix: "chore: "
+
+ # Rust crates
+ - package-ecosystem: 'cargo'
+ directory: '/src-tauri'
+ schedule:
+ interval: "daily"
+ commit-message:
+ prefix: "chore: "
diff --git a/docs/TROUBLESHOOTING.md b/docs/TROUBLESHOOTING.md
index d36b1e1f..2878dac1 100644
--- a/docs/TROUBLESHOOTING.md
+++ b/docs/TROUBLESHOOTING.md
@@ -1,6 +1,6 @@
# Troubleshooting
-Got an issue with FlightCore? Hopefully one of the steps below will help you resolve it. If not open an [issue on GitHub](https://github.com/R2NorthstarTools/FlightCore/issues/new) or ping `Gecko#7945` on the Northstar Discord.
+Got an issue with FlightCore? Hopefully one of the steps below will help you resolve it. If not open an [issue on GitHub](https://github.com/R2NorthstarTools/FlightCore/issues/new) or ping `@geckoeidechse` on the Northstar Discord.
## FlightCore won't launch
@@ -18,3 +18,14 @@ https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section
(make sure to select _Evergreen Bootstrapper_ -> _Download_).
+## Linux
+
+### FlightCore launches, but the main window is blank
+This may be caused by tauri-apps/tauri#5143
+
+Try setting this environment variable when starting FlightCore:
+`WEBKIT_DISABLE_COMPOSITING_MODE=1`
+
+```bash
+WEBKIT_DISABLE_COMPOSITING_MODE=1 ./flight-core.AppImage
+```
diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock
index e8ac30cc..85445891 100644
--- a/src-tauri/Cargo.lock
+++ b/src-tauri/Cargo.lock
@@ -75,13 +75,13 @@ dependencies = [
[[package]]
name = "anyhow"
-version = "1.0.72"
+version = "1.0.75"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b13c32d80ecc7ab747b80c3784bce54ee8a7a0cc4fbda9bf4cda2cf6fe90854"
+checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
[[package]]
name = "app"
-version = "2.1.0"
+version = "2.10.3"
dependencies = [
"anyhow",
"async-recursion",
@@ -92,7 +92,7 @@ dependencies = [
"json5",
"libthermite",
"log",
- "open",
+ "open 5.0.0",
"pretty_env_logger",
"regex",
"reqwest",
@@ -109,7 +109,7 @@ dependencies = [
"tokio",
"ts-rs",
"winapi",
- "winreg 0.11.0",
+ "winreg 0.51.0",
"zip",
"zip-extract",
]
@@ -177,7 +177,7 @@ dependencies = [
"polling",
"rustix 0.37.23",
"slab",
- "socket2",
+ "socket2 0.4.9",
"waker-fn",
]
@@ -210,13 +210,13 @@ dependencies = [
[[package]]
name = "async-recursion"
-version = "1.0.4"
+version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba"
+checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -233,7 +233,7 @@ checksum = "cc6dde6e4ed435a4c1ee4e73592f5ba9da2151af10076cc04858746af9352d09"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -267,17 +267,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3"
[[package]]
-name = "atty"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
-dependencies = [
- "hermit-abi 0.1.19",
- "libc",
- "winapi",
-]
-
-[[package]]
name = "autocfg"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -473,11 +462,12 @@ dependencies = [
[[package]]
name = "cc"
-version = "1.0.79"
+version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "6c6b2562119bf28c3439f7f02db99faf0aa1a8cdfe5772a2ee155d32227239f0"
dependencies = [
"jobserver",
+ "libc",
]
[[package]]
@@ -508,9 +498,9 @@ dependencies = [
[[package]]
name = "cfg-expr"
-version = "0.15.3"
+version = "0.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "215c0072ecc28f92eeb0eea38ba63ddfcb65c2828c46311d646f1a3ff5f9841c"
+checksum = "b40ccee03b5175c18cde8f37e7d2a33bcef6f8ec8f7cc0d81090d1bb380949c9"
dependencies = [
"smallvec",
"target-lexicon",
@@ -524,18 +514,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
-version = "0.4.26"
+version = "0.4.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
+checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
dependencies = [
"android-tzdata",
"iana-time-zone",
"js-sys",
"num-traits",
"serde",
- "time 0.1.45",
"wasm-bindgen",
- "winapi",
+ "windows-targets 0.48.1",
]
[[package]]
@@ -771,7 +760,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331"
dependencies = [
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -805,7 +794,7 @@ dependencies = [
"proc-macro2",
"quote",
"strsim",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -816,7 +805,7 @@ checksum = "836a9bbc7ad63342d6d6e7b815ccab164bc77a2d95d84bc3117a8c0d5c98e2d5"
dependencies = [
"darling_core",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -830,6 +819,15 @@ dependencies = [
]
[[package]]
+name = "deranged"
+version = "0.3.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7684a49fb1af197853ef7b2ee694bc1f5b4179556f1e5710e1760c5db6f5e929"
+dependencies = [
+ "serde",
+]
+
+[[package]]
name = "derivative"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -935,9 +933,9 @@ checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
[[package]]
name = "either"
-version = "1.8.1"
+version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "embed-resource"
@@ -985,17 +983,17 @@ checksum = "5e9a1f9f7d83e59740248a6e14ecf93929ade55027844dfcea78beafccc15745"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
name = "env_logger"
-version = "0.7.1"
+version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
+checksum = "85cdab6a89accf66733ad5a1693a4dcced6aeff64602b634530dd73c1f3ee9f0"
dependencies = [
- "atty",
"humantime",
+ "is-terminal",
"log",
"regex",
"termcolor",
@@ -1009,9 +1007,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
[[package]]
name = "errno"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
dependencies = [
"errno-dragonfly",
"libc",
@@ -1197,7 +1195,7 @@ checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -1458,9 +1456,9 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "globset"
-version = "0.4.11"
+version = "0.4.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1391ab1f92ffcc08911957149833e682aa3fe252b9f45f966d2ef972274c97df"
+checksum = "aca8bbd8e0707c1887a8bbb7e6b40e228f251ff5d62c8220a4a7a53c73aff006"
dependencies = [
"aho-corasick",
"bstr",
@@ -1583,15 +1581,6 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
[[package]]
name = "hermit-abi"
-version = "0.1.19"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
-dependencies = [
- "libc",
-]
-
-[[package]]
-name = "hermit-abi"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
@@ -1630,7 +1619,21 @@ checksum = "e5c13fb08e5d4dfc151ee5e88bae63f7773d61852f3bdc73c9f4b9e1bde03148"
dependencies = [
"log",
"mac",
- "markup5ever",
+ "markup5ever 0.10.1",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "html5ever"
+version = "0.26.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bea68cab48b8459f17cf1c944c67ddc572d272d9f2b274140f223ecb1da4a3b7"
+dependencies = [
+ "log",
+ "mac",
+ "markup5ever 0.11.0",
"proc-macro2",
"quote",
"syn 1.0.109",
@@ -1678,12 +1681,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "humantime"
-version = "1.3.0"
+version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
-dependencies = [
- "quick-error",
-]
+checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
[[package]]
name = "hyper"
@@ -1702,7 +1702,7 @@ dependencies = [
"httpdate",
"itoa 1.0.9",
"pin-project-lite",
- "socket2",
+ "socket2 0.4.9",
"tokio",
"tower-service",
"tracing",
@@ -1855,7 +1855,7 @@ version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
dependencies = [
- "hermit-abi 0.3.2",
+ "hermit-abi",
"libc",
"windows-sys 0.48.0",
]
@@ -1867,6 +1867,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6"
[[package]]
+name = "is-docker"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3"
+dependencies = [
+ "once_cell",
+]
+
+[[package]]
+name = "is-terminal"
+version = "0.4.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+dependencies = [
+ "hermit-abi",
+ "rustix 0.38.6",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "is-wsl"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5"
+dependencies = [
+ "is-docker",
+ "once_cell",
+]
+
+[[package]]
name = "itoa"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1994,7 +2024,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ea8e9c6e031377cff82ee3001dc8026cdf431ed4e2e6b51f98ab8c73484a358"
dependencies = [
"cssparser",
- "html5ever",
+ "html5ever 0.25.2",
+ "matches",
+ "selectors",
+]
+
+[[package]]
+name = "kuchikiki"
+version = "0.8.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f29e4755b7b995046f510a7520c42b2fed58b77bd94d5a87a8eb43d2fd126da8"
+dependencies = [
+ "cssparser",
+ "html5ever 0.26.0",
+ "indexmap 1.9.3",
"matches",
"selectors",
]
@@ -2047,9 +2090,9 @@ checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
[[package]]
name = "linux-raw-sys"
-version = "0.4.3"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "09fc20d2ca12cb9f044c93e3bd6d32d523e6e2ec3db4f7b2939cd99026ecd3f0"
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
[[package]]
name = "lock_api"
@@ -2063,9 +2106,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.19"
+version = "0.4.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
[[package]]
name = "loom"
@@ -2090,15 +2133,15 @@ checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
[[package]]
name = "mac-notification-sys"
-version = "0.5.6"
+version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e72d50edb17756489e79d52eb146927bec8eba9dd48faadf9ef08bca3791ad5"
+checksum = "abc434554ad0e640d772f7f262aa28e61d485212533d3673abe5f3d1729bd42a"
dependencies = [
"cc",
"dirs-next",
"objc-foundation",
"objc_id",
- "time 0.3.23",
+ "time",
]
[[package]]
@@ -2118,7 +2161,21 @@ checksum = "a24f40fb03852d1cdd84330cddcaf98e9ec08a7b7768e952fad3b4cf048ec8fd"
dependencies = [
"log",
"phf 0.8.0",
- "phf_codegen",
+ "phf_codegen 0.8.0",
+ "string_cache",
+ "string_cache_codegen",
+ "tendril",
+]
+
+[[package]]
+name = "markup5ever"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a2629bb1404f3d34c2e921f21fd34ba00b206124c81f65c50b43b6aaefeb016"
+dependencies = [
+ "log",
+ "phf 0.10.1",
+ "phf_codegen 0.10.0",
"string_cache",
"string_cache_codegen",
"tendril",
@@ -2147,9 +2204,9 @@ checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
[[package]]
name = "memchr"
-version = "2.5.0"
+version = "2.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c"
[[package]]
name = "memoffset"
@@ -2347,7 +2404,7 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
dependencies = [
- "hermit-abi 0.3.2",
+ "hermit-abi",
"libc",
]
@@ -2437,6 +2494,17 @@ dependencies = [
]
[[package]]
+name = "open"
+version = "5.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfabf1927dce4d6fdf563d63328a0a506101ced3ec780ca2135747336c98cef8"
+dependencies = [
+ "is-wsl",
+ "libc",
+ "pathdiff",
+]
+
+[[package]]
name = "openssl"
version = "0.10.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2459,7 +2527,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -2620,9 +2688,9 @@ checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
[[package]]
name = "pest"
-version = "2.7.1"
+version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d2d1d55045829d65aad9d389139882ad623b33b904e7c9f1b10c5b8927298e5"
+checksum = "1acb4a4365a13f749a93f1a094a7805e5cfa0955373a9de860d962eaa3a5fe5a"
dependencies = [
"thiserror",
"ucd-trie",
@@ -2630,9 +2698,9 @@ dependencies = [
[[package]]
name = "pest_derive"
-version = "2.7.1"
+version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f94bca7e7a599d89dea5dfa309e217e7906c3c007fb9c3299c40b10d6a315d3"
+checksum = "666d00490d4ac815001da55838c500eafb0320019bbaa44444137c48b443a853"
dependencies = [
"pest",
"pest_generator",
@@ -2640,22 +2708,22 @@ dependencies = [
[[package]]
name = "pest_generator"
-version = "2.7.1"
+version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99d490fe7e8556575ff6911e45567ab95e71617f43781e5c05490dc8d75c965c"
+checksum = "68ca01446f50dbda87c1786af8770d535423fa8a53aec03b8f4e3d7eb10e0929"
dependencies = [
"pest",
"pest_meta",
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
name = "pest_meta"
-version = "2.7.1"
+version = "2.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2674c66ebb4b4d9036012091b537aae5878970d6999f81a265034d85b136b341"
+checksum = "56af0a30af74d0445c0bf6d9d051c979b516a1a5af790d251daee76005420a48"
dependencies = [
"once_cell",
"pest",
@@ -2695,6 +2763,16 @@ dependencies = [
]
[[package]]
+name = "phf_codegen"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4fb1c3a8bc4dd4e5cfce29b44ffc14bedd2ee294559a294e2a4d4c9e9a6a13cd"
+dependencies = [
+ "phf_generator 0.10.0",
+ "phf_shared 0.10.0",
+]
+
+[[package]]
name = "phf_generator"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2762,9 +2840,9 @@ dependencies = [
[[package]]
name = "pin-project-lite"
-version = "0.2.10"
+version = "0.2.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c40d25201921e5ff0c862a505c6557ea88568a4e3ace775ab55e93f2f4f9d57"
+checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
[[package]]
name = "pin-utils"
@@ -2789,7 +2867,7 @@ dependencies = [
"line-wrap",
"quick-xml 0.29.0",
"serde",
- "time 0.3.23",
+ "time",
]
[[package]]
@@ -2835,9 +2913,9 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
[[package]]
name = "pretty_env_logger"
-version = "0.4.0"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "926d36b9553851b8b0005f1275891b392ee4d2d833852c417ed025477350fb9d"
+checksum = "865724d4dbe39d9f3dd3b52b88d859d66bcb2d6a0acfd5ea68a65fb66d4bdc1c"
dependencies = [
"env_logger",
"log",
@@ -2893,12 +2971,6 @@ dependencies = [
]
[[package]]
-name = "quick-error"
-version = "1.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
-
-[[package]]
name = "quick-xml"
version = "0.23.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2918,9 +2990,9 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.31"
+version = "1.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
dependencies = [
"proc-macro2",
]
@@ -3065,14 +3137,14 @@ dependencies = [
[[package]]
name = "regex"
-version = "1.9.1"
+version = "1.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2eae68fc220f7cf2532e4494aded17545fce192d59cd996e0fe7887f4ceb575"
+checksum = "ebee201405406dbf528b8b672104ae6d6d63e6d118cb10e4d51abbc7b58044ff"
dependencies = [
"aho-corasick",
"memchr",
- "regex-automata 0.3.3",
- "regex-syntax 0.7.4",
+ "regex-automata 0.3.9",
+ "regex-syntax 0.7.5",
]
[[package]]
@@ -3086,13 +3158,13 @@ dependencies = [
[[package]]
name = "regex-automata"
-version = "0.3.3"
+version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39354c10dd07468c2e73926b23bb9c2caca74c5501e38a35da70406f1d923310"
+checksum = "59b23e92ee4318893fa3fe3e6fb365258efbfe6ac6ab30f090cdcbb7aa37efa9"
dependencies = [
"aho-corasick",
"memchr",
- "regex-syntax 0.7.4",
+ "regex-syntax 0.7.5",
]
[[package]]
@@ -3103,15 +3175,15 @@ checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
[[package]]
name = "regex-syntax"
-version = "0.7.4"
+version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5ea92a5b6195c6ef2a0295ea818b312502c6fc94dde986c5553242e18fd4ce2"
+checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da"
[[package]]
name = "reqwest"
-version = "0.11.18"
+version = "0.11.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55"
+checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
dependencies = [
"base64 0.21.2",
"bytes",
@@ -3134,6 +3206,7 @@ dependencies = [
"serde",
"serde_json",
"serde_urlencoded",
+ "system-configuration",
"tokio",
"tokio-native-tls",
"tokio-util",
@@ -3143,7 +3216,7 @@ dependencies = [
"wasm-bindgen-futures",
"wasm-streams",
"web-sys",
- "winreg 0.10.1",
+ "winreg 0.50.0",
]
[[package]]
@@ -3216,26 +3289,26 @@ dependencies = [
[[package]]
name = "rustix"
-version = "0.38.4"
+version = "0.38.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a962918ea88d644592894bc6dc55acc6c0956488adcebbfb6e273506b7fd6e5"
+checksum = "1ee020b1716f0a80e2ace9b03441a749e402e86712f15f16fe8a8f75afac732f"
dependencies = [
"bitflags 2.3.3",
"errno",
"libc",
- "linux-raw-sys 0.4.3",
+ "linux-raw-sys 0.4.5",
"windows-sys 0.48.0",
]
[[package]]
name = "rustls"
-version = "0.21.5"
+version = "0.21.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "79ea77c539259495ce8ca47f53e66ae0330a8819f67e23ac96ca02f50e7b7d36"
+checksum = "1d1feddffcfcc0b33f5c6ce9a29e341e4cd59c3f78e7ee45f4a40c038b1d6cbb"
dependencies = [
"log",
"ring",
- "rustls-webpki 0.101.1",
+ "rustls-webpki 0.101.2",
"sct",
]
@@ -3251,9 +3324,9 @@ dependencies = [
[[package]]
name = "rustls-webpki"
-version = "0.101.1"
+version = "0.101.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15f36a6828982f422756984e47912a7a51dcbc2a197aa791158f8ca61cd8204e"
+checksum = "513722fd73ad80a71f72b61009ea1b584bcfa1483ca93949c8f290298837fa59"
dependencies = [
"ring",
"untrusted",
@@ -3353,7 +3426,7 @@ dependencies = [
"log",
"matches",
"phf 0.8.0",
- "phf_codegen",
+ "phf_codegen 0.8.0",
"precomputed-hash",
"servo_arc",
"smallvec",
@@ -3362,18 +3435,18 @@ dependencies = [
[[package]]
name = "semver"
-version = "1.0.18"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+checksum = "ad977052201c6de01a8ef2aa3378c4bd23217a056337d1d6da40468d267a4fb0"
dependencies = [
"serde",
]
[[package]]
name = "sentry"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5ce6d3512e2617c209ec1e86b0ca2fea06454cd34653c91092bf0f3ec41f8e3"
+checksum = "01b0ad16faa5d12372f914ed40d00bda21a6d1bdcc99264c5e5e1c9495cf3654"
dependencies = [
"httpdate",
"native-tls",
@@ -3383,15 +3456,16 @@ dependencies = [
"sentry-core",
"sentry-debug-images",
"sentry-panic",
+ "sentry-tracing",
"tokio",
"ureq",
]
[[package]]
name = "sentry-backtrace"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e7fe408d4d1f8de188a9309916e02e129cbe51ca19e55badea5a64899399b1a"
+checksum = "11f2ee8f147bb5f22ac59b5c35754a759b9a6f6722402e2a14750b2a63fc59bd"
dependencies = [
"backtrace",
"once_cell",
@@ -3401,9 +3475,9 @@ dependencies = [
[[package]]
name = "sentry-contexts"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5695096a059a89973ec541062d331ff4c9aeef9c2951416c894f0fff76340e7d"
+checksum = "dcd133362c745151eeba0ac61e3ba8350f034e9fe7509877d08059fe1d7720c6"
dependencies = [
"hostname",
"libc",
@@ -3415,9 +3489,9 @@ dependencies = [
[[package]]
name = "sentry-core"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b22828bfd118a7b660cf7a155002a494755c0424cebb7061e4743ecde9c7dbc"
+checksum = "7163491708804a74446642ff2c80b3acd668d4b9e9f497f85621f3d250fd012b"
dependencies = [
"once_cell",
"rand 0.8.5",
@@ -3428,9 +3502,9 @@ dependencies = [
[[package]]
name = "sentry-debug-images"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a9164d44a2929b1b7670afd7e87552514b70d3ae672ca52884639373d912a3d"
+checksum = "6a5003d7ff08aa3b2b76994080b183e8cfa06c083e280737c9cee02ca1c70f5e"
dependencies = [
"findshlibs",
"once_cell",
@@ -3439,9 +3513,9 @@ dependencies = [
[[package]]
name = "sentry-log"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfa3a3f4477e77541c26eb84d0e355729dfa35c74c682eb8678f146db5126013"
+checksum = "2558fc4a85326e6063711b45ce82ed6b18cdacd0732580c1567da914ac1df33e"
dependencies = [
"log",
"sentry-core",
@@ -3449,19 +3523,31 @@ dependencies = [
[[package]]
name = "sentry-panic"
-version = "0.30.0"
+version = "0.31.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4dfe8371c9b2e126a8b64f6fefa54cef716ff2a50e63b5558a48b899265bccd"
+dependencies = [
+ "sentry-backtrace",
+ "sentry-core",
+]
+
+[[package]]
+name = "sentry-tracing"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f4ced2a7a8c14899d58eec402d946f69d5ed26a3fc363a7e8b1e5cb88473a01"
+checksum = "5aca8b88978677a27ee1a91beafe4052306c474c06f582321fde72d2e2cc2f7f"
dependencies = [
"sentry-backtrace",
"sentry-core",
+ "tracing-core",
+ "tracing-subscriber",
]
[[package]]
name = "sentry-types"
-version = "0.30.0"
+version = "0.31.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "360ee3270f7a4a1eee6c667f7d38360b995431598a73b740dfe420da548d9cc9"
+checksum = "9e7a88e0c1922d19b3efee12a8215f6a8a806e442e665ada71cc222cab72985f"
dependencies = [
"debugid",
"getrandom 0.2.10",
@@ -3469,36 +3555,36 @@ dependencies = [
"serde",
"serde_json",
"thiserror",
- "time 0.3.23",
+ "time",
"url",
"uuid",
]
[[package]]
name = "serde"
-version = "1.0.174"
+version = "1.0.188"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b88756493a5bd5e5395d53baa70b194b05764ab85b59e43e4b8f4e1192fa9b1"
+checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
-version = "1.0.174"
+version = "1.0.188"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e5c3a298c7f978e53536f95a63bdc4c4a64550582f31a0359a9afda6aede62e"
+checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
name = "serde_json"
-version = "1.0.103"
+version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d03b412469450d4404fe8499a268edd7f8b79fecb074b0d812ad64ca21f4031b"
+checksum = "6b420ce6e3d8bd882e9b243c6eed35dbc9a6110c9769e74b584e0d68d1f20c65"
dependencies = [
"itoa 1.0.9",
"ryu",
@@ -3507,13 +3593,13 @@ dependencies = [
[[package]]
name = "serde_repr"
-version = "0.1.15"
+version = "0.1.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e168eaaf71e8f9bd6037feb05190485708e019f4fd87d161b3c0a0d37daf85e5"
+checksum = "8725e1dfadb3a50f7e5ce0b1a540466f6ed3fe7a0fca2ac2b8b831d31316bd00"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -3550,7 +3636,7 @@ dependencies = [
"serde",
"serde_json",
"serde_with_macros",
- "time 0.3.23",
+ "time",
]
[[package]]
@@ -3562,7 +3648,7 @@ dependencies = [
"darling",
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -3659,9 +3745,9 @@ dependencies = [
[[package]]
name = "simd-adler32"
-version = "0.3.5"
+version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f"
+checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "siphasher"
@@ -3695,6 +3781,16 @@ dependencies = [
]
[[package]]
+name = "socket2"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877"
+dependencies = [
+ "libc",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
name = "soup2"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3823,9 +3919,9 @@ dependencies = [
[[package]]
name = "syn"
-version = "2.0.27"
+version = "2.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
dependencies = [
"proc-macro2",
"quote",
@@ -3847,9 +3943,9 @@ dependencies = [
[[package]]
name = "sysinfo"
-version = "0.26.9"
+version = "0.29.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c18a6156d1f27a9592ee18c1a846ca8dd5c258b7179fc193ae87c74ebb666f5"
+checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5"
dependencies = [
"cfg-if",
"core-foundation-sys",
@@ -3861,6 +3957,27 @@ dependencies = [
]
[[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",
+ "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]]
name = "system-deps"
version = "5.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -3879,7 +3996,7 @@ version = "6.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30c2de8a4d8f4b823d634affc9cd2a74ec98c53a756f317e529a48046cbf71f3"
dependencies = [
- "cfg-expr 0.15.3",
+ "cfg-expr 0.15.4",
"heck 0.4.1",
"pkg-config",
"toml 0.7.6",
@@ -3957,9 +4074,9 @@ dependencies = [
[[package]]
name = "target-lexicon"
-version = "0.12.10"
+version = "0.12.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d2faeef5759ab89935255b1a4cd98e0baf99d1085e37d36599c625dac49ae8e"
+checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a"
[[package]]
name = "tauri"
@@ -3986,7 +4103,7 @@ dependencies = [
"notify-rust",
"objc",
"once_cell",
- "open",
+ "open 3.2.0",
"os_info",
"os_pipe",
"percent-encoding",
@@ -4010,7 +4127,7 @@ dependencies = [
"tauri-utils",
"tempfile",
"thiserror",
- "time 0.3.23",
+ "time",
"tokio",
"url",
"uuid",
@@ -4022,12 +4139,13 @@ dependencies = [
[[package]]
name = "tauri-build"
-version = "1.4.0"
+version = "1.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d2edd6a259b5591c8efdeb9d5702cb53515b82a6affebd55c7fd6d3a27b7d1b"
+checksum = "6a62b3327886e7ef2978adc668432f1cc53f14e1d46e7ae04f730f4d48584623"
dependencies = [
"anyhow",
"cargo_toml",
+ "dirs-next",
"heck 0.4.1",
"json-patch",
"semver",
@@ -4035,6 +4153,7 @@ dependencies = [
"serde_json",
"tauri-utils",
"tauri-winres",
+ "walkdir",
]
[[package]]
@@ -4058,7 +4177,7 @@ dependencies = [
"sha2",
"tauri-utils",
"thiserror",
- "time 0.3.23",
+ "time",
"uuid",
"walkdir",
]
@@ -4132,19 +4251,20 @@ dependencies = [
[[package]]
name = "tauri-utils"
-version = "1.4.0"
+version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03fc02bb6072bb397e1d473c6f76c953cda48b4a2d0cce605df284aa74a12e84"
+checksum = "34d55e185904a84a419308d523c2c6891d5e2dbcee740c4997eb42e75a7b0f46"
dependencies = [
"brotli",
"ctor",
"dunce",
"glob",
"heck 0.4.1",
- "html5ever",
+ "html5ever 0.26.0",
"infer",
"json-patch",
- "kuchiki",
+ "kuchikiki",
+ "log",
"memchr",
"phf 0.10.1",
"proc-macro2",
@@ -4188,7 +4308,7 @@ dependencies = [
"cfg-if",
"fastrand 2.0.0",
"redox_syscall 0.3.5",
- "rustix 0.38.4",
+ "rustix 0.38.6",
"windows-sys 0.48.0",
]
@@ -4235,7 +4355,7 @@ checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -4250,21 +4370,11 @@ dependencies = [
[[package]]
name = "time"
-version = "0.1.45"
+version = "0.3.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
-dependencies = [
- "libc",
- "wasi 0.10.0+wasi-snapshot-preview1",
- "winapi",
-]
-
-[[package]]
-name = "time"
-version = "0.3.23"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
+checksum = "b0fdd63d58b18d663fbdf70e049f00a22c8e42be082203be7f26589213cd75ea"
dependencies = [
+ "deranged",
"itoa 1.0.9",
"serde",
"time-core",
@@ -4279,9 +4389,9 @@ checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
[[package]]
name = "time-macros"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
+checksum = "eb71511c991639bb078fd5bf97757e03914361c48100d52878b8e52b46fb92cd"
dependencies = [
"time-core",
]
@@ -4303,11 +4413,10 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
[[package]]
name = "tokio"
-version = "1.29.1"
+version = "1.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "532826ff75199d5833b9d2c5fe410f29235e25704ee5f0ef599fb51c21f4a4da"
+checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9"
dependencies = [
- "autocfg",
"backtrace",
"bytes",
"libc",
@@ -4316,7 +4425,7 @@ dependencies = [
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
- "socket2",
+ "socket2 0.5.3",
"tokio-macros",
"windows-sys 0.48.0",
]
@@ -4329,7 +4438,7 @@ checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -4425,7 +4534,7 @@ checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
]
[[package]]
@@ -4484,9 +4593,9 @@ checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
[[package]]
name = "ts-rs"
-version = "6.2.1"
+version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4added4070a4fdf9df03457206cd2e4b12417c8560a2954d91ffcbe60177a56a"
+checksum = "e1ff1f8c90369bc172200013ac17ae86e7b5def580687df4e6127883454ff2b0"
dependencies = [
"thiserror",
"ts-rs-macros",
@@ -4494,14 +4603,14 @@ dependencies = [
[[package]]
name = "ts-rs-macros"
-version = "6.2.0"
+version = "7.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f807fdb3151fee75df7485b901a89624358cd07a67a8fb1a5831bf5a07681ff"
+checksum = "a6f41cc0aeb7a4a55730188e147d3795a7349b501f8334697fd37629b896cdc2"
dependencies = [
"Inflector",
"proc-macro2",
"quote",
- "syn 1.0.109",
+ "syn 2.0.28",
"termcolor",
]
@@ -4703,12 +4812,6 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wasi"
-version = "0.10.0+wasi-snapshot-preview1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
-
-[[package]]
-name = "wasi"
version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
@@ -4734,7 +4837,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
"wasm-bindgen-shared",
]
@@ -4768,7 +4871,7 @@ checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
dependencies = [
"proc-macro2",
"quote",
- "syn 2.0.27",
+ "syn 2.0.28",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@@ -4781,9 +4884,9 @@ checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
[[package]]
name = "wasm-streams"
-version = "0.2.3"
+version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078"
+checksum = "b4609d447824375f43e1ffbc051b50ad8f4b3ae8219680c94452ea05eb240ac7"
dependencies = [
"futures-util",
"js-sys",
@@ -5204,30 +5307,41 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "winnow"
-version = "0.5.0"
+version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81fac9742fd1ad1bd9643b991319f72dd031016d44b77039a26977eb667141e7"
+checksum = "f46aab759304e4d7b2075a9aecba26228bb073ee8c50db796b2c72c676b5d807"
dependencies = [
"memchr",
]
[[package]]
name = "winreg"
-version = "0.10.1"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d"
+checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
dependencies = [
+ "cfg-if",
"winapi",
]
[[package]]
name = "winreg"
-version = "0.11.0"
+version = "0.50.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76a1a57ff50e9b408431e8f97d5456f2807f8eb2a2cd79b06068fc87f8ecf189"
+checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1"
dependencies = [
"cfg-if",
- "winapi",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "winreg"
+version = "0.51.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "937f3df7948156640f46aacef17a70db0de5917bda9c92b0f751f3a955b588fc"
+dependencies = [
+ "cfg-if",
+ "windows-sys 0.48.0",
]
[[package]]
@@ -5246,7 +5360,7 @@ dependencies = [
"gio",
"glib",
"gtk",
- "html5ever",
+ "html5ever 0.25.2",
"http",
"kuchiki",
"libc",
@@ -5390,7 +5504,7 @@ dependencies = [
"hmac",
"pbkdf2",
"sha1",
- "time 0.3.23",
+ "time",
"zstd",
]
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index d2f1e87e..f1d26cf8 100644
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "app"
-version = "2.1.0"
+version = "2.10.3"
description = "A Tauri App"
authors = ["you"]
license = ""
@@ -26,8 +26,8 @@ serde = { version = "1.0", features = ["derive"] }
tauri = { version = "1.4", features = ["api-all", "dialog", "updater"] }
tokio = { version = "1", features = ["full"] }
# Sentry (crash) logging
-sentry = "0.30"
-sentry-log = "0.30.0"
+sentry = "0.31"
+sentry-log = "0.31"
# Find steam games
steamlocate = "1.2"
# Error messages
@@ -37,9 +37,9 @@ libthermite = { version = "0.7.0-beta", features = ["proton"] }
# zip stuff
zip = "0.6.2"
# Regex
-regex = "1.6.0"
+regex = "1.9"
# Read out running application process names
-sysinfo = "0.26.2"
+sysinfo = "0.29.10"
# HTTP requests
reqwest = { version = "0.11", features = ["blocking"] }
# Persistent store for settings
@@ -47,20 +47,20 @@ tauri-plugin-store = { git = "https://github.com/tauri-apps/plugins-workspace",
# JSON5 parsing support (allows comments in JSON)
json5 = "0.4.1"
# Async recursion for recursive mod install
-async-recursion = "1.0.0"
+async-recursion = "1.0.5"
# For parsing timestamps
-chrono = "0.4.23"
+chrono = "0.4.31"
# TypeScript bindings
-ts-rs = "6.1"
+ts-rs = "7.0"
# const formatting
const_format = "0.2.30"
# Logging libraries
-pretty_env_logger = "0.4.0"
-log = "0.4.17"
+pretty_env_logger = "0.5.0"
+log = "0.4"
# Extracting zip files easily
zip-extract = "0.1.2"
# open urls
-open = "3.2.0"
+open = "5.0.0"
semver = "1.0"
# simplified filesystem access
glob = "0.3.1"
@@ -69,7 +69,7 @@ dirs = "5"
[target.'cfg(windows)'.dependencies]
# Windows API stuff
winapi = "0.3.9"
-winreg = "0.11.0"
+winreg = "0.51.0"
[features]
# by default Tauri runs in production mode
diff --git a/src-tauri/bindings/InstallType.ts b/src-tauri/bindings/InstallType.ts
new file mode 100644
index 00000000..2a0f9a7f
--- /dev/null
+++ b/src-tauri/bindings/InstallType.ts
@@ -0,0 +1,3 @@
+// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
+
+export type InstallType = "STEAM" | "ORIGIN" | "EAPLAY" | "UNKNOWN"; \ No newline at end of file
diff --git a/src-tauri/src/constants.rs b/src-tauri/src/constants.rs
index 9917a8c8..33aefac8 100644
--- a/src-tauri/src/constants.rs
+++ b/src-tauri/src/constants.rs
@@ -2,53 +2,63 @@
use const_format::concatcp;
use std::time::Duration;
-// FlightCore user agent for web requests
+/// FlightCore user agent for web requests
pub const APP_USER_AGENT: &str = concatcp!("FlightCore/", env!("CARGO_PKG_VERSION"));
-// URL of the Northstar masterserver
+/// URL of the Northstar masterserver
pub const MASTER_SERVER_URL: &str = "https://northstar.tf";
-// server list endpoint
+/// server list endpoint
pub const SERVER_BROWSER_ENDPOINT: &str = "/client/servers";
-// List of core Northstar mods
+/// List of core Northstar mods
pub const CORE_MODS: [&str; 3] = [
"Northstar.Client",
"Northstar.Custom",
"Northstar.CustomServers",
];
-// List of Thunderstoremods that shouldn't be installable
-// as they behave different than common Squirrel mods
+/// List of Thunderstoremods that shouldn't be installable
+/// as they behave different than common Squirrel mods
pub const BLACKLISTED_MODS: [&str; 3] = [
"northstar-Northstar",
"northstar-NorthstarReleaseCandidate",
"ebkr-r2modman",
];
-// Titanfall2 Steam App ID
+/// Titanfall2 Steam App ID
pub const TITANFALL2_STEAM_ID: &str = "1237970";
-// Order in which the sections for release notes should be displayed
+/// Order in which the sections for release notes should be displayed
pub const SECTION_ORDER: [&str; 10] = [
"feat", "fix", "docs", "style", "refactor", "build", "test", "i18n", "chore", "other",
];
-// GitHub API endpoints for launcher/mods PRs
+/// GitHub API endpoints for launcher/mods PRs
pub const PULLS_API_ENDPOINT_LAUNCHER: &str =
"https://api.github.com/repos/R2Northstar/NorthstarLauncher/pulls";
pub const PULLS_API_ENDPOINT_MODS: &str =
"https://api.github.com/repos/R2Northstar/NorthstarMods/pulls";
-// Statistics (players and servers counts) refresh delay
+/// Statistics (players and servers counts) refresh delay
pub const REFRESH_DELAY: Duration = Duration::from_secs(5 * 60);
-// Flightcore repo name and org name on GitHub
+/// Flightcore repo name and org name on GitHub
pub const FLIGHTCORE_REPO_NAME: &str = "R2NorthstarTools/FlightCore";
-// Northstar release repo name and org name on GitHub
+/// Northstar release repo name and org name on GitHub
pub const NORTHSTAR_RELEASE_REPO_NAME: &str = "R2Northstar/Northstar";
-// URL to launcher commits API URL
+/// URL to launcher commits API URL
pub const NS_LAUNCHER_COMMITS_API_URL: &str =
"https://api.github.com/repos/R2Northstar/NorthstarLauncher/commits";
+
+/// Filename of DLL that Northstar uses
+pub const NORTHSTAR_DLL: &str = "Northstar.dll";
+
+/// Profile that Northstar defaults to and ships with
+pub const NORTHSTAR_DEFAULT_PROFILE: &str = "R2Northstar";
+
+/// List of valid compatibility tools that Northstar can be launched with
+pub const VALID_NORTHSTAR_PROTON_BUILDS: [&str; 3] =
+ ["NorthstarProton-8.1-1", "GE-Proton8-13", "GE-Proton8-11"];
diff --git a/src-tauri/src/development/mod.rs b/src-tauri/src/development/mod.rs
index be02966d..7184904c 100644
--- a/src-tauri/src/development/mod.rs
+++ b/src-tauri/src/development/mod.rs
@@ -25,7 +25,7 @@ pub async fn install_git_main(game_install_path: &str) -> Result<String, String>
};
let extract_directory = format!(
- "{}/___flightcore-temp-download-dir/launcher-pr-{}",
+ "{}/___flightcore-temp/download-dir/launcher-pr-{}",
game_install_path, latest_commit_sha
);
match std::fs::create_dir_all(extract_directory.clone()) {
diff --git a/src-tauri/src/github/mod.rs b/src-tauri/src/github/mod.rs
index bc1ccfe8..f35b64a1 100644
--- a/src-tauri/src/github/mod.rs
+++ b/src-tauri/src/github/mod.rs
@@ -180,6 +180,7 @@ fn generate_flightcore_release_notes(commits: Vec<String>) -> String {
}
}
+ let release_notes = release_notes.trim_end_matches('\n').to_string();
release_notes
}
diff --git a/src-tauri/src/github/pull_requests.rs b/src-tauri/src/github/pull_requests.rs
index 44b41638..ccb45dff 100644
--- a/src-tauri/src/github/pull_requests.rs
+++ b/src-tauri/src/github/pull_requests.rs
@@ -2,6 +2,7 @@ use crate::github::release_notes::fetch_github_releases_api;
use crate::check_is_valid_game_path;
use crate::constants::{APP_USER_AGENT, PULLS_API_ENDPOINT_LAUNCHER, PULLS_API_ENDPOINT_MODS};
+use crate::GameInstall;
use anyhow::anyhow;
use serde::{Deserialize, Serialize};
use std::fs::File;
@@ -231,10 +232,10 @@ fn add_batch_file(game_install_path: &str) {
#[tauri::command]
pub async fn apply_launcher_pr(
pull_request: PullsApiResponseElement,
- game_install_path: &str,
+ game_install: GameInstall,
) -> Result<(), String> {
// Exit early if wrong game path
- check_is_valid_game_path(game_install_path)?;
+ check_is_valid_game_path(&game_install.game_path)?;
// get download link
let download_url = match get_launcher_download_link(pull_request.head.sha.clone()).await {
@@ -253,8 +254,8 @@ pub async fn apply_launcher_pr(
};
let extract_directory = format!(
- "{}/___flightcore-temp-download-dir/launcher-pr-{}",
- game_install_path, pull_request.number
+ "{}/___flightcore-temp/download-dir/launcher-pr-{}",
+ game_install.game_path, pull_request.number
);
match std::fs::create_dir_all(extract_directory.clone()) {
Ok(_) => (),
@@ -281,7 +282,7 @@ pub async fn apply_launcher_pr(
let files_to_copy = vec!["NorthstarLauncher.exe", "Northstar.dll"];
for file_name in files_to_copy {
let source_file_path = format!("{}/{}", extract_directory, file_name);
- let destination_file_path = format!("{}/{}", game_install_path, file_name);
+ let destination_file_path = format!("{}/{}", game_install.game_path, file_name);
match std::fs::copy(source_file_path, destination_file_path) {
Ok(_result) => (),
Err(err) => {
@@ -312,10 +313,10 @@ pub async fn apply_launcher_pr(
#[tauri::command]
pub async fn apply_mods_pr(
pull_request: PullsApiResponseElement,
- game_install_path: &str,
+ game_install: GameInstall,
) -> Result<(), String> {
// Exit early if wrong game path
- check_is_valid_game_path(game_install_path)?;
+ check_is_valid_game_path(&game_install.game_path)?;
let download_url = match get_mods_download_link(pull_request) {
Ok(url) => url,
@@ -327,7 +328,10 @@ pub async fn apply_mods_pr(
Err(err) => return Err(err.to_string()),
};
- let profile_folder = format!("{}/R2Northstar-PR-test-managed-folder", game_install_path);
+ let profile_folder = format!(
+ "{}/R2Northstar-PR-test-managed-folder",
+ game_install.game_path
+ );
// Delete previously managed folder
if std::fs::remove_dir_all(profile_folder.clone()).is_err() {
@@ -352,7 +356,7 @@ pub async fn apply_mods_pr(
}
};
// Add batch file to launch right profile
- add_batch_file(game_install_path);
+ add_batch_file(&game_install.game_path);
log::info!("All done with installing mods PR");
Ok(())
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 1067f5d3..66bb98d2 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -142,6 +142,7 @@ fn main() {
github::release_notes::get_newest_flightcore_version,
mod_management::delete_northstar_mod,
util::get_server_player_count,
+ util::kill_northstar,
mod_management::delete_thunderstore_mod,
install_northstar_proton_wrapper,
uninstall_northstar_proton_wrapper,
@@ -157,6 +158,8 @@ fn main() {
close_application,
development::install_git_main,
get_available_northstar_versions,
+ northstar::profile::fetch_profiles,
+ northstar::profile::validate_profile,
])
.run(tauri::generate_context!())
{
@@ -234,7 +237,7 @@ pub fn convert_release_candidate_number(version_number: String) -> String {
/// true -> Northstar install is outdated
#[tauri::command]
async fn check_is_northstar_outdated(
- game_path: String,
+ game_install: GameInstall,
northstar_package_name: Option<String>,
) -> Result<bool, String> {
let northstar_package_name = match northstar_package_name {
@@ -258,7 +261,7 @@ async fn check_is_northstar_outdated(
.expect("Couldn't find Northstar on thunderstore???");
// .ok_or_else(|| anyhow!("Couldn't find Northstar on thunderstore???"))?;
- let version_number = match northstar::get_northstar_version_number(&game_path) {
+ let version_number = match northstar::get_northstar_version_number(game_install) {
Ok(version_number) => version_number,
Err(err) => {
log::warn!("{}", err);
@@ -295,7 +298,7 @@ async fn verify_install_location(game_path: String) -> bool {
#[tauri::command]
async fn install_northstar_caller(
window: tauri::Window,
- game_path: String,
+ game_install: GameInstall,
northstar_package_name: Option<String>,
version_number: Option<String>,
) -> Result<bool, String> {
@@ -314,7 +317,7 @@ async fn install_northstar_caller(
match northstar::install::install_northstar(
window,
- &game_path,
+ game_install,
northstar_package_name,
version_number,
)
@@ -332,13 +335,13 @@ async fn install_northstar_caller(
#[tauri::command]
async fn update_northstar(
window: tauri::Window,
- game_path: String,
+ game_install: GameInstall,
northstar_package_name: Option<String>,
) -> Result<bool, String> {
log::info!("Updating Northstar");
// Simply re-run install with up-to-date version for upate
- install_northstar_caller(window, game_path, northstar_package_name, None).await
+ install_northstar_caller(window, game_install, northstar_package_name, None).await
}
/// Installs the specified mod
@@ -456,7 +459,8 @@ mod platform_specific;
#[cfg(target_os = "linux")]
use platform_specific::linux;
-#[derive(Serialize, Deserialize, Debug, Clone)]
+#[derive(Serialize, Deserialize, Debug, Clone, TS)]
+#[ts(export)]
pub enum InstallType {
STEAM,
ORIGIN,
@@ -467,6 +471,7 @@ pub enum InstallType {
#[derive(Serialize, Deserialize, Debug, Clone)]
pub struct GameInstall {
pub game_path: String,
+ pub profile: String,
pub install_type: InstallType,
}
diff --git a/src-tauri/src/mod_management/legacy.rs b/src-tauri/src/mod_management/legacy.rs
index 2a5228fc..2f4a7469 100644
--- a/src-tauri/src/mod_management/legacy.rs
+++ b/src-tauri/src/mod_management/legacy.rs
@@ -45,7 +45,7 @@ fn parse_for_thunderstore_mod_string(nsmod_path: &str) -> Result<String, anyhow:
pub fn parse_installed_mods(
game_install: &GameInstall,
) -> Result<Vec<NorthstarMod>, anyhow::Error> {
- let ns_mods_folder = format!("{}/R2Northstar/mods/", game_install.game_path);
+ let ns_mods_folder = format!("{}/{}/mods/", game_install.game_path, game_install.profile);
let paths = match std::fs::read_dir(ns_mods_folder) {
Ok(paths) => paths,
diff --git a/src-tauri/src/mod_management/mod.rs b/src-tauri/src/mod_management/mod.rs
index 0d4edd87..a9826522 100644
--- a/src-tauri/src/mod_management/mod.rs
+++ b/src-tauri/src/mod_management/mod.rs
@@ -12,6 +12,7 @@ use std::string::ToString;
use std::{fs, path::PathBuf};
mod legacy;
+mod plugins;
use crate::GameInstall;
#[derive(Debug, Clone)]
@@ -25,7 +26,7 @@ impl std::str::FromStr for ParsedThunderstoreModString {
type Err = &'static str; // todo use an better error management
fn from_str(s: &str) -> Result<Self, Self::Err> {
- // Check whether Thunderstore string passse reges
+ // Check whether Thunderstore string passes regex
let re = regex::Regex::new(r"^[a-zA-Z0-9_]+-[a-zA-Z0-9_]+-\d+\.\d+\.\d++$").unwrap();
if !re.is_match(s) {
return Err("Incorrect format");
@@ -90,7 +91,10 @@ impl std::ops::Deref for TempFile {
/// Returns a serde json object of the parsed `enabledmods.json` file
pub fn get_enabled_mods(game_install: &GameInstall) -> Result<serde_json::value::Value, String> {
- let enabledmods_json_path = format!("{}/R2Northstar/enabledmods.json", game_install.game_path);
+ let enabledmods_json_path = format!(
+ "{}/{}/enabledmods.json",
+ game_install.game_path, game_install.profile
+ );
// Check for JSON file
if !std::path::Path::new(&enabledmods_json_path).exists() {
@@ -115,7 +119,10 @@ pub fn get_enabled_mods(game_install: &GameInstall) -> Result<serde_json::value:
/// Gets all currently installed and enabled/disabled mods to rebuild `enabledmods.json`
pub fn rebuild_enabled_mods_json(game_install: &GameInstall) -> Result<(), String> {
- let enabledmods_json_path = format!("{}/R2Northstar/enabledmods.json", game_install.game_path);
+ let enabledmods_json_path = format!(
+ "{}/{}/enabledmods.json",
+ game_install.game_path, game_install.profile
+ );
let mods_and_properties = get_installed_mods_and_properties(game_install.clone())?;
// Create new mapping
@@ -146,7 +153,10 @@ pub fn set_mod_enabled_status(
mod_name: String,
is_enabled: bool,
) -> Result<(), String> {
- let enabledmods_json_path = format!("{}/R2Northstar/enabledmods.json", game_install.game_path);
+ let enabledmods_json_path = format!(
+ "{}/{}/enabledmods.json",
+ game_install.game_path, game_install.profile
+ );
// Parse JSON
let mut res: serde_json::Value = match get_enabled_mods(&game_install) {
@@ -259,7 +269,10 @@ pub fn parse_installed_package_mods(
) -> Result<Vec<NorthstarMod>, anyhow::Error> {
let mut collected_mods: Vec<NorthstarMod> = Vec::new();
- let packages_folder = format!("{}/R2Northstar/packages/", game_install.game_path);
+ let packages_folder = format!(
+ "{}/{}/packages/",
+ game_install.game_path, game_install.profile
+ );
let packages_dir = match fs::read_dir(packages_folder) {
Ok(res) => res,
@@ -419,7 +432,10 @@ fn delete_older_versions(
"Deleting other versions of {}",
thunderstore_mod_string.to_string()
);
- let packages_folder = format!("{}/R2Northstar/packages", game_install.game_path);
+ let packages_folder = format!(
+ "{}/{}/packages",
+ game_install.game_path, game_install.profile
+ );
// Get folders in packages dir
let paths = match std::fs::read_dir(&packages_folder) {
@@ -498,8 +514,10 @@ fn fc_sanity_check(input: &&fs::File) -> bool {
if file_path.starts_with("plugins/") {
if let Some(name) = file_path.file_name() {
if name.to_str().unwrap().contains(".dll") {
- log::warn!("Plugin detected, skipping");
- return false; // We disallow plugins for now
+ log::warn!("Plugin detected, prompting user");
+ if !plugins::plugin_prompt() {
+ return false; // Plugin detected and user denied install
+ }
}
}
}
@@ -519,7 +537,7 @@ pub async fn fc_download_mod_and_install(
log::info!("Attempting to install \"{thunderstore_mod_string}\" to {game_install:?}");
// Get mods and download directories
let download_directory = format!(
- "{}/___flightcore-temp-download-dir/",
+ "{}/___flightcore-temp/download-dir/",
game_install.game_path
);
@@ -566,7 +584,7 @@ pub async fn fc_download_mod_and_install(
};
let path = format!(
- "{}/___flightcore-temp-download-dir/{thunderstore_mod_string}.zip",
+ "{}/___flightcore-temp/download-dir/{thunderstore_mod_string}.zip",
game_install.game_path
);
@@ -587,7 +605,10 @@ pub async fn fc_download_mod_and_install(
};
// Get directory to install to made up of packages directory and Thunderstore mod string
- let install_directory = format!("{}/R2Northstar/packages/", game_install.game_path);
+ let install_directory = format!(
+ "{}/{}/packages/",
+ game_install.game_path, game_install.profile
+ );
// Extract the mod to the mods directory
match thermite::core::manage::install_with_sanity(
@@ -700,7 +721,10 @@ pub fn delete_thunderstore_mod(
thunderstore_mod_string: String,
) -> Result<(), String> {
// Check packages
- let packages_folder = format!("{}/R2Northstar/packages", game_install.game_path);
+ let packages_folder = format!(
+ "{}/{}/packages",
+ game_install.game_path, game_install.profile
+ );
if std::path::Path::new(&packages_folder).exists() {
for entry in fs::read_dir(packages_folder).unwrap() {
let entry = entry.unwrap();
diff --git a/src-tauri/src/mod_management/plugins.rs b/src-tauri/src/mod_management/plugins.rs
new file mode 100644
index 00000000..e2427a16
--- /dev/null
+++ b/src-tauri/src/mod_management/plugins.rs
@@ -0,0 +1,26 @@
+use tauri::api::dialog::blocking::MessageDialogBuilder;
+use tauri::api::dialog::{MessageDialogButtons, MessageDialogKind};
+
+/// Prompt on plugin
+/// Returns:
+/// - true: user accepted plugin install
+/// - false: user denied plugin install
+pub fn plugin_prompt() -> bool {
+ let dialog = MessageDialogBuilder::new(
+ "Plugin in package detected",
+ "This mod contains a plugin. Plugins have unrestricted access to your computer!
+ \nMake sure you trust the author!
+ \n
+ \nPress 'Ok' to continue or 'Cancel' to abort mod installation",
+ )
+ .kind(MessageDialogKind::Warning)
+ .buttons(MessageDialogButtons::OkCancel);
+
+ if dialog.show() {
+ log::info!("Accepted plugin install");
+ true
+ } else {
+ log::warn!("Plugin install cancelled");
+ false
+ }
+}
diff --git a/src-tauri/src/northstar/install.rs b/src-tauri/src/northstar/install.rs
index c77fd538..757f6c68 100644
--- a/src-tauri/src/northstar/install.rs
+++ b/src-tauri/src/northstar/install.rs
@@ -4,8 +4,11 @@ use std::time::Duration;
use std::{cell::RefCell, time::Instant};
use ts_rs::TS;
-use crate::constants::TITANFALL2_STEAM_ID;
-use crate::{util::extract, GameInstall, InstallType};
+use crate::constants::{NORTHSTAR_DEFAULT_PROFILE, NORTHSTAR_DLL, TITANFALL2_STEAM_ID};
+use crate::{
+ util::{extract, move_dir_all},
+ GameInstall, InstallType,
+};
#[cfg(target_os = "windows")]
use crate::platform_specific::windows;
@@ -33,16 +36,16 @@ struct InstallProgress {
async fn do_install(
window: tauri::Window,
nmod: &thermite::model::ModVersion,
- game_path: &std::path::Path,
+ game_install: GameInstall,
) -> Result<()> {
let filename = format!("northstar-{}.zip", nmod.version);
- let download_directory = format!("{}/___flightcore-temp-download-dir/", game_path.display());
+ let temp_dir = format!("{}/___flightcore-temp", game_install.game_path);
+ let download_directory = format!("{}/download-dir", temp_dir);
+ let extract_directory = format!("{}/extract-dir", temp_dir);
- log::info!(
- "Attempting to create temporary directory {}",
- download_directory
- );
+ log::info!("Attempting to create temporary directory {}", temp_dir);
std::fs::create_dir_all(download_directory.clone())?;
+ std::fs::create_dir_all(extract_directory.clone())?;
let download_path = format!("{}/{}", download_directory, filename);
log::info!("Download path: {download_path}");
@@ -91,11 +94,50 @@ async fn do_install(
.unwrap();
log::info!("Extracting Northstar...");
- extract(nfile, game_path)?;
+ extract(nfile, std::path::Path::new(&extract_directory))?;
+
+ // Prepare Northstar for Installation
+ log::info!("Preparing Northstar...");
+ if game_install.profile != NORTHSTAR_DEFAULT_PROFILE {
+ // We are using a non standard Profile, we must:
+ // - move the DLL
+ // - rename the Profile
+
+ // Move DLL into the default R2Northstar Profile
+ let old_dll_path = format!("{}/{}", extract_directory, NORTHSTAR_DLL);
+ let new_dll_path = format!(
+ "{}/{}/{}",
+ extract_directory, NORTHSTAR_DEFAULT_PROFILE, NORTHSTAR_DLL
+ );
+ std::fs::rename(old_dll_path, new_dll_path)?;
+
+ // rename default R2Northstar Profile to the profile we want to use
+ let old_profile_path = format!("{}/{}/", extract_directory, NORTHSTAR_DEFAULT_PROFILE);
+ let new_profile_path = format!("{}/{}/", extract_directory, game_install.profile);
+ std::fs::rename(old_profile_path, new_profile_path)?;
+ }
+
+ log::info!("Installing Northstar...");
+
+ for entry in std::fs::read_dir(extract_directory).unwrap() {
+ let entry = entry.unwrap();
+ let destination = format!(
+ "{}/{}",
+ game_install.game_path,
+ entry.path().file_name().unwrap().to_str().unwrap()
+ );
+
+ log::info!("Installing {}", entry.path().display());
+ if !entry.file_type().unwrap().is_dir() {
+ std::fs::rename(entry.path(), destination)?;
+ } else {
+ move_dir_all(entry.path(), destination)?;
+ }
+ }
// Delete old copy
- log::info!("Delete temp folder again");
- std::fs::remove_dir_all(download_directory).unwrap();
+ log::info!("Delete temporary directory");
+ std::fs::remove_dir_all(temp_dir).unwrap();
log::info!("Done installing Northstar!");
window
@@ -114,7 +156,7 @@ async fn do_install(
pub async fn install_northstar(
window: tauri::Window,
- game_path: &str,
+ game_install: GameInstall,
northstar_package_name: String,
version_number: Option<String>,
) -> Result<String, String> {
@@ -134,20 +176,15 @@ pub async fn install_northstar(
// Use passed version or latest if no version was passed
let version = version_number.as_ref().unwrap_or(&nmod.latest);
+ let game_path = game_install.game_path.clone();
log::info!("Install path \"{}\"", game_path);
- match do_install(
- window,
- nmod.versions.get(version).unwrap(),
- std::path::Path::new(game_path),
- )
- .await
- {
+ match do_install(window, nmod.versions.get(version).unwrap(), game_install).await {
Ok(_) => (),
Err(err) => {
if game_path
.to_lowercase()
- .contains(&r#"C:\Program Files\"#.to_lowercase())
+ .contains(&r"C:\Program Files\".to_lowercase())
// default is `C:\Program Files\EA Games\Titanfall2`
{
return Err(
@@ -190,6 +227,7 @@ pub fn find_game_install_location() -> Result<GameInstall, String> {
// println!("{:#?}", app);
let game_install = GameInstall {
game_path: app.path.to_str().unwrap().to_string(),
+ profile: "R2Northstar".to_string(),
install_type: InstallType::STEAM,
};
return Ok(game_install);
@@ -206,6 +244,7 @@ pub fn find_game_install_location() -> Result<GameInstall, String> {
Ok(game_path) => {
let game_install = GameInstall {
game_path,
+ profile: "R2Northstar".to_string(),
install_type: InstallType::ORIGIN,
};
return Ok(game_install);
diff --git a/src-tauri/src/northstar/mod.rs b/src-tauri/src/northstar/mod.rs
index bf55603b..5b0139f9 100644
--- a/src-tauri/src/northstar/mod.rs
+++ b/src-tauri/src/northstar/mod.rs
@@ -1,10 +1,11 @@
//! This module deals with handling things around Northstar such as
//! - getting version number
pub mod install;
+pub mod profile;
use crate::util::check_ea_app_or_origin_running;
use crate::{
- constants::{CORE_MODS, TITANFALL2_STEAM_ID},
+ constants::{CORE_MODS, TITANFALL2_STEAM_ID, VALID_NORTHSTAR_PROTON_BUILDS},
get_host_os, GameInstall, InstallType,
};
use anyhow::anyhow;
@@ -26,15 +27,14 @@ pub fn check_mod_version_number(path_to_mod_folder: &str) -> Result<String, anyh
/// Returns the current Northstar version number as a string
#[tauri::command]
-pub fn get_northstar_version_number(game_path: &str) -> Result<String, String> {
- log::info!("{}", game_path);
+pub fn get_northstar_version_number(game_install: GameInstall) -> Result<String, String> {
+ log::info!("{}", game_install.game_path);
// TODO:
// Check if NorthstarLauncher.exe exists and check its version number
- let profile_folder = "R2Northstar";
let initial_version_number = match check_mod_version_number(&format!(
- "{game_path}/{profile_folder}/mods/{}",
- CORE_MODS[0]
+ "{}/{}/mods/{}",
+ game_install.game_path, game_install.profile, CORE_MODS[0]
)) {
Ok(version_number) => version_number,
Err(err) => return Err(err.to_string()),
@@ -42,7 +42,8 @@ pub fn get_northstar_version_number(game_path: &str) -> Result<String, String> {
for core_mod in CORE_MODS {
let current_version_number = match check_mod_version_number(&format!(
- "{game_path}/{profile_folder}/mods/{core_mod}",
+ "{}/{}/mods/{}",
+ game_install.game_path, game_install.profile, core_mod
)) {
Ok(version_number) => version_number,
Err(err) => return Err(err.to_string()),
@@ -85,7 +86,7 @@ pub fn launch_northstar(
// Only check guards if bypassing checks is not enabled
if !bypass_checks {
// Some safety checks before, should have more in the future
- if get_northstar_version_number(&game_install.game_path).is_err() {
+ if get_northstar_version_number(game_install.clone()).is_err() {
return Err(anyhow!("Not all checks were met").to_string());
}
@@ -112,8 +113,10 @@ pub fn launch_northstar(
|| matches!(game_install.install_type, InstallType::UNKNOWN))
{
let ns_exe_path = format!("{}/NorthstarLauncher.exe", game_install.game_path);
+ let ns_profile_arg = format!("-profile={}", game_install.profile);
+
let _output = std::process::Command::new("C:\\Windows\\System32\\cmd.exe")
- .args(["/C", "start", "", &ns_exe_path])
+ .args(["/C", "start", "", &ns_exe_path, &ns_profile_arg])
.spawn()
.expect("failed to execute process");
return Ok("Launched game".to_string());
@@ -142,15 +145,11 @@ pub fn launch_northstar_steam(
let titanfall2_steamid: u32 = TITANFALL2_STEAM_ID.parse().unwrap();
match steamdir.compat_tool(&titanfall2_steamid) {
Some(compat) => {
- if !compat
- .name
- .clone()
- .unwrap()
- .to_ascii_lowercase()
- .contains("northstarproton")
+ if !VALID_NORTHSTAR_PROTON_BUILDS
+ .contains(&compat.clone().name.unwrap().as_str())
{
return Err(
- "Titanfall2 was not configured to use NorthstarProton".to_string()
+ "Titanfall2 was not configured to use a valid version of NorthstarProton or GE-Proton".to_string(),
);
}
}
@@ -173,7 +172,10 @@ pub fn launch_northstar_steam(
return Err("Couldn't access Titanfall2 directory".to_string());
}
- match open::that(format!("steam://run/{}//--northstar/", TITANFALL2_STEAM_ID)) {
+ match open::that(format!(
+ "steam://run/{}//-profile={} --northstar/",
+ TITANFALL2_STEAM_ID, game_install.profile
+ )) {
Ok(()) => Ok("Started game".to_string()),
Err(_err) => Err("Failed to launch Titanfall 2 via Steam".to_string()),
}
diff --git a/src-tauri/src/northstar/profile.rs b/src-tauri/src/northstar/profile.rs
new file mode 100644
index 00000000..78e734d0
--- /dev/null
+++ b/src-tauri/src/northstar/profile.rs
@@ -0,0 +1,76 @@
+use crate::GameInstall;
+
+// These folders are part of Titanfall 2 and
+// should NEVER be used as a Profile
+const SKIP_PATHS: [&str; 8] = [
+ "___flightcore-temp",
+ "__overlay",
+ "bin",
+ "Core",
+ "r2",
+ "vpk",
+ "platform",
+ "Support",
+];
+
+// A profile may have one of these to be detected
+const MAY_CONTAIN: [&str; 10] = [
+ "mods/",
+ "plugins/",
+ "packages/",
+ "logs/",
+ "runtime/",
+ "save_data/",
+ "Northstar.dll",
+ "enabledmods.json",
+ "placeholder.playerdata.pdata",
+ "LEGAL.txt",
+];
+
+/// Returns a list of Profile names
+/// All the returned Profiles can be found relative to the game path
+#[tauri::command]
+pub fn fetch_profiles(game_install: GameInstall) -> Result<Vec<String>, String> {
+ let mut profiles: Vec<String> = Vec::new();
+
+ for content in MAY_CONTAIN {
+ let pattern = format!("{}/*/{}", game_install.game_path, content);
+ for e in glob::glob(&pattern).expect("Failed to read glob pattern") {
+ let path = e.unwrap();
+ let mut ancestors = path.ancestors();
+
+ ancestors.next();
+
+ let profile_path = std::path::Path::new(ancestors.next().unwrap());
+ let profile_name = profile_path
+ .file_name()
+ .unwrap()
+ .to_os_string()
+ .into_string()
+ .unwrap();
+
+ if !profiles.contains(&profile_name) {
+ profiles.push(profile_name);
+ }
+ }
+ }
+
+ Ok(profiles)
+}
+
+/// Validates if a given profile is actually a valid profile
+#[tauri::command]
+pub fn validate_profile(game_install: GameInstall, profile: String) -> bool {
+ // Game files are never a valid profile
+ // Prevent users with messed up installs from making it even worse
+ if SKIP_PATHS.contains(&profile.as_str()) {
+ return false;
+ }
+
+ log::info!("Validating Profile {}", profile);
+
+ let profile_path = format!("{}/{}", game_install.game_path, profile);
+ let profile_dir = std::path::Path::new(profile_path.as_str());
+
+ profile_dir.is_dir()
+}
diff --git a/src-tauri/src/repair_and_verify/mod.rs b/src-tauri/src/repair_and_verify/mod.rs
index 92835a4e..70abc127 100644
--- a/src-tauri/src/repair_and_verify/mod.rs
+++ b/src-tauri/src/repair_and_verify/mod.rs
@@ -1,7 +1,6 @@
use crate::mod_management::{get_enabled_mods, rebuild_enabled_mods_json, set_mod_enabled_status};
/// Contains various functions to repair common issues and verifying installation
use crate::{constants::CORE_MODS, GameInstall};
-use anyhow::anyhow;
/// Verifies Titanfall2 game files
#[tauri::command]
@@ -40,33 +39,43 @@ pub fn clean_up_download_folder(
game_install: &GameInstall,
force: bool,
) -> Result<(), anyhow::Error> {
- // Get download directory
- let download_directory = format!(
- "{}/___flightcore-temp-download-dir/",
- game_install.game_path
- );
-
- // Check if files in folder
- let download_dir_contents = std::fs::read_dir(download_directory.clone())?;
- // dbg!(download_dir_contents);
-
- let mut count = 0;
- download_dir_contents.for_each(|_| count += 1);
+ const TEMPORARY_DIRECTORIES: [&str; 4] = [
+ "___flightcore-temp-download-dir",
+ "___flightcore-temp/download-dir",
+ "___flightcore-temp/extract-dir",
+ "___flightcore-temp",
+ ];
+
+ for directory in TEMPORARY_DIRECTORIES {
+ // Get download directory
+ let download_directory = format!("{}/{}/", game_install.game_path, directory);
+
+ // Check if files in folder
+ let download_dir_contents = match std::fs::read_dir(download_directory.clone()) {
+ Ok(contents) => contents,
+ Err(_) => continue,
+ };
+ // dbg!(download_dir_contents);
+
+ let mut count = 0;
+ download_dir_contents.for_each(|_| count += 1);
+
+ if count > 0 && !force {
+ // Skip folder if not empty
+ log::warn!("Folder not empty, not deleting: {directory}");
+ continue;
+ }
- if count > 0 && !force {
- return Err(anyhow!("Folder not empty, not deleting"));
+ // Delete folder
+ std::fs::remove_dir_all(download_directory)?;
}
-
- // Delete folder
- std::fs::remove_dir_all(download_directory)?;
-
Ok(())
}
/// Get list of Northstar logs
#[tauri::command]
pub fn get_log_list(game_install: GameInstall) -> Result<Vec<std::path::PathBuf>, String> {
- let ns_log_folder = format!("{}/R2Northstar/logs", game_install.game_path);
+ let ns_log_folder = format!("{}/{}/logs", game_install.game_path, game_install.profile);
// List files in logs folder
let paths = match std::fs::read_dir(ns_log_folder) {
diff --git a/src-tauri/src/util.rs b/src-tauri/src/util.rs
index 0f32ecb5..b21b2208 100644
--- a/src-tauri/src/util.rs
+++ b/src-tauri/src/util.rs
@@ -2,7 +2,7 @@
use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};
-use sysinfo::SystemExt;
+use sysinfo::{ProcessExt, SystemExt};
use zip::ZipArchive;
use crate::constants::{APP_USER_AGENT, MASTER_SERVER_URL, SERVER_BROWSER_ENDPOINT};
@@ -64,6 +64,27 @@ pub async fn get_server_player_count() -> Result<(i32, usize), String> {
Ok((total_player_count, server_count))
}
+#[tauri::command]
+pub async fn kill_northstar() -> Result<(), String> {
+ if !check_northstar_running() {
+ return Err("Northstar is not running".to_string());
+ }
+
+ let s = sysinfo::System::new_all();
+
+ for process in s.processes_by_exact_name("Titanfall2.exe") {
+ log::info!("Killing Process {}", process.pid());
+ process.kill();
+ }
+
+ for process in s.processes_by_exact_name("NorthstarLauncher.exe") {
+ log::info!("Killing Process {}", process.pid());
+ process.kill();
+ }
+
+ Ok(())
+}
+
/// Copied from `papa` source code and modified
///Extract N* zip file to target game path
// fn extract(ctx: &Ctx, zip_file: File, target: &Path) -> Result<()> {
@@ -122,3 +143,42 @@ pub fn check_northstar_running() -> bool {
|| s.processes_by_name("Titanfall2.exe").next().is_some();
x
}
+
+/// Copies a folder and all its contents to a new location
+#[allow(dead_code)]
+pub fn copy_dir_all(
+ src: impl AsRef<std::path::Path>,
+ dst: impl AsRef<std::path::Path>,
+) -> std::io::Result<()> {
+ std::fs::create_dir_all(&dst)?;
+ for entry in std::fs::read_dir(src)? {
+ let entry = entry?;
+ let ty = entry.file_type()?;
+ if ty.is_dir() {
+ copy_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
+ } else {
+ std::fs::copy(entry.path(), dst.as_ref().join(entry.file_name()))?;
+ }
+ }
+ Ok(())
+}
+
+/// Moves a folders file structure to a new location
+/// Old folders are not removed
+pub fn move_dir_all(
+ src: impl AsRef<std::path::Path>,
+ dst: impl AsRef<std::path::Path>,
+) -> std::io::Result<()> {
+ std::fs::create_dir_all(&dst)?;
+ for entry in std::fs::read_dir(src)? {
+ let entry = entry?;
+ let ty = entry.file_type()?;
+ if ty.is_dir() {
+ move_dir_all(entry.path(), dst.as_ref().join(entry.file_name()))?;
+ std::fs::remove_dir(entry.path())?;
+ } else {
+ std::fs::rename(entry.path(), dst.as_ref().join(entry.file_name()))?;
+ }
+ }
+ Ok(())
+}
diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json
index 9b048e50..dd638241 100644
--- a/src-tauri/tauri.conf.json
+++ b/src-tauri/tauri.conf.json
@@ -8,7 +8,7 @@
},
"package": {
"productName": "FlightCore",
- "version": "2.1.0"
+ "version": "2.10.3"
},
"tauri": {
"allowlist": {
diff --git a/src-vue/package-lock.json b/src-vue/package-lock.json
index f8b0c3d3..ded2414b 100644
--- a/src-vue/package-lock.json
+++ b/src-vue/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "src-vue",
"version": "0.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -9,26 +9,26 @@
"version": "0.0.0",
"dependencies": {
"@element-plus/icons-vue": "^2.0.9",
- "element-plus": "^2.2.17",
- "marked": "^4.1.1",
+ "element-plus": "^2.3.14",
+ "marked": "^9.1.0",
"tauri-plugin-store-api": "github:tauri-apps/tauri-plugin-store#9bd993aa67766596638bbfd91e79a1bf8f632014",
"vue": "^3.2.37",
- "vue-i18n": "^9.2.2",
- "vue-router": "^4.1.5",
+ "vue-i18n": "^9.5.0",
+ "vue-router": "^4.2.5",
"vuex": "^4.0.2"
},
"devDependencies": {
- "@types/marked": "^4.0.7",
+ "@types/marked": "^6.0.0",
"@vitejs/plugin-vue": "^3.1.0",
- "typescript": "^4.6.4",
+ "typescript": "^5.2.2",
"vite": "^3.1.0",
- "vue-tsc": "^1.0.0"
+ "vue-tsc": "^1.8.15"
}
},
"node_modules/@babel/parser": {
- "version": "7.21.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz",
- "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==",
+ "version": "7.22.7",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz",
+ "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -37,89 +37,114 @@
}
},
"node_modules/@ctrl/tinycolor": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz",
- "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.0.tgz",
+ "integrity": "sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==",
"engines": {
"node": ">=10"
}
},
"node_modules/@element-plus/icons-vue": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.0.10.tgz",
- "integrity": "sha512-ygEZ1mwPjcPo/OulhzLE7mtDrQBWI8vZzEWSNB2W/RNCRjoQGwbaK4N8lV4rid7Ts4qvySU3njMN7YCiSlSaTQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.1.0.tgz",
+ "integrity": "sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==",
"peerDependencies": {
"vue": "^3.2.0"
}
},
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz",
+ "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz",
+ "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/@floating-ui/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Skfy0YS3NJ5nV9us0uuPN0HDk1Q4edljaOhRBJGDWs9EBa7ZVMYBHRFlhLvvmwEoaIM9BlH6QJFn9/uZg0bACg=="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.4.1.tgz",
+ "integrity": "sha512-jk3WqquEJRlcyu7997NtR5PibI+y5bi+LS3hPmguVClypenMsCY3CBa3LAQnozRCtCrYWSEtAdiskpamuJRFOQ==",
+ "dependencies": {
+ "@floating-ui/utils": "^0.1.1"
+ }
},
"node_modules/@floating-ui/dom": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.7.tgz",
- "integrity": "sha512-6RsqvCYe0AYWtsGvuWqCm7mZytnXAZCjWtsWu1Kg8dI3INvj/DbKlDsZO+mKSaQdPT12uxIW9W2dAWJkPx4Y5g==",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.1.tgz",
+ "integrity": "sha512-KwvVcPSXg6mQygvA1TjbN/gh///36kKtllIF8SUm0qpFj8+rvYrpvlYdL1JoA71SHpDqgSSdGOSoQ0Mp3uY5aw==",
"dependencies": {
- "@floating-ui/core": "^1.0.2"
+ "@floating-ui/core": "^1.4.1",
+ "@floating-ui/utils": "^0.1.1"
}
},
+ "node_modules/@floating-ui/utils": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.1.tgz",
+ "integrity": "sha512-m0G6wlnhm/AX0H12IOWtK8gASEMffnX08RtKkCgTdHb9JpHKGloI7icFfLg9ZmQeavcvR0PKmzxClyuFPSjKWw=="
+ },
"node_modules/@intlify/core-base": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz",
- "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.5.0.tgz",
+ "integrity": "sha512-y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w==",
"dependencies": {
- "@intlify/devtools-if": "9.2.2",
- "@intlify/message-compiler": "9.2.2",
- "@intlify/shared": "9.2.2",
- "@intlify/vue-devtools": "9.2.2"
+ "@intlify/message-compiler": "9.5.0",
+ "@intlify/shared": "9.5.0"
},
"engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@intlify/devtools-if": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz",
- "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==",
- "dependencies": {
- "@intlify/shared": "9.2.2"
+ "node": ">= 16"
},
- "engines": {
- "node": ">= 14"
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@intlify/message-compiler": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz",
- "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.5.0.tgz",
+ "integrity": "sha512-CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g==",
"dependencies": {
- "@intlify/shared": "9.2.2",
- "source-map": "0.6.1"
+ "@intlify/shared": "9.5.0",
+ "source-map-js": "^1.0.2"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@intlify/shared": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz",
- "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.5.0.tgz",
+ "integrity": "sha512-tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA==",
"engines": {
- "node": ">= 14"
- }
- },
- "node_modules/@intlify/vue-devtools": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz",
- "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==",
- "dependencies": {
- "@intlify/core-base": "9.2.2",
- "@intlify/shared": "9.2.2"
+ "node": ">= 16"
},
- "engines": {
- "node": ">= 14"
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
@@ -152,23 +177,27 @@
}
},
"node_modules/@types/lodash": {
- "version": "4.14.191",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz",
- "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ=="
+ "version": "4.14.196",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.196.tgz",
+ "integrity": "sha512-22y3o88f4a94mKljsZcanlNWPzO0uBsBdzLAngf2tp533LzZcQzb6+eZPJ+vCTt+bqF2XnvT9gejTLsAcJAJyQ=="
},
"node_modules/@types/lodash-es": {
- "version": "4.17.6",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz",
- "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
+ "version": "4.17.8",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.8.tgz",
+ "integrity": "sha512-euY3XQcZmIzSy7YH5+Unb3b2X12Wtk54YWINBvvGQ5SmMvwb11JQskGsfkH/5HXK77Kr8GF0wkVDIxzAisWtog==",
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/marked": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz",
- "integrity": "sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw==",
- "dev": true
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/@types/marked/-/marked-6.0.0.tgz",
+ "integrity": "sha512-jmjpa4BwUsmhxcfsgUit/7A9KbrC48Q0q8KvnY107ogcjGgTFDlIL3RpihNpx2Mu1hM4mdFQjoVc4O6JoGKHsA==",
+ "deprecated": "This is a stub types definition. marked provides its own type definitions, so you do not need this installed.",
+ "dev": true,
+ "dependencies": {
+ "marked": "*"
+ }
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
@@ -189,91 +218,63 @@
}
},
"node_modules/@volar/language-core": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.0.11.tgz",
- "integrity": "sha512-YwUYKxIyDc+Fq3kQ6BGGfkrKCG5JzE2Yr6vMxrxEXW2rg/gsq3JgMk/4sI8ybRsaTirhCB4V8+AIVYsvcRxgig==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.1.tgz",
+ "integrity": "sha512-JnsM1mIPdfGPxmoOcK1c7HYAsL6YOv0TCJ4aW3AXPZN/Jb4R77epDyMZIVudSGjWMbvv/JfUa+rQ+dGKTmgwBA==",
"dev": true,
"dependencies": {
- "@volar/source-map": "1.0.11",
- "@vue/reactivity": "^3.2.45",
- "muggle-string": "^0.1.0"
+ "@volar/source-map": "1.10.1"
}
},
"node_modules/@volar/source-map": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.0.11.tgz",
- "integrity": "sha512-tkuV9MD+OuiZfHA0qZXrPdW6F7TvnpnuTan6Qe7UGUs9+sflezlMJdjaYdGgQObfP+06pcT1E3xdkOoi08ZyyQ==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.1.tgz",
+ "integrity": "sha512-3/S6KQbqa7pGC8CxPrg69qHLpOvkiPHGJtWPkI/1AXCsktkJ6gIk/5z4hyuMp8Anvs6eS/Kvp/GZa3ut3votKA==",
"dev": true,
"dependencies": {
- "muggle-string": "^0.1.0"
+ "muggle-string": "^0.3.1"
}
},
"node_modules/@volar/typescript": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.0.11.tgz",
- "integrity": "sha512-mq7wDDAs0Eb43jev2FxbowuiwWqvL3kb+tar1we8VQbdabpyQ5dmbWPwo/IglevMmW3SKo1Et+6rqAeZpXNnPQ==",
- "dev": true,
- "dependencies": {
- "@volar/language-core": "1.0.11"
- }
- },
- "node_modules/@volar/vue-language-core": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz",
- "integrity": "sha512-A3ODs0/ua7BcpSSnE7KtO8bzWsYsbOJRyW2Q/2uktxlfHj8srln3JdgK/mNlIgfnWtACbE5K+EfMJOgJKv864A==",
- "dev": true,
- "dependencies": {
- "@volar/language-core": "1.0.11",
- "@volar/source-map": "1.0.11",
- "@vue/compiler-dom": "^3.2.45",
- "@vue/compiler-sfc": "^3.2.45",
- "@vue/reactivity": "^3.2.45",
- "@vue/shared": "^3.2.45",
- "minimatch": "^5.1.0",
- "vue-template-compiler": "^2.7.14"
- }
- },
- "node_modules/@volar/vue-typescript": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz",
- "integrity": "sha512-jlnFPvBcTyPiAbGlgjhKK7fp3Q+Z7Z5eU1NTbTSS0lQC8Gog3sh2UxLAFG5Voe1gHIxasoOEPXzMR0CWF4bKbA==",
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.1.tgz",
+ "integrity": "sha512-+iiO9yUSRHIYjlteT+QcdRq8b44qH19/eiUZtjNtuh6D9ailYM7DVR0zO2sEgJlvCaunw/CF9Ov2KooQBpR4VQ==",
"dev": true,
"dependencies": {
- "@volar/typescript": "1.0.11",
- "@volar/vue-language-core": "1.0.11"
+ "@volar/language-core": "1.10.1"
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.2.tgz",
- "integrity": "sha512-CKZWo1dzsQYTNTft7whzjL0HsrEpMfiK7pjZ2WFE3bC1NA7caUjWioHSK+49y/LK7Bsm4poJZzAMnvZMQ7OTeg==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+ "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
"dependencies": {
"@babel/parser": "^7.21.3",
- "@vue/shared": "3.3.2",
+ "@vue/shared": "3.3.4",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz",
- "integrity": "sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+ "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
"dependencies": {
- "@vue/compiler-core": "3.3.2",
- "@vue/shared": "3.3.2"
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz",
- "integrity": "sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+ "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
"dependencies": {
"@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.2",
- "@vue/compiler-dom": "3.3.2",
- "@vue/compiler-ssr": "3.3.2",
- "@vue/reactivity-transform": "3.3.2",
- "@vue/shared": "3.3.2",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/reactivity-transform": "3.3.4",
+ "@vue/shared": "3.3.4",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.0",
"postcss": "^8.1.10",
@@ -281,83 +282,117 @@
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.2.tgz",
- "integrity": "sha512-K8OfY5FQtZaSOJHHe8xhEfIfLrefL/Y9frv4k4NsyQL3+0lRKxr9QuJhfdBDjkl7Fhz8CzKh63mULvmOfx3l2w==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+ "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
"dependencies": {
- "@vue/compiler-dom": "3.3.2",
- "@vue/shared": "3.3.2"
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/shared": "3.3.4"
}
},
"node_modules/@vue/devtools-api": {
- "version": "6.4.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz",
- "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q=="
+ },
+ "node_modules/@vue/language-core": {
+ "version": "1.8.15",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.15.tgz",
+ "integrity": "sha512-zche5Aw8kkvp3YaghuLiOZyVIpoWHjSQ0EfjxGSsqHOPMamdCoa9x3HtbenpR38UMUoKJ88wiWuiOrV3B/Yq+A==",
+ "dev": true,
+ "dependencies": {
+ "@volar/language-core": "~1.10.0",
+ "@volar/source-map": "~1.10.0",
+ "@vue/compiler-dom": "^3.3.0",
+ "@vue/reactivity": "^3.3.0",
+ "@vue/shared": "^3.3.0",
+ "minimatch": "^9.0.0",
+ "muggle-string": "^0.3.1",
+ "vue-template-compiler": "^2.7.14"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
},
"node_modules/@vue/reactivity": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.2.tgz",
- "integrity": "sha512-yX8C4uTgg2Tdj+512EEMnMKbLveoITl7YdQX35AYgx8vBvQGszKiiCN46g4RY6/deeo/5DLbeUUGxCq1qWMf5g==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
+ "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
"dependencies": {
- "@vue/shared": "3.3.2"
+ "@vue/shared": "3.3.4"
}
},
"node_modules/@vue/reactivity-transform": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.2.tgz",
- "integrity": "sha512-iu2WaQvlJHdnONrsyv4ibIEnSsuKF+aHFngGj/y1lwpHQtalpVhKg9wsKMoiKXS9zPNjG9mNKzJS9vudvjzvyg==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+ "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
"dependencies": {
"@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.2",
- "@vue/shared": "3.3.2",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.0"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.2.tgz",
- "integrity": "sha512-qSl95qj0BvKfcsO+hICqFEoLhJn6++HtsPxmTkkadFbuhe3uQfJ8HmQwvEr7xbxBd2rcJB6XOJg7nWAn/ymC5A==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+ "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
"dependencies": {
- "@vue/reactivity": "3.3.2",
- "@vue/shared": "3.3.2"
+ "@vue/reactivity": "3.3.4",
+ "@vue/shared": "3.3.4"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.2.tgz",
- "integrity": "sha512-+drStsJT+0mtgHdarT7cXZReCcTFfm6ptxMrz0kAW5hms6UNBd8Q1pi4JKlncAhu+Ld/TevsSp7pqAZxBBoGng==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+ "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
"dependencies": {
- "@vue/runtime-core": "3.3.2",
- "@vue/shared": "3.3.2",
+ "@vue/runtime-core": "3.3.4",
+ "@vue/shared": "3.3.4",
"csstype": "^3.1.1"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.2.tgz",
- "integrity": "sha512-QCwh6OGwJg6GDLE0fbQhRTR6tnU+XDJ1iCsTYHXBiezCXAhqMygFRij7BiLF4ytvvHcg5kX9joX5R5vP85++wg==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+ "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
"dependencies": {
- "@vue/compiler-ssr": "3.3.2",
- "@vue/shared": "3.3.2"
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/shared": "3.3.4"
},
"peerDependencies": {
- "vue": "3.3.2"
+ "vue": "3.3.4"
}
},
"node_modules/@vue/shared": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.2.tgz",
- "integrity": "sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ=="
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
+ "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ=="
+ },
+ "node_modules/@vue/typescript": {
+ "version": "1.8.15",
+ "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.15.tgz",
+ "integrity": "sha512-qWyanQKXOsK84S8rP7QBrqsvUdQ0nZABZmTjXMpb3ox4Bp5IbkscREA3OPUrkgl64mAxwwCzIWcOc3BPTCPjQw==",
+ "dev": true,
+ "dependencies": {
+ "@volar/typescript": "~1.10.0",
+ "@vue/language-core": "1.8.15"
+ }
},
"node_modules/@vueuse/core": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.6.0.tgz",
- "integrity": "sha512-qGUcjKQXHgN+jqXEgpeZGoxdCbIDCdVPz3QiF1uyecVGbMuM63o96I1GjYx5zskKgRI0FKSNsVWM7rwrRMTf6A==",
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.13.0.tgz",
+ "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
- "@vueuse/metadata": "9.6.0",
- "@vueuse/shared": "9.6.0",
+ "@vueuse/metadata": "9.13.0",
+ "@vueuse/shared": "9.13.0",
"vue-demi": "*"
},
"funding": {
@@ -365,9 +400,9 @@
}
},
"node_modules/@vueuse/core/node_modules/vue-demi": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
- "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
+ "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
@@ -390,17 +425,17 @@
}
},
"node_modules/@vueuse/metadata": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.6.0.tgz",
- "integrity": "sha512-sIC8R+kWkIdpi5X2z2Gk8TRYzmczDwHRhEFfCu2P+XW2JdPoXrziqsGpDDsN7ykBx4ilwieS7JUIweVGhvZ93w==",
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.13.0.tgz",
+ "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.6.0.tgz",
- "integrity": "sha512-/eDchxYYhkHnFyrb00t90UfjCx94kRHxc7J1GtBCqCG4HyPMX+krV9XJgVtWIsAMaxKVU4fC8NSUviG1JkwhUQ==",
+ "version": "9.13.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.13.0.tgz",
+ "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
"dependencies": {
"vue-demi": "*"
},
@@ -409,9 +444,9 @@
}
},
"node_modules/@vueuse/shared/node_modules/vue-demi": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
- "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
+ "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
"hasInstallScript": true,
"bin": {
"vue-demi-fix": "bin/vue-demi-fix.js",
@@ -459,9 +494,9 @@
"integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
},
"node_modules/dayjs": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
- "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ=="
+ "version": "1.11.9",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.9.tgz",
+ "integrity": "sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA=="
},
"node_modules/de-indent": {
"version": "1.0.2",
@@ -470,9 +505,9 @@
"dev": true
},
"node_modules/element-plus": {
- "version": "2.2.26",
- "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.26.tgz",
- "integrity": "sha512-O/rdY5m9DkclpVg8r3GynyqCunm7MxSR142xSsjrZA77bi7bcwA3SIy6SPEDqHi5R4KqgkGYgKSp4Q4e3irbYg==",
+ "version": "2.3.14",
+ "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.3.14.tgz",
+ "integrity": "sha512-9yvxUaU4jXf2ZNPdmIxoj/f8BG8CDcGM6oHa9JIqxLjQlfY4bpzR1E5CjNimnOX3rxO93w1TQ0jTVt0RSxh9kA==",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.0.6",
@@ -531,6 +566,294 @@
"esbuild-windows-arm64": "0.15.18"
}
},
+ "node_modules/esbuild-android-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz",
+ "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-android-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz",
+ "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz",
+ "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-darwin-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz",
+ "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz",
+ "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-freebsd-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz",
+ "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz",
+ "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz",
+ "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz",
+ "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz",
+ "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-mips64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz",
+ "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-ppc64le": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz",
+ "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-riscv64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz",
+ "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-linux-s390x": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz",
+ "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz",
+ "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-openbsd-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz",
+ "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-sunos-64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz",
+ "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/esbuild-windows-32": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz",
+ "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/esbuild-windows-64": {
"version": "0.15.18",
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
@@ -547,6 +870,22 @@
"node": ">=12"
}
},
+ "node_modules/esbuild-windows-arm64": {
+ "version": "0.15.18",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz",
+ "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@@ -557,6 +896,20 @@
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
"integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
"node_modules/function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -585,9 +938,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -616,26 +969,38 @@
"lodash-es": "*"
}
},
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/magic-string": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
- "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
+ "version": "0.30.2",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz",
+ "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==",
"dependencies": {
- "@jridgewell/sourcemap-codec": "^1.4.13"
+ "@jridgewell/sourcemap-codec": "^1.4.15"
},
"engines": {
"node": ">=12"
}
},
"node_modules/marked": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz",
- "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw==",
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.0.tgz",
+ "integrity": "sha512-VZjm0PM5DMv7WodqOUps3g6Q7dmxs9YGiFUZ7a2majzQTTCgX+6S6NAJHPvOhgFBzYz8s4QZKWWMfZKFmsfOgA==",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
- "node": ">= 12"
+ "node": ">= 16"
}
},
"node_modules/memoize-one": {
@@ -644,27 +1009,36 @@
"integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
},
"node_modules/minimatch": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz",
- "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==",
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/muggle-string": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.1.0.tgz",
- "integrity": "sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==",
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz",
+ "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==",
"dev": true
},
"node_modules/nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -689,9 +1063,9 @@
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
},
"node_modules/postcss": {
- "version": "8.4.19",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
- "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
+ "version": "8.4.27",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz",
+ "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==",
"funding": [
{
"type": "opencollective",
@@ -700,10 +1074,14 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
- "nanoid": "^3.3.4",
+ "nanoid": "^3.3.6",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -712,12 +1090,12 @@
}
},
"node_modules/resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.9.0",
+ "is-core-module": "^2.11.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -743,12 +1121,19 @@
"fsevents": "~2.3.2"
}
},
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
"node_modules/source-map-js": {
@@ -787,22 +1172,22 @@
"integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
},
"node_modules/typescript": {
- "version": "4.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
- "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=14.17"
}
},
"node_modules/vite": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz",
- "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.7.tgz",
+ "integrity": "sha512-29pdXjk49xAP0QBr0xXqu2s5jiQIXNvE/xwd0vUizYT2Hzqe4BksNNoWllFVXJf4eLZ+UlVQmXfB4lWrc+t18g==",
"dev": true,
"dependencies": {
"esbuild": "^0.15.9",
@@ -849,40 +1234,42 @@
}
},
"node_modules/vue": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.2.tgz",
- "integrity": "sha512-98hJcAhyDwZoOo2flAQBSPVYG/o0HA9ivIy2ktHshjE+6/q8IMQ+kvDKQzOZTFPxvnNMcGM+zS2A00xeZMA7tA==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
+ "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
"dependencies": {
- "@vue/compiler-dom": "3.3.2",
- "@vue/compiler-sfc": "3.3.2",
- "@vue/runtime-dom": "3.3.2",
- "@vue/server-renderer": "3.3.2",
- "@vue/shared": "3.3.2"
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-sfc": "3.3.4",
+ "@vue/runtime-dom": "3.3.4",
+ "@vue/server-renderer": "3.3.4",
+ "@vue/shared": "3.3.4"
}
},
"node_modules/vue-i18n": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz",
- "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==",
+ "version": "9.5.0",
+ "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.5.0.tgz",
+ "integrity": "sha512-NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg==",
"dependencies": {
- "@intlify/core-base": "9.2.2",
- "@intlify/shared": "9.2.2",
- "@intlify/vue-devtools": "9.2.2",
- "@vue/devtools-api": "^6.2.1"
+ "@intlify/core-base": "9.5.0",
+ "@intlify/shared": "9.5.0",
+ "@vue/devtools-api": "^6.5.0"
},
"engines": {
- "node": ">= 14"
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/kazupon"
},
"peerDependencies": {
"vue": "^3.0.0"
}
},
"node_modules/vue-router": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
- "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==",
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz",
+ "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==",
"dependencies": {
- "@vue/devtools-api": "^6.4.5"
+ "@vue/devtools-api": "^6.5.0"
},
"funding": {
"url": "https://github.com/sponsors/posva"
@@ -902,13 +1289,14 @@
}
},
"node_modules/vue-tsc": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.0.11.tgz",
- "integrity": "sha512-lj+6dEroPsE4wmQOPtjCzAf8x363Km5/tuEvMEoQaoRnzs9myBM46FNvCGIIPStYUGuaqF1W1bORmP2KDQEORA==",
+ "version": "1.8.15",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.15.tgz",
+ "integrity": "sha512-4DoB3LUj7IToLmggoCxRiFG+QU5lem0nv03m1ocqugXA9rSVoTOEoYYaP8vu8b99Eh+/cCVdYOeIAQ+RsgUYUw==",
"dev": true,
"dependencies": {
- "@volar/vue-language-core": "1.0.11",
- "@volar/vue-typescript": "1.0.11"
+ "@vue/language-core": "1.8.15",
+ "@vue/typescript": "1.8.15",
+ "semver": "^7.3.8"
},
"bin": {
"vue-tsc": "bin/vue-tsc.js"
@@ -927,667 +1315,12 @@
"peerDependencies": {
"vue": "^3.2.0"
}
- }
- },
- "dependencies": {
- "@babel/parser": {
- "version": "7.21.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.8.tgz",
- "integrity": "sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA=="
- },
- "@ctrl/tinycolor": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz",
- "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw=="
- },
- "@element-plus/icons-vue": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/@element-plus/icons-vue/-/icons-vue-2.0.10.tgz",
- "integrity": "sha512-ygEZ1mwPjcPo/OulhzLE7mtDrQBWI8vZzEWSNB2W/RNCRjoQGwbaK4N8lV4rid7Ts4qvySU3njMN7YCiSlSaTQ==",
- "requires": {}
- },
- "@floating-ui/core": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.0.2.tgz",
- "integrity": "sha512-Skfy0YS3NJ5nV9us0uuPN0HDk1Q4edljaOhRBJGDWs9EBa7ZVMYBHRFlhLvvmwEoaIM9BlH6QJFn9/uZg0bACg=="
- },
- "@floating-ui/dom": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.0.7.tgz",
- "integrity": "sha512-6RsqvCYe0AYWtsGvuWqCm7mZytnXAZCjWtsWu1Kg8dI3INvj/DbKlDsZO+mKSaQdPT12uxIW9W2dAWJkPx4Y5g==",
- "requires": {
- "@floating-ui/core": "^1.0.2"
- }
- },
- "@intlify/core-base": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.2.2.tgz",
- "integrity": "sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==",
- "requires": {
- "@intlify/devtools-if": "9.2.2",
- "@intlify/message-compiler": "9.2.2",
- "@intlify/shared": "9.2.2",
- "@intlify/vue-devtools": "9.2.2"
- }
- },
- "@intlify/devtools-if": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.2.2.tgz",
- "integrity": "sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==",
- "requires": {
- "@intlify/shared": "9.2.2"
- }
- },
- "@intlify/message-compiler": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.2.2.tgz",
- "integrity": "sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==",
- "requires": {
- "@intlify/shared": "9.2.2",
- "source-map": "0.6.1"
- }
- },
- "@intlify/shared": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.2.2.tgz",
- "integrity": "sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q=="
- },
- "@intlify/vue-devtools": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz",
- "integrity": "sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==",
- "requires": {
- "@intlify/core-base": "9.2.2",
- "@intlify/shared": "9.2.2"
- }
- },
- "@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
- },
- "@popperjs/core": {
- "version": "npm:@sxzz/popperjs-es@2.11.7",
- "resolved": "https://registry.npmjs.org/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
- "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ=="
- },
- "@tauri-apps/api": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@tauri-apps/api/-/api-1.1.0.tgz",
- "integrity": "sha512-n13pIqdPd3KtaMmmAcrU7BTfdMtIlGNnfZD0dNX8L4p8dgmuNyikm6JAA+yCpl9gqq6I8x5cV2Y0muqdgD0cWw=="
- },
- "@types/lodash": {
- "version": "4.14.191",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz",
- "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ=="
- },
- "@types/lodash-es": {
- "version": "4.17.6",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.6.tgz",
- "integrity": "sha512-R+zTeVUKDdfoRxpAryaQNRKk3105Rrgx2CFRClIgRGaqDTdjsm8h6IYA8ir584W3ePzkZfst5xIgDwYrlh9HLg==",
- "requires": {
- "@types/lodash": "*"
- }
- },
- "@types/marked": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.7.tgz",
- "integrity": "sha512-eEAhnz21CwvKVW+YvRvcTuFKNU9CV1qH+opcgVK3pIMI6YZzDm6gc8o2vHjldFk6MGKt5pueSB7IOpvpx5Qekw==",
- "dev": true
- },
- "@types/web-bluetooth": {
- "version": "0.0.16",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
- "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ=="
- },
- "@vitejs/plugin-vue": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.2.0.tgz",
- "integrity": "sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==",
- "dev": true,
- "requires": {}
- },
- "@volar/language-core": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.0.11.tgz",
- "integrity": "sha512-YwUYKxIyDc+Fq3kQ6BGGfkrKCG5JzE2Yr6vMxrxEXW2rg/gsq3JgMk/4sI8ybRsaTirhCB4V8+AIVYsvcRxgig==",
- "dev": true,
- "requires": {
- "@volar/source-map": "1.0.11",
- "@vue/reactivity": "^3.2.45",
- "muggle-string": "^0.1.0"
- }
- },
- "@volar/source-map": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.0.11.tgz",
- "integrity": "sha512-tkuV9MD+OuiZfHA0qZXrPdW6F7TvnpnuTan6Qe7UGUs9+sflezlMJdjaYdGgQObfP+06pcT1E3xdkOoi08ZyyQ==",
- "dev": true,
- "requires": {
- "muggle-string": "^0.1.0"
- }
- },
- "@volar/typescript": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.0.11.tgz",
- "integrity": "sha512-mq7wDDAs0Eb43jev2FxbowuiwWqvL3kb+tar1we8VQbdabpyQ5dmbWPwo/IglevMmW3SKo1Et+6rqAeZpXNnPQ==",
- "dev": true,
- "requires": {
- "@volar/language-core": "1.0.11"
- }
- },
- "@volar/vue-language-core": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-1.0.11.tgz",
- "integrity": "sha512-A3ODs0/ua7BcpSSnE7KtO8bzWsYsbOJRyW2Q/2uktxlfHj8srln3JdgK/mNlIgfnWtACbE5K+EfMJOgJKv864A==",
- "dev": true,
- "requires": {
- "@volar/language-core": "1.0.11",
- "@volar/source-map": "1.0.11",
- "@vue/compiler-dom": "^3.2.45",
- "@vue/compiler-sfc": "^3.2.45",
- "@vue/reactivity": "^3.2.45",
- "@vue/shared": "^3.2.45",
- "minimatch": "^5.1.0",
- "vue-template-compiler": "^2.7.14"
- }
- },
- "@volar/vue-typescript": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-1.0.11.tgz",
- "integrity": "sha512-jlnFPvBcTyPiAbGlgjhKK7fp3Q+Z7Z5eU1NTbTSS0lQC8Gog3sh2UxLAFG5Voe1gHIxasoOEPXzMR0CWF4bKbA==",
- "dev": true,
- "requires": {
- "@volar/typescript": "1.0.11",
- "@volar/vue-language-core": "1.0.11"
- }
- },
- "@vue/compiler-core": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.2.tgz",
- "integrity": "sha512-CKZWo1dzsQYTNTft7whzjL0HsrEpMfiK7pjZ2WFE3bC1NA7caUjWioHSK+49y/LK7Bsm4poJZzAMnvZMQ7OTeg==",
- "requires": {
- "@babel/parser": "^7.21.3",
- "@vue/shared": "3.3.2",
- "estree-walker": "^2.0.2",
- "source-map-js": "^1.0.2"
- }
- },
- "@vue/compiler-dom": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.2.tgz",
- "integrity": "sha512-6gS3auANuKXLw0XH6QxkWqyPYPunziS2xb6VRenM3JY7gVfZcJvkCBHkb5RuNY1FCbBO3lkIi0CdXUCW1c7SXw==",
- "requires": {
- "@vue/compiler-core": "3.3.2",
- "@vue/shared": "3.3.2"
- }
- },
- "@vue/compiler-sfc": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.2.tgz",
- "integrity": "sha512-jG4jQy28H4BqzEKsQqqW65BZgmo3vzdLHTBjF+35RwtDdlFE+Fk1VWJYUnDMMqkFBo6Ye1ltSKVOMPgkzYj7SQ==",
- "requires": {
- "@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.2",
- "@vue/compiler-dom": "3.3.2",
- "@vue/compiler-ssr": "3.3.2",
- "@vue/reactivity-transform": "3.3.2",
- "@vue/shared": "3.3.2",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.0",
- "postcss": "^8.1.10",
- "source-map-js": "^1.0.2"
- }
- },
- "@vue/compiler-ssr": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.2.tgz",
- "integrity": "sha512-K8OfY5FQtZaSOJHHe8xhEfIfLrefL/Y9frv4k4NsyQL3+0lRKxr9QuJhfdBDjkl7Fhz8CzKh63mULvmOfx3l2w==",
- "requires": {
- "@vue/compiler-dom": "3.3.2",
- "@vue/shared": "3.3.2"
- }
- },
- "@vue/devtools-api": {
- "version": "6.4.5",
- "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.4.5.tgz",
- "integrity": "sha512-JD5fcdIuFxU4fQyXUu3w2KpAJHzTVdN+p4iOX2lMWSHMOoQdMAcpFLZzm9Z/2nmsoZ1a96QEhZ26e50xLBsgOQ=="
- },
- "@vue/reactivity": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.2.tgz",
- "integrity": "sha512-yX8C4uTgg2Tdj+512EEMnMKbLveoITl7YdQX35AYgx8vBvQGszKiiCN46g4RY6/deeo/5DLbeUUGxCq1qWMf5g==",
- "requires": {
- "@vue/shared": "3.3.2"
- }
- },
- "@vue/reactivity-transform": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.2.tgz",
- "integrity": "sha512-iu2WaQvlJHdnONrsyv4ibIEnSsuKF+aHFngGj/y1lwpHQtalpVhKg9wsKMoiKXS9zPNjG9mNKzJS9vudvjzvyg==",
- "requires": {
- "@babel/parser": "^7.20.15",
- "@vue/compiler-core": "3.3.2",
- "@vue/shared": "3.3.2",
- "estree-walker": "^2.0.2",
- "magic-string": "^0.30.0"
- }
- },
- "@vue/runtime-core": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.2.tgz",
- "integrity": "sha512-qSl95qj0BvKfcsO+hICqFEoLhJn6++HtsPxmTkkadFbuhe3uQfJ8HmQwvEr7xbxBd2rcJB6XOJg7nWAn/ymC5A==",
- "requires": {
- "@vue/reactivity": "3.3.2",
- "@vue/shared": "3.3.2"
- }
- },
- "@vue/runtime-dom": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.2.tgz",
- "integrity": "sha512-+drStsJT+0mtgHdarT7cXZReCcTFfm6ptxMrz0kAW5hms6UNBd8Q1pi4JKlncAhu+Ld/TevsSp7pqAZxBBoGng==",
- "requires": {
- "@vue/runtime-core": "3.3.2",
- "@vue/shared": "3.3.2",
- "csstype": "^3.1.1"
- }
- },
- "@vue/server-renderer": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.2.tgz",
- "integrity": "sha512-QCwh6OGwJg6GDLE0fbQhRTR6tnU+XDJ1iCsTYHXBiezCXAhqMygFRij7BiLF4ytvvHcg5kX9joX5R5vP85++wg==",
- "requires": {
- "@vue/compiler-ssr": "3.3.2",
- "@vue/shared": "3.3.2"
- }
- },
- "@vue/shared": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.2.tgz",
- "integrity": "sha512-0rFu3h8JbclbnvvKrs7Fe5FNGV9/5X2rPD7KmOzhLSUAiQH5//Hq437Gv0fR5Mev3u/nbtvmLl8XgwCU20/ZfQ=="
- },
- "@vueuse/core": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-9.6.0.tgz",
- "integrity": "sha512-qGUcjKQXHgN+jqXEgpeZGoxdCbIDCdVPz3QiF1uyecVGbMuM63o96I1GjYx5zskKgRI0FKSNsVWM7rwrRMTf6A==",
- "requires": {
- "@types/web-bluetooth": "^0.0.16",
- "@vueuse/metadata": "9.6.0",
- "@vueuse/shared": "9.6.0",
- "vue-demi": "*"
- },
- "dependencies": {
- "vue-demi": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
- "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
- "requires": {}
- }
- }
- },
- "@vueuse/metadata": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-9.6.0.tgz",
- "integrity": "sha512-sIC8R+kWkIdpi5X2z2Gk8TRYzmczDwHRhEFfCu2P+XW2JdPoXrziqsGpDDsN7ykBx4ilwieS7JUIweVGhvZ93w=="
- },
- "@vueuse/shared": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-9.6.0.tgz",
- "integrity": "sha512-/eDchxYYhkHnFyrb00t90UfjCx94kRHxc7J1GtBCqCG4HyPMX+krV9XJgVtWIsAMaxKVU4fC8NSUviG1JkwhUQ==",
- "requires": {
- "vue-demi": "*"
- },
- "dependencies": {
- "vue-demi": {
- "version": "0.13.11",
- "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz",
- "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==",
- "requires": {}
- }
- }
- },
- "async-validator": {
- "version": "4.2.5",
- "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz",
- "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "csstype": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
- },
- "dayjs": {
- "version": "1.11.6",
- "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.6.tgz",
- "integrity": "sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ=="
- },
- "de-indent": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
- "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==",
- "dev": true
- },
- "element-plus": {
- "version": "2.2.26",
- "resolved": "https://registry.npmjs.org/element-plus/-/element-plus-2.2.26.tgz",
- "integrity": "sha512-O/rdY5m9DkclpVg8r3GynyqCunm7MxSR142xSsjrZA77bi7bcwA3SIy6SPEDqHi5R4KqgkGYgKSp4Q4e3irbYg==",
- "requires": {
- "@ctrl/tinycolor": "^3.4.1",
- "@element-plus/icons-vue": "^2.0.6",
- "@floating-ui/dom": "^1.0.1",
- "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
- "@types/lodash": "^4.14.182",
- "@types/lodash-es": "^4.17.6",
- "@vueuse/core": "^9.1.0",
- "async-validator": "^4.2.5",
- "dayjs": "^1.11.3",
- "escape-html": "^1.0.3",
- "lodash": "^4.17.21",
- "lodash-es": "^4.17.21",
- "lodash-unified": "^1.0.2",
- "memoize-one": "^6.0.0",
- "normalize-wheel-es": "^1.2.0"
- }
- },
- "esbuild": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz",
- "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==",
- "dev": true,
- "requires": {
- "@esbuild/android-arm": "0.15.18",
- "@esbuild/linux-loong64": "0.15.18",
- "esbuild-android-64": "0.15.18",
- "esbuild-android-arm64": "0.15.18",
- "esbuild-darwin-64": "0.15.18",
- "esbuild-darwin-arm64": "0.15.18",
- "esbuild-freebsd-64": "0.15.18",
- "esbuild-freebsd-arm64": "0.15.18",
- "esbuild-linux-32": "0.15.18",
- "esbuild-linux-64": "0.15.18",
- "esbuild-linux-arm": "0.15.18",
- "esbuild-linux-arm64": "0.15.18",
- "esbuild-linux-mips64le": "0.15.18",
- "esbuild-linux-ppc64le": "0.15.18",
- "esbuild-linux-riscv64": "0.15.18",
- "esbuild-linux-s390x": "0.15.18",
- "esbuild-netbsd-64": "0.15.18",
- "esbuild-openbsd-64": "0.15.18",
- "esbuild-sunos-64": "0.15.18",
- "esbuild-windows-32": "0.15.18",
- "esbuild-windows-64": "0.15.18",
- "esbuild-windows-arm64": "0.15.18"
- }
- },
- "esbuild-windows-64": {
- "version": "0.15.18",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz",
- "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==",
- "dev": true,
- "optional": true
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
- },
- "estree-walker": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "is-core-module": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
- "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
- },
- "lodash-es": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
- },
- "lodash-unified": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/lodash-unified/-/lodash-unified-1.0.3.tgz",
- "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==",
- "requires": {}
- },
- "magic-string": {
- "version": "0.30.0",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
- "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
- "requires": {
- "@jridgewell/sourcemap-codec": "^1.4.13"
- }
- },
- "marked": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.3.tgz",
- "integrity": "sha512-slWRdJkbTZ+PjkyJnE30Uid64eHwbwa1Q25INCAYfZlK4o6ylagBy/Le9eWntqJFoFT93ikUKMv47GZ4gTwHkw=="
- },
- "memoize-one": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
- "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
- },
- "minimatch": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.1.tgz",
- "integrity": "sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- },
- "muggle-string": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.1.0.tgz",
- "integrity": "sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==",
- "dev": true
- },
- "nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw=="
- },
- "normalize-wheel-es": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz",
- "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw=="
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
- },
- "postcss": {
- "version": "8.4.19",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz",
- "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==",
- "requires": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "resolve": {
- "version": "1.22.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
- "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.9.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "rollup": {
- "version": "2.79.1",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz",
- "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==",
- "dev": true,
- "requires": {
- "fsevents": "~2.3.2"
- }
- },
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw=="
},
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
- },
- "tauri-plugin-store-api": {
- "version": "git+ssh://git@github.com/tauri-apps/tauri-plugin-store.git#9bd993aa67766596638bbfd91e79a1bf8f632014",
- "integrity": "sha512-X0cDDcEVLY2X8qCLISgAjzuBKDn7bJkj4S7LnXbEPFbPRe+NzhmFGHSAdFCuQuPzQYjmrVg18mZx9NAg4GBHag==",
- "from": "tauri-plugin-store-api@github:tauri-apps/tauri-plugin-store#9bd993aa67766596638bbfd91e79a1bf8f632014",
- "requires": {
- "@tauri-apps/api": "1.1.0",
- "tslib": "2.4.0"
- }
- },
- "tslib": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
- "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
- },
- "typescript": {
- "version": "4.9.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz",
- "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==",
- "dev": true
- },
- "vite": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz",
- "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==",
- "dev": true,
- "requires": {
- "esbuild": "^0.15.9",
- "fsevents": "~2.3.2",
- "postcss": "^8.4.18",
- "resolve": "^1.22.1",
- "rollup": "^2.79.1"
- }
- },
- "vue": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.2.tgz",
- "integrity": "sha512-98hJcAhyDwZoOo2flAQBSPVYG/o0HA9ivIy2ktHshjE+6/q8IMQ+kvDKQzOZTFPxvnNMcGM+zS2A00xeZMA7tA==",
- "requires": {
- "@vue/compiler-dom": "3.3.2",
- "@vue/compiler-sfc": "3.3.2",
- "@vue/runtime-dom": "3.3.2",
- "@vue/server-renderer": "3.3.2",
- "@vue/shared": "3.3.2"
- }
- },
- "vue-i18n": {
- "version": "9.2.2",
- "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.2.2.tgz",
- "integrity": "sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==",
- "requires": {
- "@intlify/core-base": "9.2.2",
- "@intlify/shared": "9.2.2",
- "@intlify/vue-devtools": "9.2.2",
- "@vue/devtools-api": "^6.2.1"
- }
- },
- "vue-router": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz",
- "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==",
- "requires": {
- "@vue/devtools-api": "^6.4.5"
- }
- },
- "vue-template-compiler": {
- "version": "2.7.14",
- "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz",
- "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==",
- "dev": true,
- "requires": {
- "de-indent": "^1.0.2",
- "he": "^1.2.0"
- }
- },
- "vue-tsc": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.0.11.tgz",
- "integrity": "sha512-lj+6dEroPsE4wmQOPtjCzAf8x363Km5/tuEvMEoQaoRnzs9myBM46FNvCGIIPStYUGuaqF1W1bORmP2KDQEORA==",
- "dev": true,
- "requires": {
- "@volar/vue-language-core": "1.0.11",
- "@volar/vue-typescript": "1.0.11"
- }
- },
- "vuex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz",
- "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==",
- "requires": {
- "@vue/devtools-api": "^6.0.0-beta.11"
- }
}
}
}
diff --git a/src-vue/package.json b/src-vue/package.json
index 04c1904b..e4c8c49f 100644
--- a/src-vue/package.json
+++ b/src-vue/package.json
@@ -10,19 +10,19 @@
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.9",
- "element-plus": "^2.2.17",
- "marked": "^4.1.1",
+ "element-plus": "^2.3.14",
+ "marked": "^9.1.0",
"tauri-plugin-store-api": "github:tauri-apps/tauri-plugin-store#9bd993aa67766596638bbfd91e79a1bf8f632014",
"vue": "^3.2.37",
- "vue-i18n": "^9.2.2",
- "vue-router": "^4.1.5",
+ "vue-i18n": "^9.5.0",
+ "vue-router": "^4.2.5",
"vuex": "^4.0.2"
},
"devDependencies": {
- "@types/marked": "^4.0.7",
+ "@types/marked": "^6.0.0",
"@vitejs/plugin-vue": "^3.1.0",
- "typescript": "^4.6.4",
+ "typescript": "^5.2.2",
"vite": "^3.1.0",
- "vue-tsc": "^1.0.0"
+ "vue-tsc": "^1.8.15"
}
}
diff --git a/src-vue/src/components/LanguageSelector.vue b/src-vue/src/components/LanguageSelector.vue
index 4f275369..0c47e674 100644
--- a/src-vue/src/components/LanguageSelector.vue
+++ b/src-vue/src/components/LanguageSelector.vue
@@ -35,6 +35,10 @@ export default defineComponent({
label: 'Deutsch'
},
{
+ value: 'es',
+ label: 'Español'
+ },
+ {
value: 'pl',
label: 'polski'
},
@@ -47,6 +51,10 @@ export default defineComponent({
label: 'Italiano'
},
{
+ value: 'da',
+ label: 'Dansk'
+ },
+ {
value: 'zh_Hans',
label: '简体中文'
},
diff --git a/src-vue/src/components/LocalModCard.vue b/src-vue/src/components/LocalModCard.vue
index dd3629f8..f8d0256d 100644
--- a/src-vue/src/components/LocalModCard.vue
+++ b/src-vue/src/components/LocalModCard.vue
@@ -30,7 +30,6 @@
import { defineComponent } from "vue";
import { invoke } from "@tauri-apps/api";
import { NorthstarMod } from "../../../src-tauri/bindings/NorthstarMod";
-import { GameInstall } from "../utils/GameInstall";
import { showErrorNotification, showNotification } from "../utils/ui";
export default defineComponent({
@@ -50,16 +49,10 @@ export default defineComponent({
async updateWhichModsEnabled(mod: NorthstarMod) {
this.global_load_indicator = true;
- // Setup up struct
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
-
// enable/disable specific mod
try {
await invoke("set_mod_enabled_status", {
- gameInstall: game_install,
+ gameInstall: this.$store.state.game_install,
modName: mod.name,
// Need to set it to the opposite of current state,
// as current state is only updated after command is run
@@ -76,11 +69,7 @@ export default defineComponent({
return true;
},
async deleteMod(mod: NorthstarMod) {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
- await invoke("delete_northstar_mod", { gameInstall: game_install, nsmodName: mod.name })
+ await invoke("delete_northstar_mod", { gameInstall: this.$store.state.game_install, nsmodName: mod.name })
.then((message) => {
// Just a visual indicator that it worked
showNotification(this.$t('mods.local.success_deleting', { modName: mod.name }));
diff --git a/src-vue/src/components/ThunderstoreModCard.vue b/src-vue/src/components/ThunderstoreModCard.vue
index 2fbbac40..54241e85 100644
--- a/src-vue/src/components/ThunderstoreModCard.vue
+++ b/src-vue/src/components/ThunderstoreModCard.vue
@@ -71,7 +71,6 @@ import { ThunderstoreModVersion } from "../../../src-tauri/bindings/Thunderstore
import { invoke, shell } from "@tauri-apps/api";
import { ThunderstoreModStatus } from "../utils/thunderstore/ThunderstoreModStatus";
import { NorthstarMod } from "../../../src-tauri/bindings/NorthstarMod";
-import { GameInstall } from "../utils/GameInstall";
import { NorthstarState } from "../utils/NorthstarState";
import { ElMessageBox } from "element-plus";
import { showErrorNotification, showNotification } from "../utils/ui";
@@ -217,12 +216,7 @@ export default defineComponent({
}
)
.then(async () => { // Deletion confirmed
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
-
- await invoke<string>("delete_thunderstore_mod", { gameInstall: game_install, thunderstoreModString: this.latestVersion.full_name })
+ await invoke<string>("delete_thunderstore_mod", { gameInstall: this.$store.state.game_install, thunderstoreModString: this.latestVersion.full_name })
.then((message) => {
showNotification(this.$t('mods.card.remove_success', { modName: mod.name }), message);
})
@@ -239,11 +233,6 @@ export default defineComponent({
},
async installMod(mod: ThunderstoreMod) {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
-
// set internal state according to current installation state
if (this.modStatus === ThunderstoreModStatus.OUTDATED) {
this.isBeingUpdated = true;
@@ -254,7 +243,7 @@ export default defineComponent({
// Capture translation method in a context, so it can be used outside Vue component context.
// (see https://github.com/R2NorthstarTools/FlightCore/issues/384)
(async (translate: Function) => {
- await invoke<string>("install_mod_caller", { gameInstall: game_install, thunderstoreModString: this.latestVersion.full_name }).then((message) => {
+ await invoke<string>("install_mod_caller", { gameInstall: this.$store.state.game_install, thunderstoreModString: this.latestVersion.full_name }).then((message) => {
showNotification(translate('mods.card.install_success', { modName: mod.name }), message);
})
.catch((error) => {
@@ -323,4 +312,8 @@ export default defineComponent({
margin-left: 10px;
height: auto;
}
+
+.image {
+ background-color: lightgray;
+}
</style>
diff --git a/src-vue/src/i18n/lang/da.json b/src-vue/src/i18n/lang/da.json
new file mode 100644
index 00000000..33486bce
--- /dev/null
+++ b/src-vue/src/i18n/lang/da.json
@@ -0,0 +1,166 @@
+{
+ "menu": {
+ "changelog": "Ændringslog",
+ "mods": "Mods",
+ "settings": "Indstillinger",
+ "dev": "Dev",
+ "play": "Spil"
+ },
+ "generic": {
+ "yes": "Ja",
+ "no": "Nej",
+ "error": "Fejl",
+ "cancel": "afbryd",
+ "informationShort": "Info",
+ "downloading": "Henter",
+ "success": "Succes",
+ "extracting": "Udpakker",
+ "done": "Færdig"
+ },
+ "play": {
+ "button": {
+ "select_game_dir": "Vælg Titanfall2 spil mappe",
+ "install": "Installere",
+ "installing": "Installer...",
+ "update": "Opdater",
+ "updating": "Opdatere...",
+ "ready_to_play": "Start spil",
+ "northstar_is_running": "Spillet køre"
+ },
+ "unknown_version": "Ukendt version",
+ "see_patch_notes": "Se patch noter",
+ "players": "Spillere",
+ "servers": "Servere",
+ "northstar_running": "Northstar køre",
+ "ea_app_running": "EA appen køre",
+ "unable_to_load_playercount": "Kan ikke hente antallet af spillere"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "Ingen mods blev fundet.",
+ "delete_confirm": "Er du sikker på at du vil slette dette mod?",
+ "delete": "Slet",
+ "success_deleting": "Sletningen af {modName} lykkedes",
+ "part_of_ts_mod": "Dette Northstar mod er en del af et Thunderstore mod"
+ },
+ "online": {
+ "no_match": "Der er ikke fundet nogen matchende mod.",
+ "try_another_search": "Prøv en anden søgning!"
+ },
+ "menu": {
+ "local": "Lokal",
+ "online": "Online",
+ "filter": "Filter",
+ "search": "Søg",
+ "sort_mods": "Sorter mods",
+ "select_categories": "Vælg kategorier",
+ "sort": {
+ "name_asc": "navn (A til Z)",
+ "name_desc": "navn (Z til A)",
+ "date_asc": "Dato (fra ældste)",
+ "most_downloaded": "Mest hentet",
+ "top_rated": "bedst bedømt",
+ "date_desc": "Dato (fra nyeste)"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Installerer...",
+ "being_updated": "Opdaterer...",
+ "installed": "Installeret",
+ "install": "Installere",
+ "outdated": "Opdater"
+ },
+ "by": "af",
+ "more_info": "Mere info",
+ "remove": "Fjern mod",
+ "remove_dialog_title": "Advarsel",
+ "remove_success": "Fjernet {modName}",
+ "install_success": "Installeret {modName}",
+ "remove_dialog_text": "Fjern Thunderstore mod?"
+ }
+ },
+ "settings": {
+ "manage_install": "Administrer installation",
+ "choose_folder": "Vælg installationsmappe",
+ "open_game_folder": "Åben mappe",
+ "nb_ts_mods_per_page": "Antal Thunderstore-mods pr. side",
+ "nb_ts_mods_reset": "Nulstil til standard",
+ "language": "Sprog",
+ "language_select": "Vælg dit yndlingssprog",
+ "about": "Om:",
+ "flightcore_version": "FlightCore version:",
+ "testing": "Tester:",
+ "enable_test_channels": "Aktiver testudgivelseskanaler",
+ "dev_mode_enabled_title": "Pas på!",
+ "dev_mode_enabled_text": "Udviklertilstand aktiveret.",
+ "show_deprecated_mods": "Vis forældede Thunderstore-mods",
+ "show_deprecated_mods_desc2": "Pas på, sådanne mods er normalt forældet af en god grund.",
+ "profile": {
+ "active": "Aktiv profil",
+ "edit": "Rediger profiler",
+ "dialog": {
+ "title": "Profiler"
+ }
+ },
+ "repair": {
+ "title": "Reparere",
+ "open_window": "Åbn reparationsvinduet",
+ "window": {
+ "title": "FlightCore reparationsvinduet",
+ "disable_all_but_core": "Deaktiver alle undtagen kernemods",
+ "disable_all_but_core_success": "Deaktiverede alle mods undtagen kernemods",
+ "disable_modsettings": "Deaktiver ModSettings mod",
+ "disable_modsettings_success": "Deaktiver ModSettings mod",
+ "force_reinstall_ns": "Tving geninstallation Northstar",
+ "force_delete_temp_dl": "Tving sletning af midlertidig download-mappe",
+ "delete_persistent_store": "Slet FlightCore persistent indhold",
+ "reinstall_title": "Tving geninstallation af Northstar",
+ "reinstall_text": "Vent lidt",
+ "reinstall_success": "Northstar blev geninstalleret",
+ "warning": "Dette vindue indeholder forskellige funktioner til at reparere almindelige problemer med Northstar og FlightCore.",
+ "kill_northstar_process": "Dræb, der kører Northstar/Titanfall2-processen"
+ }
+ },
+ "nb_ts_mods_per_page_desc1": "Dette har en indvirkning på skærmydelsen, når du gennemser Thunderstore-mods.",
+ "nb_ts_mods_per_page_desc2": "Indstil denne værdi til 0 for at deaktivere paginering.",
+ "show_deprecated_mods_desc1": "Dette giver dig mulighed for at se forældede mods i online-mods-samlingen."
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Ny spil mappe",
+ "text": "Spilmappen blev opdateret."
+ },
+ "wrong": {
+ "title": "Forkert mappe",
+ "text": "Den valgte mappe er ikke en gyldig Titanfall2 Installation."
+ },
+ "not_found": {
+ "title": "Titanfall2 ikke fundet!",
+ "text": "Vælg venligst installationsstedet manuelt"
+ }
+ },
+ "profile": {
+ "invalid": {
+ "title": "Ugyldig profil",
+ "text": "Den profil, du forsøgte at skifte til, er ikke længere gyldig."
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore forældet!",
+ "text": "Opdater venligst FlightCore.\nKører forældet version {oldVersion}.\nNyeste er {newVersion}!"
+ }
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "Skiftet udgivelseskanal til \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Northstar udgivelseskandidat"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/de.json b/src-vue/src/i18n/lang/de.json
index e8392452..c830ae5a 100644
--- a/src-vue/src/i18n/lang/de.json
+++ b/src-vue/src/i18n/lang/de.json
@@ -107,14 +107,22 @@
"force_reinstall_ns": "Northstar reinstallieren",
"force_delete_temp_dl": "Temporären FlightCore Downloadordner löschen",
"delete_persistent_store": "FlightCore Einstellungen zurücksetzen",
+ "kill_northstar_process": "Laufenden Northstar/Titanfall2 Prozess beenden",
"reinstall_title": "Northstar wird neu installiert",
"reinstall_text": "Bitte warten",
- "reinstall_success": "Northstar erfolgreich neu installiert"
+ "reinstall_success": "Northstar erfolgreich neu installiert",
+ "disable_modsettings_success": "Der Mod ModSettings wurde deaktiviert",
+ "disable_modsettings": "Deaktiviere den ModSettings Mod"
}
},
"show_deprecated_mods_desc1": "Damit werden veraltete Mods in der Online-Mods-Ansicht sichtbar.",
"show_deprecated_mods_desc2": "Aber Vorsicht, solche Mods sind normalerweise aus gutem Grund als veraltet markiert.",
- "show_deprecated_mods": "Veraltete Thunderstore mods anzeigen"
+ "show_deprecated_mods": "Veraltete Thunderstore mods anzeigen",
+ "profile": {
+ "dialog": {
+ "title": "Profile"
+ }
+ }
},
"notification": {
"game_folder": {
diff --git a/src-vue/src/i18n/lang/en.json b/src-vue/src/i18n/lang/en.json
index 470e98be..2b056655 100644
--- a/src-vue/src/i18n/lang/en.json
+++ b/src-vue/src/i18n/lang/en.json
@@ -110,6 +110,15 @@
"show_deprecated_mods_desc1": "This allows you to see deprecated mods in the online mods collection.",
"show_deprecated_mods_desc2": "Watch out, such mods are usually deprecated for a good reason.",
+ "profile": {
+ "active": "Active Profile",
+ "edit": "Edit Profiles",
+
+ "dialog": {
+ "title": "Profiles"
+ }
+ },
+
"repair": {
"title": "Repair",
"open_window": "Open repair window",
@@ -124,6 +133,7 @@
"force_reinstall_ns": "Force reinstall Northstar",
"force_delete_temp_dl": "Force delete temp download folder",
"delete_persistent_store": "Delete FlightCore persistent store",
+ "kill_northstar_process": "Kill running Northstar/Titanfall2 process",
"reinstall_title": "Force reinstalling Northstar",
"reinstall_text": "Please wait",
"reinstall_success": "Successfully reinstalled Northstar"
@@ -149,6 +159,13 @@
}
},
+ "profile": {
+ "invalid": {
+ "title": "Invalid Profile",
+ "text": "The profile you tried to switch to is no longer valid."
+ }
+ },
+
"flightcore_outdated": {
"title": "FlightCore outdated!",
"text": "Please update FlightCore.\nRunning outdated version {oldVersion}.\nNewest is {newVersion}!"
diff --git a/src-vue/src/i18n/lang/es.json b/src-vue/src/i18n/lang/es.json
new file mode 100644
index 00000000..ac34fcd4
--- /dev/null
+++ b/src-vue/src/i18n/lang/es.json
@@ -0,0 +1,166 @@
+{
+ "menu": {
+ "mods": "Modificaciones",
+ "settings": "Opciones",
+ "dev": "Desarrollador",
+ "play": "Jugar",
+ "changelog": "Cambios"
+ },
+ "generic": {
+ "yes": "Sí",
+ "no": "No",
+ "error": "Error",
+ "cancel": "Cancelar",
+ "informationShort": "Información",
+ "extracting": "Extrayendo",
+ "done": "Listo",
+ "success": "Éxito",
+ "downloading": "Descargando"
+ },
+ "play": {
+ "button": {
+ "northstar_is_running": "El juego ya se está ejecutando",
+ "install": "Instalar",
+ "update": "Actualizar",
+ "select_game_dir": "Seleccione carpeta base de Titanfall 2",
+ "ready_to_play": "Jugar ahora",
+ "installing": "Instalando...",
+ "updating": "Actualizando..."
+ },
+ "ea_app_running": "La aplicación de EA ya se está ejecutando:",
+ "unknown_version": "Versión Desconocida",
+ "see_patch_notes": "Ver las notas del parche",
+ "players": "jugadores",
+ "servers": "servidores",
+ "northstar_running": "Northstar ya se está ejecutando:",
+ "unable_to_load_playercount": "Cantidad de jugadores no disponible"
+ },
+ "mods": {
+ "local": {
+ "no_mods": "No hay mods encontrados.",
+ "delete_confirm": "¿Estás segur@ que quieres eliminar este mod?",
+ "delete": "Eliminar",
+ "success_deleting": "{modName} Ha sido eliminado correctamente",
+ "part_of_ts_mod": "Este mod de Northstar es parte de un mod de la ThunderStore"
+ },
+ "online": {
+ "no_match": "No hay mods coincidentes.",
+ "try_another_search": "Intente otra busqueda!"
+ },
+ "menu": {
+ "local": "Local",
+ "online": "En línea",
+ "filter": "FIltro",
+ "search": "Búsqueda",
+ "sort_mods": "Ordenar mods",
+ "select_categories": "Seleccionar categorías",
+ "sort": {
+ "name_asc": "Por nombre (de la A a la Z)",
+ "date_asc": "Por fecha (desde la más antigua)",
+ "date_desc": "Por fecha (desde la más reciente)",
+ "most_downloaded": "Los más descargados",
+ "top_rated": "Mejor valorados",
+ "name_desc": "Por nombre (de la Z a la A)"
+ }
+ },
+ "card": {
+ "button": {
+ "being_installed": "Instalando...",
+ "being_updated": "Actualizando...",
+ "installed": "Instalado",
+ "outdated": "Actualizar",
+ "install": "Instalar"
+ },
+ "by": "por",
+ "remove": "Quitar mod",
+ "remove_dialog_title": "Advertencia",
+ "remove_dialog_text": "Eliminar mod de la ThunderStore?",
+ "install_success": "{modName} Instalado",
+ "more_info": "Mas información",
+ "remove_success": "{modName} Ha sido eliminado"
+ }
+ },
+ "settings": {
+ "manage_install": "Administrar instalación",
+ "choose_folder": "Elegir carpeta de instalación",
+ "open_game_folder": "Abrir carpeta",
+ "nb_ts_mods_per_page": "Numero de mods por página de ThunderStore",
+ "nb_ts_mods_per_page_desc2": "Poner valor en 0 para desactivar la paginación.",
+ "nb_ts_mods_reset": "Reestablecer por defecto",
+ "language": "Idioma",
+ "language_select": "Seleccionar idioma favorito",
+ "about": "Acerca de:",
+ "flightcore_version": "Versión de FlightCore:",
+ "testing": "Probando:",
+ "enable_test_channels": "Activar liberación de canales",
+ "dev_mode_enabled_title": "¡Cuidado!",
+ "dev_mode_enabled_text": "Modo de desarrollador activado.",
+ "show_deprecated_mods_desc1": "Esto permite ver mods obsoletos de la colección online de ThunderStore.",
+ "show_deprecated_mods_desc2": "Cuidado, estos mods suelen estar obsoletos por una buena razón.",
+ "profile": {
+ "active": "Perfil activo",
+ "edit": "Editar perfiles",
+ "dialog": {
+ "title": "Perfiles"
+ }
+ },
+ "repair": {
+ "title": "Reparar",
+ "window": {
+ "title": "Ventana de reparación de FlightCore",
+ "disable_all_but_core": "Desactivar todos los mods excepto los principales",
+ "disable_all_but_core_success": "Desactivados todos los mods excepto el núcleo",
+ "disable_modsettings": "Desactivar ModSettings",
+ "disable_modsettings_success": "ModSettings desactivado",
+ "force_reinstall_ns": "Forzar reinstalación de Northstar",
+ "force_delete_temp_dl": "Forzar la eliminación de la carpeta temporal de descargas",
+ "delete_persistent_store": "Borrar el almacén persistente de FlightCore",
+ "reinstall_title": "Forzar la reinstalación de Northstar",
+ "reinstall_text": "Espere, por favor",
+ "reinstall_success": "Northstar reinstalado con éxito",
+ "warning": "Esta ventana tiene varias funciones para reparar problemas comunes con Northstar y FlightCore.",
+ "kill_northstar_process": "Finalizar proceso de Northstar/Titanfall 2"
+ },
+ "open_window": "Abrir la ventana de reparación"
+ },
+ "nb_ts_mods_per_page_desc1": "Esto puede tener impactos en fluidez al buscar mods en la ThunderStore.",
+ "show_deprecated_mods": "Mostrar mods the ThunderStore obsoletos"
+ },
+ "notification": {
+ "game_folder": {
+ "new": {
+ "title": "Nueva carpeta de juego",
+ "text": "La carpeta de juego fue actualizada exitosamente."
+ },
+ "wrong": {
+ "title": "Carpeta equivocada",
+ "text": "La carpeta seleccionada no es una carpeta de Titanfall2 válida."
+ },
+ "not_found": {
+ "title": "Titanfall 2 no encontrado!",
+ "text": "Por favor seleccione manualmente el lugar de instalación"
+ }
+ },
+ "profile": {
+ "invalid": {
+ "title": "Perfil inválido",
+ "text": "El perfil de cambio anterior ya no es válido."
+ }
+ },
+ "flightcore_outdated": {
+ "title": "FlightCore desactualizado!",
+ "text": "Por favor actualize FlightCore.\nEsta versión esta desactualizada {oldVersion}\nLa versión mas nueva es {newVersion}!"
+ }
+ },
+ "channels": {
+ "release": {
+ "switch": {
+ "text": "El canal seleccionado se cambió a \"{canal}\"."
+ }
+ },
+ "names": {
+ "Northstar": "Northstar",
+ "NorthstarReleaseCandidate": "Candidato de nueva versión de Northstar"
+ }
+ }
+}
diff --git a/src-vue/src/i18n/lang/fr.json b/src-vue/src/i18n/lang/fr.json
index 05c5ef3d..dbb34e80 100644
--- a/src-vue/src/i18n/lang/fr.json
+++ b/src-vue/src/i18n/lang/fr.json
@@ -74,7 +74,7 @@
"by": "par",
"more_info": "Plus d'informations",
"remove": "Supprimer le mod",
- "remove_dialog_title": "Attention !",
+ "remove_dialog_title": "Attention",
"remove_dialog_text": "Voulez-vous vraiment supprimer ce mod Thunderstore ?",
"remove_success": "{modName} supprimé",
"install_success": "{modName} installé"
@@ -109,7 +109,20 @@
"delete_persistent_store": "Supprimer l'espace de stockage local de FlightCore",
"reinstall_title": "Forcer la réinstallation de Northstar",
"reinstall_text": "Veuillez patienter",
- "reinstall_success": "Northstar réinstallé avec succès"
+ "reinstall_success": "Northstar réinstallé avec succès",
+ "disable_modsettings": "Désactiver le mod ModSettings",
+ "disable_modsettings_success": "Mod ModSettings désactivé",
+ "kill_northstar_process": "Arrêter le processus en cous de Northstar/Titanfall2"
+ }
+ },
+ "show_deprecated_mods": "Montrer les mods Thunderstore dépréciés",
+ "show_deprecated_mods_desc1": "Ce paramètre vous permet d'afficher les mods Thunderstore dépréciés dans la collection de mods.",
+ "show_deprecated_mods_desc2": "Attention, les mods dépréciés le sont généralement pour une bonne raison.",
+ "profile": {
+ "active": "Profile actif",
+ "edit": "Éditer les profiles",
+ "dialog": {
+ "title": "Profiles"
}
}
},
@@ -130,7 +143,13 @@
},
"flightcore_outdated": {
"title": "Mise à jour disponible !",
- "text": "Veuillez mettre à jour FlightCore.\nVersion actuelle : {oldVersion}.\nNouvelle version : {newVersion}."
+ "text": "Veuillez mettre à jour FlightCore.\nVersion actuelle : {oldVersion}.\nNouvelle version : {newVersion} !"
+ },
+ "profile": {
+ "invalid": {
+ "text": "Le profile sur lequel vous essayez de basculer n'est plus valide.",
+ "title": "Profile invalide"
+ }
}
},
"channels": {
diff --git a/src-vue/src/i18n/lang/pl.json b/src-vue/src/i18n/lang/pl.json
index f13d9ae3..c11c7f06 100644
--- a/src-vue/src/i18n/lang/pl.json
+++ b/src-vue/src/i18n/lang/pl.json
@@ -109,14 +109,22 @@
"title": "Okno naprawy FlightCore",
"warning": "To okno zawiera różne funkcje do naprawy typowych problemów z Northstar i FlightCore.",
"disable_modsettings": "Wyłącz moda ModSettings",
- "disable_modsettings_success": "Wyłączono moda ModSettings"
+ "disable_modsettings_success": "Wyłączono moda ModSettings",
+ "kill_northstar_process": "Zamknij uruchomiony proces Northstar/Titanfall2"
}
},
"nb_ts_mods_per_page_desc1": "Ma to wpływ na wydajność wyświetlania podczas przeglądania modów Thunderstore.",
"open_game_folder": "Otwórz folder",
"show_deprecated_mods_desc2": "Ostrożnie, mody są zazwyczaj oznaczone jako przestarzałe nie bez powodu.",
"show_deprecated_mods": "Pokaż przestarzałe mody Thunderstore",
- "show_deprecated_mods_desc1": "Pozwala to zobaczyć przestarzałe mody w kolekcji modów online."
+ "show_deprecated_mods_desc1": "Pozwala to zobaczyć przestarzałe mody w kolekcji modów online.",
+ "profile": {
+ "active": "Aktywny profil",
+ "dialog": {
+ "title": "Profile"
+ },
+ "edit": "Edytuj profile"
+ }
},
"notification": {
"game_folder": {
@@ -136,6 +144,12 @@
"flightcore_outdated": {
"title": "FlightCore nieaktualny!",
"text": "Proszę zaktualizować FlightCore.\nUruchomiono przestarzałą wersję {oldVersion}.\nNajnowsza to {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "title": "Nieprawidłowy profil",
+ "text": "Profil, na który próbowano się przełączyć, nie jest już prawidłowy."
+ }
}
},
"channels": {
diff --git a/src-vue/src/i18n/lang/ru.json b/src-vue/src/i18n/lang/ru.json
index c17cb388..7fadd0a7 100644
--- a/src-vue/src/i18n/lang/ru.json
+++ b/src-vue/src/i18n/lang/ru.json
@@ -102,7 +102,10 @@
"disable_all_but_core": "Выключить все моды, кроме главных",
"warning": "Это окно содержит различные функции для устранения часто возникающих проблем с Northstar и FlightCore.",
"force_delete_temp_dl": "Принудительно удалить папку с временными загрузками",
- "reinstall_success": "Нордстар успешно переустановлен"
+ "reinstall_success": "Нордстар успешно переустановлен",
+ "disable_modsettings": "Выключить мод ModSettings",
+ "disable_modsettings_success": "Выключен мод ModSettings",
+ "kill_northstar_process": "Закрыть запущенный Northstar/Titanfall 2"
},
"title": "Починка"
},
@@ -111,7 +114,17 @@
"nb_ts_mods_per_page": "Количество модов Thunderstore на каждую страницу",
"nb_ts_mods_per_page_desc2": "Установите это значение на 0, чтобы отключить страницы.",
"flightcore_version": "Версия FlightCore:",
- "dev_mode_enabled_text": "Включен режим разработчика."
+ "dev_mode_enabled_text": "Включен режим разработчика.",
+ "show_deprecated_mods": "Показать устаревшие моды Thunderstore",
+ "show_deprecated_mods_desc1": "Это позволяет вам видеть устаревшие моды в меню онлайн модов.",
+ "show_deprecated_mods_desc2": "Внимание, такие моды обычно устаревшие по хорошей причине.",
+ "profile": {
+ "active": "Активный Профиль",
+ "edit": "Редактировать Профили",
+ "dialog": {
+ "title": "Профили"
+ }
+ }
},
"notification": {
"game_folder": {
@@ -131,6 +144,12 @@
"flightcore_outdated": {
"title": "FlightCore устарел!",
"text": "Пожалуйста, обновите FlightCore\nСейчас запущена старая версия - {oldVersion}.\nНовейшая версия - {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "title": "Некорректный Профиль",
+ "text": "Профиль, на который вы пытаетесь переключиться, больше не является корректным."
+ }
}
},
"channels": {
diff --git a/src-vue/src/i18n/lang/vi.json b/src-vue/src/i18n/lang/vi.json
deleted file mode 100644
index 0967ef42..00000000
--- a/src-vue/src/i18n/lang/vi.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/src-vue/src/i18n/lang/zh_Hans.json b/src-vue/src/i18n/lang/zh_Hans.json
index 6447a6cf..57221973 100644
--- a/src-vue/src/i18n/lang/zh_Hans.json
+++ b/src-vue/src/i18n/lang/zh_Hans.json
@@ -113,9 +113,17 @@
"reinstall_text": "请耐心等待",
"reinstall_success": "成功重装Northstar",
"force_reinstall_ns": "强制重装Northstar",
- "reinstall_title": "正在强制重装Northstar"
+ "reinstall_title": "正在强制重装Northstar",
+ "kill_northstar_process": "终止正在运行的 Northstar/Titanfall2 进程"
},
"open_window": "打开修复工具"
+ },
+ "profile": {
+ "active": "当前用户配置",
+ "edit": "编辑用户配置",
+ "dialog": {
+ "title": "用户配置"
+ }
}
},
"notification": {
@@ -136,6 +144,12 @@
"flightcore_outdated": {
"title": "FlightCore需要更新!",
"text": "请更新FlightCore.\n正在运行旧版本 {oldVersion}.\n最新版本为 {newVersion}!"
+ },
+ "profile": {
+ "invalid": {
+ "title": "无效用户配置",
+ "text": "您尝试切换到的用户配置已失效。"
+ }
}
},
"channels": {
diff --git a/src-vue/src/main.ts b/src-vue/src/main.ts
index b595f21c..73219c9d 100644
--- a/src-vue/src/main.ts
+++ b/src-vue/src/main.ts
@@ -13,7 +13,9 @@ import RepairView from "./views/RepairView.vue";
import {createRouter, createWebHashHistory} from "vue-router";
import en from "./i18n/lang/en.json";
import fr from "./i18n/lang/fr.json";
+import da from "./i18n/lang/da.json";
import de from "./i18n/lang/de.json";
+import es from "./i18n/lang/es.json";
import pl from "./i18n/lang/pl.json";
import ru from "./i18n/lang/ru.json";
import it from "./i18n/lang/it.json";
@@ -27,7 +29,7 @@ export const i18n = createI18n({
locale: 'en',
fallbackLocale: 'en',
messages: {
- en, fr, de, pl, ru, it, zh_Hans
+ en, fr, da, de, es, pl, ru, it, zh_Hans
}
});
app.use(i18n);
diff --git a/src-vue/src/plugins/modules/pull_requests.ts b/src-vue/src/plugins/modules/pull_requests.ts
index 57d5fa07..4caec0b0 100644
--- a/src-vue/src/plugins/modules/pull_requests.ts
+++ b/src-vue/src/plugins/modules/pull_requests.ts
@@ -54,7 +54,7 @@ export const pullRequestModule = {
// Send notification telling the user to wait for the process to finish
const notification = showNotification(`Installing launcher PR ${pull_request.number}`, 'Please wait', 'info', 0);
- await invoke("apply_launcher_pr", { pullRequest: pull_request, gameInstallPath: store.state.game_path })
+ await invoke("apply_launcher_pr", { pullRequest: pull_request, gameInstall: store.state.game_install })
.then((message) => {
console.log(message);
// Show user notification if mod install completed.
@@ -72,7 +72,7 @@ export const pullRequestModule = {
// Send notification telling the user to wait for the process to finish
const notification = showNotification(`Installing mods PR ${pull_request.number}`, 'Please wait', 'info', 0);
- await invoke("apply_mods_pr", { pullRequest: pull_request, gameInstallPath: store.state.game_path })
+ await invoke("apply_mods_pr", { pullRequest: pull_request, gameInstall: store.state.game_install })
.then((message) => {
// Show user notification if mod install completed.
showNotification(
diff --git a/src-vue/src/plugins/store.ts b/src-vue/src/plugins/store.ts
index e7dc0763..0a3b3e21 100644
--- a/src-vue/src/plugins/store.ts
+++ b/src-vue/src/plugins/store.ts
@@ -1,7 +1,7 @@
import { createStore } from 'vuex';
import { listen, Event as TauriEvent } from "@tauri-apps/api/event";
import { Tabs } from "../utils/Tabs";
-import { InstallType } from "../utils/InstallType";
+import { InstallType } from "../../../src-tauri/bindings/InstallType";
import { invoke } from "@tauri-apps/api";
import { GameInstall } from "../utils/GameInstall";
import { ReleaseCanal } from "../utils/ReleaseCanal";
@@ -25,8 +25,7 @@ const persistentStore = new Store('flight-core-settings.json');
export interface FlightCoreStore {
developer_mode: boolean,
- game_path: string,
- install_type: InstallType,
+ game_install: GameInstall,
flightcore_version: string,
@@ -39,6 +38,7 @@ export interface FlightCoreStore {
thunderstoreMods: ThunderstoreMod[],
thunderstoreModsCategories: string[],
installed_mods: NorthstarMod[],
+ available_profiles: string[],
northstar_is_running: boolean,
origin_is_running: boolean,
@@ -61,8 +61,9 @@ export const store = createStore<FlightCoreStore>({
state(): FlightCoreStore {
return {
developer_mode: false,
- game_path: undefined as unknown as string,
- install_type: undefined as unknown as InstallType,
+ game_install: {game_path: undefined, profile: undefined, install_type: "UNKNOWN"} as unknown as GameInstall,
+
+ available_profiles: [],
flightcore_version: "",
@@ -133,7 +134,7 @@ export const store = createStore<FlightCoreStore>({
// Verify if valid Titanfall2 install location
let is_valid_titanfall2_install = await invoke("verify_install_location", { gamePath: selected }) as boolean;
if (is_valid_titanfall2_install) {
- state.game_path = selected;
+ state.game_install.game_path = selected;
showNotification(
i18n.global.tc('notification.game_folder.new.title'),
i18n.global.tc('notification.game_folder.new.text')
@@ -144,19 +145,21 @@ export const store = createStore<FlightCoreStore>({
catch {
console.warn("Nothing to close");
}
- state.install_type = InstallType.UNKNOWN;
-
- let game_install = {
- game_path: selected,
- install_type: InstallType.UNKNOWN
- } as GameInstall;
+ state.game_install.install_type = "UNKNOWN";
// Save change in persistent store
- await persistentStore.set('game-install', { value: game_install });
+ await persistentStore.set('game-install', { value: state.game_install });
await persistentStore.save(); // explicit save to disk
+ // We can no longer be sure if our last profile is valid, lets reset to be sure
+ state.game_install.profile = "R2Northstar";
+
// Check for Northstar install
store.commit('checkNorthstarUpdates');
+
+ // Since we are in a new game directory, lets see if there are any profiles
+ store.commit('fetchProfiles');
+
}
else {
// Not valid Titanfall2 install
@@ -168,13 +171,8 @@ export const store = createStore<FlightCoreStore>({
}
},
async launchGame(state: any, no_checks = false) {
- let game_install = {
- game_path: state.game_path,
- install_type: state.install_type
- } as GameInstall;
-
if (no_checks) {
- await invoke("launch_northstar", { gameInstall: game_install, bypassChecks: no_checks })
+ await invoke("launch_northstar", { gameInstall: state.game_install, bypassChecks: no_checks })
.then((message) => {
console.log("Launched with bypassed checks");
console.log(message);
@@ -191,7 +189,7 @@ export const store = createStore<FlightCoreStore>({
switch (state.northstar_state) {
// Install northstar if it wasn't detected.
case NorthstarState.INSTALL:
- let install_northstar_result = invoke("install_northstar_caller", { gamePath: state.game_path, northstarPackageName: state.northstar_release_canal });
+ let install_northstar_result = invoke("install_northstar_caller", { gameInstall: state.game_install, northstarPackageName: state.northstar_release_canal });
state.northstar_state = NorthstarState.INSTALLING;
await install_northstar_result.then((message) => {
@@ -208,7 +206,7 @@ export const store = createStore<FlightCoreStore>({
// Update northstar if it is outdated.
case NorthstarState.MUST_UPDATE:
// Updating is the same as installing, simply overwrites the existing files
- let reinstall_northstar_result = invoke("install_northstar_caller", { gamePath: state.game_path, northstarPackageName: state.northstar_release_canal });
+ let reinstall_northstar_result = invoke("install_northstar_caller", { gameInstall: state.game_install, northstarPackageName: state.northstar_release_canal });
state.northstar_state = NorthstarState.UPDATING;
await reinstall_northstar_result.then((message) => {
@@ -224,7 +222,7 @@ export const store = createStore<FlightCoreStore>({
// Game is ready to play.
case NorthstarState.READY_TO_PLAY:
- await invoke("launch_northstar", { gameInstall: game_install })
+ await invoke("launch_northstar", { gameInstall: state.game_install })
.then((message) => {
console.log(message);
// NorthstarState.RUNNING
@@ -241,12 +239,7 @@ export const store = createStore<FlightCoreStore>({
}
},
async launchGameSteam(state: any, no_checks = false) {
- let game_install = {
- game_path: state.game_path,
- install_type: state.install_type
- } as GameInstall;
-
- await invoke("launch_northstar_steam", { gameInstall: game_install, bypassChecks: no_checks })
+ await invoke("launch_northstar_steam", { gameInstall: state.game_install, bypassChecks: no_checks })
.then((message) => {
showNotification('Success');
})
@@ -295,19 +288,17 @@ export const store = createStore<FlightCoreStore>({
.sort();
},
async loadInstalledMods(state: FlightCoreStore) {
- let game_install = {
- game_path: state.game_path,
- install_type: state.install_type
- } as GameInstall;
-
// If there's no game path, prevent looking for installed mods.
- if (state.game_path === undefined) {
- console.warn('Cannot load installed mods since so game path is selected.');
+ if (state.game_install.game_path === undefined) {
+ console.warn('Cannot load installed mods since no game path is selected.');
return;
}
+ // Clear installed mod list first so we don't end up with leftovers
+ state.installed_mods = [];
+
// Call back-end for installed mods
- await invoke("get_installed_mods_and_properties", { gameInstall: game_install })
+ await invoke("get_installed_mods_and_properties", { gameInstall: state.game_install })
.then((message) => {
state.installed_mods = (message as NorthstarMod[]);
})
@@ -334,6 +325,22 @@ export const store = createStore<FlightCoreStore>({
i18n.global.tc(`channels.names.${state.northstar_release_canal}`),
i18n.global.tc('channels.release.switch.text', {canal: state.northstar_release_canal}),
);
+ },
+ async fetchProfiles(state: FlightCoreStore) {
+ // To fetch profiles we need a valid game path
+ if (!state.game_install.game_path) {
+ return;
+ }
+
+
+ await invoke("fetch_profiles", { gameInstall: state.game_install })
+ .then((message) => {
+ state.available_profiles = message as string[];
+ })
+ .catch((error) => {
+ console.error(error);
+ showErrorNotification(error);
+ });
}
}
});
@@ -392,6 +399,12 @@ async function _initializeApp(state: any) {
&& persistent_game_install.value.game_path !== undefined
&& persistent_game_install.value.install_type !== undefined
) { // For some reason, the plugin-store doesn't throw an eror but simply returns `null` when key not found
+
+ // Add profile to existing storage
+ if (persistent_game_install.value.profile === undefined) {
+ persistent_game_install.value.profile = "R2Northstar"
+ }
+
let game_install = persistent_game_install.value as GameInstall;
// check if valid path
let is_valid_titanfall2_install = await invoke("verify_install_location", { gamePath: game_install.game_path }) as boolean;
@@ -425,13 +438,14 @@ async function _initializeApp(state: any) {
await persistentStore.save(); // explicit save to disk
// Update UI store
- state.game_path = typedResult.game_path;
- state.install_type = typedResult.install_type;
+ state.game_install = typedResult;
// Check installed Northstar version if found
await _get_northstar_version_number(state);
}
+ store.commit('fetchProfiles');
+
await invoke<[number, number]>("get_server_player_count")
.then((message) => {
state.player_count = message[0];
@@ -482,13 +496,15 @@ function _initializeListeners(state: any) {
* state, for it to be displayed in UI.
*/
async function _get_northstar_version_number(state: any) {
- await invoke("get_northstar_version_number", { gamePath: state.game_path })
+ state.installed_northstar_version = "";
+
+ await invoke("get_northstar_version_number", { gameInstall: state.game_install })
.then((message) => {
let northstar_version_number: string = message as string;
state.installed_northstar_version = northstar_version_number;
state.northstar_state = NorthstarState.READY_TO_PLAY;
- invoke("check_is_northstar_outdated", { gamePath: state.game_path, northstarPackageName: state.northstar_release_canal })
+ invoke("check_is_northstar_outdated", { gameInstall: state.game_install, northstarPackageName: state.northstar_release_canal })
.then((message) => {
if (message) {
state.northstar_state = NorthstarState.MUST_UPDATE;
diff --git a/src-vue/src/utils/GameInstall.ts b/src-vue/src/utils/GameInstall.ts
index 07358f6c..162d2860 100644
--- a/src-vue/src/utils/GameInstall.ts
+++ b/src-vue/src/utils/GameInstall.ts
@@ -1,4 +1,5 @@
export interface GameInstall {
game_path: string;
+ profile: string,
install_type: string;
}
diff --git a/src-vue/src/utils/InstallType.ts b/src-vue/src/utils/InstallType.ts
deleted file mode 100644
index 797f4077..00000000
--- a/src-vue/src/utils/InstallType.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-// Enumerates the way Titanfall2 could be installed (Steam/Origin/EA-Desktop)
-// Needs to be synced with `pub enum InstallType` in /src-tauri/src/lib.rs
-export enum InstallType {
- STEAM = 'STEAM',
- ORIGIN = 'ORIGIN',
- EAPLAY = 'EAPLAY',
- UNKNOWN = 'UNKNOWN', // used when the install location was manually selected
-}
diff --git a/src-vue/src/views/ChangelogView.vue b/src-vue/src/views/ChangelogView.vue
index 7ab50903..f75d869c 100644
--- a/src-vue/src/views/ChangelogView.vue
+++ b/src-vue/src/views/ChangelogView.vue
@@ -63,6 +63,10 @@ export default defineComponent({
padding: 20px 30px;
}
+.el-table .el-scrollbar__view {
+ padding: 0;
+}
+
.fc__changelog__container {
padding: 20px 30px;
}
diff --git a/src-vue/src/views/DeveloperView.vue b/src-vue/src/views/DeveloperView.vue
index 28ab3892..c87e4236 100644
--- a/src-vue/src/views/DeveloperView.vue
+++ b/src-vue/src/views/DeveloperView.vue
@@ -119,6 +119,10 @@
Compare Tags
</el-button>
+ <el-button type="primary" @click="copyReleaseNotesToClipboard">
+ Copy to clipboard
+ </el-button>
+
<el-input
v-model="release_notes_text"
type="textarea"
@@ -132,7 +136,6 @@
<script lang="ts">
import { defineComponent } from "vue";
import { invoke } from "@tauri-apps/api";
-import { GameInstall } from "../utils/GameInstall";
import { TagWrapper } from "../../../src-tauri/bindings/TagWrapper";
import { NorthstarThunderstoreReleaseWrapper } from "../../../src-tauri/bindings/NorthstarThunderstoreReleaseWrapper";
import PullRequestsSelector from "../components/PullRequestsSelector.vue";
@@ -209,11 +212,7 @@ export default defineComponent({
this.$store.commit('launchGameSteam', true);
},
async getInstalledMods() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
- await invoke("get_installed_mods_and_properties", { gameInstall: game_install }).then((message) => {
+ await invoke("get_installed_mods_and_properties", { gameInstall: this.$store.state.game_install }).then((message) => {
// Simply console logging for now
// In the future we should display the installed mods somewhere
console.log(message);
@@ -226,12 +225,8 @@ export default defineComponent({
});
},
async installMod() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
let mod_to_install = this.mod_to_install_field_string;
- await invoke<string>("install_mod_caller", { gameInstall: game_install, thunderstoreModString: mod_to_install }).then((message) => {
+ await invoke<string>("install_mod_caller", { gameInstall: this.$store.state.game_install, thunderstoreModString: mod_to_install }).then((message) => {
// Show user notification if mod install completed.
showNotification(`Installed ${mod_to_install}`, message);
})
@@ -257,6 +252,7 @@ export default defineComponent({
.then((message) => {
this.release_notes_text = message;
showNotification("Done", "Generated release notes");
+ this.copyReleaseNotesToClipboard();
})
.catch((error) => {
showErrorNotification(error);
@@ -266,7 +262,7 @@ export default defineComponent({
const notification = showNotification(`Installing git main`, 'Please wait', 'info', 0);
- await invoke<string>("install_git_main", { gameInstallPath: this.$store.state.game_path })
+ await invoke<string>("install_git_main", { gameInstallPath: this.$store.state.game_install.game_path })
.then((message) => {
this.release_notes_text = message;
showNotification("Done", `Installed launcher build from ${message}`);
@@ -290,11 +286,6 @@ export default defineComponent({
});
},
async installNorthstarVersion() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
-
// Send notification telling the user to wait for the process to finish
const notification = showNotification(
`Installing Northstar version v${this.selected_ns_version.value.version}`,
@@ -303,7 +294,7 @@ export default defineComponent({
0
);
- let install_northstar_result = invoke("install_northstar_caller", { gamePath: game_install.game_path, northstarPackageName: this.selected_ns_version.value.package, versionNumber: this.selected_ns_version.value.version });
+ let install_northstar_result = invoke("install_northstar_caller", { gameInstall: this.$store.state.game_install, northstarPackageName: this.selected_ns_version.value.package, versionNumber: this.selected_ns_version.value.version });
await install_northstar_result
.then((message) => {
@@ -336,6 +327,15 @@ export default defineComponent({
.then((message) => { showNotification(`NSProton Version`, message as string); })
.catch((error) => { showNotification(`Error`, error, "error"); })
},
+ async copyReleaseNotesToClipboard() {
+ navigator.clipboard.writeText(this.release_notes_text)
+ .then(() => {
+ showNotification("Copied to clipboard");
+ })
+ .catch(() => {
+ showErrorNotification("Failed copying to clipboard");
+ });
+ },
}
});
</script>
diff --git a/src-vue/src/views/RepairView.vue b/src-vue/src/views/RepairView.vue
index e284e824..ce7e154d 100644
--- a/src-vue/src/views/RepairView.vue
+++ b/src-vue/src/views/RepairView.vue
@@ -17,6 +17,10 @@
{{ $t('settings.repair.window.force_reinstall_ns') }}
</el-button>
+ <el-button type="primary" @click="killNorthstar">
+ {{ $t('settings.repair.window.kill_northstar_process') }}
+ </el-button>
+
<el-button type="primary" @click="disableModsettingsMod">
{{ $t('settings.repair.window.disable_modsettings') }}
</el-button>
@@ -54,11 +58,7 @@ export default defineComponent({
},
methods: {
async disableAllModsButCore() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
- await invoke("disable_all_but_core", { gameInstall: game_install })
+ await invoke("disable_all_but_core", { gameInstall: this.$store.state.game_install })
.then((message) => {
showNotification(this.$t('generic.success'), this.$t('settings.repair.window.disable_all_but_core_success'));
})
@@ -67,11 +67,6 @@ export default defineComponent({
});
},
async forceInstallNorthstar() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
-
// Send notification telling the user to wait for the process to finish
const notification = showNotification(
this.$t('settings.repair.window.reinstall_title'),
@@ -80,7 +75,7 @@ export default defineComponent({
0
);
- let install_northstar_result = invoke("install_northstar_caller", { gamePath: game_install.game_path, northstarPackageName: ReleaseCanal.RELEASE });
+ let install_northstar_result = invoke("install_northstar_caller", { gameInstall: this.$store.state.game_install, northstarPackageName: ReleaseCanal.RELEASE });
appWindow.listen<InstallProgress>(
'northstar-install-download-progress',
@@ -107,11 +102,7 @@ export default defineComponent({
});
},
async cleanUpDownloadFolder() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
- await invoke("clean_up_download_folder_caller", { gameInstall: game_install, force: true }).then((message) => {
+ await invoke("clean_up_download_folder_caller", { gameInstall: this.$store.state.game_install, force: true }).then((message) => {
// Show user notification if task completed.
showNotification(this.$t('generic.done'), this.$t('generic.done'));
})
@@ -126,12 +117,7 @@ export default defineComponent({
await persistentStore.save();
},
async disableModsettingsMod() {
- let game_install = {
- game_path: this.$store.state.game_path,
- install_type: this.$store.state.install_type
- } as GameInstall;
-
- await invoke("set_mod_enabled_status", { gameInstall: game_install, modName: "Mod Settings", isEnabled: false })
+ await invoke("set_mod_enabled_status", { gameInstall: this.$store.state.game_install, modName: "Mod Settings", isEnabled: false })
.then((message) => {
showNotification(this.$t('generic.success'), this.$t('settings.repair.window.disable_modsettings_success'));
})
@@ -139,6 +125,16 @@ export default defineComponent({
showErrorNotification(error);
});
},
+ async killNorthstar() {
+ await invoke("kill_northstar")
+ .then((message) => {
+ // Just a visual indicator that it worked
+ showNotification('Success');
+ })
+ .catch((error) => {
+ showErrorNotification(error);
+ });
+ },
},
watch: {
// Lang value is propagated to repair view after it's mounted, so we need to watch
diff --git a/src-vue/src/views/SettingsView.vue b/src-vue/src/views/SettingsView.vue
index c4e94c80..88a5d588 100644
--- a/src-vue/src/views/SettingsView.vue
+++ b/src-vue/src/views/SettingsView.vue
@@ -1,4 +1,14 @@
<template>
+ <el-dialog
+ v-model="showProfileDialog"
+ :title="$t('settings.profile.dialog.title')"
+ width="75%"
+ >
+ <el-table :data="availableProfiles" >
+ <el-table-column prop="name" label="Name" />
+ </el-table>
+ </el-dialog>
+
<div class="fc-container">
<el-scrollbar>
<div class="fc_settings__container">
@@ -6,7 +16,7 @@
<div class="fc_parameter__panel">
<h3>{{ $t('settings.manage_install') }}</h3>
<el-input
- v-model="$store.state.game_path"
+ v-model="$store.state.game_install.game_path"
:placeholder="$t('settings.choose_folder')"
@click="updateGamePath"
>
@@ -21,6 +31,22 @@
</el-input>
</div>
+ <!-- Northstar Active Profile -->
+ <div class="fc_parameter__panel" v-if="$store.state.developer_mode">
+ <h3>{{ $t('settings.profile.active') }}</h3>
+ <el-dropdown trigger="click" :disabled="!availableProfiles.length">
+ <el-button>
+ {{ activeProfile }} <el-icon class="el-icon--right" v-if="availableProfiles.length"><arrow-down /></el-icon>
+ </el-button>
+ <template #dropdown>
+ <el-dropdown-menu>
+ <el-dropdown-item v-for="profile in $store.state.available_profiles" @click="switchProfile(profile)">{{ profile }}</el-dropdown-item>
+ <el-dropdown-item divided @click="showProfileDialog = true">{{ $t('settings.profile.edit') }}</el-dropdown-item>
+ </el-dropdown-menu>
+ </template>
+ </el-dropdown>
+ </div>
+
<!-- Thunderstore mods per page configuration -->
<div class="fc_parameter__panel">
<h3>{{ $t('settings.nb_ts_mods_per_page') }}</h3>
@@ -96,6 +122,7 @@ import { showErrorNotification, showNotification } from "../utils/ui";
import LanguageSelector from "../components/LanguageSelector.vue";
const persistentStore = new Store('flight-core-settings.json');
import { open } from '@tauri-apps/api/shell';
+import { i18n } from '../main';
export default defineComponent({
name: "SettingsView",
@@ -104,7 +131,8 @@ export default defineComponent({
},
data() {
return {
- developerModeClicks: 0
+ developerModeClicks: 0,
+ showProfileDialog: false,
}
},
computed: {
@@ -144,6 +172,20 @@ export default defineComponent({
persistentStore.set('thunderstore-mods-per-page', { value });
await persistentStore.save(); // explicit save to disk
}
+ },
+ activeProfile(): String {
+ return this.$store.state.game_install.profile || "None";
+ },
+ availableProfiles(): Object[] {
+ let profiles = this.$store.state.available_profiles
+
+ // convert string array to object array so we can fill a table
+ let data = profiles.reduce(
+ (a: Object[], v: string) => [...a, {"name": v}],
+ []
+ );
+
+ return data;
}
},
methods: {
@@ -170,8 +212,50 @@ export default defineComponent({
});
},
async openGameInstallFolder() {
+ // Verify the game path is actually set
+ if (!this.$store.state.game_install.game_path) {
+ showErrorNotification(
+ i18n.global.tc('notification.game_folder.not_found.text'),
+ i18n.global.tc('notification.game_folder.not_found.title')
+ );
+ return;
+ }
+
// Opens the folder in default file explorer application
- await open(`${this.$store.state.game_path}`);
+ await open(`${this.$store.state.game_install.game_path}`);
+ },
+ async switchProfile(value: string) {
+ let store = this.$store;
+ let state = store.state;
+
+ await invoke("validate_profile", { gameInstall: state.game_install, profile: value })
+ .then(async (message) => {
+ if (!message)
+ {
+ // Profile is no longer valid, inform the user...
+ showErrorNotification(
+ i18n.global.tc('notification.profile.invalid.text'),
+ i18n.global.tc('notification.profile.invalid.title')
+ );
+
+ // ...and refresh
+ store.commit('fetchProfiles');
+ return;
+ }
+
+ state.game_install.profile = value;
+
+ // Check for Northstar updates
+ store.commit('checkNorthstarUpdates');
+
+ // Save change in persistent store
+ await persistentStore.set('game-install', { value: state.game_install });
+ await persistentStore.save(); // explicit save to disk
+ })
+ .catch((error) => {
+ console.error(error);
+ showErrorNotification(error);
+ });
}
},
mounted() {