This commit is contained in:
Joel Wetzell
2026-07-13 14:09:21 -05:00
parent 4bb1e87e03
commit 466228fb4a
62 changed files with 2157 additions and 1851 deletions
+49 -38
View File
@@ -1,46 +1,57 @@
import { Constants } from '../../constants.js';
import type { InfoPacketChunk, InfoPacketChunkData } from '../../models/info/info-packet-chunk.js';
import type {
InfoPacketChunk,
InfoPacketChunkData,
} from '../../models/info/info-packet-chunk.js';
import { Decoders } from '../index.js';
export default (buffer: Uint8Array): InfoPacketChunk => {
const chunk = Decoders.Chunk(buffer);
const chunk = Decoders.Chunk(buffer);
const data: InfoPacketChunkData = {};
const data: InfoPacketChunkData = {};
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < chunk.header.dataLen) {
const chunkId = (chunk.chunkData.subarray(offset)[1] << 8) + chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000:
data.packetHeader = Decoders.PacketHeaderChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (data.packetHeader?.chunk.header.dataLen) {
offset += data.packetHeader.chunk.header.dataLen;
}
break;
case 0x0001:
data.systemName = Decoders.InfoSystemNameChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (data.systemName?.chunk.header.dataLen) {
offset += data.systemName?.chunk.header.dataLen;
}
break;
case 0x0002:
data.trackerList = Decoders.InfoTrackerListChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (data.trackerList?.chunk.header.dataLen) {
offset += data.trackerList.chunk.header.dataLen;
}
break;
default:
break;
}
}
}
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < chunk.header.dataLen) {
const chunkId =
(chunk.chunkData.subarray(offset)[1] << 8) +
chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000:
data.packetHeader = Decoders.PacketHeaderChunk(
chunk.chunkData.subarray(offset)
);
offset += Constants.CHUNK_HEADER_SIZE;
if (data.packetHeader?.chunk.header.dataLen) {
offset += data.packetHeader.chunk.header.dataLen;
}
break;
case 0x0001:
data.systemName = Decoders.InfoSystemNameChunk(
chunk.chunkData.subarray(offset)
);
offset += Constants.CHUNK_HEADER_SIZE;
if (data.systemName?.chunk.header.dataLen) {
offset += data.systemName?.chunk.header.dataLen;
}
break;
case 0x0002:
data.trackerList = Decoders.InfoTrackerListChunk(
chunk.chunkData.subarray(offset)
);
offset += Constants.CHUNK_HEADER_SIZE;
if (data.trackerList?.chunk.header.dataLen) {
offset += data.trackerList.chunk.header.dataLen;
}
break;
default:
break;
}
}
}
return {
chunk,
data,
};
return {
chunk,
data,
};
};
+14 -9
View File
@@ -1,16 +1,21 @@
import type { InfoSystemNameChunk, InfoSystemNameChunkData } from '../../models/info/info-system-name-chunk.js';
import type {
InfoSystemNameChunk,
InfoSystemNameChunkData,
} from '../../models/info/info-system-name-chunk.js';
import { Decoders } from '../index.js';
const nameDecoder = new TextDecoder();
export default (buffer: Uint8Array): InfoSystemNameChunk => {
const chunk = Decoders.Chunk(buffer);
const chunk = Decoders.Chunk(buffer);
const data: InfoSystemNameChunkData = {
systemName: nameDecoder.decode(chunk.chunkData.subarray(0, chunk.header.dataLen)),
};
const data: InfoSystemNameChunkData = {
systemName: nameDecoder.decode(
chunk.chunkData.subarray(0, chunk.header.dataLen)
),
};
return {
chunk,
data,
};
return {
chunk,
data,
};
};
+35 -28
View File
@@ -1,35 +1,42 @@
import { Constants } from '../../constants.js';
import type { InfoTrackerChunk, InfoTrackerChunkData } from '../../models/info/info-tracker-chunk.js';
import type {
InfoTrackerChunk,
InfoTrackerChunkData,
} from '../../models/info/info-tracker-chunk.js';
import { Decoders } from '../index.js';
export default (buffer: Uint8Array): InfoTrackerChunk => {
const chunk = Decoders.Chunk(buffer);
const chunk = Decoders.Chunk(buffer);
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < chunk.header.dataLen) {
const chunkId = (chunk.chunkData.subarray(offset)[1] << 8) + chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000: {
const data: InfoTrackerChunkData = {
trackerName: Decoders.InfoTrackerNameChunk(chunk.chunkData.subarray(offset)),
};
offset += Constants.CHUNK_HEADER_SIZE;
if (data.trackerName.chunk.header.dataLen) {
offset += data.trackerName.chunk.header.dataLen;
}
return {
chunk,
data,
};
}
default:
break;
}
}
}
if (chunk.header.hasSubchunks && chunk.chunkData && chunk.header.dataLen) {
let offset = 0;
while (offset < chunk.header.dataLen) {
const chunkId =
(chunk.chunkData.subarray(offset)[1] << 8) +
chunk.chunkData.subarray(offset)[0];
switch (chunkId) {
case 0x0000: {
const data: InfoTrackerChunkData = {
trackerName: Decoders.InfoTrackerNameChunk(
chunk.chunkData.subarray(offset)
),
};
offset += Constants.CHUNK_HEADER_SIZE;
if (data.trackerName.chunk.header.dataLen) {
offset += data.trackerName.chunk.header.dataLen;
}
return {
chunk,
data,
};
}
default:
break;
}
}
}
return {
chunk,
};
return {
chunk,
};
};
+30 -25
View File
@@ -1,33 +1,38 @@
import { Constants } from '../../constants.js';
import type { InfoTrackerChunk } from '../../models/info/info-tracker-chunk.js';
import type { InfoTrackerListChunk, InfoTrackerListChunkData } from '../../models/info/info-tracker-list-chunk.js';
import type {
InfoTrackerListChunk,
InfoTrackerListChunkData,
} from '../../models/info/info-tracker-list-chunk.js';
import { Decoders } from '../index.js';
export default (buffer: Uint8Array): InfoTrackerListChunk => {
const chunk = Decoders.Chunk(buffer);
const chunk = Decoders.Chunk(buffer);
const trackers: InfoTrackerChunk[] = [];
const trackers: InfoTrackerChunk[] = [];
if (chunk.header.hasSubchunks && chunk.chunkData) {
let offset = 0;
if (chunk.header.dataLen) {
while (offset < chunk.header.dataLen) {
const trackerChunk = Decoders.InfoTrackerChunk(chunk.chunkData.subarray(offset));
offset += Constants.CHUNK_HEADER_SIZE;
if (trackerChunk.chunk.header.dataLen) {
offset += trackerChunk.chunk.header.dataLen;
}
if (trackerChunk.chunk.header.id !== undefined) {
trackers.push(trackerChunk);
}
}
}
}
const data: InfoTrackerListChunkData = {
trackers,
};
return {
chunk,
data,
};
if (chunk.header.hasSubchunks && chunk.chunkData) {
let offset = 0;
if (chunk.header.dataLen) {
while (offset < chunk.header.dataLen) {
const trackerChunk = Decoders.InfoTrackerChunk(
chunk.chunkData.subarray(offset)
);
offset += Constants.CHUNK_HEADER_SIZE;
if (trackerChunk.chunk.header.dataLen) {
offset += trackerChunk.chunk.header.dataLen;
}
if (trackerChunk.chunk.header.id !== undefined) {
trackers.push(trackerChunk);
}
}
}
}
const data: InfoTrackerListChunkData = {
trackers,
};
return {
chunk,
data,
};
};
+14 -9
View File
@@ -1,16 +1,21 @@
import type { InfoTrackerNameChunk, InfoTrackerNameChunkData } from '../../models/info/info-tracker-name-chunk.js';
import type {
InfoTrackerNameChunk,
InfoTrackerNameChunkData,
} from '../../models/info/info-tracker-name-chunk.js';
import { Decoders } from '../index.js';
const nameDecoder = new TextDecoder();
export default (buffer: Uint8Array): InfoTrackerNameChunk => {
const chunk = Decoders.Chunk(buffer);
const chunk = Decoders.Chunk(buffer);
const data: InfoTrackerNameChunkData = {
trackerName: nameDecoder.decode(chunk.chunkData.subarray(0, chunk.header.dataLen)),
};
const data: InfoTrackerNameChunkData = {
trackerName: nameDecoder.decode(
chunk.chunkData.subarray(0, chunk.header.dataLen)
),
};
return {
chunk,
data,
};
return {
chunk,
data,
};
};