Fix: ext window loading (#81)

* fix: extension new window loading with localStorage

* fix: extension loading in new window

* upgrade: @kksh/svelte5

* refactor: update SideBar import to Sidebar across desktop app

* fix: safely remove test directories with existsSync check

* feat: add open preference command with platform-specific shortcut

* chore: clean up vite config trailing comma
This commit is contained in:
Huakun Shen 2025-01-28 04:58:54 -05:00 committed by GitHub
parent 63bc401d8e
commit c93ebd895e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
26 changed files with 227 additions and 147 deletions

View File

@ -16,8 +16,9 @@ const createKKIndexjsPath = path.join(createKKDistDir, "index.mjs")
const testDir = path.join(os.tmpdir(), "kunkun-cli-test")
console.log("Test Dir: ", testDir)
const templateNames = ["react", "vue", "nuxt", "svelte", "sveltekit", "next", "template"]
fs.rmdirSync(testDir, { recursive: true })
if (fs.existsSync(testDir)) {
fs.rmdirSync(testDir, { recursive: true })
}
fs.mkdirpSync(testDir)
const testTemplateDirs: string[] = []
for (const templateName of templateNames) {
@ -37,7 +38,9 @@ test("Build And Verify", async () => {
})
const testDirDocker = path.join(os.tmpdir(), "kunkun-cli-test-docker")
fs.rmdirSync(testDirDocker, { recursive: true })
if (fs.existsSync(testDirDocker)) {
fs.rmdirSync(testDirDocker, { recursive: true })
}
fs.mkdirpSync(testDirDocker)
const templateData: Record<string, { dir: string; buildResult: BuildResult }> = {}

View File

@ -15,7 +15,9 @@ const distDir = path.join(getRootDir(), "dist")
const indexjsPath = path.join(distDir, "index.mjs")
const templateNames = ["template", "react", "vue", "nuxt", "svelte", "sveltekit"]
fs.rmdirSync(testDir, { recursive: true })
if (fs.existsSync(testDir)) {
fs.rmdirSync(testDir, { recursive: true })
}
fs.mkdirpSync(testDir)
for (const templateName of templateNames) {
const folderName = `${templateName}-ext`

View File

@ -15,6 +15,7 @@
"home_command_input_dropdown_close_window": "Close Window",
"home_command_input_dropdown_toggle_devtools": "Toggle Devtools",
"home_command_input_dropdown_reload_window": "Reload Window",
"home_command_input_dropdown_open_preference": "Open Preference",
"home_command_input_dropdown_toggle_dev_extension_hmr": "Toggle Dev Extension HMR",
"command_group_heading_dev_ext": "Dev Extensions",

View File

@ -15,6 +15,7 @@
"home_command_input_dropdown_close_window": "Закрыть окно",
"home_command_input_dropdown_toggle_devtools": "Вкл/выкл инструменты разработчика",
"home_command_input_dropdown_reload_window": "Перезагрузить окно",
"home_command_input_dropdown_open_preference": "Открыть настройки",
"home_command_input_dropdown_toggle_dev_extension_hmr": "Вкл/выкл горячую замену (HMR) у dev-расширений",
"command_group_heading_dev_ext": "Dev-расширения",

View File

@ -15,6 +15,7 @@
"home_command_input_dropdown_close_window": "关闭窗口",
"home_command_input_dropdown_toggle_devtools": "切换开发者工具",
"home_command_input_dropdown_reload_window": "重新加载窗口",
"home_command_input_dropdown_open_preference": "打开设置",
"home_command_input_dropdown_toggle_dev_extension_hmr": "切换开发插件 HMR",
"command_group_heading_dev_ext": "开发插件",

View File

@ -19,6 +19,7 @@
"@inlang/paraglide-sveltekit": "0.15.5",
"@kksh/extension": "workspace:*",
"@kksh/supabase": "workspace:*",
"@kksh/svelte5": "^0.1.15",
"@kksh/ui": "workspace:*",
"@kksh/utils": "workspace:*",
"@std/semver": "npm:@jsr/std__semver@^1.0.3",

View File

@ -4,7 +4,7 @@ import { winExtMap } from "@/stores/winExtMap"
import { trimSlash } from "@/utils/url"
import { constructExtensionSupportDir } from "@kksh/api"
import { db, spawnExtensionFileServer } from "@kksh/api/commands"
import { HeadlessWorkerExtension } from "@kksh/api/headless"
import type { HeadlessWorkerExtension } from "@kksh/api/headless"
import { CustomUiCmd, ExtPackageJsonExtra, HeadlessCmd, TemplateUiCmd } from "@kksh/api/models"
import { constructJarvisServerAPIWithPermissions, type IApp } from "@kksh/api/ui"
import { launchNewExtWindow, loadExtensionManifestFromDisk } from "@kksh/extension"
@ -15,6 +15,18 @@ import * as fs from "@tauri-apps/plugin-fs"
import { platform } from "@tauri-apps/plugin-os"
import { goto } from "$app/navigation"
import { RPCChannel, WorkerParentIO } from "kkrpc/browser"
import * as v from "valibot"
export const KunkunIframeExtParams = v.object({
url: v.string(),
extPath: v.string()
})
export type KunkunIframeExtParams = v.InferOutput<typeof KunkunIframeExtParams>
export const KunkunTemplateExtParams = v.object({
extPath: v.string(),
cmdName: v.string()
})
export type KunkunTemplateExtParams = v.InferOutput<typeof KunkunTemplateExtParams>
export async function createExtSupportDir(extPath: string) {
const extSupportDir = await constructExtensionSupportDir(extPath)
@ -33,6 +45,10 @@ export async function onTemplateUiCmdSelect(
const url = `/app/extension/ui-worker?extPath=${encodeURIComponent(ext.extPath)}&cmdName=${encodeURIComponent(cmd.name)}`
if (cmd.window) {
const winLabel = await winExtMap.registerExtensionWithWindow({ extPath: ext.extPath })
localStorage.setItem(
"kunkun-template-ext-params",
JSON.stringify({ url, extPath: ext.extPath } satisfies KunkunIframeExtParams)
)
const window = launchNewExtWindow(winLabel, url, cmd.window)
window.onCloseRequested(async (event) => {
await winExtMap.unregisterExtensionFromWindow(winLabel)
@ -102,6 +118,7 @@ export async function onCustomUiCmdSelect(
: decodeURIComponent(convertFileSrc(`${trimSlash(cmd.main)}`, "ext"))
}
let url2 = `/app/extension/ui-iframe?url=${encodeURIComponent(url)}&extPath=${encodeURIComponent(ext.extPath)}`
// url2 = `/dev?url=${encodeURIComponent(url)}&extPath=${encodeURIComponent(ext.extPath)}`
if (cmd.window) {
const winLabel = await winExtMap.registerExtensionWithWindow({
extPath: ext.extPath,
@ -112,6 +129,10 @@ export async function onCustomUiCmdSelect(
const newUrl = `http://${addr}`
url2 = `/app/extension/ui-iframe?url=${encodeURIComponent(newUrl)}&extPath=${encodeURIComponent(ext.extPath)}`
}
localStorage.setItem(
"kunkun-iframe-ext-params",
JSON.stringify({ url, extPath: ext.extPath } satisfies KunkunIframeExtParams)
)
const window = launchNewExtWindow(winLabel, url2, cmd.window)
window.onCloseRequested(async (event) => {
await winExtMap.unregisterExtensionFromWindow(winLabel)

View File

@ -1,15 +1,15 @@
<script lang="ts">
import { goHome } from "@/utils/route"
import { Button, SideBar } from "@kksh/svelte5"
import { Button, Sidebar } from "@kksh/svelte5"
import { Constants } from "@kksh/ui"
import { ArrowLeftIcon } from "lucide-svelte"
const { useSidebar } = SideBar
const { useSidebar } = Sidebar
const sidebar = useSidebar()
</script>
<div class="fixed flex h-10 w-full items-center gap-2 pl-1 pt-1" data-tauri-drag-region>
<SideBar.Trigger class="z-50" />
<Sidebar.Trigger class="z-50" />
{#if sidebar.state === "collapsed"}
<Button
variant="outline"

View File

@ -1,10 +1,10 @@
import { SupabaseAPI } from "@kksh/supabase/api"
import type { Database } from "@kksh/supabase/types"
import { createClient, SupabaseClient } from "@supabase/supabase-js"
import * as sb from "@supabase/supabase-js"
import { SUPABASE_ANON_KEY, SUPABASE_URL } from "./constants"
// export const supabase = createSB(SUPABASE_URL, SUPABASE_ANON_KEY)
export const supabase: SupabaseClient<Database> = createClient<Database>(
export const supabase: sb.SupabaseClient<Database> = sb.createClient<Database>(
SUPABASE_URL,
SUPABASE_ANON_KEY,
{

View File

@ -30,6 +30,7 @@
import { cn, commandScore } from "@kksh/ui/utils"
import { getCurrentWebviewWindow } from "@tauri-apps/api/webviewWindow"
import { getCurrentWindow, Window } from "@tauri-apps/api/window"
import { platform } from "@tauri-apps/plugin-os"
import { exit } from "@tauri-apps/plugin-process"
import { goto } from "$app/navigation"
import { ArrowBigUpIcon, CircleXIcon, EllipsisVerticalIcon, RefreshCcwIcon } from "lucide-svelte"
@ -156,18 +157,27 @@
<DropdownMenu.Item onclick={toggleDevTools}>
<Icon icon="mingcute:code-fill" class="mr-2 h-5 w-5 text-green-500" />
{m.home_command_input_dropdown_toggle_devtools()}
<DropdownMenu.Shortcut
><span class="flex items-center">⌃+<ArrowBigUpIcon class="h-4 w-4" />+I</span
></DropdownMenu.Shortcut
>
<DropdownMenu.Shortcut>
<span class="flex items-center">⌃+<ArrowBigUpIcon class="h-4 w-4" />+I </span>
</DropdownMenu.Shortcut>
</DropdownMenu.Item>
<DropdownMenu.Item onclick={() => location.reload()}>
<RefreshCcwIcon class="mr-2 h-4 w-4 text-green-500" />
{m.home_command_input_dropdown_reload_window()}
<DropdownMenu.Shortcut
><span class="flex items-center">⌃+<ArrowBigUpIcon class="h-4 w-4" />+R</span
></DropdownMenu.Shortcut
>
<DropdownMenu.Shortcut>
<span class="flex items-center">⌃+<ArrowBigUpIcon class="h-4 w-4" />+R </span>
</DropdownMenu.Shortcut>
</DropdownMenu.Item>
<DropdownMenu.Item onclick={() => location.reload()}>
<RefreshCcwIcon class="mr-2 h-4 w-4 text-green-500" />
{m.home_command_input_dropdown_open_preference()}
<DropdownMenu.Shortcut>
{#if platform() === "macos"}
<span class="flex items-center">⌘+Comma</span>
{:else}
<span class="flex items-center">Ctrl+Comma</span>
{/if}
</DropdownMenu.Shortcut>
</DropdownMenu.Item>
<DropdownMenu.Item
onclick={() => {

View File

@ -1,11 +1,14 @@
import { KunkunIframeExtParams } from "@/cmds/ext"
import { i18n } from "@/i18n"
import { db, unregisterExtensionWindow } from "@kksh/api/commands"
import type { Ext as ExtInfoInDB, ExtPackageJsonExtra } from "@kksh/api/models"
import { loadExtensionManifestFromDisk } from "@kksh/extension"
import { error as svError } from "@sveltejs/kit"
import { join } from "@tauri-apps/api/path"
import { error } from "@tauri-apps/plugin-log"
import { goto } from "$app/navigation"
import { toast } from "svelte-sonner"
import * as v from "valibot"
import { z } from "zod"
import type { PageLoad } from "./$types"
@ -20,15 +23,35 @@ export const load: PageLoad = async ({
extInfoInDB: ExtInfoInDB
}> => {
// both query parameter must exist
const rawKunkunIframeExtParams = localStorage.getItem("kunkun-iframe-ext-params")
if (!rawKunkunIframeExtParams) {
toast.error("Invalid extension path or url")
return svError(404, "Invalid extension path or url")
}
// localStorage.removeItem("kunkun-iframe-ext-params")
const parsed = v.safeParse(KunkunIframeExtParams, JSON.parse(rawKunkunIframeExtParams))
if (!parsed.success) {
toast.error("Fail to parse extension params from local storage", {
description: `${v.flatten<typeof KunkunIframeExtParams>(parsed.issues)}`
})
return svError(400, "Fail to parse extension params from local storage")
}
const { url: extUrl, extPath } = parsed.output
console.log("extUrl extPath", extUrl, extPath)
const _extPath = url.searchParams.get("extPath")
const _extUrl = url.searchParams.get("url")
if (!_extPath || !_extUrl) {
toast.error("Invalid extension path or url")
error("Invalid extension path or url")
goto(i18n.resolveRoute("/app/"))
}
const extPath = z.string().parse(_extPath)
const extUrl = z.string().parse(_extUrl)
console.log("_extPath", _extPath)
console.log("_extUrl", _extUrl)
// if (!_extPath || !_extUrl) {
// toast.error("Invalid extension path or url", {
// description: `_extPath: ${_extPath}; _extUrl: ${_extUrl}`
// })
// error("Invalid extension path or url")
// goto(i18n.resolveRoute("/app/"))
// }
// const extPath = z.string().parse(_extPath)
// const extUrl = z.string().parse(_extUrl)
let _loadedExt: ExtPackageJsonExtra | undefined
try {
_loadedExt = await loadExtensionManifestFromDisk(await join(extPath, "package.json"))

View File

@ -1,25 +1,34 @@
import { KunkunTemplateExtParams } from "@/cmds/ext"
import { i18n } from "@/i18n"
import { db, unregisterExtensionWindow } from "@kksh/api/commands"
import type { Ext as ExtInfoInDB, ExtPackageJsonExtra } from "@kksh/api/models"
import { loadExtensionManifestFromDisk } from "@kksh/extension"
import { error as sbError } from "@sveltejs/kit"
import { error as sbError, error as svError } from "@sveltejs/kit"
import { join } from "@tauri-apps/api/path"
import { exists, readTextFile } from "@tauri-apps/plugin-fs"
import { error } from "@tauri-apps/plugin-log"
import { goto } from "$app/navigation"
import { toast } from "svelte-sonner"
import * as v from "valibot"
import type { PageLoad } from "./$types"
export const load: PageLoad = async ({ url }) => {
// both query parameter must exist
const extPath = url.searchParams.get("extPath")
const cmdName = url.searchParams.get("cmdName")
if (!extPath || !cmdName) {
const rawKunkunTemplateExtParams = localStorage.getItem("kunkun-template-ext-params")
if (!rawKunkunTemplateExtParams) {
toast.error("Invalid extension path or url")
error("Invalid extension path or url")
goto(i18n.resolveRoute("/app/"))
return svError(404, "Invalid extension path or url")
}
localStorage.removeItem("kunkun-template-ext-params")
const parsed = v.safeParse(KunkunTemplateExtParams, JSON.parse(rawKunkunTemplateExtParams))
if (!parsed.success) {
toast.error("Fail to parse extension params from local storage", {
description: `${v.flatten<typeof KunkunTemplateExtParams>(parsed.issues)}`
})
return svError(404, "Fail to parse extension params from local storage")
}
const { cmdName, extPath } = parsed.output
let _loadedExt: ExtPackageJsonExtra | undefined
try {

View File

@ -1,6 +1,6 @@
<script lang="ts">
import { goHomeOrCloseOnEscapeWithInput } from "@/utils/key"
import { SideBar } from "@kksh/svelte5"
import { Sidebar } from "@kksh/svelte5"
import SidebarTrigger from "$lib/components/common/sidebar-trigger.svelte"
import SettingsSidebar from "./sidebar.svelte"
@ -9,10 +9,10 @@
<svelte:window on:keydown={goHomeOrCloseOnEscapeWithInput} />
<SideBar.Provider style="--sidebar-width: 13rem;">
<Sidebar.Provider style="--sidebar-width: 13rem;">
<SettingsSidebar />
<main class="flex grow flex-col overflow-x-clip">
<SidebarTrigger />
{@render children?.()}
</main>
</SideBar.Provider>
</Sidebar.Provider>

View File

@ -3,7 +3,7 @@
import { goHome } from "@/utils/route"
import { checkUpdateAndInstall } from "@/utils/updater"
import Icon from "@iconify/svelte"
import { Button, Card, SideBar } from "@kksh/svelte5"
import { Button, Card, Sidebar } from "@kksh/svelte5"
import { Layouts, TauriLink } from "@kksh/ui"
import { getVersion } from "@tauri-apps/api/app"
import { onMount } from "svelte"

View File

@ -2,7 +2,7 @@
import { i18n } from "@/i18n"
import * as m from "@/paraglide/messages"
import { goHome } from "@/utils/route"
import { Button, SideBar } from "@kksh/svelte5"
import { Button, Sidebar } from "@kksh/svelte5"
import { Constants } from "@kksh/ui"
import { ArrowLeftIcon } from "lucide-svelte"
import Blocks from "lucide-svelte/icons/blocks"
@ -47,10 +47,10 @@
let currentItem = $state(items.find((item) => window.location.pathname === item.url))
</script>
<SideBar.Root>
<SideBar.Header class="h-12">
<SideBar.Menu>
<SideBar.MenuItem data-tauri-drag-region>
<Sidebar.Root>
<Sidebar.Header class="h-12">
<Sidebar.Menu>
<Sidebar.MenuItem data-tauri-drag-region>
<Button
variant="outline"
size="icon"
@ -59,17 +59,17 @@
>
<ArrowLeftIcon class="h-4 w-4" />
</Button>
</SideBar.MenuItem>
</SideBar.Menu>
</SideBar.Header>
<SideBar.Content>
<SideBar.Group>
<SideBar.GroupLabel data-tauri-drag-region>{m.settings_menu_settings()}</SideBar.GroupLabel>
<SideBar.GroupContent>
<SideBar.Menu>
</Sidebar.MenuItem>
</Sidebar.Menu>
</Sidebar.Header>
<Sidebar.Content>
<Sidebar.Group>
<Sidebar.GroupLabel data-tauri-drag-region>{m.settings_menu_settings()}</Sidebar.GroupLabel>
<Sidebar.GroupContent>
<Sidebar.Menu>
{#each items as item (item.title)}
<SideBar.MenuItem>
<SideBar.MenuButton
<Sidebar.MenuItem>
<Sidebar.MenuButton
isActive={currentItem?.url === item.url}
onclick={() => {
currentItem = item
@ -81,11 +81,11 @@
<span>{item.title}</span>
</a>
{/snippet}
</SideBar.MenuButton>
</SideBar.MenuItem>
</Sidebar.MenuButton>
</Sidebar.MenuItem>
{/each}
</SideBar.Menu>
</SideBar.GroupContent>
</SideBar.Group>
</SideBar.Content>
</SideBar.Root>
</Sidebar.Menu>
</Sidebar.GroupContent>
</Sidebar.Group>
</Sidebar.Content>
</Sidebar.Root>

View File

@ -1,7 +1,7 @@
<script lang="ts">
import SidebarTrigger from "@/components/common/sidebar-trigger.svelte"
import { goHomeOrCloseOnEscapeWithInput } from "@/utils/key"
import { SideBar } from "@kksh/svelte5"
import { Sidebar } from "@kksh/svelte5"
import TroubleshootersSidebar from "./sidebar.svelte"
let { children } = $props()
@ -9,10 +9,10 @@
<svelte:window on:keydown={goHomeOrCloseOnEscapeWithInput} />
<SideBar.Provider style="--sidebar-width: 12rem;">
<Sidebar.Provider style="--sidebar-width: 12rem;">
<TroubleshootersSidebar class="flex-none" />
<main class="grow overflow-x-clip">
<SidebarTrigger />
{@render children?.()}
</main>
</SideBar.Provider>
</Sidebar.Provider>

View File

@ -2,7 +2,7 @@
import { i18n } from "@/i18n"
import * as m from "@/paraglide/messages"
import { goHome } from "@/utils/route"
import { Button, SideBar } from "@kksh/svelte5"
import { Button, Sidebar } from "@kksh/svelte5"
import { Constants } from "@kksh/ui"
import { ArrowLeftIcon } from "lucide-svelte"
import AppWindow from "lucide-svelte/icons/app-window"
@ -30,10 +30,10 @@
let currentItem = $state(items.find((item) => window.location.pathname === item.url))
</script>
<SideBar.Root class={className}>
<SideBar.Header class="h-12">
<SideBar.Menu>
<SideBar.MenuItem data-tauri-drag-region>
<Sidebar.Root class={className}>
<Sidebar.Header class="h-12">
<Sidebar.Menu>
<Sidebar.MenuItem data-tauri-drag-region>
<Button
variant="outline"
size="icon"
@ -42,19 +42,19 @@
>
<ArrowLeftIcon class="h-4 w-4" />
</Button>
</SideBar.MenuItem>
</SideBar.Menu>
</SideBar.Header>
<SideBar.Content>
<SideBar.Group>
<SideBar.GroupLabel data-tauri-drag-region>
</Sidebar.MenuItem>
</Sidebar.Menu>
</Sidebar.Header>
<Sidebar.Content>
<Sidebar.Group>
<Sidebar.GroupLabel data-tauri-drag-region>
{m.troubleshooters_sidebar_title()}
</SideBar.GroupLabel>
<SideBar.GroupContent>
<SideBar.Menu>
</Sidebar.GroupLabel>
<Sidebar.GroupContent>
<Sidebar.Menu>
{#each items as item (item.title)}
<SideBar.MenuItem>
<SideBar.MenuButton
<Sidebar.MenuItem>
<Sidebar.MenuButton
isActive={currentItem?.url === item.url}
onclick={() => {
currentItem = item
@ -66,11 +66,11 @@
<span>{item.title}</span>
</a>
{/snippet}
</SideBar.MenuButton>
</SideBar.MenuItem>
</Sidebar.MenuButton>
</Sidebar.MenuItem>
{/each}
</SideBar.Menu>
</SideBar.GroupContent>
</SideBar.Group>
</SideBar.Content>
</SideBar.Root>
</Sidebar.Menu>
</Sidebar.GroupContent>
</Sidebar.Group>
</Sidebar.Content>
</Sidebar.Root>

View File

View File

@ -8,7 +8,7 @@ const config: Config = {
content: [
"./src/**/*.{html,js,svelte,ts}",
"./node_modules/@kksh/ui/src/**/*.{html,js,svelte,ts}",
"../../node_modules/@kksh/svelte5/dist/**/*.{html,js,svelte,ts}"
"./node_modules/@kksh/svelte5/dist/**/*.{html,js,svelte,ts}"
],
safelist: ["dark", "bg-red-500/30"],
theme: {

View File

@ -32,4 +32,7 @@ export default defineConfig(async () => ({
build: {
minify: true
}
// optimizeDeps: {
// include: ["@supabase/supabase-js"] // trying to fix supabase import error
// }
}))

View File

@ -13,7 +13,6 @@
"devDependencies": {
"@ianvs/prettier-plugin-sort-imports": "^4.4.0",
"@kksh/api": "workspace:*",
"@kksh/svelte5": "0.1.14",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.2",
"prettier-plugin-tailwindcss": "^0.6.9",

View File

@ -47,7 +47,7 @@
},
"dependencies": {
"@kksh/api": "workspace:*",
"@kksh/svelte5": "0.1.14",
"@kksh/svelte5": "0.1.15",
"clsx": "^2.1.1",
"lucide-svelte": "^0.469.0",
"mode-watcher": "^0.5.0",

View File

@ -40,7 +40,7 @@
},
"dependencies": {
"@kksh/api": "workspace:*",
"@kksh/svelte5": "0.1.14",
"@kksh/svelte5": "0.1.15",
"clsx": "^2.1.1",
"lucide-svelte": "^0.469.0",
"tailwind-merge": "^2.6.0",

View File

@ -46,7 +46,7 @@
},
"dependencies": {
"@kksh/api": "workspace:*",
"@kksh/svelte5": "0.1.14",
"@kksh/svelte5": "0.1.15",
"clsx": "^2.1.1",
"lucide-svelte": "^0.469.0",
"mode-watcher": "^0.5.0",

View File

@ -40,7 +40,7 @@
"@eslint/js": "^9.18.0",
"@iconify/svelte": "^4.2.0",
"@kksh/api": "workspace:*",
"@kksh/svelte5": "^0.1.14",
"@kksh/svelte5": "^0.1.15",
"@types/bun": "latest",
"@typescript-eslint/eslint-plugin": "^8.20.0",
"@typescript-eslint/parser": "^8.20.0",

122
pnpm-lock.yaml generated
View File

@ -87,9 +87,6 @@ importers:
'@kksh/api':
specifier: workspace:*
version: link:packages/api
'@kksh/svelte5':
specifier: 0.1.14
version: 0.1.14(lucide-svelte@0.471.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
prettier:
specifier: ^3.4.2
version: 3.4.2
@ -150,7 +147,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@types/debug':
specifier: ^4.1.12
version: 4.1.12
@ -190,7 +187,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
@ -218,6 +215,9 @@ importers:
'@kksh/supabase':
specifier: workspace:*
version: link:../../packages/supabase
'@kksh/svelte5':
specifier: ^0.1.15
version: 0.1.15(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.6.3))(typescript@5.6.3)
'@kksh/ui':
specifier: workspace:*
version: link:../../packages/ui
@ -311,7 +311,7 @@ importers:
version: 2.1.0
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@types/semver':
specifier: ^7.5.8
version: 7.5.8
@ -462,7 +462,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@types/lodash':
specifier: ^4.17.14
version: 4.17.14
@ -502,7 +502,7 @@ importers:
version: link:../typescript-config
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/config-eslint:
dependencies:
@ -545,7 +545,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/extensions/demo-worker-template-ext:
dependencies:
@ -570,7 +570,7 @@ importers:
version: 11.1.6(rollup@4.30.1)(tslib@2.8.1)(typescript@5.6.3)
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
rollup-plugin-visualizer:
specifier: ^5.12.0
version: 5.12.0(rollup@4.30.1)
@ -581,8 +581,8 @@ importers:
specifier: workspace:*
version: link:../../api
'@kksh/svelte5':
specifier: 0.1.14
version: 0.1.14(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
specifier: 0.1.15
version: 0.1.15(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
clsx:
specifier: ^2.1.1
version: 2.1.1
@ -677,7 +677,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/grpc:
dependencies:
@ -696,7 +696,7 @@ importers:
version: 0.7.13
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@types/google-protobuf':
specifier: ^3.15.12
version: 3.15.12
@ -724,7 +724,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
verify-package-export:
specifier: ^0.0.2
version: 0.0.2(typescript@5.7.3)
@ -752,7 +752,7 @@ importers:
version: 2.48.0
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@valibot/to-json-schema':
specifier: 1.0.0-beta.4
version: 1.0.0-beta.4(valibot@1.0.0-beta.10(typescript@5.6.3))
@ -774,7 +774,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/tauri-plugins/jarvis:
dependencies:
@ -793,7 +793,7 @@ importers:
version: 2.48.0
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/templates/template-ext-headless:
dependencies:
@ -812,7 +812,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/templates/template-ext-next:
dependencies:
@ -961,8 +961,8 @@ importers:
specifier: workspace:*
version: link:../../api
'@kksh/svelte5':
specifier: 0.1.14
version: 0.1.14(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
specifier: 0.1.15
version: 0.1.15(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
clsx:
specifier: ^2.1.1
version: 2.1.1
@ -1013,8 +1013,8 @@ importers:
specifier: workspace:*
version: link:../../api
'@kksh/svelte5':
specifier: 0.1.14
version: 0.1.14(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
specifier: 0.1.15
version: 0.1.15(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)
clsx:
specifier: ^2.1.1
version: 2.1.1
@ -1161,7 +1161,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/types:
dependencies:
@ -1171,7 +1171,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
packages/typescript-config: {}
@ -1224,11 +1224,11 @@ importers:
specifier: workspace:*
version: link:../api
'@kksh/svelte5':
specifier: ^0.1.14
version: 0.1.14(lucide-svelte@0.471.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.3))(typescript@5.7.3)
specifier: ^0.1.15
version: 0.1.15(lucide-svelte@0.471.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.3))(typescript@5.7.3)
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
'@typescript-eslint/eslint-plugin':
specifier: ^8.20.0
version: 8.20.0(@typescript-eslint/parser@8.20.0(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.3))(eslint@9.17.0(jiti@2.4.0))(typescript@5.7.3)
@ -1307,7 +1307,7 @@ importers:
devDependencies:
'@types/bun':
specifier: latest
version: 1.2.0
version: 1.2.1
vendors/tauri-plugin-keyring:
dependencies:
@ -2741,8 +2741,8 @@ packages:
react: ^18.2.0
react-dom: ^18.2.0
'@kksh/svelte5@0.1.14':
resolution: {integrity: sha512-JwidRzKNMxZAZYy6mgAJcgj/SOqMkP01mPzmhhzOP+Q7Tl08C7WjFzNoymXr+EDfvKtyWv8gH8Yq1GlEZfT8xA==}
'@kksh/svelte5@0.1.15':
resolution: {integrity: sha512-Cr/gSWsnRtQIQLpQAkGBODujWn5g4LlhDp865skRV95tkrOuAwbbWGjG5+oWx1fK+fiDu+rhe2UCqw61SW2B/Q==}
peerDependencies:
lucide-svelte: '>=0.469.0'
svelte: ^5.16.6
@ -5017,8 +5017,8 @@ packages:
'@types/btoa-lite@1.0.2':
resolution: {integrity: sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==}
'@types/bun@1.2.0':
resolution: {integrity: sha512-5N1JqdahfpBlAv4wy6svEYcd/YfO2GNrbL95JOmFx8nkE6dbK4R0oSE5SpBA4vBRqgrOUAXF8Dpiz+gi7r80SA==}
'@types/bun@1.2.1':
resolution: {integrity: sha512-iiCeMAKMkft8EPQJxSbpVRD0DKqrh91w40zunNajce3nMNNFd/LnAquVisSZC+UpTMjDwtcdyzbWct08IvEqRA==}
'@types/cookie@0.6.0':
resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
@ -6014,8 +6014,8 @@ packages:
buffer@6.0.3:
resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
bun-types@1.2.0:
resolution: {integrity: sha512-KEaJxyZfbV/c4eyG0vyehDpYmBGreNiQbZIqvVHJwZ4BmeuWlNZ7EAzMN2Zcd7ailmS/tGVW0BgYbGf+lGEpWw==}
bun-types@1.2.1:
resolution: {integrity: sha512-p7bmXUWmrPWxhcbFVk7oUXM5jAGt94URaoa3qf4mz43MEhNAo/ot1urzBqctgvuq7y9YxkuN51u+/qm4BiIsHw==}
bundle-name@4.1.0:
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
@ -13601,7 +13601,25 @@ snapshots:
- '@types/react-dom'
- tailwindcss
'@kksh/svelte5@0.1.14(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)':
'@kksh/svelte5@0.1.15(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.6.3))(typescript@5.6.3)':
dependencies:
'@tanstack/table-core': 8.20.5
bits-ui: 1.0.0-next.77(svelte@5.16.6)
embla-carousel-svelte: 8.5.2(svelte@5.16.6)
formsnap: 2.0.0-next.1(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.6.3))
lucide-svelte: 0.469.0(svelte@5.16.6)
mode-watcher: 0.5.0(svelte@5.16.6)
paneforge: 1.0.0-next.2(svelte@5.16.6)
svelte: 5.16.6
svelte-persisted-store: 0.12.0(svelte@5.16.6)
svelte-radix: 2.0.1(svelte@5.16.6)
svelte-sonner: 0.3.28(svelte@5.16.6)
typescript: 5.6.3
vaul-svelte: 1.0.0-next.3(svelte@5.16.6)
transitivePeerDependencies:
- sveltekit-superforms
'@kksh/svelte5@0.1.15(lucide-svelte@0.469.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)':
dependencies:
'@tanstack/table-core': 8.20.5
bits-ui: 1.0.0-next.77(svelte@5.16.6)
@ -13619,25 +13637,7 @@ snapshots:
transitivePeerDependencies:
- sveltekit-superforms
'@kksh/svelte5@0.1.14(lucide-svelte@0.471.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))(typescript@5.7.2)':
dependencies:
'@tanstack/table-core': 8.20.5
bits-ui: 1.0.0-next.77(svelte@5.16.6)
embla-carousel-svelte: 8.5.2(svelte@5.16.6)
formsnap: 2.0.0-next.1(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2))
lucide-svelte: 0.471.0(svelte@5.16.6)
mode-watcher: 0.5.0(svelte@5.16.6)
paneforge: 1.0.0-next.2(svelte@5.16.6)
svelte: 5.16.6
svelte-persisted-store: 0.12.0(svelte@5.16.6)
svelte-radix: 2.0.1(svelte@5.16.6)
svelte-sonner: 0.3.28(svelte@5.16.6)
typescript: 5.7.2
vaul-svelte: 1.0.0-next.3(svelte@5.16.6)
transitivePeerDependencies:
- sveltekit-superforms
'@kksh/svelte5@0.1.14(lucide-svelte@0.471.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.3))(typescript@5.7.3)':
'@kksh/svelte5@0.1.15(lucide-svelte@0.471.0(svelte@5.16.6))(svelte-sonner@0.3.28(svelte@5.16.6))(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.3))(typescript@5.7.3)':
dependencies:
'@tanstack/table-core': 8.20.5
bits-ui: 1.0.0-next.77(svelte@5.16.6)
@ -16304,9 +16304,9 @@ snapshots:
'@types/btoa-lite@1.0.2': {}
'@types/bun@1.2.0':
'@types/bun@1.2.1':
dependencies:
bun-types: 1.2.0
bun-types: 1.2.1
'@types/cookie@0.6.0': {}
@ -17763,7 +17763,7 @@ snapshots:
base64-js: 1.5.1
ieee754: 1.2.1
bun-types@1.2.0:
bun-types@1.2.1:
dependencies:
'@types/node': 22.10.5
'@types/ws': 8.5.13
@ -19427,6 +19427,12 @@ snapshots:
dependencies:
fetch-blob: 3.2.0
formsnap@2.0.0-next.1(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.6.3)):
dependencies:
svelte: 5.16.6
svelte-toolbelt: 0.4.6(svelte@5.16.6)
sveltekit-superforms: 2.22.1(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.3(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.6.3)
formsnap@2.0.0-next.1(svelte@5.16.6)(sveltekit-superforms@2.22.1(@sveltejs/kit@2.15.2(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(svelte@5.16.6)(vite@6.0.7(@types/node@22.10.5)(jiti@2.4.0)(terser@5.36.0)(yaml@2.6.1)))(@types/json-schema@7.0.15)(svelte@5.16.6)(typescript@5.7.2)):
dependencies:
svelte: 5.16.6