
MetaMessage已支持TypeScript
MetaMessage作為AI時代的全新協議,既實現了二進制緊湊編碼,同時保留了文本可讀性,是替代json、protobuf、messagepack等序列化工具的完美選擇。
MetaMessage的架構保證了跨語言的語意一致性,理論上實現了真正的跨語言。json、messagepack各語言間實現不一致,類型不一致,數據範圍也不一致。protobuf外置schema,交換困難、更新困難,靈活度不足。而MetaMessage完全解決了以上問題。
最新的TypeScript已經支持了裝飾器且默認開啟,方便我們更好地使用MetaMessage。
使用起來非常簡單:
安裝
npm i metamessage@latest
使用
import {
encodeFromValue, decodeToValue, mm, ValueType } from 'metamessage';
@mm({
desc: '用户' })
class User {
@mm({
type: ValueType.Int64, desc: '用户ID', nullable: false })
id: bigint = 0n;
@mm({
desc: '昵称' })
name: string = '';
@mm({
type: ValueType.Uint8 })
age: number = 0;
}
const u = new User();
u.id = 666n;
u.name = 'abc';
u.age = 20;
const wire = encodeFromValue(u);
console.log('wire', wire);
const decoded = decodeToValue(wire, User);
console.log('decoded:', decoded);
簡單解釋下,在類和字段上可以增加一個註解,附帶額外信息,比如一個數字類型默認是int,為了表達int64就可以type: ValueType.Int64。如果是string/bool等可以根據字面量推斷出來的,就可以省略。這樣,數據就可以攜帶類型了。
推薦增加描述desc: '用户ID',可以讓調用者輕鬆知道這個字段的意義,特別是方便AI理解,又省了文檔。
除了從語言的數據對象獲取數據,也可以直接使用文本格式,目前支持了jsonc
import {
encodeFromJSONC, decodeToJSONC } from 'metamessage';
const jsonc = `
// mm: desc="用户"
{
// mm: type=i64; desc="用户ID"
"id": 666,
// mm: desc="昵称"
"name": "abc",
// mm: type=u8
"age": 20,
}
`
const wire = encodeFromJSONC(jsonc);
const jsoncString = decodeToJSONC(wire);
console.log('JSONC:', jsoncString);