@telegramv/tl
TypeScript icon, indicating that this package has built-in type declarations

0.5.0-alpha.6 • Public • Published

Type Language

npm version

Type Language serialization and deserialization for JavaScript.

Installation

NPM:

npm install @telegramv/tl

Yarn:

yarn add @telegramv/tl

You also should install some library for GZIP manipulations. I recommend pako.

yarn add pako

Usage

Constructors:

Serializer(schema: Schema, options?: SerializationOptions);
Deserializer(schema: Schema, data: Uint8Array, options?: DeserializationOptions);

Example:

You can install @telegramv/schema or use your own schema.

import {Serializer, Deserializer, JsonSchema} from "@telegramv/tl";
import schema from "@telegramv/schema";
import pako from "pako";

const jsonSchema = new JsonSchema(schema);

/**
 * Note: `data` is Uint8Array and method should return Uint8Array.

 * @property {(data: Uint8Array) => Uint8Array} gzip
 * @property {(data: Uint8Array) => Uint8Array} ungzip
 */
const gzip = {
    gzip: (data) => pako.gzip(data),
    ungzip: (data) => pako.ungzip(data),
};

const serializer = new Serializer(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(serializer.getBytes());

const deserializer = new Deserializer(jsonSchema, serializer.getBytes(), {gzip});

const int = deserializer.int();
const string = deserializer.string();
const bytes = deserializer.bytes();
const long = deserializer.long();
const inputFile = deserializer.object();

console.log({
    int,
    string,
    bytes,
    long,
    inputFile,
})

It is very convenient to use factory pattern here.

File TLFactory.js:

import {Serializer, Deserializer, 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 createSerializer = (options = {}) => new Serializer(jsonSchema, {gzip, ...options})
const createDeserializer = (data, options = {}) => new Deserializer(jsonSchema, data, {gzip, ...options})

const TLFactory = {
    serializer: createSerializer,
    deserializer: createDeserializer,
};

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 @telegramv/tl

Weekly Downloads

1

Version

0.5.0-alpha.6

License

GPL-3.0

Unpacked Size

60.4 kB

Total Files

9

Last publish

Collaborators

  • expexes