TypeLanguage serialization and deserialization for JavaScript.
NPM:
npm install protov-tl
Yarn:
yarn add protov-tl
You also should install some library for GZIP manipulations. I recommend pako
.
yarn add pako
Constructors:
Packer(schema: Schema, gzip: GZIP);
Unpacker(data: Uint8Array, schema: Schema, gzip: GZIP);
Example:
import {Packer, Unpacker, JsonSchema} from "@telegramv/tl";
import pako from "pako";
const jsonSchema = new JsonSchema(require("./schema.json"));
const gzip = {
gzip: (data) => pako.gzip(data),
ungzip: (data) => pako.ungzip(data),
};
const packer = new Packer(jsonSchema, gzip)
.int(69)
.string("victory")
.bytes(new Uint8Array([1, 2, 3, 4]), 4)
.long(new Uint8Array(8))
.object({
_: "inputFile",
id: new Uint8Array([210, 4, 0, 0, 0, 0, 0, 0]),
parts: 2,
name: "xxx.png",
md5_checksum: "ha.sh",
});
console.log(packer.toByteArray());
const deserializer = new Unpacker(packer.toByteArray(), jsonSchema, gzip);
const int = deserializer.int();
const string = deserializer.string();
const bytes = deserializer.bytes();
const long = deserializer.long();
const inputFile = deserializer.unpack();
console.log({
int,
string,
bytes,
long,
inputFile,
})
It is very convenient to use factory pattern here.
File TLFactory.js
:
import {Packer, Unpacker, JsonSchema} from "@telegramv/tl";
import schema from "@telegramv/schema";
import pako from "pako";
const jsonSchema = new JsonSchema(schema);
const gzip = {
gzip: (data) => pako.gzip(data),
ungzip: (data) => pako.ungzip(data),
};
const createPacker = () => new Packer(jsonSchema, gzip)
const createUnpacker = (data) => new Unpacker(data, jsonSchema, gzip})
const TLFactory = {
packer: createPacker,
unpacker: createUnpacker,
};
export default TLFactory;
File example.js
:
import TLFactory from "./TLFactory";
const serializer = TLFactory.serializer();
const deserializer = TLFactory.deserializer(serializer.getBytes());