${name}
`)
+ arr.push('')
+ arr.push('')
+}
+const makeDropdownEnd = (arr) => {
+ arr.push('')
+ arr.push('
')
+ arr.push(' ')
+}
+
+function makeMarkdown (data) {
+ const str = []
+ const { collected, missing } = data
+
+ makeDropdownStart(`Collected (${collected.length})`, str)
+ str.push('| Packet |')
+ str.push('| --- |')
+ collected.forEach(elem => {
+ str.push(`| ${elem} |`)
+ })
+ makeDropdownEnd(str)
+
+ makeDropdownStart(`Missing (${missing.length})`, str)
+ str.push('| Packet |')
+ str.push('| --- |')
+ missing.forEach(elem => {
+ str.push(`| ${elem} |`)
+ })
+ makeDropdownEnd(str)
+
+ return str.join('\n')
+}
+
+function parsePacketCounter (version, kindCounter) {
+ const protocol = require(`../data/${version}/protocol.json`)
+ // record packets
+ return {
+ collectedPackets: Object.keys(kindCounter),
+ allPackets: Object.keys(protocol)
+ .filter(o => o.startsWith('packet_'))
+ .map(o => o.replace('packet_', ''))
+ }
+}
+
+async function makeStats (kindCounter, version) {
+ const { collectedPackets, allPackets } = parsePacketCounter(version, kindCounter)
+ // write packet data
+ const data = {
+ collected: collectedPackets,
+ missing: allPackets.filter(o => !collectedPackets.includes(o))
+ }
+ const metadataFolder = path.join(output, 'metadata')
+
+ await fs.promises.writeFile(path.join(output, 'README.md'), makeMarkdown(data))
+ await fs.promises.mkdir(metadataFolder)
+ await fs.promises.writeFile(path.join(metadataFolder, 'packets_info.json'), JSON.stringify(data, null, 2))
+}
+
+async function main () {
+ const version = process.argv[2]
+ if (!version) {
+ console.error('Usage: node dumpPackets.js