Deep deserialization knowledge: parseChannel schema dispatch, ros1msg/ros2msg/ros2idl/jsonschema/protobuf/flatbuffer decoders, WASM decompression handlers, and the DeserializingIterableSource wrapping pattern.
59
67%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./.github/skills/deserialization/SKILL.mdConverts raw binary message data into structured JavaScript objects.
Raw bytes (from source)
│
▼
DeserializingIterableSource (applies parseChannel-based decode)
│
▼
Decoded message objects (ready for panels)| Encoding | Schema Format | Deserializer |
|---|---|---|
ros1msg | ROS 1 message definition text | @lichtblick/rosmsg-serialization MessageReader |
ros2msg | ROS 2 message definition text | @lichtblick/rosmsg2-serialization MessageReader |
ros2idl | OMG IDL text | @lichtblick/omgidl-serialization MessageReader |
jsonschema | JSON Schema object | JSON.parse + postprocessValue (base64 decode) |
protobuf | FileDescriptorSet binary | protobufjs Root.fromDescriptor |
flatbuffer | Binary reflection schema | flatbuffers_reflection Parser |
parseChannel()packages/mcap-support/src/parseChannel.ts:
function parseChannel(channel: Channel): ParsedChannel {
// Returns { deserialize: (data: ArrayBufferView) => unknown, datatypes: Map }
// Dispatches based on channel.schema.encoding
}This is the single function that resolves any channel's schema into a deserializer.
packages/mcap-support/src/parseProtobufSchema.tspackages/mcap-support/src/parseFlatbufferSchema.tspackages/mcap-support/src/parseJsonSchema.tspackages/suite-base/src/players/IterablePlayer/DeserializingIterableSource.ts:
ISerializedIterableSource)parseChannel() to each channel's schema at initializationIDeserializedIterableSource (messages are JS objects, not raw bytes)setSamplingWindowEnd() for latest-per-render-tick mode)⚠️ This wrapper is only inserted for serialized sources. Sources that already implement
IDeserializedIterableSourceskip it.
packages/mcap-support/src/decompressHandlers.ts:
@lichtblick/wasm-zstd — best compression ratio@lichtblick/wasm-lz4 — fastest decompression@lichtblick/wasm-bz2 — legacy supportHandlers are loaded once (singleton promise) and shared across all readers.
WorkerIterableSourceroot.lookupType() is cached after first callpostprocessValue handles base64 → Uint8Array for bytes fieldsMessageReader precompiles field offsets at schema-parse timemcap-format skillweb-workers skillplayer-internals skill0900ce3
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.