Skip to content

TypeLanguage serialization/deserialization for JavaScript. (Type Language, TL schema, Telegram TL)

License

Notifications You must be signed in to change notification settings

TelegramV/TypeLanguage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

TypeLanguage serialization/deserialization for JavaScript. (Type Language, TL schema, Telegram TL)

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published