From 958dd53530f138e2b723b4b30960066de07bb782 Mon Sep 17 00:00:00 2001 From: bymyself Date: Thu, 11 Dec 2025 04:51:09 -0800 Subject: [PATCH] don't just alias --- .../src/platform/distribution/types.ts | 16 ++++++++++++++++ apps/desktop-ui/src/utils/envUtil.ts | 8 +++----- apps/desktop-ui/vite.config.mts | 3 +++ src/App.vue | 5 +++-- src/platform/distribution/types.ts | 4 +--- src/router.ts | 11 +++++------ src/utils/envUtil.ts | 6 ++---- 7 files changed, 33 insertions(+), 20 deletions(-) create mode 100644 apps/desktop-ui/src/platform/distribution/types.ts diff --git a/apps/desktop-ui/src/platform/distribution/types.ts b/apps/desktop-ui/src/platform/distribution/types.ts new file mode 100644 index 0000000000..8ef904ca57 --- /dev/null +++ b/apps/desktop-ui/src/platform/distribution/types.ts @@ -0,0 +1,16 @@ +/** + * Distribution types and compile-time constants for managing + * multi-distribution builds (Desktop, Localhost, Cloud) + */ + +type Distribution = 'desktop' | 'localhost' | 'cloud' + +declare global { + const __DISTRIBUTION__: Distribution +} + +/** Current distribution - replaced at compile time */ +const DISTRIBUTION: Distribution = __DISTRIBUTION__ + +/** Distribution type checks */ +export const isDesktop = DISTRIBUTION === 'desktop' diff --git a/apps/desktop-ui/src/utils/envUtil.ts b/apps/desktop-ui/src/utils/envUtil.ts index ff29be6547..40ba5d7a1c 100644 --- a/apps/desktop-ui/src/utils/envUtil.ts +++ b/apps/desktop-ui/src/utils/envUtil.ts @@ -1,8 +1,6 @@ import type { ElectronAPI } from '@comfyorg/comfyui-electron-types' -function isElectron() { - return 'electronAPI' in window && window.electronAPI !== undefined -} +import { isDesktop } from '@/platform/distribution/types' export function electronAPI() { return (window as any).electronAPI as ElectronAPI @@ -12,5 +10,5 @@ export function isNativeWindow() { return isDesktop && !!window.navigator.windowControlsOverlay?.visible } -/** Distribution type check - desktop-ui always runs in desktop context */ -export const isDesktop = isElectron() +// Re-export for backwards compatibility +export { isDesktop } from '@/platform/distribution/types' diff --git a/apps/desktop-ui/vite.config.mts b/apps/desktop-ui/vite.config.mts index 7cbc5307dc..c1b70c8e3e 100644 --- a/apps/desktop-ui/vite.config.mts +++ b/apps/desktop-ui/vite.config.mts @@ -67,6 +67,9 @@ export default defineConfig(() => { minify: SHOULD_MINIFY ? ('esbuild' as const) : false, target: 'es2022', sourcemap: true + }, + define: { + __DISTRIBUTION__: JSON.stringify('desktop') } } }) diff --git a/src/App.vue b/src/App.vue index 6b7c56be07..fc732744c2 100644 --- a/src/App.vue +++ b/src/App.vue @@ -17,13 +17,14 @@ import { computed, onMounted } from 'vue' import GlobalDialog from '@/components/dialog/GlobalDialog.vue' import config from '@/config' import { t } from '@/i18n' +import { isDesktop } from '@/platform/distribution/types' import { useWorkflowStore } from '@/platform/workflow/management/stores/workflowStore' import { app } from '@/scripts/app' import { useDialogService } from '@/services/dialogService' import { useWorkspaceStore } from '@/stores/workspaceStore' import { useConflictDetection } from '@/workbench/extensions/manager/composables/useConflictDetection' -import { electronAPI, isElectron } from './utils/envUtil' +import { electronAPI } from './utils/envUtil' const workspaceStore = useWorkspaceStore() const conflictDetection = useConflictDetection() @@ -50,7 +51,7 @@ const showContextMenu = (event: MouseEvent) => { onMounted(() => { window['__COMFYUI_FRONTEND_VERSION__'] = config.app_version - if (isElectron()) { + if (isDesktop) { document.addEventListener('contextmenu', showContextMenu) } diff --git a/src/platform/distribution/types.ts b/src/platform/distribution/types.ts index d03e6d53b8..b39e1a9214 100644 --- a/src/platform/distribution/types.ts +++ b/src/platform/distribution/types.ts @@ -1,5 +1,3 @@ -import { isElectron } from '@/utils/envUtil' - /** * Distribution types and compile-time constants for managing * multi-distribution builds (Desktop, Localhost, Cloud) @@ -15,6 +13,6 @@ declare global { const DISTRIBUTION: Distribution = __DISTRIBUTION__ /** Distribution type checks */ -export const isDesktop = DISTRIBUTION === 'desktop' || isElectron() // TODO: replace with build var +export const isDesktop = DISTRIBUTION === 'desktop' export const isCloud = DISTRIBUTION === 'cloud' // export const isLocalhost = DISTRIBUTION === 'localhost' || (!isDesktop && !isCloud) diff --git a/src/router.ts b/src/router.ts index 5ca66c9535..854b8e2157 100644 --- a/src/router.ts +++ b/src/router.ts @@ -8,11 +8,10 @@ import { import type { RouteLocationNormalized } from 'vue-router' import { useFeatureFlags } from '@/composables/useFeatureFlags' -import { isCloud } from '@/platform/distribution/types' +import { isCloud, isDesktop } from '@/platform/distribution/types' import { useDialogService } from '@/services/dialogService' import { useFirebaseAuthStore } from '@/stores/firebaseAuthStore' import { useUserStore } from '@/stores/userStore' -import { isElectron } from '@/utils/envUtil' import LayoutDefault from '@/views/layouts/LayoutDefault.vue' import { installPreservedQueryTracker } from '@/platform/navigation/preservedQueryTracker' @@ -29,7 +28,7 @@ const isFileProtocol = window.location.protocol === 'file:' * to support deployments like http://mysite.com/ComfyUI/ */ function getBasePath(): string { - if (isElectron()) return '/' + if (isDesktop) return '/' if (isCloud) return import.meta.env?.BASE_URL || '/' return window.location.pathname } @@ -156,8 +155,8 @@ if (isCloud) { // Handle other protected routes if (!isLoggedIn) { - // For Electron, use dialog - if (isElectron()) { + // For desktop, use dialog + if (isDesktop) { const dialogService = useDialogService() const loginSuccess = await dialogService.showSignInDialog() return loginSuccess ? next() : next(false) @@ -169,7 +168,7 @@ if (isCloud) { // User is logged in - check if they need onboarding (when enabled) // For root path, check actual user status to handle waitlisted users - if (!isElectron() && isLoggedIn && to.path === '/') { + if (!isDesktop && isLoggedIn && to.path === '/') { if (!flags.onboardingSurveyEnabled) { return next() } diff --git a/src/utils/envUtil.ts b/src/utils/envUtil.ts index d31efdec7d..d8aa8d2869 100644 --- a/src/utils/envUtil.ts +++ b/src/utils/envUtil.ts @@ -1,8 +1,6 @@ import type { ElectronAPI } from '@comfyorg/comfyui-electron-types' -export function isElectron() { - return 'electronAPI' in window && window.electronAPI !== undefined -} +import { isDesktop } from '@/platform/distribution/types' export function electronAPI() { return (window as any).electronAPI as ElectronAPI @@ -13,5 +11,5 @@ export function showNativeSystemMenu() { } export function isNativeWindow() { - return isElectron() && !!window.navigator.windowControlsOverlay?.visible + return isDesktop && !!window.navigator.windowControlsOverlay?.visible }