tlv-parser
Zero-dependency, recursive TLV (Tag-Length-Value) parser in pure ES Modules.
Supports both a raw array of TLVNode
objects and a nested plain-object keyed by tag.
Contents
Installation
# via npm
npm install tlv-parser
# or yarn
yarn add tlv-parser
Usage
import { parseTLV, parseTLVNodes } from 'tlv-parser';
// Sample TLV string
const tlv = '0046000600000101030140225202505252KGPGoQxQH5Z5RySO5102TH9104904A';
// 1) Get nested object keyed by tag
const obj = parseTLV(tlv);
console.log(obj);
/* {
"00": {
"00": "000001",
"01": "014",
"02": "202505252KGPGoQxQH5Z5RySO"
},
"51": "TH",
"91": "904A"
} */
// 2) Get raw TLVNode[]
const nodes = parseTLVNodes(tlv);
console.log(nodes);
/* [
TLVNode { tag: '00', length: 46, data: '', children: [ … ] },
TLVNode { tag: '51', length: 2, data: 'TH', children: [] },
TLVNode { tag: '91', length: 4, data: '904A', children: [] }
] */
API
parseTLV(tlvString: string): Record<string, any>
Parses a TLV-encoded string into a nested plain object keyed by tag. Values are either strings (leaf data) or nested objects (sub-TLVs).
parseTLVNodes(tlvString: string): TLVNode[]
Parses a TLV-encoded string into an array of TLVNode
entities.
Each TLVNode
has:
tag
: string (2-digit tag)length
: number (parsed length)data
: string (raw data if no children)children
:TLVNode[]
(empty if leaf)
Contributing
- Fork the repository
- Create a branch (
git checkout -b feat/YourFeature
) - Commit your changes (
git commit -m "feat: add …"
) - Push to your branch (
git push origin feat/YourFeature
) - Open a Pull Request
Please follow Conventional Commits and write tests.
License
MIT © Kawin Viriyaprasopsook