import fs from "node:fs"; import path from "node:path"; import { fileURLToPath } from "node:url"; import { generateManastormForensics, renderManastormForensicsMarkdown, } from "./forensics.mjs"; const scriptDirectory = path.dirname(fileURLToPath(import.meta.url)); const projectRoot = path.resolve(scriptDirectory, "..", ".."); function parseArguments(arguments_) { const options = { projectRoot }; for (let index = 0; index < arguments_.length; index += 1) { const argument = arguments_[index]; const value = arguments_[index + 1]; if (!argument.startsWith("--") || !value || value.startsWith("--")) { throw new Error(`Expected --option value, received ${JSON.stringify(argument)}.`); } index += 1; if (argument === "--realm-dbc-root") options.realmDbcRoot = value; else if (argument === "--legacy-dbc-root") options.legacyDbcRoot = value; else if (argument === "--aio-cache") options.aioCachePath = value; else if (argument === "--audio-root") options.audioRoot = value; else if (argument === "--output") options.outputPath = value; else if (argument === "--affix-output") options.affixOutputPath = value; else if (argument === "--markdown-output") options.markdownOutputPath = value; else throw new Error(`Unknown option ${argument}.`); } return options; } const options = parseArguments(process.argv.slice(2)); const outputPath = path.resolve( options.outputPath ?? path.join(projectRoot, "..", "HealerMan-Storage", "pipeline-work", "manastorm", "client-forensics.json"), ); const markdownOutputPath = path.resolve( options.markdownOutputPath ?? path.join(projectRoot, "..", "HealerMan-Storage", "pipeline-work", "manastorm", "CLIENT_FORENSICS.md"), ); const affixOutputPath = path.resolve( options.affixOutputPath ?? path.join(projectRoot, "src", "game", "generated", "manastormAffixes.json"), ); const report = generateManastormForensics(options); fs.mkdirSync(path.dirname(outputPath), { recursive: true }); fs.writeFileSync(outputPath, `${JSON.stringify(report, null, 2)}\n`); fs.mkdirSync(path.dirname(markdownOutputPath), { recursive: true }); fs.writeFileSync(markdownOutputPath, `${renderManastormForensicsMarkdown(report)}\n`); fs.mkdirSync(path.dirname(affixOutputPath), { recursive: true }); fs.writeFileSync(affixOutputPath, `${JSON.stringify({ schemaVersion: 1, sourceReportId: report.reportId, spellDbcSha256: report.sources.spellDbc.sha256, affixes: report.messages.affixDefinitions, }, null, 2)}\n`); console.log( [ `Generated ${path.relative(projectRoot, outputPath).replaceAll("\\", "/")}`, `generated ${path.relative(projectRoot, markdownOutputPath).replaceAll("\\", "/")}`, `generated ${path.relative(projectRoot, affixOutputPath).replaceAll("\\", "/")}`, `${report.messages.counts.uniqueAffixes} unique affixes`, `${report.messages.counts.equipmentUnlocks} equipment unlock messages`, `${report.aioContract.handlers.length} AIO handlers`, `${report.audioEvidence.portalCueCount} portal audio cues`, ].join("; "), );