"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SaveProject = void 0; const fs = require("fs"); const path = require("node:path"); const LoadModel_1 = require("./LoadModel"); const ModelComponentType_1 = require("../src/app/game-model/ModelComponentType"); const LoadedProject_1 = require("./LoadedProject"); const RecursiveLoadModel_1 = require("./RecursiveLoadModel"); class SaveProject { static saveProject(projectDir, storageModels) { if (!fs.existsSync(projectDir)) { fs.mkdirSync(projectDir, { recursive: true }); } console.log(storageModels); storageModels.forEach(storageModel => { let modelDir = path.join(projectDir, storageModel.storageRootDir); storageModel.storagePath.forEach(pathElement => modelDir = path.join(modelDir, pathElement)); if (!fs.existsSync(modelDir)) { fs.mkdirSync(modelDir, { recursive: true }); } const filePath = path.join(modelDir, storageModel.fileName + ".json"); fs.writeFile(filePath, storageModel.jsonString, 'utf-8', (err) => { if (err) { console.error('Error writing JSON to file:', err); } else { console.log('JSON file saved successfully:', filePath); } }); }); } static loadProject(projectDir) { let loadedScriptAccounts = SaveProject.loadScriptAccounts(projectDir); loadedScriptAccounts = loadedScriptAccounts.concat(SaveProject.loadGamesystems(projectDir)); return new LoadedProject_1.LoadedProject(path.basename(projectDir), loadedScriptAccounts); } static loadScriptAccounts(projectDir) { const scriptAccountDir = path.join(projectDir, "script-accounts"); if (!fs.existsSync(scriptAccountDir)) { return []; } const loadedScriptAccounts = []; const scriptAccountFileNames = fs.readdirSync(scriptAccountDir); scriptAccountFileNames.forEach(scriptAccountFileName => { const scriptAccountFile = path.join(scriptAccountDir, scriptAccountFileName); const scriptAccountData = fs.readFileSync(scriptAccountFile, 'utf-8'); loadedScriptAccounts.push({ modelType: ModelComponentType_1.ModelComponentType.SCRIPTACCOUNT, jsonString: scriptAccountData }); }); return loadedScriptAccounts; } static loadGamesystems(projectDir) { const gamesystemDir = path.join(projectDir, "gamesystems"); const loadedGamesystems = this.loadGamesystemsRecursively(gamesystemDir); console.log("LoadedGamesystems: ", loadedGamesystems.length); return loadedGamesystems; } static loadGamesystemsRecursively(gamesystemDir) { let loadedGamesystems = []; const gamesystemFileNames = fs.readdirSync(gamesystemDir); gamesystemFileNames.forEach(fileName => { const gamesystemPath = path.join(gamesystemDir, fileName); if (fs.lstatSync(gamesystemPath).isDirectory()) { const childModels = SaveProject.loadGamesystemsRecursively(gamesystemPath); loadedGamesystems = loadedGamesystems.concat(childModels); } else { const gamesystemData = fs.readFileSync(path.join(gamesystemDir, fileName), "utf-8"); if (path.parse(fileName).name === path.basename(gamesystemDir)) { if ((path.basename(gamesystemDir) === path.parse(fileName).name) && path.basename(path.parse(gamesystemDir).dir) === "gamesystems") { const loadedModel = new LoadModel_1.LoadModel(gamesystemData, ModelComponentType_1.ModelComponentType.GAMESYTEM); loadedGamesystems.unshift(loadedModel); } else { const loadedModel = new RecursiveLoadModel_1.RecursiveLoadModel(gamesystemData, ModelComponentType_1.ModelComponentType.GAMESYTEM, path.basename(gamesystemDir)); loadedGamesystems.unshift(loadedModel); } } else { const secondCon = path.basename(gamesystemDir) === path.parse(fileName).name; const thirdCon = path.basename(path.parse(gamesystemDir).dir) === "gamesystems"; if (path.basename(gamesystemDir) === "gamesystems") { const loadedModel = new LoadModel_1.LoadModel(gamesystemData, ModelComponentType_1.ModelComponentType.GAMESYTEM); loadedGamesystems.push(loadedModel); } else { const loadedModel = new RecursiveLoadModel_1.RecursiveLoadModel(gamesystemData, ModelComponentType_1.ModelComponentType.GAMESYTEM, path.basename(gamesystemDir)); loadedGamesystems.push(loadedModel); } } } }); return loadedGamesystems; } } exports.SaveProject = SaveProject; //# sourceMappingURL=SaveProject.js.map