UNPKG

@etothepii/satisfactory-file-parser

Version:

A file parser for satisfactory files. Includes save files and blueprint files.

32 lines (31 loc) 1.66 kB
"use strict"; 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;