perf: remove deno and ffmpeg instruction from onboard; use tauri-plugin-svelte store (#245)

This commit is contained in:
Huakun 2025-03-13 21:06:33 -04:00 committed by GitHub
parent b4afcaac6c
commit cd7301255b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 284 additions and 124 deletions

88
Cargo.lock generated
View File

@ -705,7 +705,7 @@ dependencies = [
"bitflags 2.6.0",
"cexpr",
"clang-sys",
"itertools",
"itertools 0.12.1",
"lazy_static",
"lazycell",
"log",
@ -1774,6 +1774,20 @@ version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04d2cd9c18b9f454ed67da600630b021a8a80bf33f8c95896ab33aaf1c26b728"
[[package]]
name = "dashmap"
version = "6.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf"
dependencies = [
"cfg-if",
"crossbeam-utils",
"hashbrown 0.14.5",
"lock_api",
"once_cell",
"parking_lot_core",
]
[[package]]
name = "data-url"
version = "0.3.1"
@ -3746,6 +3760,15 @@ dependencies = [
"either",
]
[[package]]
name = "itertools"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285"
dependencies = [
"either",
]
[[package]]
name = "itoa"
version = "0.4.8"
@ -3968,6 +3991,7 @@ dependencies = [
"tauri-plugin-single-instance",
"tauri-plugin-store",
"tauri-plugin-stronghold",
"tauri-plugin-svelte",
"tauri-plugin-system-info",
"tauri-plugin-updater",
"tauri-plugin-upload",
@ -5693,7 +5717,7 @@ checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
dependencies = [
"bytes",
"heck 0.5.0",
"itertools",
"itertools 0.12.1",
"log",
"multimap",
"once_cell",
@ -5713,7 +5737,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1"
dependencies = [
"anyhow",
"itertools",
"itertools 0.12.1",
"proc-macro2",
"quote",
"syn 2.0.87",
@ -5965,7 +5989,7 @@ dependencies = [
"built",
"cfg-if",
"interpolate_name",
"itertools",
"itertools 0.12.1",
"libc",
"libfuzzer-sys",
"log",
@ -7977,6 +8001,19 @@ dependencies = [
"zeroize",
]
[[package]]
name = "tauri-plugin-svelte"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dab0a4d739af1108c6572e6249113190135c66a45586d0f8f93b3ee532e6176f"
dependencies = [
"serde",
"tauri",
"tauri-plugin",
"tauri-store",
"tracing",
]
[[package]]
name = "tauri-plugin-system-info"
version = "2.0.9"
@ -8097,6 +8134,49 @@ dependencies = [
"wry",
]
[[package]]
name = "tauri-store"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb4e7c0776d9f8b54fd4788f4e471ce83b4c6cf62079799830a3735582a51fc4"
dependencies = [
"dashmap",
"futures",
"itertools 0.14.0",
"serde",
"serde_json",
"tauri",
"tauri-store-macros",
"tauri-store-utils",
"thiserror 2.0.3",
"tokio",
"tracing",
]
[[package]]
name = "tauri-store-macros"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fabed02238bc887f75887b315c6a14d9571ab463c1a188cc27ec2f7e917b06c3"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.87",
]
[[package]]
name = "tauri-store-utils"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b983a259b22d622ce74b957140efa161bd75c6bfd47b7bf621c98dd05b1a2474"
dependencies = [
"futures",
"tauri",
"thiserror 2.0.3",
"tokio",
"tracing",
]
[[package]]
name = "tauri-utils"
version = "2.1.1"

View File

@ -42,6 +42,7 @@
"sveltekit-superforms": "^2.23.1",
"tauri-plugin-clipboard-api": "^2.1.11",
"tauri-plugin-shellx-api": "^2.0.16",
"tauri-plugin-svelte": "1.2.1",
"tauri-plugin-user-input-api": "workspace:*",
"uuid": "^11.1.0"
},

View File

@ -71,3 +71,4 @@ tauri-plugin-cli = "2"
tauri-plugin-global-shortcut = "2.0.1"
tauri-plugin-single-instance = { version = "2", features = ["deep-link"] }
tauri-plugin-updater = "2.0.2"
tauri-plugin-svelte = "1.2.1"

View File

@ -0,0 +1,5 @@
{
"identifier": "svelte",
"windows": ["*"],
"permissions": ["svelte:default", "core:event:default"]
}

View File

@ -112,6 +112,7 @@ pub fn run() {
.plugin(tauri_plugin_deep_link::init())
.plugin(tauri_plugin_shell::init())
.plugin(tauri_plugin_os::init())
.plugin(tauri_plugin_svelte::init())
.plugin(tauri_plugin_process::init())
.plugin(tauri_plugin_autostart::init(
MacosLauncher::LaunchAgent,

View File

@ -20,6 +20,7 @@
"url": "/app",
"title": "Kunkun",
"width": 800,
"label": "main",
"visible": false,
"height": 600,
"decorations": true,

View File

@ -1,8 +1,8 @@
<script lang="ts">
import { setAppConfigContext } from "@/context"
import { setAppStateContext } from "@/context/appState"
import type { AppConfig, AppState } from "@kksh/types"
import type { Snippet } from "svelte"
import type { AppConfigState, AppState } from "@kksh/types"
import { type Snippet } from "svelte"
import type { Writable } from "svelte/store"
const {
@ -10,7 +10,7 @@
appState,
children
}: {
appConfig: Writable<AppConfig>
appConfig: Writable<AppConfigState>
appState: Writable<AppState>
children: Snippet<[]>
} = $props()

View File

@ -1,16 +1,16 @@
import { getExtensionsFolder } from "@/constants"
import { createTauriSyncStore, type WithSyncStore } from "@/utils/sync-store"
import type { SearchPath } from "@kksh/api/models"
import { updateTheme, type ThemeConfig } from "@kksh/svelte5"
import { PersistedAppConfig, type AppConfig } from "@kksh/types"
import { debug, error } from "@tauri-apps/plugin-log"
import { PersistedAppConfig, type AppConfigState } from "@kksh/types"
import { debug, error, info } from "@tauri-apps/plugin-log"
import * as os from "@tauri-apps/plugin-os"
import { load } from "@tauri-apps/plugin-store"
import { toast } from "svelte-sonner"
import { get, writable } from "svelte/store"
import { Store } from "tauri-plugin-svelte"
import * as v from "valibot"
import { setLanguageTag } from "../paraglide/runtime"
export const defaultAppConfig: AppConfig = {
export const defaultAppConfig: AppConfigState = {
isInitialized: false,
platform: "macos",
language: "en",
@ -36,7 +36,7 @@ export const appConfigLoaded = writable(false)
interface AppConfigAPI {
init: () => Promise<void>
get: () => AppConfig
get: () => AppConfigState
setTheme: (theme: ThemeConfig) => void
setDevExtensionPath: (devExtensionPath: string | null) => void
setTriggerHotkey: (triggerHotkey: string[]) => void
@ -46,72 +46,127 @@ interface AppConfigAPI {
removeAppSearchPath: (appSearchPath: SearchPath) => void
}
function createAppConfig(): WithSyncStore<AppConfig & { language: string }> & AppConfigAPI {
const store = createTauriSyncStore("app-config", defaultAppConfig)
async function init() {
debug("Initializing app config")
const persistStore = await load("kk-config.json", { autoSave: true })
let loadedConfig = await persistStore.get("config")
if (typeof loadedConfig === "object") {
loadedConfig = { ...defaultAppConfig, ...loadedConfig }
}
const parseRes = v.safeParse(PersistedAppConfig, loadedConfig)
if (parseRes.success) {
console.log("Parse Persisted App Config Success", parseRes.output)
const extensionsInstallDir = await getExtensionsFolder()
store.update((config) => ({
...config,
...parseRes.output,
isInitialized: true,
extensionsInstallDir,
platform: os.platform()
}))
} else {
error("Failed to parse app config, going to remove it and reinitialize")
console.error(v.flatten<typeof PersistedAppConfig>(parseRes.issues))
await persistStore.clear()
await persistStore.set("config", v.parse(PersistedAppConfig, defaultAppConfig))
}
appConfigLoaded.set(true)
store.subscribe(async (config) => {
console.log("Saving app config", config)
await persistStore.set("config", config)
updateTheme(config.theme)
class AppConfigStore extends Store<AppConfigState> implements AppConfigAPI {
constructor() {
super("app-config", defaultAppConfig, {
saveOnChange: true
})
this.start().catch((err) => {
error("Failed to start app config store", err)
toast.error("Failed to start app config store", { description: err.message })
})
}
async init() {
debug("Initializing app config")
const extensionsInstallDir = await getExtensionsFolder()
this.update((config) => ({
...config,
isInitialized: true,
platform: os.platform(),
extensionsInstallDir
}))
appConfigLoaded.set(true)
}
return {
...store,
get: () => get(store),
setTheme: (theme: ThemeConfig) => store.update((config) => ({ ...config, theme })),
setDevExtensionPath: (devExtensionPath: string | null) => {
console.log("setDevExtensionPath", devExtensionPath)
store.update((config) => ({ ...config, devExtensionPath }))
},
setTriggerHotkey: (triggerHotkey: string[]) => {
store.update((config) => ({ ...config, triggerHotkey }))
},
setOnBoarded: (onBoarded: boolean) => {
store.update((config) => ({ ...config, onBoarded }))
},
setLanguage: (language: string) => {
store.update((config) => ({ ...config, language }))
},
addAppSearchPath: (appSearchPath: SearchPath) => {
store.update((config) => ({
...config,
appSearchPaths: [...config.appSearchPaths, appSearchPath]
}))
},
removeAppSearchPath: (appSearchPath: SearchPath) => {
store.update((config) => ({
...config,
appSearchPaths: config.appSearchPaths.filter((path) => path.path !== appSearchPath.path)
}))
},
init
get() {
return get(this)
}
setTheme(theme: ThemeConfig) {
this.update((config) => ({ ...config, theme }))
}
setDevExtensionPath(devExtensionPath: string | null) {
info(`setDevExtensionPath ${devExtensionPath}`)
this.update((config) => ({ ...config, devExtensionPath }))
}
setTriggerHotkey(triggerHotkey: string[]) {
this.update((config) => ({ ...config, triggerHotkey }))
}
setOnBoarded(onBoarded: boolean) {
this.update((config) => ({ ...config, onBoarded }))
}
setLanguage(language: string) {
this.update((config) => ({ ...config, language }))
}
addAppSearchPath(appSearchPath: SearchPath) {
this.update((config) => ({
...config,
appSearchPaths: [...config.appSearchPaths, appSearchPath]
}))
}
removeAppSearchPath(appSearchPath: SearchPath) {
this.update((config) => ({
...config,
appSearchPaths: config.appSearchPaths.filter((path) => path.path !== appSearchPath.path)
}))
}
}
export const appConfig = createAppConfig()
// function createAppConfig(): WithSyncStore<AppConfigState & { language: string }> & AppConfigAPI {
// const store = createTauriSyncStore("app-config", defaultAppConfig)
// async function init() {
// debug("Initializing app config")
// const persistStore = await load("kk-config.json", { autoSave: true })
// let loadedConfig = await persistStore.get("config")
// if (typeof loadedConfig === "object") {
// loadedConfig = { ...defaultAppConfig, ...loadedConfig }
// }
// const parseRes = v.safeParse(PersistedAppConfig, loadedConfig)
// if (parseRes.success) {
// console.log("Parse Persisted App Config Success", parseRes.output)
// const extensionsInstallDir = await getExtensionsFolder()
// store.update((config) => ({
// ...config,
// ...parseRes.output,
// isInitialized: true,
// extensionsInstallDir,
// platform: os.platform()
// }))
// } else {
// error("Failed to parse app config, going to remove it and reinitialize")
// console.error(v.flatten<typeof PersistedAppConfig>(parseRes.issues))
// await persistStore.clear()
// await persistStore.set("config", v.parse(PersistedAppConfig, defaultAppConfig))
// }
// store.subscribe(async (config) => {
// console.log("Saving app config", config)
// await persistStore.set("config", config)
// updateTheme(config.theme)
// })
// }
// return {
// ...store,
// get: () => get(store),
// setTheme: (theme: ThemeConfig) => store.update((config) => ({ ...config, theme })),
// setDevExtensionPath: (devExtensionPath: string | null) => {
// console.log("setDevExtensionPath", devExtensionPath)
// store.update((config) => ({ ...config, devExtensionPath }))
// },
// setTriggerHotkey: (triggerHotkey: string[]) => {
// store.update((config) => ({ ...config, triggerHotkey }))
// },
// setOnBoarded: (onBoarded: boolean) => {
// store.update((config) => ({ ...config, onBoarded }))
// },
// setLanguage: (language: string) => {
// store.update((config) => ({ ...config, language }))
// },
// addAppSearchPath: (appSearchPath: SearchPath) => {
// store.update((config) => ({
// ...config,
// appSearchPaths: [...config.appSearchPaths, appSearchPath]
// }))
// },
// removeAppSearchPath: (appSearchPath: SearchPath) => {
// store.update((config) => ({
// ...config,
// appSearchPaths: config.appSearchPaths.filter((path) => path.path !== appSearchPath.path)
// }))
// },
// init
// }
// }
// export const appConfig = createAppConfig()
export const appConfig = new AppConfigStore()

View File

@ -77,6 +77,7 @@
// wait for appConfig store to be loaded, it's async and saved to disk when changed, so we use another store appConfigLoaded
// to keep track of the loading status
if (loaded) {
console.log("appConfig.get().onBoarded", appConfig.get().onBoarded)
if (!appConfig.get().onBoarded) {
setTimeout(() => {
goto(i18n.resolveRoute("/app/help/onboarding"))

View File

@ -8,7 +8,6 @@
import { goto } from "$app/navigation"
import { ArrowRightIcon } from "lucide-svelte"
import { onMount } from "svelte"
import { fade } from "svelte/transition"
import { whereIsCommand } from "tauri-plugin-shellx-api"
import { Step } from "./steps"
@ -26,18 +25,22 @@
}
$effect(() => {
if (step === Step.DenoInstall) {
if (denoPath) {
step++
}
} else if (step === Step.FFmpegInstall) {
if (ffmpegPath) {
step++
}
} else if (step > Step.FFmpegInstall) {
if (step > Step.GeneralSettings) {
appConfig.setOnBoarded(true)
goto(i18n.resolveRoute("/app"))
}
// if (step === Step.DenoInstall) {
// if (denoPath) {
// step++
// }
// } else if (step === Step.FFmpegInstall) {
// if (ffmpegPath) {
// step++
// }
// } else if (step > Step.FFmpegInstall) {
// appConfig.setOnBoarded(true)
// goto(i18n.resolveRoute("/app"))
// }
})
</script>

View File

@ -1,3 +1,4 @@
## Permission Table
<table>
@ -6,6 +7,7 @@
<th>Description</th>
</tr>
<tr>
<td>

View File

@ -23,7 +23,7 @@ export const PersistedAppConfig = v.object({
export type PersistedAppConfig = v.InferOutput<typeof PersistedAppConfig>
export type AppConfig = PersistedAppConfig & {
export type AppConfigState = PersistedAppConfig & {
isInitialized: boolean
language: string
extensionsInstallDir?: string

84
pnpm-lock.yaml generated
View File

@ -144,7 +144,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@types/debug':
specifier: ^4.1.12
version: 4.1.12
@ -184,7 +184,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
@ -281,6 +281,9 @@ importers:
tauri-plugin-shellx-api:
specifier: ^2.0.16
version: 2.0.16
tauri-plugin-svelte:
specifier: 1.2.1
version: 1.2.1
tauri-plugin-user-input-api:
specifier: workspace:*
version: link:../../vendors/tauri-plugin-user-input
@ -323,7 +326,7 @@ importers:
version: 2.3.1
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@types/semver':
specifier: ^7.5.8
version: 7.5.8
@ -335,7 +338,7 @@ importers:
version: 8.25.0(eslint@9.21.0(jiti@2.4.0))(typescript@5.6.3)
autoprefixer:
specifier: ^10.4.20
version: 10.4.20(postcss@8.5.3)
version: 10.4.20(postcss@8.4.49)
bits-ui:
specifier: 1.0.0-next.86
version: 1.0.0-next.86(svelte@5.20.5)
@ -474,7 +477,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@types/lodash':
specifier: ^4.17.14
version: 4.17.14
@ -514,7 +517,7 @@ importers:
version: link:../typescript-config
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/config-eslint:
dependencies:
@ -557,7 +560,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/extensions/demo-worker-template-ext:
dependencies:
@ -585,7 +588,7 @@ importers:
version: 11.1.6(rollup@4.34.2)(tslib@2.8.1)(typescript@5.7.3)
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
rollup-plugin-visualizer:
specifier: ^5.12.0
version: 5.12.0(rollup@4.34.2)
@ -692,7 +695,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/grpc:
dependencies:
@ -711,7 +714,7 @@ importers:
version: 0.7.13
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@types/google-protobuf':
specifier: ^3.15.12
version: 3.15.12
@ -739,7 +742,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
verify-package-export:
specifier: ^0.0.3
version: 0.0.3(typescript@5.7.3)
@ -767,7 +770,7 @@ importers:
version: 2.48.0
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@valibot/to-json-schema':
specifier: 1.0.0-beta.4
version: 1.0.0-beta.4(valibot@1.0.0-beta.10(typescript@5.7.3))
@ -789,7 +792,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/svelte-animation:
dependencies:
@ -799,7 +802,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/tauri-plugins/jarvis:
dependencies:
@ -818,7 +821,7 @@ importers:
version: 2.48.0
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/templates/template-ext-headless:
dependencies:
@ -837,7 +840,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/templates/template-ext-next:
dependencies:
@ -1189,7 +1192,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/types:
dependencies:
@ -1199,7 +1202,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
packages/typescript-config: {}
@ -1277,7 +1280,7 @@ importers:
version: 0.1.15(lucide-svelte@0.471.0(svelte@5.20.5))(svelte-sonner@0.3.28(svelte@5.20.5))(svelte@5.20.5)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.17.3(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.20.5)(vite@6.2.0(@types/node@22.13.1)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.20.5)(vite@6.2.0(@types/node@22.13.1)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.20.5)(typescript@5.7.3))(typescript@5.7.3)
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
'@typescript-eslint/eslint-plugin':
specifier: ^8.20.0
version: 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.21.0(jiti@2.4.0))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.0))(typescript@5.7.3)
@ -1359,7 +1362,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.4
version: 1.2.5
vendors/tauri-plugin-keyring:
dependencies:
@ -2584,6 +2587,7 @@ packages:
'@faker-js/faker@9.5.1':
resolution: {integrity: sha512-0fzMEDxkExR2cn731kpDaCCnBGBUOIXEi2S1N5l8Hltp6aPf4soTMJ+g4k8r2sI5oB+rpwIW8Uy/6jkwGpnWPg==}
engines: {node: '>=18.0.0', npm: '>=9.0.0'}
deprecated: Please update to a newer version
'@floating-ui/core@1.6.8':
resolution: {integrity: sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==}
@ -5267,6 +5271,9 @@ packages:
'@tauri-apps/plugin-upload@2.2.1':
resolution: {integrity: sha512-2EyVhJYLAp2mJH0UzO3QGU0vPk/YWvAfdI2wXbczyzEZY/AZVa9wConyB1TV/NGhyJRim4LwWgkmnEvcKLkECw==}
'@tauri-store/shared@0.6.0':
resolution: {integrity: sha512-2KBezqqkw68HvvXHEtbbpxyQHDjymBUZl10YuAsNRI8DHFIA0n18WE7NRyQ93+H7IzDP1/B41m2/rcMDHBSiKw==}
'@trysound/sax@0.2.0':
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
@ -5308,8 +5315,8 @@ packages:
'@types/btoa-lite@1.0.2':
resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==}
'@types/bun@1.2.4':
resolution: {integrity: sha512-QtuV5OMR8/rdKJs213iwXDpfVvnskPXY/S0ZiFbsTjQZycuqPbMW8Gf/XhLfwE5njW8sxI2WjISURXPlHypMFA==}
'@types/bun@1.2.5':
resolution: {integrity: sha512-w2OZTzrZTVtbnJew1pdFmgV99H0/L+Pvw+z1P67HaR18MHOzYnTYOi6qzErhK8HyT+DB782ADVPPE92Xu2/Opg==}
'@types/cookie@0.6.0':
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
@ -6369,8 +6376,8 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
bun-types@1.2.4:
resolution: {integrity: sha512-nDPymR207ZZEoWD4AavvEaa/KZe/qlrbMSchqpQwovPZCKc7pwMoENjEtHgMKaAjJhy+x6vfqSBA1QU3bJgs0Q==}
bun-types@1.2.5:
resolution: {integrity: sha512-3oO6LVGGRRKI4kHINx5PIdIgnLRb7l/SprhzqXapmoYkFl5m4j6EvALvbDVuuBFaamB46Ap6HCUxIXNLCGy+tg==}
bundle-name@4.1.0:
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
@ -11102,6 +11109,9 @@ packages:
tauri-plugin-shellx-api@2.0.16:
resolution: {integrity: sha512-I6o/+IoG6++x4L5d20ciOooOeUEn0bOKvMiYhQxlv1Q3zAZPdpJKjAHJxRpZZwpR6yUY788qiQny7IbTywqLFw==}
tauri-plugin-svelte@1.2.1:
resolution: {integrity: sha512-xusgcHpnXqRt4RO+3UjqAlOCTh5PcxzDEa11Qd8Z3cHz6MMl0PLE6j0ExeAur+dTiZVLEGFsIm6Qd0LY9ED/wA==}
tauri-plugin-system-info-api@2.0.8:
resolution: {integrity: sha512-EFdLXNGp6Zu9SNsZCkU+55A8027OnrVw/TQrd0oJHgfZzs4qvm1iMmSvyid4MLftt33iZDhjCzxYijaaOxeKSg==}
@ -17090,6 +17100,10 @@ snapshots:
dependencies:
'@tauri-apps/api': 2.3.0
'@tauri-store/shared@0.6.0':
dependencies:
'@tauri-apps/api': 2.3.0
'@trysound/sax@0.2.0': {}
'@ts-graphviz/adapter@2.0.5':
@ -17134,9 +17148,9 @@ snapshots:
'@types/btoa-lite@1.0.2': {}
'@types/bun@1.2.4':
'@types/bun@1.2.5':
dependencies:
bun-types: 1.2.4
bun-types: 1.2.5
'@types/cookie@0.6.0': {}
@ -18519,16 +18533,6 @@ snapshots:
postcss: 8.5.1
postcss-value-parser: 4.2.0
autoprefixer@10.4.20(postcss@8.5.3):
dependencies:
browserslist: 4.24.2
caniuse-lite: 1.0.30001676
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.1.1
postcss: 8.5.3
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
dependencies:
possible-typed-array-names: 1.0.0
@ -18684,7 +18688,7 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
bun-types@1.2.4:
bun-types@1.2.5:
dependencies:
'@types/node': 22.13.1
'@types/ws': 8.5.14
@ -24268,6 +24272,12 @@ snapshots:
dependencies:
'@tauri-apps/api': 2.3.0
tauri-plugin-svelte@1.2.1:
dependencies:
'@tauri-apps/api': 2.3.0
'@tauri-store/shared': 0.6.0
svelte: 5.20.5
tauri-plugin-system-info-api@2.0.8(typescript@5.7.2):
dependencies:
'@tauri-apps/api': 2.3.0