arx-level-generator
Version:
A tool for creating Arx Fatalis maps
55 lines • 1.96 kB
JavaScript
import fs from 'node:fs/promises';
import path from 'node:path';
import { generateMetadata } from './MetaData.js';
import { fileExists } from './helpers.js';
export class Manifest {
static filename = 'manifest.json';
static getPathToFilename(settings) {
return path.resolve(settings.outputDir, Manifest.filename);
}
static async exists(settings) {
const filename = Manifest.getPathToFilename(settings);
return await fileExists(filename);
}
static async read(settings) {
const filename = Manifest.getPathToFilename(settings);
if (!(await Manifest.exists(settings))) {
return undefined;
}
try {
const rawIn = await fs.readFile(filename, 'utf-8');
return JSON.parse(rawIn);
}
catch (e) {
console.error(`[error] Manifest: failed to read or parse "${Manifest.filename}" in "${settings.outputDir}"`);
return undefined;
}
}
static async write(settings, files, prettify = false) {
const metaData = await generateMetadata(settings);
const manifest = {
...metaData,
files: files.map((file) => {
return file.replace(settings.outputDir, '');
}),
};
await fs.writeFile(Manifest.getPathToFilename(settings), prettify ? JSON.stringify(manifest, null, 2) : JSON.stringify(manifest));
}
static async uninstall(settings) {
if (!(await Manifest.exists(settings))) {
return;
}
const manifest = (await Manifest.read(settings)) ?? { files: [] };
for (const file of manifest.files) {
try {
await fs.rm(path.resolve(settings.outputDir, file));
}
catch (e) { }
}
try {
await fs.rm(Manifest.getPathToFilename(settings));
}
catch (e) { }
}
}
//# sourceMappingURL=Manifest.js.map