import { Utils, NiimbotPacket, RequestCommandId, ResponseCommandId, PacketParser } from "../dist/index.js"; import fs from "fs"; // usage: npm run parse-text-dump <path> [data | min | min-out | print-task] // // input file example: // // >> 555540010849AAAA // << 55554801024BAAAA // >> 555540010948AAAA // << 55554902016822AAAA const path = process.argv[2]; const display = process.argv.length > 3 ? process.argv[3] : ""; const data = fs.readFileSync(path, "utf8"); const lines = data.split(/\r?\n/); let printStarted = false; for (const line of lines) { const splitted = line.split(" "); if (splitted.length !== 2) { continue; } let [direction, hexData] = splitted; let comment = ""; try { const data = Utils.hexToBuf(hexData.startsWith("03") ? hexData.substring(2) : hexData); const packets = PacketParser.parsePacketBundle(data); if (packets.length === 0) { comment = "Parse error (no packets found)"; } else if (packets.length > 1) { comment = `Multi-packet (x${packets.length}); `; } for (const packet of packets) { if (direction === ">>") { comment += RequestCommandId[packet.command] ?? "???"; if (packet.command === RequestCommandId.PrintStart) { printStarted = true; const versions = { 1: "v1", 2: "v3", 7: "v4", 8: "v5" }; comment += "_" + versions[packet.dataLength]; } else if (packet.command === RequestCommandId.SetPageSize) { const versions = { 2: "v1", 4: "v2", 6: "v3", 8: "v5" }; comment += "_" + versions[packet.dataLength]; } else if (packet.command === RequestCommandId.PrintEnd) { printStarted = false; } } else { comment += ResponseCommandId[packet.command] ?? "???"; } if (display === "data") { comment += `(${packet.dataLength}: ${Utils.bufToHex(packet.data)}); `; } else { comment += `(${packet.dataLength}); `; } } } catch (e) { comment = "Invalid packet"; } if (display === "min") { console.log(`${direction} ${comment}`); } else if (display === "min-out") { if (direction === ">>") { console.log(`${direction} ${comment}`); } } else if (display === "print-task") { if (direction === ">>" && printStarted) { console.log(`${direction} ${comment}`); } } else { console.log(`${direction} ${hexData}\t// ${comment}`); } }