protov-tl
TypeScript icon, indicating that this package has built-in type declarations

0.5.3 • Public • Published

Type Language

npm version

TypeLanguage serialization and deserialization for JavaScript.

Installation

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

Usage

Constructors:

Packer(schemaSchema, gzipGZIP);
Unpacker(dataUint8Array, schemaSchema, gzipGZIP);

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());

Package Sidebar

Install

npm i protov-tl

Weekly Downloads

1

Version

0.5.3

License

GPL-3.0

Unpacked Size

62.5 kB

Total Files

21

Last publish

Collaborators

  • kohutd