UNPKG

@owdproject/core

Version:

Nuxt Desktop module for browser desktop experiences (windows, shell, apps)

57 lines (42 loc) 1.57 kB
import { getActivePinia, setActivePinia } from 'pinia' import type { Pinia } from 'pinia' import { useApplicationManager } from '../runtime/composables/useApplicationManager' const pendingDesktopApps: ApplicationConfig[] = [] let pluginPiniaInstance: Pinia | undefined /** Set by desktop-shell-init; avoids importing nuxt/app during jiti config load. */ export function registerDesktopPluginPinia(pinia: Pinia | undefined) { pluginPiniaInstance = pinia } function resolveActivePinia() { const active = getActivePinia() if (active) return active if (pluginPiniaInstance) { setActivePinia(pluginPiniaInstance) return pluginPiniaInstance } return undefined } let isBooted = false /** * Register a desktop app. Queues until Pinia is active when theme/app plugins * run before shell-init (legacy published apps using synchronous setup). */ export async function defineDesktopApp(config: ApplicationConfig) { if (import.meta.server) return undefined if (isBooted && resolveActivePinia()) { const applicationManager = useApplicationManager() return applicationManager.defineApp(config.id, config) } pendingDesktopApps.push(config) return undefined } export async function flushPendingDesktopApps() { isBooted = true if (pendingDesktopApps.length === 0) return if (!resolveActivePinia()) return const queue = pendingDesktopApps.splice(0, pendingDesktopApps.length) const applicationManager = useApplicationManager() for (const config of queue) { await applicationManager.defineApp(config.id, config) } }