v3mt
Version:
A CLI toolkit for managing and deploying Victoria 3 mods, including sending mod files to the game, launching the game, and more.
63 lines (62 loc) • 2.25 kB
JavaScript
import path from 'path';
import fs from 'fs';
export class Config {
MOD_SOURCE_FOLDER;
GAME_FOLDER;
GAME_MOD_FOLDER;
MOD_DESTINATION_FOLDER;
ERROR_LOG;
constructor(config) {
this.MOD_SOURCE_FOLDER = config.MOD_SOURCE_FOLDER;
this.GAME_FOLDER = config.GAME_FOLDER;
this.GAME_MOD_FOLDER = config.GAME_MOD_FOLDER;
this.MOD_DESTINATION_FOLDER =
config.MOD_DESTINATION_FOLDER ??
Config.generateModDestinationFolder(config.GAME_MOD_FOLDER, config.MOD_SOURCE_FOLDER);
this.ERROR_LOG = config.ERROR_LOG;
}
static V3MT_CONFIG_FILE_NAME = 'v3mt.config.json';
static getConfigPath() {
return path.resolve(process.cwd(), Config.V3MT_CONFIG_FILE_NAME);
}
static generateModDestinationFolder(GAME_MOD_FOLDER, MOD_SOURCE_FOLDER) {
return path.join(GAME_MOD_FOLDER, path.basename(MOD_SOURCE_FOLDER));
}
static fromFile(filePath) {
const configPath = filePath ?? Config.getConfigPath();
if (!fs.existsSync(configPath)) {
throw new Error(`Config file not found at ${configPath}. Run 'v3mt init' to create one.`);
}
const raw = fs.readFileSync(configPath, 'utf-8');
const data = JSON.parse(raw);
return new Config(data);
}
saveToFile(filePath) {
const configPath = filePath ?? Config.getConfigPath();
const exportData = {
MOD_SOURCE_FOLDER: this.MOD_SOURCE_FOLDER,
GAME_FOLDER: this.GAME_FOLDER,
GAME_MOD_FOLDER: this.GAME_MOD_FOLDER,
MOD_DESTINATION_FOLDER: this.MOD_DESTINATION_FOLDER,
ERROR_LOG: this.ERROR_LOG,
};
fs.writeFileSync(configPath, JSON.stringify(exportData, null, 2));
}
getMetadataFile() {
return path.join(this.MOD_SOURCE_FOLDER, '.metadata', 'metadata.json');
}
getMetadata() {
try {
return JSON.parse(fs.readFileSync(this.getMetadataFile(), 'utf8'));
}
catch {
return null;
}
}
getModName() {
return this.getMetadata()?.name ?? path.basename(this.MOD_SOURCE_FOLDER);
}
getModFolderName() {
return path.basename(this.MOD_SOURCE_FOLDER);
}
}