@etothepii/satisfactory-file-parser
Version:
A file parser for satisfactory files. Includes save files and blueprint files.
32 lines (31 loc) • 1.66 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.StreamParser = void 0;
const __1 = require("../../..");
class StreamParser {
static async ParseSaveFileAsynchronousToOutput(bytes, outputJson, onDecompressedSaveBody = () => { }, onProgress = () => { }) {
const reader = new __1.SaveReader(bytes.buffer, onProgress);
const writer = outputJson.getWriter();
const header = reader.readHeader();
const save = new __1.SatisfactorySave(header);
const inflateResult = reader.inflateChunks();
onDecompressedSaveBody(reader.getBuffer());
const gridHash = reader.readSaveBodyHash();
const grids = reader.readGrids();
await writer.write(`{"header:" ${JSON.stringify(header)}, "compressionInfo": {}, "gridHash": ${JSON.stringify(gridHash)}, "grids": ${JSON.stringify(grids)}, levels: [`);
await StreamParser.readLevelsAsync(reader, writer, save.header.mapName, save.header.buildVersion);
await writer.write(`]}`);
await writer.close();
}
static async readLevelsAsync(reader, writer, mapName, buildVersion) {
const levelCount = reader.readInt32();
reader.onProgressCallback(reader.getBufferProgress(), `reading pack of ${levelCount} levels.`);
for (let j = 0; j <= levelCount; j++) {
let levelName = (j === levelCount) ? '' + mapName : reader.readString();
if (j % 300 === 0) {
reader.onProgressCallback(reader.getBufferProgress(), `reading level [${(j + 1)}/${(levelCount + 1)}] ${levelName}`);
}
}
}
}
exports.StreamParser = StreamParser;
;