From d3af1b7b026a26ecdb5d9c40f3b73bc82cdfb339 Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Mon, 4 Nov 2024 16:51:31 -0500 Subject: [PATCH] [perf]: reduce desktop frontend bundle size from 10MB to 2MB (#14) * perf: reduce desktop frontend bundle from 10 to 2MB Use shiki fine-grained bundle, avoid bundling all languages and themes * feat: add cross-page transition for ext store back button with gasp Flip * refactor: move StoreListing.svelte in @kksh/ui back to desktop I realized that StoreListing is a pure wrapper, all the interactions are done with props. Even if this component is later used in other projects, it either lacks flexibility or require more changes. So it's moved back to desktop as a regular +page.svelte --- .../src/routes/extension/store/+layout.svelte | 6 +- .../src/routes/extension/store/+page.svelte | 62 +++++++++++------- .../extension/store/[identifier]/+page.svelte | 10 ++- apps/desktop/vite.config.js | 55 ++++++++-------- packages/ui/src/components/code/shiki.svelte | 25 ++++++-- .../custom/draggable-command-group.svelte | 2 +- .../components/extension/StoreListing.svelte | 63 ------------------- packages/ui/src/components/extension/index.ts | 1 - packages/ui/src/constants.ts | 3 +- 9 files changed, 106 insertions(+), 121 deletions(-) delete mode 100644 packages/ui/src/components/extension/StoreListing.svelte diff --git a/apps/desktop/src/routes/extension/store/+layout.svelte b/apps/desktop/src/routes/extension/store/+layout.svelte index f1c04bd..965001f 100644 --- a/apps/desktop/src/routes/extension/store/+layout.svelte +++ b/apps/desktop/src/routes/extension/store/+layout.svelte @@ -8,7 +8,9 @@ let flipState: Flip.FlipState beforeNavigate(() => { - flipState = Flip.getState(`.${Constants.CLASSNAMES.EXT_LOGO}`) + flipState = Flip.getState( + `.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}` + ) }) afterNavigate(() => { @@ -17,7 +19,7 @@ } Flip.from(flipState, { - targets: ".kk-ext-logo", + targets: `.${Constants.CLASSNAMES.EXT_LOGO}, .${Constants.CLASSNAMES.BACK_BUTTON}`, duration: 0.5, absolute: true, scale: true, diff --git a/apps/desktop/src/routes/extension/store/+page.svelte b/apps/desktop/src/routes/extension/store/+page.svelte index 74f3680..7f53ef9 100644 --- a/apps/desktop/src/routes/extension/store/+page.svelte +++ b/apps/desktop/src/routes/extension/store/+page.svelte @@ -2,21 +2,19 @@ import { getExtensionsFolder } from "@/constants" import { appState, extensions } from "@/stores" import { supabaseAPI } from "@/supabase" - import { goBackOnEscape, goBackOnEscapeClearSearchTerm } from "@/utils/key" + import { goBackOnEscapeClearSearchTerm } from "@/utils/key" import { goBack } from "@/utils/route" - import { isCompatible } from "@kksh/api" import { SBExt } from "@kksh/api/supabase" import { isUpgradable } from "@kksh/extension" - import { Command } from "@kksh/svelte5" - import { StoreListing } from "@kksh/ui/extension" - import { greaterThan, parse as parseSemver } from "@std/semver" + import { Button, Command } from "@kksh/svelte5" + import { Constants } from "@kksh/ui" + import { ExtListItem } from "@kksh/ui/extension" + import { CustomCommandInput, GlobalCommandPaletteFooter } from "@kksh/ui/main" import { goto } from "$app/navigation" - import { onMount } from "svelte" + import { ArrowLeft } from "lucide-svelte" import { toast } from "svelte-sonner" - import { get } from "svelte/store" - import { type PageData } from "./$types" - let { data }: { data: PageData } = $props() + let { data } = $props() const { storeExtList, installedStoreExts, installedExtsMap, upgradableExpsMap } = data // function isUpgradeable(item: DbExtItem): boolean { @@ -67,15 +65,37 @@ - + +{#snippet leftSlot()} + +{/snippet} + + + + No results found. + {#each storeExtList as ext} + onExtItemSelected(ext)} + onUpgrade={() => onExtItemUpgrade(ext)} + onInstall={() => onExtItemInstall(ext)} + /> + {/each} + + + diff --git a/apps/desktop/src/routes/extension/store/[identifier]/+page.svelte b/apps/desktop/src/routes/extension/store/[identifier]/+page.svelte index 23d82af..67ce854 100644 --- a/apps/desktop/src/routes/extension/store/[identifier]/+page.svelte +++ b/apps/desktop/src/routes/extension/store/[identifier]/+page.svelte @@ -4,6 +4,8 @@ import { supabaseAPI } from "@/supabase" import { goBack } from "@/utils/route.js" import { Button } from "@kksh/svelte5" + import { cn } from "@kksh/svelte5/utils" + import { Constants } from "@kksh/ui" import { StoreExtDetail } from "@kksh/ui/extension" import { greaterThan, parse as parseSemver } from "@std/semver" import { error } from "@tauri-apps/plugin-log" @@ -139,7 +141,13 @@ - ({ - plugins: [sveltekit()], + plugins: [sveltekit()], - // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` - // - // 1. prevent vite from obscuring rust errors - clearScreen: false, - // 2. tauri expects a fixed port, fail if that port is not available - server: { - port: 1420, - strictPort: true, - host: host || false, - hmr: host - ? { - protocol: "ws", - host, - port: 1421, - } - : undefined, - watch: { - // 3. tell vite to ignore watching `src-tauri` - ignored: ["**/src-tauri/**"], - }, - }, -})); + // Vite options tailored for Tauri development and only applied in `tauri dev` or `tauri build` + // + // 1. prevent vite from obscuring rust errors + clearScreen: false, + // 2. tauri expects a fixed port, fail if that port is not available + server: { + port: 1420, + strictPort: true, + host: host || false, + hmr: host + ? { + protocol: "ws", + host, + port: 1421 + } + : undefined, + watch: { + // 3. tell vite to ignore watching `src-tauri` + ignored: ["**/src-tauri/**"] + } + }, + build: { + minify: true + } +})) diff --git a/packages/ui/src/components/code/shiki.svelte b/packages/ui/src/components/code/shiki.svelte index 2d663e2..6c3ed2b 100644 --- a/packages/ui/src/components/code/shiki.svelte +++ b/packages/ui/src/components/code/shiki.svelte @@ -1,6 +1,10 @@ + + diff --git a/packages/ui/src/components/custom/draggable-command-group.svelte b/packages/ui/src/components/custom/draggable-command-group.svelte index 37adbeb..c1268df 100644 --- a/packages/ui/src/components/custom/draggable-command-group.svelte +++ b/packages/ui/src/components/custom/draggable-command-group.svelte @@ -14,7 +14,7 @@ diff --git a/packages/ui/src/components/extension/StoreListing.svelte b/packages/ui/src/components/extension/StoreListing.svelte deleted file mode 100644 index 178dceb..0000000 --- a/packages/ui/src/components/extension/StoreListing.svelte +++ /dev/null @@ -1,63 +0,0 @@ - - -{#snippet leftSlot()} - -{/snippet} - - - - No results found. - {#each storeExtList as ext} - onExtItemSelected(ext)} - onUpgrade={() => onExtItemUpgrade(ext)} - onInstall={() => onExtItemInstall(ext)} - /> - {/each} - - - diff --git a/packages/ui/src/components/extension/index.ts b/packages/ui/src/components/extension/index.ts index 78a3780..5e813b7 100644 --- a/packages/ui/src/components/extension/index.ts +++ b/packages/ui/src/components/extension/index.ts @@ -1,4 +1,3 @@ export { default as ExtListItem } from "./ExtListItem.svelte" -export { default as StoreListing } from "./StoreListing.svelte" export { default as StoreExtDetail } from "./StoreExtDetail.svelte" export { default as PermissionInspector } from "./PermissionInspector.svelte" diff --git a/packages/ui/src/constants.ts b/packages/ui/src/constants.ts index 713f046..5b6b427 100644 --- a/packages/ui/src/constants.ts +++ b/packages/ui/src/constants.ts @@ -1,3 +1,4 @@ export const CLASSNAMES = { - EXT_LOGO: "kk-ext-logo" + EXT_LOGO: "kk-ext-logo", + BACK_BUTTON: "kk-back-button" }