@deskthing/cli
Version:
An emulator for the DeskThing Server
59 lines (56 loc) • 2.25 kB
text/typescript
import path from 'path';
import fs from 'fs';
import { Logger } from '../services/logger'
import { DeskThingConfig } from '../../config/deskthing.config';
type PlatformTypes = 'linux' | 'windows' | 'macos';
type TagTypes = 'system' | 'utility' | 'media' | 'development' | 'network' | 'gaming';
export type AppManifest = {
id: string;
isWebApp: boolean;
requires: string[];
label: string;
version: string;
description: string;
author: string;
platforms: PlatformTypes[];
homepage: string;
version_code: number;
compatible_server: string;
compatible_client: string;
repository: string;
tags: TagTypes[];
requiredVersions: Record<string, string>;
};
export const getManifestDetails = (): AppManifest => {
const manifestPath = path.join(process.cwd(), 'deskthing', 'manifest.json');
const altManifestPath = path.join(process.cwd(), 'public', 'manifest.json');
let finalPath = manifestPath
if (!fs.existsSync(finalPath)) {
finalPath = altManifestPath
Logger.error("❌ Failed to load manifest.json from deskthing/manifest.json, trying public/manifest.json");
if (!fs.existsSync(finalPath)) {
throw new Error("\x1b[31m❌ Failed to load manifest.json from both locations\x1b[0m");
} else {
Logger.info("\x1b[32m✅ Successfully loaded manifest.json from public/manifest.json\x1b[0m");
}
}
const manifest = JSON.parse(fs.readFileSync(finalPath, 'utf8'));
return {
...manifest, // catch all for any new fields added in the future
id: manifest.id,
isWebApp: manifest.isWebApp,
requires: manifest.requires,
label: manifest.label,
version: manifest.version,
description: manifest.description,
author: manifest.author,
platforms: manifest.platforms as PlatformTypes[],
homepage: manifest.homepage,
version_code: manifest.version_code,
compatible_server: manifest.compatible_server,
compatible_client: manifest.compatible_client,
repository: manifest.repository,
tags: manifest.tags as TagTypes[],
requiredVersions: manifest.requiredVersions,
};
};