123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- "use strict";
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- var desc = Object.getOwnPropertyDescriptor(m, k);
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
- desc = { enumerable: true, get: function() { return m[k]; } };
- }
- Object.defineProperty(o, k2, desc);
- }) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
- }));
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
- }) : function(o, v) {
- o["default"] = v;
- });
- var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.BinarySerializer = exports.BytesList = void 0;
- const assert = __importStar(require("assert"));
- const buffer_1 = require("buffer/");
- /**
- * Bytes list is a collection of buffer objects
- */
- class BytesList {
- constructor() {
- this.bytesArray = [];
- }
- /**
- * Get the total number of bytes in the BytesList
- *
- * @return the number of bytes
- */
- getLength() {
- return buffer_1.Buffer.concat(this.bytesArray).byteLength;
- }
- /**
- * Put bytes in the BytesList
- *
- * @param bytesArg A Buffer
- * @return this BytesList
- */
- put(bytesArg) {
- const bytes = buffer_1.Buffer.from(bytesArg); // Temporary, to catch instances of Uint8Array being passed in
- this.bytesArray.push(bytes);
- return this;
- }
- /**
- * Write this BytesList to the back of another bytes list
- *
- * @param list The BytesList to write to
- */
- toBytesSink(list) {
- list.put(this.toBytes());
- }
- toBytes() {
- return buffer_1.Buffer.concat(this.bytesArray);
- }
- toHex() {
- return this.toBytes().toString('hex').toUpperCase();
- }
- }
- exports.BytesList = BytesList;
- /**
- * BinarySerializer is used to write fields and values to buffers
- */
- class BinarySerializer {
- constructor(sink) {
- this.sink = new BytesList();
- this.sink = sink;
- }
- /**
- * Write a value to this BinarySerializer
- *
- * @param value a SerializedType value
- */
- write(value) {
- value.toBytesSink(this.sink);
- }
- /**
- * Write bytes to this BinarySerializer
- *
- * @param bytes the bytes to write
- */
- put(bytes) {
- this.sink.put(bytes);
- }
- /**
- * Write a value of a given type to this BinarySerializer
- *
- * @param type the type to write
- * @param value a value of that type
- */
- writeType(type, value) {
- this.write(type.from(value));
- }
- /**
- * Write BytesList to this BinarySerializer
- *
- * @param bl BytesList to write to BinarySerializer
- */
- writeBytesList(bl) {
- bl.toBytesSink(this.sink);
- }
- /**
- * Calculate the header of Variable Length encoded bytes
- *
- * @param length the length of the bytes
- */
- encodeVariableLength(length) {
- const lenBytes = buffer_1.Buffer.alloc(3);
- if (length <= 192) {
- lenBytes[0] = length;
- return lenBytes.slice(0, 1);
- }
- else if (length <= 12480) {
- length -= 193;
- lenBytes[0] = 193 + (length >>> 8);
- lenBytes[1] = length & 0xff;
- return lenBytes.slice(0, 2);
- }
- else if (length <= 918744) {
- length -= 12481;
- lenBytes[0] = 241 + (length >>> 16);
- lenBytes[1] = (length >> 8) & 0xff;
- lenBytes[2] = length & 0xff;
- return lenBytes.slice(0, 3);
- }
- throw new Error('Overflow error');
- }
- /**
- * Write field and value to BinarySerializer
- *
- * @param field field to write to BinarySerializer
- * @param value value to write to BinarySerializer
- */
- writeFieldAndValue(field, value, isUnlModifyWorkaround = false) {
- const associatedValue = field.associatedType.from(value);
- assert.ok(associatedValue.toBytesSink !== undefined);
- assert.ok(field.name !== undefined);
- this.sink.put(field.header);
- if (field.isVariableLengthEncoded) {
- this.writeLengthEncoded(associatedValue, isUnlModifyWorkaround);
- }
- else {
- associatedValue.toBytesSink(this.sink);
- }
- }
- /**
- * Write a variable length encoded value to the BinarySerializer
- *
- * @param value length encoded value to write to BytesList
- */
- writeLengthEncoded(value, isUnlModifyWorkaround = false) {
- const bytes = new BytesList();
- if (!isUnlModifyWorkaround) {
- // this part doesn't happen for the Account field in a UNLModify transaction
- value.toBytesSink(bytes);
- }
- this.put(this.encodeVariableLength(bytes.getLength()));
- this.writeBytesList(bytes);
- }
- }
- exports.BinarySerializer = BinarySerializer;
- //# sourceMappingURL=binary-serializer.js.map
|