mirror of
https://github.com/hellodigua/ChatLab.git
synced 2026-10-26 02:04:37 +08:00
58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
import type { PathProvider } from '@openchatlab/core'
|
|
import {
|
|
assertDataDirCompatible,
|
|
DataDirCompatibilityError,
|
|
type RuntimeIdentity,
|
|
} from '@openchatlab/node-runtime/data-dir-compat'
|
|
|
|
export function resolveDesktopAppVersion(electronVersion: string | null | undefined, bundledVersion?: string): string {
|
|
const normalizedElectronVersion = normalizeVersion(electronVersion)
|
|
if (normalizedElectronVersion && normalizedElectronVersion !== '0.0.0') return normalizedElectronVersion
|
|
|
|
const normalizedBundledVersion = normalizeVersion(bundledVersion)
|
|
if (normalizedBundledVersion) return normalizedBundledVersion
|
|
|
|
return normalizedElectronVersion || '0.0.0'
|
|
}
|
|
|
|
export function getDesktopAppVersion(electronVersion: string | null | undefined): string {
|
|
return resolveDesktopAppVersion(electronVersion, typeof __APP_VERSION__ !== 'undefined' ? __APP_VERSION__ : undefined)
|
|
}
|
|
|
|
export function createDesktopRuntimeIdentity(version: string): RuntimeIdentity {
|
|
return { version, kind: 'desktop' }
|
|
}
|
|
|
|
export function assertDesktopDataDirCompatible(pathProvider: PathProvider, version: string): RuntimeIdentity {
|
|
const runtime = createDesktopRuntimeIdentity(version)
|
|
|
|
try {
|
|
assertDataDirCompatible(pathProvider, runtime)
|
|
} catch (error) {
|
|
if (
|
|
error instanceof DataDirCompatibilityError &&
|
|
error.code === 'DATA_DIR_REQUIRES_NEWER_RUNTIME' &&
|
|
error.minRuntimeVersion
|
|
) {
|
|
throw new Error(formatDesktopDataDirCompatibilityError(error, runtime), { cause: error })
|
|
}
|
|
|
|
throw error
|
|
}
|
|
|
|
return runtime
|
|
}
|
|
|
|
function normalizeVersion(version: string | null | undefined): string {
|
|
return typeof version === 'string' ? version.trim() : ''
|
|
}
|
|
|
|
function formatDesktopDataDirCompatibilityError(error: DataDirCompatibilityError, runtime: RuntimeIdentity): string {
|
|
return [
|
|
`ChatLab data directory requires ChatLab ${error.minRuntimeVersion} or newer.`,
|
|
`Current desktop version: ${runtime.version}.`,
|
|
`Data directory: ${error.userDataDir}.`,
|
|
'Please upgrade ChatLab desktop before opening this data directory.',
|
|
].join('\n')
|
|
}
|