Files
fusion/packages/cli/src/update-cache.ts
2026-04-29 07:54:45 -07:00

57 lines
1.5 KiB
TypeScript

import { readFileSync } from "node:fs";
import { join } from "node:path";
import { GlobalSettingsStore, resolveGlobalDir } from "@fusion/core";
type CachedUpdateStatus = {
updateAvailable: boolean;
latestVersion: string;
currentVersion: string;
};
type UpdateCachePayload = {
updateAvailable?: unknown;
latestVersion?: unknown;
currentVersion?: unknown;
};
export function getCachedUpdateStatus(currentVersion?: string): CachedUpdateStatus | null {
try {
const cachePath = join(resolveGlobalDir(), "update-check.json");
const raw = readFileSync(cachePath, "utf-8");
const parsed = JSON.parse(raw) as UpdateCachePayload;
if (
parsed.updateAvailable === true &&
typeof parsed.latestVersion === "string" &&
parsed.latestVersion.length > 0 &&
typeof parsed.currentVersion === "string" &&
parsed.currentVersion.length > 0
) {
if (
typeof currentVersion === "string" &&
currentVersion.length > 0 &&
parsed.currentVersion !== currentVersion
) {
return null;
}
return {
updateAvailable: true,
latestVersion: parsed.latestVersion,
currentVersion: parsed.currentVersion,
};
}
return null;
} catch {
return null;
}
}
export async function isUpdateCheckEnabled(): Promise<boolean> {
const store = new GlobalSettingsStore();
await store.init();
const settings = await store.getSettings();
return settings.updateCheckEnabled !== false;
}