From 7e811440b81dd853a8847932d108befc4681856f Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Sun, 12 Jan 2025 03:11:55 -0500 Subject: [PATCH] fix: install and upgrade in store for jsr packages --- apps/desktop/src/lib/stores/extensions.ts | 11 ++++++-- .../routes/app/extension/store/+page.svelte | 28 ++++++++++++++----- .../extension/store/[identifier]/helper.ts | 2 +- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/apps/desktop/src/lib/stores/extensions.ts b/apps/desktop/src/lib/stores/extensions.ts index 7b93f0c..0f55b24 100644 --- a/apps/desktop/src/lib/stores/extensions.ts +++ b/apps/desktop/src/lib/stores/extensions.ts @@ -22,7 +22,11 @@ function createExtensionsStore(): Writable & { registerNewExtensionByPath: (extPath: string) => Promise uninstallStoreExtensionByIdentifier: (identifier: string) => Promise uninstallDevExtensionByIdentifier: (identifier: string) => Promise - upgradeStoreExtension: (identifier: string, tarballUrl: string) => Promise + upgradeStoreExtension: ( + identifier: string, + tarballUrl: string, + extras?: { overwritePackageJson?: string } + ) => Promise } { const store = writable([]) @@ -176,12 +180,13 @@ function createExtensionsStore(): Writable & { async function upgradeStoreExtension( identifier: string, - tarballUrl: string + tarballUrl: string, + extras?: { overwritePackageJson?: string } ): Promise { const extsDir = get(appConfig).extensionsInstallDir if (!extsDir) throw new Error("Extension path not set") return uninstallStoreExtensionByIdentifier(identifier).then(() => - installFromTarballUrl(tarballUrl, extsDir) + installFromTarballUrl(tarballUrl, extsDir, extras) ) } diff --git a/apps/desktop/src/routes/app/extension/store/+page.svelte b/apps/desktop/src/routes/app/extension/store/+page.svelte index 4ddff1a..3a1711d 100644 --- a/apps/desktop/src/routes/app/extension/store/+page.svelte +++ b/apps/desktop/src/routes/app/extension/store/+page.svelte @@ -4,8 +4,9 @@ import { supabaseAPI } from "@/supabase" import { goBackOnEscapeClearSearchTerm, goHomeOnEscapeClearSearchTerm } from "@/utils/key" import { goBack, goHome } from "@/utils/route" - import { SBExt } from "@kksh/api/supabase" + import { SBExt, type Tables } from "@kksh/api/supabase" import { isUpgradable } from "@kksh/extension" + import type { ExtPublishMetadata } from "@kksh/supabase/models" import { Button, Command } from "@kksh/svelte5" import { Constants } from "@kksh/ui" import { ExtListItem } from "@kksh/ui/extension" @@ -14,6 +15,7 @@ import { ArrowLeft } from "lucide-svelte" import type { Snippet } from "svelte" import { toast } from "svelte-sonner" + import { getInstallExtras } from "./[identifier]/helper.js" let { data } = $props() const { storeExtList, installedStoreExts, installedExtsMap, upgradableExpsMap } = data @@ -38,10 +40,17 @@ return toast.error("Fail to get latest extension", { description: res.error.message }) - const tarballUrl = supabaseAPI.translateExtensionFilePathToUrl(res.data.tarball_path) - return extensions.upgradeStoreExtension(ext.identifier, tarballUrl).then((newExt) => { - toast.success(`${ext.name} Upgraded to ${newExt.version}`) - }) + const tarballUrl = res.data.tarball_path.startsWith("http") + ? res.data.tarball_path + : supabaseAPI.translateExtensionFilePathToUrl(res.data.tarball_path) + const installExtras = await getInstallExtras( + res.data as Tables<"ext_publish"> & { metadata: ExtPublishMetadata } + ) + return extensions + .upgradeStoreExtension(ext.identifier, tarballUrl, installExtras) + .then((newExt) => { + toast.success(`${ext.name} Upgraded to ${newExt.version}`) + }) } async function onExtItemInstall(ext: SBExt) { @@ -51,10 +60,15 @@ description: res.error.message }) - const tarballUrl = supabaseAPI.translateExtensionFilePathToUrl(res.data.tarball_path) + const tarballUrl = res.data.tarball_path.startsWith("http") + ? res.data.tarball_path + : supabaseAPI.translateExtensionFilePathToUrl(res.data.tarball_path) + const installExtras = await getInstallExtras( + res.data as Tables<"ext_publish"> & { metadata: ExtPublishMetadata } + ) const installDir = await getExtensionsFolder() return extensions - .installFromTarballUrl(tarballUrl, installDir) + .installFromTarballUrl(tarballUrl, installDir, installExtras) .then(() => toast.success(`Plugin ${ext.name} Installed`)) .then(() => supabaseAPI.incrementDownloads({ diff --git a/apps/desktop/src/routes/app/extension/store/[identifier]/helper.ts b/apps/desktop/src/routes/app/extension/store/[identifier]/helper.ts index 28894fc..741ab27 100644 --- a/apps/desktop/src/routes/app/extension/store/[identifier]/helper.ts +++ b/apps/desktop/src/routes/app/extension/store/[identifier]/helper.ts @@ -8,7 +8,7 @@ export async function getInstallExtras( if (ext.metadata.sourceType) { if (ext.metadata.sourceType === "jsr") { if (ext.metadata.source) { - try { + try { const res = await fetch(`${ext.metadata.source}/package.json`) const pkgJsonContent = await res.text() extras.overwritePackageJson = pkgJsonContent