2024-12-20 09:43:16 -05:00

51 lines
1.6 KiB
TypeScript

import { db, unregisterExtensionWindow } from "@kksh/api/commands"
import type { Ext as ExtInfoInDB, ExtPackageJsonExtra } from "@kksh/api/models"
import { loadExtensionManifestFromDisk } from "@kksh/extension"
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 { z } from "zod"
import type { PageLoad } from "./$types"
export const load: PageLoad = async ({
url,
params,
route
}): Promise<{
extPath: string
url: string
loadedExt: ExtPackageJsonExtra
extInfoInDB: ExtInfoInDB
}> => {
// both query parameter must exist
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("/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"))
} catch (err) {
error(`Error loading extension manifest: ${err}`)
toast.error("Error loading extension manifest", {
description: `${err}`
})
goto("/app/")
}
const loadedExt = _loadedExt!
const extInfoInDB = await db.getUniqueExtensionByPath(loadedExt.extPath)
if (!extInfoInDB) {
toast.error("Unexpected Error", {
description: `Extension ${loadedExt.kunkun.identifier} not found in database. Run Troubleshooter.`
})
goto("/app/")
}
return { extPath, url: extUrl, loadedExt, extInfoInDB: extInfoInDB! }
}