1.1.3 • Published 10 months ago

napcat.protobuf v1.1.3

Weekly downloads
-
License
-
Repository
-
Last release
10 months ago

napcat-protobuf-runtime

此库是@protobuf-ts/runtime再封装方案

用途

CodeGen/Proto3文件 的方案处理PB 具有 不适合频繁变动 也不与代码混合的效果 美观度也不高的问题

pb-ts runtime/pb-js runtime 各种库类型提取困难 基于runtime编写困难 pbjs代码不适合打包器 代码美观度不高的问题

既然这样 那么有没有一款既美观 类型提取方便 能和代码写一起 操作简单 语法多样 的封装库呢?

目标与特色

提供快速Develop和优雅的方案进行操作与读取

  • DataClass 风格定义ProtoBuf结构 规范性写法
  • 除开DataClass式结构声明结构 同样能使用Object完成声明PB结构
  • 进行反序列化/序列化的数据绑定 将值同步到外部绑定 无需进行二次结构化数据Object进行encode/decode
  • 支持通过模板快速创建匿名DataClass 并立即填入数据序列化/反序列化
  • Array替代Repeat声明 与语言Array结合
  • 在没有ProtoBuf结构的情况下盲解ProtoBuf数据
  • 支持在一行以内 完成声明->填入数据->encode
  • 提供PB结构序列化JSON/JS对象
  • 规避类型type-orm库存在的属性默认值问题
  • 运行时动态扩展PB字段
  • 在没有ProtoBuf结构的情况下动态盲解编码ProtoBuf数据

缺点

proxy + 套嵌 存在性能损失 但是我写的舒服就行了.jpg

示例

import { PBArray, PBString, PBUint32, ProtoBuf, ProtoBufBase, ProtoBufEx, ProtoBufIn, ProtoBufQuick, Reference, StringWrapper, UInt32Wrapper, UnReference, ValueWrapper } from "./protobuf.ts";

class ProtoBufDataInnerClass extends ProtoBufBase {
    data = PBString(1);
    test = PBUint32(2);
}

class ProtoBufDataClass extends ProtoBufBase {
    uin = PBUint32(1);
    inner = ProtoBuf(2, ProtoBufDataInnerClass);
    list = PBArray(3, ProtoBuf(ProtoBufDataInnerClass));
    listinner = PBArray(4, ProtoBuf(class extends ProtoBufBase { data = PBArray(1, PBString()); }));
    listquick = PBArray(5, ProtoBufIn({ data: PBString(1) }));
}
const test = ProtoBufEx(ProtoBufDataClass, {
    inner: {
        data: "x",
        test: 300
    },
    list: [{
        data: "xx",
        test: 5
    }, {
        data: "xxx",
        test: 2
    }],
    listinner: [{
        data: ["x", "xxxx"]
    }],
    listquick: [{
        data: "xxxxx"
    }],
    uin: 0
});
console.log("值首次序列化:", Buffer.from(test.encode()).toString('hex'));
test.inner.test = 200;
console.log("值修改序列化:", Buffer.from(test.encode()).toString('hex'));
1.1.3

10 months ago

1.1.2

10 months ago

1.1.1

10 months ago

1.1.0

10 months ago

1.0.9

10 months ago

1.0.8

10 months ago

1.0.6

10 months ago

1.0.5

10 months ago

1.0.4

10 months ago

1.0.3

10 months ago

1.0.2

10 months ago

1.0.1

10 months ago

1.0.0

10 months ago