项目作者: TelegramV

项目描述 :
TypeLanguage serialization/deserialization for JavaScript.
高级语言: TypeScript
项目地址: git://github.com/TelegramV/TypeLanguage.git
创建时间: 2020-03-20T22:39:51Z
项目社区:https://github.com/TelegramV/TypeLanguage

开源协议:GNU General Public License v3.0

下载


Type Language

npm version

TypeLanguage serialization and deserialization for JavaScript.

Installation

NPM:
```shell script
npm install protov-tl

  1. Yarn:
  2. ```shell script
  3. yarn add protov-tl

You also should install some library for GZIP manipulations. I recommend pako.
```shell script
yarn add pako

  1. ## Usage
  2. Constructors:
  3. ```typescript
  4. Packer(schema: Schema, gzip: GZIP);
  5. Unpacker(data: Uint8Array, schema: Schema, gzip: GZIP);

Example:

  1. import {Packer, Unpacker, JsonSchema} from "@telegramv/tl";
  2. import pako from "pako";
  3. const jsonSchema = new JsonSchema(require("./schema.json"));
  4. const gzip = {
  5. gzip: (data) => pako.gzip(data),
  6. ungzip: (data) => pako.ungzip(data),
  7. };
  8. const packer = new Packer(jsonSchema, gzip)
  9. .int(69)
  10. .string("victory")
  11. .bytes(new Uint8Array([1, 2, 3, 4]), 4)
  12. .long(new Uint8Array(8))
  13. .object({
  14. _: "inputFile",
  15. id: new Uint8Array([210, 4, 0, 0, 0, 0, 0, 0]),
  16. parts: 2,
  17. name: "xxx.png",
  18. md5_checksum: "ha.sh",
  19. });
  20. console.log(packer.toByteArray());
  21. const deserializer = new Unpacker(packer.toByteArray(), jsonSchema, gzip);
  22. const int = deserializer.int();
  23. const string = deserializer.string();
  24. const bytes = deserializer.bytes();
  25. const long = deserializer.long();
  26. const inputFile = deserializer.unpack();
  27. console.log({
  28. int,
  29. string,
  30. bytes,
  31. long,
  32. inputFile,
  33. })

It is very convenient to use factory pattern here.

File TLFactory.js:

  1. import {Packer, Unpacker, JsonSchema} from "@telegramv/tl";
  2. import schema from "@telegramv/schema";
  3. import pako from "pako";
  4. const jsonSchema = new JsonSchema(schema);
  5. const gzip = {
  6. gzip: (data) => pako.gzip(data),
  7. ungzip: (data) => pako.ungzip(data),
  8. };
  9. const createPacker = () => new Packer(jsonSchema, gzip)
  10. const createUnpacker = (data) => new Unpacker(data, jsonSchema, gzip})
  11. const TLFactory = {
  12. packer: createPacker,
  13. unpacker: createUnpacker,
  14. };
  15. export default TLFactory;

File example.js:

  1. import TLFactory from "./TLFactory";
  2. const serializer = TLFactory.serializer();
  3. const deserializer = TLFactory.deserializer(serializer.getBytes());