raw-codec
v1.0.0
Published
固定长度字符串协议编解码器,支持 bool/enum/number/string 类型,适用于物联网设备协议解析
Maintainers
Readme
🔧 raw-codec
固定长度字符串协议编解码器
📦 安装
npm install raw-codec🚀 快速开始
import createCodec from 'raw-codec'
const codec = createCodec({
schema: {
power: { type: 'bool', range: { start: 0, end: 0 } },
mode: {
type: 'enum',
range: { start: 1, end: 2 },
map: { '00': 'cool', '01': 'heat', '02': 'auto' }
},
temp: { type: 'number', range: { start: 3, end: 4 }, scale: 0.1 }
}
})
// 解码
const { data } = codec.decode('10125')
// => { power: true, mode: 'cool', temp: 2.5 }
// 编码
const { data: raw } = codec.encode({ power: false, mode: 'heat', temp: 2.0 })
// => '00120'📚 支持的字段类型
| 类型 | 说明 | 示例 | |:---:|:---|:---| | 🔘 bool | 布尔值 | 开关状态、标志位 | | 📋 enum | 枚举/映射 | 模式选择、状态码 | | 🔢 number | 数字(支持进制/缩放) | 温度、湿度、计数器 | | 📝 string | 原始字符串 | 文本内容、标识符 |
🎨 高级特性
interface Protocol {
power: boolean
mode: 'cool' | 'heat' | 'auto'
temp: number
}
const codec = createCodec<Protocol>({ schema })
// TypeScript 自动检查字段名和类型{
type: 'enum',
range: { start: 0, end: 6 },
array: true,
map: { '0': false, '1': true }
}
// decode('1010101') => [true, false, true, false, true, false, true]{
type: 'number',
range: { start: 0, end: 9 },
decode: ({ raw }) => new Date(parseInt(raw, 10)),
encode: ({ value }) => String(value.getTime()).padStart(10, '0')
}📖 文档
🤝 贡献
欢迎提交 Issue 和 Pull Request!
