Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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

AltStyle によって変換されたページ (->オリジナル) /