Files
ChatLab/apps/desktop/main/runtime/compat.ts
T

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')
}