UNPKG

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