@layerzerolabs/lz-serdes 3.0.15 → 3.0.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @layerzerolabs/lz-serdes
2
2
 
3
+ ## 3.0.17
4
+
5
+ ### Patch Changes
6
+
7
+ - 40f2269: islander mainnet
8
+ - 40f2269: testnets
9
+
10
+ ## 3.0.16
11
+
12
+ ### Patch Changes
13
+
14
+ - 87a4bc9: islander mainnet
15
+
3
16
  ## 3.0.15
4
17
 
5
18
  ### Patch Changes
package/README.md CHANGED
@@ -0,0 +1,105 @@
1
+ # @layerzerolabs/lz-serdes
2
+
3
+ The LayerZero SerDes package provides essential functions and interfaces for serialization and deserialization of data. It includes utilities for serializing and deserializing various data types.
4
+
5
+ ## Features
6
+
7
+ - **Serialization**: Serialize various data types into bytes.
8
+ - **Deserialization**: Deserialize bytes into various data types.
9
+
10
+ ## Installation
11
+
12
+ To install the LayerZero SerDes package, you can use npm or yarn:
13
+
14
+ ```sh
15
+ npm install @layerzerolabs/lz-serdes
16
+ ```
17
+
18
+ or
19
+
20
+ ```sh
21
+ yarn add @layerzerolabs/lz-serdes
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ ### Serialization
27
+
28
+ Class representing a serializer for various data types.
29
+
30
+ - serializeStr(value: string): void: Serializes a string.
31
+ - serializeBytes(value: Bytes): void: Serializes an array of bytes.
32
+ - serializeBool(value: boolean): void: Serializes a boolean value.
33
+ - serializeU8(value: Uint8): void: Serializes a uint8 number.
34
+ - serializeU16(value: Uint16): void: Serializes a uint16 number.
35
+ - serializeU32(value: Uint32): void: Serializes a uint32 number.
36
+ - serializeU64(value: AnyNumber): void: Serializes a uint64 number.
37
+ - serializeU128(value: AnyNumber): void: Serializes a uint128 number.
38
+ - serializeU256(value: AnyNumber): void: Serializes a uint256 number.
39
+ - getBytes(): Bytes: Returns the buffered bytes.
40
+
41
+ ```typescript
42
+ import { Serializer } from "@layerzerolabs/lz-serdes";
43
+
44
+ const serializer = new Serializer();
45
+ serializer.serializeStr("Hello, world!");
46
+ const bytes = serializer.getBytes();
47
+ console.log(`Serialized bytes: ${bytes}`);
48
+ ```
49
+
50
+ ### Deserialization
51
+
52
+ Class representing a deserializer for various data types.
53
+
54
+ - deserializeStr(): string: Deserializes a string.
55
+ - deserializeBytes(): Bytes: Deserializes an array of bytes.
56
+ - deserializeBool(): boolean: Deserializes a boolean value.
57
+ - deserializeU8(): Uint8: Deserializes a uint8 number.
58
+ - deserializeU16(): Uint16: Deserializes a uint16 number.
59
+ - deserializeU32(): Uint32: Deserializes a uint32 number.
60
+ - deserializeU64(): Uint64: Deserializes a uint64 number.
61
+ - deserializeU128(): Uint128: Deserializes a uint128 number.
62
+ - deserializeU256(): Uint256: Deserializes a uint256 number.
63
+
64
+ ```typescript
65
+ import { Deserializer } from "@layerzerolabs/lz-serdes";
66
+
67
+ const bytes = new Uint8Array([
68
+ 12, 72, 101, 108, 108, 111, 44, 32, 119, 111, 114, 108, 100, 33,
69
+ ]);
70
+ const deserializer = new Deserializer(bytes);
71
+ const str = deserializer.deserializeStr();
72
+ console.log(`Deserialized string: ${str}`);
73
+ ```
74
+
75
+ ### BCS Serialization
76
+
77
+ #### Serialize a uint64 Value
78
+
79
+ Serializes a uint64 value to bytes using BCS.
80
+
81
+ - value: The value to serialize.
82
+ - Returns: The serialized bytes.
83
+
84
+ ```typescript
85
+ import { bcsSerializeUint64 } from "@layerzerolabs/lz-serdes";
86
+
87
+ const value = 123456789n;
88
+ const bytes = bcsSerializeUint64(value);
89
+ console.log(`Serialized uint64 bytes: ${bytes}`);
90
+ ```
91
+
92
+ #### Serialize a String
93
+
94
+ Serializes a string value to bytes using BCS.
95
+
96
+ - value: The value to serialize.
97
+ - Returns: The serialized bytes.
98
+
99
+ ```typescript
100
+ import { bcsSerializeStr } from "@layerzerolabs/lz-serdes";
101
+
102
+ const value = "Hello, world!";
103
+ const bytes = bcsSerializeStr(value);
104
+ console.log(`Serialized string bytes: ${bytes}`);
105
+ ```
package/dist/index.cjs CHANGED
@@ -3,12 +3,11 @@
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __decorateClass = (decorators, target, key, kind) => {
6
- var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ var result = __getOwnPropDesc(target, key) ;
7
7
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
8
8
  if (decorator = decorators[i])
9
- result = (kind ? decorator(target, key, result) : decorator(result)) || result;
10
- if (kind && result)
11
- __defProp(target, key, result);
9
+ result = (decorator(target, key, result) ) || result;
10
+ if (result) __defProp(target, key, result);
12
11
  return result;
13
12
  };
14
13
 
@@ -22,11 +21,22 @@ var MAX_U256_BIG_INT = 115792089237316195423570985008687907853269984665640564039
22
21
 
23
22
  // src/serializer.ts
24
23
  var Serializer = class {
24
+ /**
25
+ * Creates an instance of Serializer.
26
+ *
27
+ * @param {boolean} [littleEndian=true] - Whether to use little-endian byte order.
28
+ */
25
29
  constructor(littleEndian = true) {
26
30
  this.littleEndian = littleEndian;
27
31
  this.buffer = new ArrayBuffer(64);
28
32
  this.offset = 0;
29
33
  }
34
+ /**
35
+ * Ensures that the buffer has enough space to handle the specified number of bytes.
36
+ * If the buffer is not large enough, it will be resized to accommodate the additional bytes.
37
+ *
38
+ * @param {number} bytes - The number of bytes to ensure space for.
39
+ */
30
40
  ensureBufferWillHandleSize(bytes) {
31
41
  while (this.buffer.byteLength < this.offset + bytes) {
32
42
  const newBuffer = new ArrayBuffer(this.buffer.byteLength * 2);
@@ -34,11 +44,23 @@ var Serializer = class {
34
44
  this.buffer = newBuffer;
35
45
  }
36
46
  }
47
+ /**
48
+ * Serializes the given byte values into the buffer.
49
+ *
50
+ * @param {Bytes} values - The byte values to serialize.
51
+ */
37
52
  serialize(values) {
38
53
  this.ensureBufferWillHandleSize(values.length);
39
54
  new Uint8Array(this.buffer, this.offset).set(values);
40
55
  this.offset += values.length;
41
56
  }
57
+ /**
58
+ * Serializes a value using the specified DataView function.
59
+ *
60
+ * @param {(byteOffset: number, value: number, littleEndian?: boolean) => void} fn - The DataView function to use for serialization.
61
+ * @param {number} bytesLength - The length of the bytes to serialize.
62
+ * @param {number} value - The value to serialize.
63
+ */
42
64
  serializeWithFunction(fn, bytesLength, value) {
43
65
  this.ensureBufferWillHandleSize(bytesLength);
44
66
  const dv = new DataView(this.buffer, this.offset);
@@ -63,6 +85,7 @@ var Serializer = class {
63
85
  serializeStr(value) {
64
86
  const textEncoder = new TextEncoder();
65
87
  this.serializeBytes(textEncoder.encode(value));
88
+ return this;
66
89
  }
67
90
  /**
68
91
  * Serializes an array of bytes.
@@ -77,6 +100,7 @@ var Serializer = class {
77
100
  this.serializeU32AsUbeb128(value.length);
78
101
  }
79
102
  this.serialize(value);
103
+ return this;
80
104
  }
81
105
  /**
82
106
  * Serializes an array of bytes with known length. Therefore length doesn't need to be
@@ -85,6 +109,7 @@ var Serializer = class {
85
109
  */
86
110
  serializeFixedBytes(value) {
87
111
  this.serialize(value);
112
+ return this;
88
113
  }
89
114
  /**
90
115
  * Serializes a boolean value.
@@ -97,15 +122,19 @@ var Serializer = class {
97
122
  }
98
123
  const byteValue = value ? 1 : 0;
99
124
  this.serialize(new Uint8Array([byteValue]));
125
+ return this;
100
126
  }
101
127
  serializeU8(value) {
102
128
  this.serialize(new Uint8Array([value]));
129
+ return this;
103
130
  }
104
131
  serializeU16(value) {
105
132
  this.serializeWithFunction(DataView.prototype.setUint16, 2, value);
133
+ return this;
106
134
  }
107
135
  serializeU32(value) {
108
136
  this.serializeWithFunction(DataView.prototype.setUint32, 4, value);
137
+ return this;
109
138
  }
110
139
  serializeU64(value) {
111
140
  const low = BigInt(value.toString()) & BigInt(MAX_U32_NUMBER);
@@ -114,6 +143,7 @@ var Serializer = class {
114
143
  array.forEach((x) => {
115
144
  this.serializeU32(Number(x));
116
145
  });
146
+ return this;
117
147
  }
118
148
  serializeU128(value) {
119
149
  const low = BigInt(value.toString()) & MAX_U64_BIG_INT;
@@ -122,6 +152,7 @@ var Serializer = class {
122
152
  array.forEach((x) => {
123
153
  this.serializeU64(x);
124
154
  });
155
+ return this;
125
156
  }
126
157
  serializeU256(value) {
127
158
  const low = BigInt(value.toString()) & MAX_U128_BIG_INT;
@@ -130,6 +161,7 @@ var Serializer = class {
130
161
  array.forEach((x) => {
131
162
  this.serializeU128(x);
132
163
  });
164
+ return this;
133
165
  }
134
166
  serializeU32AsUleb128(val) {
135
167
  let value = val;
@@ -140,6 +172,7 @@ var Serializer = class {
140
172
  }
141
173
  valueArray.push(value);
142
174
  this.serialize(new Uint8Array(valueArray));
175
+ return this;
143
176
  }
144
177
  serializeU32AsUbeb128(val) {
145
178
  let value = val;
@@ -151,9 +184,12 @@ var Serializer = class {
151
184
  valueArray.unshift(byte);
152
185
  }
153
186
  this.serialize(new Uint8Array(valueArray));
187
+ return this;
154
188
  }
155
189
  /**
156
190
  * Returns the buffered bytes
191
+ *
192
+ * @returns {Bytes} The buffered bytes.
157
193
  */
158
194
  getBytes() {
159
195
  return new Uint8Array(this.buffer).slice(0, this.offset);
@@ -161,37 +197,37 @@ var Serializer = class {
161
197
  };
162
198
  __decorateClass([
163
199
  checkNumberRange(0, MAX_U8_NUMBER)
164
- ], Serializer.prototype, "serializeU8", 1);
200
+ ], Serializer.prototype, "serializeU8");
165
201
  __decorateClass([
166
202
  checkNumberRange(0, MAX_U16_NUMBER)
167
- ], Serializer.prototype, "serializeU16", 1);
203
+ ], Serializer.prototype, "serializeU16");
168
204
  __decorateClass([
169
205
  checkNumberRange(0, MAX_U32_NUMBER)
170
- ], Serializer.prototype, "serializeU32", 1);
206
+ ], Serializer.prototype, "serializeU32");
171
207
  __decorateClass([
172
208
  checkNumberRange(BigInt(0), MAX_U64_BIG_INT)
173
- ], Serializer.prototype, "serializeU64", 1);
209
+ ], Serializer.prototype, "serializeU64");
174
210
  __decorateClass([
175
211
  checkNumberRange(BigInt(0), MAX_U128_BIG_INT)
176
- ], Serializer.prototype, "serializeU128", 1);
212
+ ], Serializer.prototype, "serializeU128");
177
213
  __decorateClass([
178
214
  checkNumberRange(BigInt(0), MAX_U256_BIG_INT)
179
- ], Serializer.prototype, "serializeU256", 1);
215
+ ], Serializer.prototype, "serializeU256");
180
216
  __decorateClass([
181
217
  checkNumberRange(0, MAX_U32_NUMBER)
182
- ], Serializer.prototype, "serializeU32AsUleb128", 1);
218
+ ], Serializer.prototype, "serializeU32AsUleb128");
183
219
  __decorateClass([
184
220
  checkNumberRange(0, MAX_U32_NUMBER)
185
- ], Serializer.prototype, "serializeU32AsUbeb128", 1);
221
+ ], Serializer.prototype, "serializeU32AsUbeb128");
186
222
  function checkNumberRange(minValue, maxValue, message) {
187
223
  return (target, propertyKey, descriptor) => {
188
224
  const childFunction = descriptor.value;
189
225
  descriptor.value = function deco(value) {
190
226
  const valueBigInt = BigInt(value.toString());
191
227
  if (valueBigInt > BigInt(maxValue.toString()) || valueBigInt < BigInt(minValue.toString())) {
192
- throw new Error(message ?? "Value is out of range");
228
+ throw new Error("Value is out of range");
193
229
  }
194
- childFunction.apply(this, [value]);
230
+ return childFunction.apply(this, [value]);
195
231
  };
196
232
  return descriptor;
197
233
  };
@@ -199,12 +235,25 @@ function checkNumberRange(minValue, maxValue, message) {
199
235
 
200
236
  // src/deserializer.ts
201
237
  var Deserializer = class {
238
+ /**
239
+ * Creates an instance of Deserializer.
240
+ *
241
+ * @param {Bytes} data - The data to deserialize.
242
+ * @param {boolean} [littleEndian=true] - Whether to use little-endian byte order.
243
+ */
202
244
  constructor(data, littleEndian = true) {
203
245
  this.littleEndian = littleEndian;
204
246
  this.buffer = new ArrayBuffer(data.length);
205
247
  new Uint8Array(this.buffer).set(data, 0);
206
248
  this.offset = 0;
207
249
  }
250
+ /**
251
+ * Reads a specified number of bytes from the buffer.
252
+ *
253
+ * @param {number} length - The number of bytes to read.
254
+ * @returns {ArrayBuffer} The read bytes.
255
+ * @throws {Error} If the end of the buffer is reached.
256
+ */
208
257
  read(length) {
209
258
  if (this.offset + length > this.buffer.byteLength) {
210
259
  throw new Error("Reached to the end of buffer");
@@ -213,9 +262,19 @@ var Deserializer = class {
213
262
  this.offset += length;
214
263
  return bytes;
215
264
  }
265
+ /**
266
+ * Returns the number of remaining bytes in the buffer.
267
+ *
268
+ * @returns {number} The number of remaining bytes.
269
+ */
216
270
  remaining() {
217
271
  return this.buffer.byteLength - this.offset;
218
272
  }
273
+ /**
274
+ * Rewinds the buffer by a specified number of bytes.
275
+ *
276
+ * @param {number} length - The number of bytes to rewind.
277
+ */
219
278
  rewind(length) {
220
279
  this.offset -= length;
221
280
  }
@@ -232,6 +291,7 @@ var Deserializer = class {
232
291
  * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]), true);
233
292
  * assert(deserializer.deserializeStr() === "çå∞≠¢õß∂ƒ∫");
234
293
  * ```
294
+ * @returns {string} The deserialized string.
235
295
  */
236
296
  deserializeStr() {
237
297
  const value = this.deserializeBytes();
@@ -243,6 +303,8 @@ var Deserializer = class {
243
303
  *
244
304
  * layout for "bytes": bytes_length | bytes. bytes_length is the length of the bytes array that is
245
305
  * uleb128/ubeb128 encoded. bytes_length is a u32 integer.
306
+ *
307
+ * @returns {Bytes} The deserialized bytes.
246
308
  */
247
309
  deserializeBytes() {
248
310
  const len = this.littleEndian ? this.deserializeUleb128AsU32() : this.deserializeUbeb128AsU32();
@@ -251,6 +313,8 @@ var Deserializer = class {
251
313
  /**
252
314
  * Deserializes an array of bytes. The number of bytes to read is already known.
253
315
  *
316
+ * @param {number} len - The number of bytes to read.
317
+ * @returns {Bytes} The deserialized bytes.
254
318
  */
255
319
  deserializeFixedBytes(len) {
256
320
  return new Uint8Array(this.read(len));
@@ -259,6 +323,9 @@ var Deserializer = class {
259
323
  * Deserializes a boolean value.
260
324
  *
261
325
  * layout for "boolean": One byte. "0x01" for True and "0x00" for False.
326
+ *
327
+ * @returns {boolean} The deserialized boolean value.
328
+ * @throws {Error} If the boolean value is invalid.
262
329
  */
263
330
  deserializeBool() {
264
331
  const bool = new Uint8Array(this.read(1))[0];
@@ -271,6 +338,8 @@ var Deserializer = class {
271
338
  * Deserializes a uint8 number.
272
339
  *
273
340
  * layout for "uint8": One byte. Binary format in little-endian representation.
341
+ *
342
+ * @returns {Uint8} The deserialized uint8 number.
274
343
  */
275
344
  deserializeU8() {
276
345
  return new DataView(this.read(1)).getUint8(0);
@@ -286,6 +355,7 @@ var Deserializer = class {
286
355
  * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34]), false);
287
356
  * assert(deserializer.deserializeU16() === 4660);
288
357
  * ```
358
+ * @returns {Uint16} The deserialized uint16 number.
289
359
  */
290
360
  deserializeU16() {
291
361
  return new DataView(this.read(2)).getUint16(0, this.littleEndian);
@@ -301,6 +371,7 @@ var Deserializer = class {
301
371
  * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34, 0x56, 0x78]), false);
302
372
  * assert(deserializer.deserializeU32() === 305419896);
303
373
  * ```
374
+ * @returns {Uint32} The deserialized uint32 number.
304
375
  */
305
376
  deserializeU32() {
306
377
  return new DataView(this.read(4)).getUint32(0, this.littleEndian);
@@ -316,6 +387,7 @@ var Deserializer = class {
316
387
  * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x00]), false);
317
388
  * assert(deserializer.deserializeU64() === 1311768467750121216);
318
389
  * ```
390
+ * @returns {Uint64} The deserialized uint64 number.
319
391
  */
320
392
  deserializeU64() {
321
393
  const low = this.deserializeU32();
@@ -327,6 +399,8 @@ var Deserializer = class {
327
399
  * Deserializes a uint128 number.
328
400
  *
329
401
  * layout for "uint128": Sixteen bytes. Binary format in little-endian representation.
402
+ *
403
+ * @returns {Uint128} The deserialized uint128 number.
330
404
  */
331
405
  deserializeU128() {
332
406
  const low = this.deserializeU64();
@@ -338,6 +412,8 @@ var Deserializer = class {
338
412
  * Deserializes a uint256 number.
339
413
  *
340
414
  * layout for "uint256": Thirty-two bytes. Binary format in little-endian representation.
415
+ *
416
+ * @returns {Uint256} The deserialized uint256 number.
341
417
  */
342
418
  deserializeU256() {
343
419
  const low = this.deserializeU128();
@@ -349,6 +425,9 @@ var Deserializer = class {
349
425
  * Deserializes a uleb128 encoded uint32 number.
350
426
  *
351
427
  * use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values
428
+ *
429
+ * @returns {Uint32} The deserialized uleb128 encoded uint32 number.
430
+ * @throws {Error} If there is an overflow while parsing the value.
352
431
  */
353
432
  deserializeUleb128AsU32() {
354
433
  let value = BigInt(0);
@@ -370,6 +449,9 @@ var Deserializer = class {
370
449
  * Deserializes a unsigned Variable-Length Big-Endian Encoding encoded uint32 number.
371
450
  *
372
451
  * use ubeb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values
452
+ *
453
+ * @returns {Uint32} The deserialized ubeb128 encoded uint32 number.
454
+ * @throws {Error} If there is an overflow while parsing the value.
373
455
  */
374
456
  deserializeUbeb128AsU32() {
375
457
  let value = BigInt(0);
@@ -487,5 +569,5 @@ exports.bcsToBytes = bcsToBytes;
487
569
  exports.deserializeVector = deserializeVector;
488
570
  exports.serializeVector = serializeVector;
489
571
  exports.serializeVectorWithFunc = serializeVectorWithFunc;
490
- //# sourceMappingURL=out.js.map
572
+ //# sourceMappingURL=index.cjs.map
491
573
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/consts.ts","../src/serializer.ts","../src/deserializer.ts","../src/helper.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Uint128, Uint16, Uint256, Uint32, Uint64, Uint8 } from './types'\n\n// Upper bound values for uint8, uint16, uint64 and uint128\nexport const MAX_U8_NUMBER: Uint8 = 255\nexport const MAX_U16_NUMBER: Uint16 = 65535\nexport const MAX_U32_NUMBER: Uint32 = 4294967295\nexport const MAX_U64_BIG_INT: Uint64 = 18446744073709551615n\nexport const MAX_U128_BIG_INT: Uint128 = 340282366920938463463374607431768211455n\nexport const MAX_U256_BIG_INT: Uint256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935n\n","// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport {\n MAX_U128_BIG_INT,\n MAX_U16_NUMBER,\n MAX_U256_BIG_INT,\n MAX_U32_NUMBER,\n MAX_U64_BIG_INT,\n MAX_U8_NUMBER,\n} from './consts'\nimport { AnyNumber, Bytes, Uint16, Uint32, Uint8 } from './types'\n\nexport class Serializer {\n private buffer: ArrayBuffer\n\n private offset: number\n public readonly littleEndian: boolean\n\n constructor(littleEndian = true) {\n this.littleEndian = littleEndian\n this.buffer = new ArrayBuffer(64)\n this.offset = 0\n }\n\n private ensureBufferWillHandleSize(bytes: number): void {\n while (this.buffer.byteLength < this.offset + bytes) {\n const newBuffer = new ArrayBuffer(this.buffer.byteLength * 2)\n new Uint8Array(newBuffer).set(new Uint8Array(this.buffer))\n this.buffer = newBuffer\n }\n }\n\n protected serialize(values: Bytes): void {\n this.ensureBufferWillHandleSize(values.length)\n new Uint8Array(this.buffer, this.offset).set(values)\n this.offset += values.length\n }\n\n private serializeWithFunction(\n fn: (byteOffset: number, value: number, littleEndian?: boolean) => void,\n bytesLength: number,\n value: number\n ): void {\n this.ensureBufferWillHandleSize(bytesLength)\n const dv = new DataView(this.buffer, this.offset)\n fn.apply(dv, [0, value, this.littleEndian])\n this.offset += bytesLength\n }\n\n /**\n * Serializes a string. UTF8 string is supported. Serializes the string's bytes length \"l\" first,\n * and then serializes \"l\" bytes of the string content.\n *\n * layout for \"string\": string_length | string_content. string_length is the bytes length of\n * the string that is uleb128/ubeb128 encoded. string_length is a u32 integer.\n *\n * @example\n * ```ts\n * const serializer = new Serializer();\n * serializer.serializeStr(\"çå∞≠¢õß∂ƒ∫\");\n * assert(serializer.getBytes() === new Uint8Array([24, 0xc3, 0xa7, 0xc3, 0xa5, 0xe2, 0x88, 0x9e,\n * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]));\n * ```\n */\n serializeStr(value: string): void {\n const textEncoder = new TextEncoder()\n this.serializeBytes(textEncoder.encode(value))\n }\n\n /**\n * Serializes an array of bytes.\n *\n * layout for \"bytes\": bytes_length | bytes. bytes_length is the length of the bytes array that is\n * uleb128/ubeb128 encoded. bytes_length is a u32 integer.\n */\n serializeBytes(value: Bytes): void {\n if (this.littleEndian) {\n this.serializeU32AsUleb128(value.length)\n } else {\n this.serializeU32AsUbeb128(value.length)\n }\n this.serialize(value)\n }\n\n /**\n * Serializes an array of bytes with known length. Therefore length doesn't need to be\n * serialized to help deserialization. When deserializing, the number of\n * bytes to deserialize needs to be passed in.\n */\n serializeFixedBytes(value: Bytes): void {\n this.serialize(value)\n }\n\n /**\n * Serializes a boolean value.\n *\n * layout for \"boolean\": One byte. \"0x01\" for True and \"0x00\" for False.\n */\n serializeBool(value: boolean): void {\n if (typeof value !== 'boolean') {\n throw new Error('Value needs to be a boolean')\n }\n const byteValue = value ? 1 : 0\n this.serialize(new Uint8Array([byteValue]))\n }\n\n /**\n * Serializes a uint8 number.\n *\n * layout for \"uint8\": One byte. Binary format in little-endian representation.\n */\n @checkNumberRange(0, MAX_U8_NUMBER)\n serializeU8(value: Uint8): void {\n this.serialize(new Uint8Array([value]))\n }\n\n /**\n * Serializes a uint16 number.\n *\n * layout for \"uint16\": Two bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const serializer = new Serializer(true);\n * serializer.serializeU16(4660);\n * assert(serializer.getBytes() === new Uint8Array([0x34, 0x12]));\n * const serializer = new Serializer(false);\n * serializer.serializeU16(4660);\n * assert(serializer.getBytes() === new Uint8Array([0x12, 0x34]));\n * ```\n */\n @checkNumberRange(0, MAX_U16_NUMBER)\n serializeU16(value: Uint16): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.serializeWithFunction(DataView.prototype.setUint16, 2, value)\n }\n\n /**\n * Serializes a uint32 number.\n *\n * layout for \"uint32\": Four bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const serializer = new Serializer(true);\n * serializer.serializeU32(305419896);\n * assert(serializer.getBytes() === new Uint8Array([0x78, 0x56, 0x34, 0x12]));\n * const serializer = new Serializer(false);\n * serializer.serializeU32(305419896);\n * assert(serializer.getBytes() === new Uint8Array([0x12, 0x34, 0x56, 0x78]));\n * ```\n */\n @checkNumberRange(0, MAX_U32_NUMBER)\n serializeU32(value: Uint32): void {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.serializeWithFunction(DataView.prototype.setUint32, 4, value)\n }\n\n /**\n * Serializes a uint64 number.\n *\n * layout for \"uint64\": Eight bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const serializer = new Serializer(true);\n * serializer.serializeU64(1311768467750121216);\n * assert(serializer.getBytes() === new Uint8Array([0x00, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12]));\n * const serializer = new Serializer(false);\n * serializer.serializeU64(1311768467750121216);\n * assert(serializer.getBytes() === new Uint8Array([0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x00]));\n * ```\n */\n @checkNumberRange(BigInt(0), MAX_U64_BIG_INT)\n serializeU64(value: AnyNumber): void {\n const low = BigInt(value.toString()) & BigInt(MAX_U32_NUMBER)\n const high = BigInt(value.toString()) >> BigInt(32)\n\n const array = this.littleEndian ? [low, high] : [high, low]\n array.forEach((x) => {\n this.serializeU32(Number(x))\n })\n }\n\n /**\n * Serializes a uint128 number.\n *\n * layout for \"uint128\": Sixteen bytes. Binary format in little-endian representation.\n */\n @checkNumberRange(BigInt(0), MAX_U128_BIG_INT)\n serializeU128(value: AnyNumber): void {\n const low = BigInt(value.toString()) & MAX_U64_BIG_INT\n const high = BigInt(value.toString()) >> BigInt(64)\n\n const array = this.littleEndian ? [low, high] : [high, low]\n array.forEach((x) => {\n this.serializeU64(x)\n })\n }\n\n /**\n * Serializes a uint256 number.\n *\n * layout for \"uint256\": Sixteen bytes. Binary format in little-endian representation.\n */\n @checkNumberRange(BigInt(0), MAX_U256_BIG_INT)\n serializeU256(value: AnyNumber): void {\n const low = BigInt(value.toString()) & MAX_U128_BIG_INT\n const high = BigInt(value.toString()) >> BigInt(128)\n\n const array = this.littleEndian ? [low, high] : [high, low]\n array.forEach((x) => {\n this.serializeU128(x)\n })\n }\n\n /**\n * Serializes a uint32 number with uleb128.\n *\n * use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n */\n @checkNumberRange(0, MAX_U32_NUMBER)\n serializeU32AsUleb128(val: Uint32): void {\n let value = val\n const valueArray = []\n while (value >>> 7 !== 0) {\n valueArray.push((value & 0x7f) | 0x80)\n value >>>= 7\n }\n valueArray.push(value)\n this.serialize(new Uint8Array(valueArray))\n }\n\n /**\n * Serializes a uint32 number with unsigned Variable-Length Big-Endian Encoding.\n *\n * use ubeb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n */\n @checkNumberRange(0, MAX_U32_NUMBER)\n serializeU32AsUbeb128(val: Uint32): void {\n let value = val\n const valueArray: Uint8[] = []\n\n valueArray.unshift(value & 0x7f)\n while (value >>> 7 !== 0) {\n value >>>= 7\n const byte = (value & 0x7f) | 0x80\n valueArray.unshift(byte)\n }\n\n this.serialize(new Uint8Array(valueArray))\n }\n\n /**\n * Returns the buffered bytes\n */\n getBytes(): Bytes {\n return new Uint8Array(this.buffer).slice(0, this.offset)\n }\n}\n\n/**\n * Creates a decorator to make sure the arg value of the decorated function is within a range.\n * @param minValue The arg value of decorated function must >= minValue\n * @param maxValue The arg value of decorated function must <= maxValue\n * @param message Error message\n */\nfunction checkNumberRange<T extends AnyNumber>(minValue: T, maxValue: T, message?: string) {\n return (target: unknown, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor => {\n /* eslint-disable @typescript-eslint/no-unsafe-assignment */\n const childFunction = descriptor.value as (value: AnyNumber) => void\n // eslint-disable-next-line no-param-reassign\n descriptor.value = function deco(value: AnyNumber): void {\n const valueBigInt = BigInt(value.toString())\n if (valueBigInt > BigInt(maxValue.toString()) || valueBigInt < BigInt(minValue.toString())) {\n throw new Error(message ?? 'Value is out of range')\n }\n childFunction.apply(this, [value])\n }\n return descriptor\n /* eslint-enable @typescript-eslint/no-unsafe-assignment */\n }\n}\n","// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport { MAX_U32_NUMBER } from './consts'\nimport { Bytes, Uint128, Uint16, Uint256, Uint32, Uint64, Uint8 } from './types'\n\nexport class Deserializer {\n private buffer: ArrayBuffer\n\n private offset: number\n public readonly littleEndian: boolean\n\n constructor(data: Bytes, littleEndian = true) {\n this.littleEndian = littleEndian\n // copies data to prevent outside mutation of buffer.\n this.buffer = new ArrayBuffer(data.length)\n new Uint8Array(this.buffer).set(data, 0)\n this.offset = 0\n }\n\n private read(length: number): ArrayBuffer {\n if (this.offset + length > this.buffer.byteLength) {\n throw new Error('Reached to the end of buffer')\n }\n\n const bytes = this.buffer.slice(this.offset, this.offset + length)\n this.offset += length\n return bytes\n }\n\n public remaining(): number {\n return this.buffer.byteLength - this.offset\n }\n\n public rewind(length: number): void {\n this.offset -= length\n }\n\n /**\n * Deserializes a string. UTF8 string is supported. Reads the string's bytes length \"l\" first,\n * and then reads \"l\" bytes of content. Decodes the byte array into a string.\n *\n * layout for \"string\": string_length | string_content. string_length is the bytes length of\n * the string that is uleb128/ubeb128 encoded. string_length is a u32 integer.\n *\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([24, 0xc3, 0xa7, 0xc3, 0xa5, 0xe2, 0x88, 0x9e,\n * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]), true);\n * assert(deserializer.deserializeStr() === \"çå∞≠¢õß∂ƒ∫\");\n * ```\n */\n deserializeStr(): string {\n const value = this.deserializeBytes()\n const textDecoder = new TextDecoder()\n return textDecoder.decode(value)\n }\n\n /**\n * Deserializes an array of bytes.\n *\n * layout for \"bytes\": bytes_length | bytes. bytes_length is the length of the bytes array that is\n * uleb128/ubeb128 encoded. bytes_length is a u32 integer.\n */\n deserializeBytes(): Bytes {\n const len = this.littleEndian ? this.deserializeUleb128AsU32() : this.deserializeUbeb128AsU32()\n\n return new Uint8Array(this.read(len))\n }\n\n /**\n * Deserializes an array of bytes. The number of bytes to read is already known.\n *\n */\n deserializeFixedBytes(len: number): Bytes {\n return new Uint8Array(this.read(len))\n }\n\n /**\n * Deserializes a boolean value.\n *\n * layout for \"boolean\": One byte. \"0x01\" for True and \"0x00\" for False.\n */\n deserializeBool(): boolean {\n const bool = new Uint8Array(this.read(1))[0]\n if (bool !== 1 && bool !== 0) {\n throw new Error('Invalid boolean value')\n }\n return bool === 1\n }\n\n /**\n * Deserializes a uint8 number.\n *\n * layout for \"uint8\": One byte. Binary format in little-endian representation.\n */\n deserializeU8(): Uint8 {\n return new DataView(this.read(1)).getUint8(0)\n }\n\n /**\n * Deserializes a uint16 number.\n *\n * layout for \"uint16\": Two bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([0x34, 0x12]), true);\n * assert(deserializer.deserializeU16() === 4660);\n * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34]), false);\n * assert(deserializer.deserializeU16() === 4660);\n * ```\n */\n deserializeU16(): Uint16 {\n return new DataView(this.read(2)).getUint16(0, this.littleEndian)\n }\n\n /**\n * Deserializes a uint32 number.\n *\n * layout for \"uint32\": Four bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([0x78, 0x56, 0x34, 0x12]), true);\n * assert(deserializer.deserializeU32() === 305419896);\n * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34, 0x56, 0x78]), false);\n * assert(deserializer.deserializeU32() === 305419896);\n * ```\n */\n deserializeU32(): Uint32 {\n return new DataView(this.read(4)).getUint32(0, this.littleEndian)\n }\n\n /**\n * Deserializes a uint64 number.\n *\n * layout for \"uint64\": Eight bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([0x00, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12]), true);\n * assert(deserializer.deserializeU64() === 1311768467750121216);\n * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x00]), false);\n * assert(deserializer.deserializeU64() === 1311768467750121216);\n * ```\n */\n deserializeU64(): Uint64 {\n const low = this.deserializeU32()\n const high = this.deserializeU32()\n\n const values = this.littleEndian ? [low, high] : [high, low]\n return BigInt((BigInt(values[1]) << BigInt(32)) | BigInt(values[0]))\n }\n\n /**\n * Deserializes a uint128 number.\n *\n * layout for \"uint128\": Sixteen bytes. Binary format in little-endian representation.\n */\n deserializeU128(): Uint128 {\n const low = this.deserializeU64()\n const high = this.deserializeU64()\n\n const values = this.littleEndian ? [low, high] : [high, low]\n return BigInt((values[1] << BigInt(64)) | values[0])\n }\n\n /**\n * Deserializes a uint256 number.\n *\n * layout for \"uint256\": Thirty-two bytes. Binary format in little-endian representation.\n */\n deserializeU256(): Uint256 {\n const low = this.deserializeU128()\n const high = this.deserializeU128()\n\n const values = this.littleEndian ? [low, high] : [high, low]\n return BigInt((values[1] << BigInt(128)) | values[0])\n }\n\n /**\n * Deserializes a uleb128 encoded uint32 number.\n *\n * use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n */\n deserializeUleb128AsU32(): Uint32 {\n let value = BigInt(0)\n let shift = 0\n\n while (value < MAX_U32_NUMBER) {\n const byte = this.deserializeU8()\n value |= BigInt(byte & 0x7f) << BigInt(shift)\n\n if ((byte & 0x80) === 0) {\n break\n }\n shift += 7\n }\n\n if (value > MAX_U32_NUMBER) {\n throw new Error('Overflow while parsing uleb128-encoded uint32 value')\n }\n\n return Number(value)\n }\n\n /**\n * Deserializes a unsigned Variable-Length Big-Endian Encoding encoded uint32 number.\n *\n * use ubeb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n */\n deserializeUbeb128AsU32(): Uint32 {\n let value = BigInt(0)\n\n while (value < MAX_U32_NUMBER) {\n const byte = this.deserializeU8()\n value |= BigInt(byte & 0x7f)\n\n if ((byte & 0x80) === 0) {\n break\n }\n value = value << BigInt(7)\n }\n\n if (value > MAX_U32_NUMBER) {\n throw new Error('Overflow while parsing ubeb128-encoded uint32 value')\n }\n\n return Number(value)\n }\n}\n","// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Deserializer } from './deserializer'\nimport { Serializer } from './serializer'\nimport { AnyNumber, Bytes, Seq, Uint16, Uint32, Uint8 } from './types'\n\ninterface Serializable {\n serialize(serializer: Serializer): void\n}\n\ninterface Deserializable<T> {\n deserialize(deserializer: Deserializer): T\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\ninterface ISerializer {\n [key: string]: (item: unknown) => void\n}\n\n/**\n * Serializes a vector values that are \"Serializable\".\n */\nexport function serializeVector<T extends Serializable>(value: Seq<T>, serializer: Serializer): void {\n serializer.serializeU32AsUleb128(value.length)\n value.forEach((item: T) => {\n item.serialize(serializer)\n })\n}\n\n/**\n * Serializes a vector with specified item serialization function.\n * Very dynamic function and bypasses static typechecking.\n */\nexport function serializeVectorWithFunc(value: unknown[], func: string): Bytes {\n const serializer = new Serializer()\n serializer.serializeU32AsUleb128(value.length)\n\n const f = (serializer as unknown as ISerializer)[func]\n if (typeof f !== 'function') {\n throw new Error(`The function '${func}' does not exist on the serializer.`)\n }\n\n value.forEach((item) => {\n f.call(serializer, item)\n })\n return serializer.getBytes()\n}\n\n/**\n * Deserializes a vector of values.\n */\nexport function deserializeVector<T>(deserializer: Deserializer, cls: Deserializable<T>): any[] {\n const length = deserializer.deserializeUleb128AsU32()\n const list: T[] = []\n for (let i = 0; i < length; i += 1) {\n list.push(cls.deserialize(deserializer))\n }\n return list\n}\n\nexport function bcsToBytes<T extends Serializable>(value: T): Bytes {\n const serializer = new Serializer()\n value.serialize(serializer)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeUint64(value: AnyNumber): Bytes {\n const serializer = new Serializer()\n serializer.serializeU64(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeU8(value: Uint8): Bytes {\n const serializer = new Serializer()\n serializer.serializeU8(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeU16(value: Uint16): Bytes {\n const serializer = new Serializer()\n serializer.serializeU16(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeU32(value: Uint32): Bytes {\n const serializer = new Serializer()\n serializer.serializeU32(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeU128(value: AnyNumber): Bytes {\n const serializer = new Serializer()\n serializer.serializeU128(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeU256(value: AnyNumber): Bytes {\n const serializer = new Serializer()\n serializer.serializeU256(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeBool(value: boolean): Bytes {\n const serializer = new Serializer()\n serializer.serializeBool(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeStr(value: string): Bytes {\n const serializer = new Serializer()\n serializer.serializeStr(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeBytes(value: Bytes): Bytes {\n const serializer = new Serializer()\n serializer.serializeBytes(value)\n return serializer.getBytes()\n}\n\nexport function bcsSerializeFixedBytes(value: Bytes): Bytes {\n const serializer = new Serializer()\n serializer.serializeFixedBytes(value)\n return serializer.getBytes()\n}\n"]}
1
+ {"version":3,"sources":["../src/consts.ts","../src/serializer.ts","../src/deserializer.ts","../src/helper.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Uint128, Uint16, Uint256, Uint32, Uint64, Uint8 } from './types'\n\n/**\n * Upper bound value for uint8.\n * @type {Uint8}\n */\nexport const MAX_U8_NUMBER: Uint8 = 255\n\n/**\n * Upper bound value for uint16.\n * @type {Uint16}\n */\nexport const MAX_U16_NUMBER: Uint16 = 65535\n\n/**\n * Upper bound value for uint32.\n * @type {Uint32}\n */\nexport const MAX_U32_NUMBER: Uint32 = 4294967295\n\n/**\n * Upper bound value for uint64.\n * @type {Uint64}\n */\nexport const MAX_U64_BIG_INT: Uint64 = 18446744073709551615n\n\n/**\n * Upper bound value for uint128.\n * @type {Uint128}\n */\nexport const MAX_U128_BIG_INT: Uint128 = 340282366920938463463374607431768211455n\n\n/**\n * Upper bound value for uint256.\n * @type {Uint256}\n */\nexport const MAX_U256_BIG_INT: Uint256 = 115792089237316195423570985008687907853269984665640564039457584007913129639935n\n","// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport {\n MAX_U128_BIG_INT,\n MAX_U16_NUMBER,\n MAX_U256_BIG_INT,\n MAX_U32_NUMBER,\n MAX_U64_BIG_INT,\n MAX_U8_NUMBER,\n} from './consts'\nimport { AnyNumber, Bytes, Uint16, Uint32, Uint8 } from './types'\n\n/**\n * Class representing a serializer for various data types.\n */\nexport class Serializer {\n private buffer: ArrayBuffer\n\n private offset: number\n public readonly littleEndian: boolean\n\n /**\n * Creates an instance of Serializer.\n *\n * @param {boolean} [littleEndian=true] - Whether to use little-endian byte order.\n */\n constructor(littleEndian = true) {\n this.littleEndian = littleEndian\n this.buffer = new ArrayBuffer(64)\n this.offset = 0\n }\n\n /**\n * Ensures that the buffer has enough space to handle the specified number of bytes.\n * If the buffer is not large enough, it will be resized to accommodate the additional bytes.\n *\n * @param {number} bytes - The number of bytes to ensure space for.\n */\n private ensureBufferWillHandleSize(bytes: number): void {\n while (this.buffer.byteLength < this.offset + bytes) {\n const newBuffer = new ArrayBuffer(this.buffer.byteLength * 2)\n new Uint8Array(newBuffer).set(new Uint8Array(this.buffer))\n this.buffer = newBuffer\n }\n }\n\n /**\n * Serializes the given byte values into the buffer.\n *\n * @param {Bytes} values - The byte values to serialize.\n */\n protected serialize(values: Bytes): void {\n this.ensureBufferWillHandleSize(values.length)\n new Uint8Array(this.buffer, this.offset).set(values)\n this.offset += values.length\n }\n\n /**\n * Serializes a value using the specified DataView function.\n *\n * @param {(byteOffset: number, value: number, littleEndian?: boolean) => void} fn - The DataView function to use for serialization.\n * @param {number} bytesLength - The length of the bytes to serialize.\n * @param {number} value - The value to serialize.\n */\n private serializeWithFunction(\n fn: (byteOffset: number, value: number, littleEndian?: boolean) => void,\n bytesLength: number,\n value: number\n ): void {\n this.ensureBufferWillHandleSize(bytesLength)\n const dv = new DataView(this.buffer, this.offset)\n fn.apply(dv, [0, value, this.littleEndian])\n this.offset += bytesLength\n }\n\n /**\n * Serializes a string. UTF8 string is supported. Serializes the string's bytes length \"l\" first,\n * and then serializes \"l\" bytes of the string content.\n *\n * layout for \"string\": string_length | string_content. string_length is the bytes length of\n * the string that is uleb128/ubeb128 encoded. string_length is a u32 integer.\n *\n * @example\n * ```ts\n * const serializer = new Serializer();\n * serializer.serializeStr(\"çå∞≠¢õß∂ƒ∫\");\n * assert(serializer.getBytes() === new Uint8Array([24, 0xc3, 0xa7, 0xc3, 0xa5, 0xe2, 0x88, 0x9e,\n * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]));\n * ```\n */\n serializeStr(value: string): this {\n const textEncoder = new TextEncoder()\n this.serializeBytes(textEncoder.encode(value))\n return this\n }\n\n /**\n * Serializes an array of bytes.\n *\n * layout for \"bytes\": bytes_length | bytes. bytes_length is the length of the bytes array that is\n * uleb128/ubeb128 encoded. bytes_length is a u32 integer.\n */\n serializeBytes(value: Bytes): this {\n if (this.littleEndian) {\n this.serializeU32AsUleb128(value.length)\n } else {\n this.serializeU32AsUbeb128(value.length)\n }\n this.serialize(value)\n return this\n }\n\n /**\n * Serializes an array of bytes with known length. Therefore length doesn't need to be\n * serialized to help deserialization. When deserializing, the number of\n * bytes to deserialize needs to be passed in.\n */\n serializeFixedBytes(value: Bytes): this {\n this.serialize(value)\n return this\n }\n\n /**\n * Serializes a boolean value.\n *\n * layout for \"boolean\": One byte. \"0x01\" for True and \"0x00\" for False.\n */\n serializeBool(value: boolean): this {\n if (typeof value !== 'boolean') {\n throw new Error('Value needs to be a boolean')\n }\n const byteValue = value ? 1 : 0\n this.serialize(new Uint8Array([byteValue]))\n return this\n }\n\n /**\n * Serializes a uint8 number.\n *\n * layout for \"uint8\": One byte. Binary format in little-endian representation.\n */\n @checkNumberRange(0, MAX_U8_NUMBER)\n serializeU8(value: Uint8): this {\n this.serialize(new Uint8Array([value]))\n return this\n }\n\n /**\n * Serializes a uint16 number.\n *\n * layout for \"uint16\": Two bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const serializer = new Serializer(true);\n * serializer.serializeU16(4660);\n * assert(serializer.getBytes() === new Uint8Array([0x34, 0x12]));\n * const serializer = new Serializer(false);\n * serializer.serializeU16(4660);\n * assert(serializer.getBytes() === new Uint8Array([0x12, 0x34]));\n * ```\n */\n @checkNumberRange(0, MAX_U16_NUMBER)\n serializeU16(value: Uint16): this {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.serializeWithFunction(DataView.prototype.setUint16, 2, value)\n return this\n }\n\n /**\n * Serializes a uint32 number.\n *\n * layout for \"uint32\": Four bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const serializer = new Serializer(true);\n * serializer.serializeU32(305419896);\n * assert(serializer.getBytes() === new Uint8Array([0x78, 0x56, 0x34, 0x12]));\n * const serializer = new Serializer(false);\n * serializer.serializeU32(305419896);\n * assert(serializer.getBytes() === new Uint8Array([0x12, 0x34, 0x56, 0x78]));\n * ```\n */\n @checkNumberRange(0, MAX_U32_NUMBER)\n serializeU32(value: Uint32): this {\n // eslint-disable-next-line @typescript-eslint/unbound-method\n this.serializeWithFunction(DataView.prototype.setUint32, 4, value)\n return this\n }\n\n /**\n * Serializes a uint64 number.\n *\n * layout for \"uint64\": Eight bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const serializer = new Serializer(true);\n * serializer.serializeU64(1311768467750121216);\n * assert(serializer.getBytes() === new Uint8Array([0x00, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12]));\n * const serializer = new Serializer(false);\n * serializer.serializeU64(1311768467750121216);\n * assert(serializer.getBytes() === new Uint8Array([0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x00]));\n * ```\n */\n @checkNumberRange(BigInt(0), MAX_U64_BIG_INT)\n serializeU64(value: AnyNumber): this {\n const low = BigInt(value.toString()) & BigInt(MAX_U32_NUMBER)\n const high = BigInt(value.toString()) >> BigInt(32)\n\n const array = this.littleEndian ? [low, high] : [high, low]\n array.forEach((x) => {\n this.serializeU32(Number(x))\n })\n return this\n }\n\n /**\n * Serializes a uint128 number.\n *\n * layout for \"uint128\": Sixteen bytes. Binary format in little-endian representation.\n */\n @checkNumberRange(BigInt(0), MAX_U128_BIG_INT)\n serializeU128(value: AnyNumber): this {\n const low = BigInt(value.toString()) & MAX_U64_BIG_INT\n const high = BigInt(value.toString()) >> BigInt(64)\n\n const array = this.littleEndian ? [low, high] : [high, low]\n array.forEach((x) => {\n this.serializeU64(x)\n })\n return this\n }\n\n /**\n * Serializes a uint256 number.\n *\n * layout for \"uint256\": Sixteen bytes. Binary format in little-endian representation.\n */\n @checkNumberRange(BigInt(0), MAX_U256_BIG_INT)\n serializeU256(value: AnyNumber): this {\n const low = BigInt(value.toString()) & MAX_U128_BIG_INT\n const high = BigInt(value.toString()) >> BigInt(128)\n\n const array = this.littleEndian ? [low, high] : [high, low]\n array.forEach((x) => {\n this.serializeU128(x)\n })\n return this\n }\n\n /**\n * Serializes a uint32 number with uleb128.\n *\n * use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n */\n @checkNumberRange(0, MAX_U32_NUMBER)\n serializeU32AsUleb128(val: Uint32): this {\n let value = val\n const valueArray = []\n while (value >>> 7 !== 0) {\n valueArray.push((value & 0x7f) | 0x80)\n value >>>= 7\n }\n valueArray.push(value)\n this.serialize(new Uint8Array(valueArray))\n return this\n }\n\n /**\n * Serializes a uint32 number with unsigned Variable-Length Big-Endian Encoding.\n *\n * use ubeb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n */\n @checkNumberRange(0, MAX_U32_NUMBER)\n serializeU32AsUbeb128(val: Uint32): this {\n let value = val\n const valueArray: Uint8[] = []\n\n valueArray.unshift(value & 0x7f)\n while (value >>> 7 !== 0) {\n value >>>= 7\n const byte = (value & 0x7f) | 0x80\n valueArray.unshift(byte)\n }\n\n this.serialize(new Uint8Array(valueArray))\n return this\n }\n\n /**\n * Returns the buffered bytes\n *\n * @returns {Bytes} The buffered bytes.\n */\n getBytes(): Bytes {\n return new Uint8Array(this.buffer).slice(0, this.offset)\n }\n}\n\n/**\n * Creates a decorator to make sure the arg value of the decorated function is within a range.\n * @param minValue The arg value of decorated function must >= minValue\n * @param maxValue The arg value of decorated function must <= maxValue\n * @param message Error message\n */\nfunction checkNumberRange<T extends AnyNumber>(minValue: T, maxValue: T, message?: string) {\n return (target: unknown, propertyKey: string, descriptor: PropertyDescriptor): PropertyDescriptor => {\n /* eslint-disable @typescript-eslint/no-unsafe-assignment */\n const childFunction = descriptor.value as (value: AnyNumber) => any\n // eslint-disable-next-line no-param-reassign\n descriptor.value = function deco(value: AnyNumber): void {\n const valueBigInt = BigInt(value.toString())\n if (valueBigInt > BigInt(maxValue.toString()) || valueBigInt < BigInt(minValue.toString())) {\n throw new Error(message ?? 'Value is out of range')\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return childFunction.apply(this, [value])\n }\n return descriptor\n /* eslint-enable @typescript-eslint/no-unsafe-assignment */\n }\n}\n","// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\n/* eslint-disable no-bitwise */\nimport { MAX_U32_NUMBER } from './consts'\nimport { Bytes, Uint128, Uint16, Uint256, Uint32, Uint64, Uint8 } from './types'\n\n/**\n * Class representing a deserializer for various data types.\n */\nexport class Deserializer {\n private buffer: ArrayBuffer\n\n private offset: number\n public readonly littleEndian: boolean\n\n /**\n * Creates an instance of Deserializer.\n *\n * @param {Bytes} data - The data to deserialize.\n * @param {boolean} [littleEndian=true] - Whether to use little-endian byte order.\n */\n constructor(data: Bytes, littleEndian = true) {\n this.littleEndian = littleEndian\n // copies data to prevent outside mutation of buffer.\n this.buffer = new ArrayBuffer(data.length)\n new Uint8Array(this.buffer).set(data, 0)\n this.offset = 0\n }\n\n /**\n * Reads a specified number of bytes from the buffer.\n *\n * @param {number} length - The number of bytes to read.\n * @returns {ArrayBuffer} The read bytes.\n * @throws {Error} If the end of the buffer is reached.\n */\n private read(length: number): ArrayBuffer {\n if (this.offset + length > this.buffer.byteLength) {\n throw new Error('Reached to the end of buffer')\n }\n\n const bytes = this.buffer.slice(this.offset, this.offset + length)\n this.offset += length\n return bytes\n }\n\n /**\n * Returns the number of remaining bytes in the buffer.\n *\n * @returns {number} The number of remaining bytes.\n */\n public remaining(): number {\n return this.buffer.byteLength - this.offset\n }\n\n /**\n * Rewinds the buffer by a specified number of bytes.\n *\n * @param {number} length - The number of bytes to rewind.\n */\n public rewind(length: number): void {\n this.offset -= length\n }\n\n /**\n * Deserializes a string. UTF8 string is supported. Reads the string's bytes length \"l\" first,\n * and then reads \"l\" bytes of content. Decodes the byte array into a string.\n *\n * layout for \"string\": string_length | string_content. string_length is the bytes length of\n * the string that is uleb128/ubeb128 encoded. string_length is a u32 integer.\n *\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([24, 0xc3, 0xa7, 0xc3, 0xa5, 0xe2, 0x88, 0x9e,\n * 0xe2, 0x89, 0xa0, 0xc2, 0xa2, 0xc3, 0xb5, 0xc3, 0x9f, 0xe2, 0x88, 0x82, 0xc6, 0x92, 0xe2, 0x88, 0xab]), true);\n * assert(deserializer.deserializeStr() === \"çå∞≠¢õß∂ƒ∫\");\n * ```\n * @returns {string} The deserialized string.\n */\n deserializeStr(): string {\n const value = this.deserializeBytes()\n const textDecoder = new TextDecoder()\n return textDecoder.decode(value)\n }\n\n /**\n * Deserializes an array of bytes.\n *\n * layout for \"bytes\": bytes_length | bytes. bytes_length is the length of the bytes array that is\n * uleb128/ubeb128 encoded. bytes_length is a u32 integer.\n *\n * @returns {Bytes} The deserialized bytes.\n */\n deserializeBytes(): Bytes {\n const len = this.littleEndian ? this.deserializeUleb128AsU32() : this.deserializeUbeb128AsU32()\n\n return new Uint8Array(this.read(len))\n }\n\n /**\n * Deserializes an array of bytes. The number of bytes to read is already known.\n *\n * @param {number} len - The number of bytes to read.\n * @returns {Bytes} The deserialized bytes.\n */\n deserializeFixedBytes(len: number): Bytes {\n return new Uint8Array(this.read(len))\n }\n\n /**\n * Deserializes a boolean value.\n *\n * layout for \"boolean\": One byte. \"0x01\" for True and \"0x00\" for False.\n *\n * @returns {boolean} The deserialized boolean value.\n * @throws {Error} If the boolean value is invalid.\n */\n deserializeBool(): boolean {\n const bool = new Uint8Array(this.read(1))[0]\n if (bool !== 1 && bool !== 0) {\n throw new Error('Invalid boolean value')\n }\n return bool === 1\n }\n\n /**\n * Deserializes a uint8 number.\n *\n * layout for \"uint8\": One byte. Binary format in little-endian representation.\n *\n * @returns {Uint8} The deserialized uint8 number.\n */\n deserializeU8(): Uint8 {\n return new DataView(this.read(1)).getUint8(0)\n }\n\n /**\n * Deserializes a uint16 number.\n *\n * layout for \"uint16\": Two bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([0x34, 0x12]), true);\n * assert(deserializer.deserializeU16() === 4660);\n * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34]), false);\n * assert(deserializer.deserializeU16() === 4660);\n * ```\n * @returns {Uint16} The deserialized uint16 number.\n */\n deserializeU16(): Uint16 {\n return new DataView(this.read(2)).getUint16(0, this.littleEndian)\n }\n\n /**\n * Deserializes a uint32 number.\n *\n * layout for \"uint32\": Four bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([0x78, 0x56, 0x34, 0x12]), true);\n * assert(deserializer.deserializeU32() === 305419896);\n * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34, 0x56, 0x78]), false);\n * assert(deserializer.deserializeU32() === 305419896);\n * ```\n * @returns {Uint32} The deserialized uint32 number.\n */\n deserializeU32(): Uint32 {\n return new DataView(this.read(4)).getUint32(0, this.littleEndian)\n }\n\n /**\n * Deserializes a uint64 number.\n *\n * layout for \"uint64\": Eight bytes. Binary format in little-endian representation.\n * @example\n * ```ts\n * const deserializer = new Deserializer(new Uint8Array([0x00, 0xEF, 0xCD, 0xAB, 0x78, 0x56, 0x34, 0x12]), true);\n * assert(deserializer.deserializeU64() === 1311768467750121216);\n * const deserializer = new Deserializer(new Uint8Array([0x12, 0x34, 0x56, 0x78, 0xAB, 0xCD, 0xEF, 0x00]), false);\n * assert(deserializer.deserializeU64() === 1311768467750121216);\n * ```\n * @returns {Uint64} The deserialized uint64 number.\n */\n deserializeU64(): Uint64 {\n const low = this.deserializeU32()\n const high = this.deserializeU32()\n\n const values = this.littleEndian ? [low, high] : [high, low]\n return BigInt((BigInt(values[1]) << BigInt(32)) | BigInt(values[0]))\n }\n\n /**\n * Deserializes a uint128 number.\n *\n * layout for \"uint128\": Sixteen bytes. Binary format in little-endian representation.\n *\n * @returns {Uint128} The deserialized uint128 number.\n */\n deserializeU128(): Uint128 {\n const low = this.deserializeU64()\n const high = this.deserializeU64()\n\n const values = this.littleEndian ? [low, high] : [high, low]\n return BigInt((values[1] << BigInt(64)) | values[0])\n }\n\n /**\n * Deserializes a uint256 number.\n *\n * layout for \"uint256\": Thirty-two bytes. Binary format in little-endian representation.\n *\n * @returns {Uint256} The deserialized uint256 number.\n */\n deserializeU256(): Uint256 {\n const low = this.deserializeU128()\n const high = this.deserializeU128()\n\n const values = this.littleEndian ? [low, high] : [high, low]\n return BigInt((values[1] << BigInt(128)) | values[0])\n }\n\n /**\n * Deserializes a uleb128 encoded uint32 number.\n *\n * use uleb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n *\n * @returns {Uint32} The deserialized uleb128 encoded uint32 number.\n * @throws {Error} If there is an overflow while parsing the value.\n */\n deserializeUleb128AsU32(): Uint32 {\n let value = BigInt(0)\n let shift = 0\n\n while (value < MAX_U32_NUMBER) {\n const byte = this.deserializeU8()\n value |= BigInt(byte & 0x7f) << BigInt(shift)\n\n if ((byte & 0x80) === 0) {\n break\n }\n shift += 7\n }\n\n if (value > MAX_U32_NUMBER) {\n throw new Error('Overflow while parsing uleb128-encoded uint32 value')\n }\n\n return Number(value)\n }\n\n /**\n * Deserializes a unsigned Variable-Length Big-Endian Encoding encoded uint32 number.\n *\n * use ubeb128 encoding in two cases: (1) lengths of variable-length sequences and (2) tags of enum values\n *\n * @returns {Uint32} The deserialized ubeb128 encoded uint32 number.\n * @throws {Error} If there is an overflow while parsing the value.\n */\n deserializeUbeb128AsU32(): Uint32 {\n let value = BigInt(0)\n\n while (value < MAX_U32_NUMBER) {\n const byte = this.deserializeU8()\n value |= BigInt(byte & 0x7f)\n\n if ((byte & 0x80) === 0) {\n break\n }\n value = value << BigInt(7)\n }\n\n if (value > MAX_U32_NUMBER) {\n throw new Error('Overflow while parsing ubeb128-encoded uint32 value')\n }\n\n return Number(value)\n }\n}\n","// Copyright © Aptos Foundation\n// Copyright © LayerZero Labs\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Deserializer } from './deserializer'\nimport { Serializer } from './serializer'\nimport { AnyNumber, Bytes, Seq, Uint16, Uint32, Uint8 } from './types'\n\n/**\n * Interface representing a serializable object.\n */\ninterface Serializable {\n /**\n * Serializes the object using the provided serializer.\n *\n * @param {Serializer} serializer - The serializer to use.\n */\n serialize(serializer: Serializer): void\n}\n\n/**\n * Interface representing a deserializable object.\n */\ninterface Deserializable<T> {\n /**\n * Deserializes the object using the provided deserializer.\n *\n * @param {Deserializer} deserializer - The deserializer to use.\n * @returns {T} The deserialized object.\n */\n deserialize(deserializer: Deserializer): T\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style\ninterface ISerializer {\n [key: string]: (item: unknown) => void\n}\n\n/**\n * Serializes a vector of values that are \"Serializable\".\n *\n * @param {Seq<T>} value - The vector of values to serialize.\n * @param {Serializer} serializer - The serializer to use.\n */\nexport function serializeVector<T extends Serializable>(value: Seq<T>, serializer: Serializer): void {\n serializer.serializeU32AsUleb128(value.length)\n value.forEach((item: T) => {\n item.serialize(serializer)\n })\n}\n\n/**\n * Serializes a vector with a specified item serialization function.\n * Very dynamic function and bypasses static typechecking.\n *\n * @param {unknown[]} value - The vector of values to serialize.\n * @param {string} func - The name of the serialization function to use.\n * @returns {Bytes} The serialized bytes.\n * @throws {Error} If the specified function does not exist on the serializer.\n */\nexport function serializeVectorWithFunc(value: unknown[], func: string): Bytes {\n const serializer = new Serializer()\n serializer.serializeU32AsUleb128(value.length)\n\n const f = (serializer as unknown as ISerializer)[func]\n if (typeof f !== 'function') {\n throw new Error(`The function '${func}' does not exist on the serializer.`)\n }\n\n value.forEach((item) => {\n f.call(serializer, item)\n })\n return serializer.getBytes()\n}\n\n/**\n * Deserializes a vector of values.\n *\n * @param {Deserializer} deserializer - The deserializer to use.\n * @param {Deserializable<T>} cls - The class to use for deserialization.\n * @returns {T[]} The deserialized vector of values.\n */\nexport function deserializeVector<T>(deserializer: Deserializer, cls: Deserializable<T>): any[] {\n const length = deserializer.deserializeUleb128AsU32()\n const list: T[] = []\n for (let i = 0; i < length; i += 1) {\n list.push(cls.deserialize(deserializer))\n }\n return list\n}\n\n/**\n * Serializes a value to bytes using BCS (Binary Canonical Serialization).\n *\n * @param {T} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsToBytes<T extends Serializable>(value: T): Bytes {\n const serializer = new Serializer()\n value.serialize(serializer)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a uint64 value to bytes using BCS.\n *\n * @param {AnyNumber} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeUint64(value: AnyNumber): Bytes {\n const serializer = new Serializer()\n serializer.serializeU64(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a uint8 value to bytes using BCS.\n *\n * @param {Uint8} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeU8(value: Uint8): Bytes {\n const serializer = new Serializer()\n serializer.serializeU8(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a uint16 value to bytes using BCS.\n *\n * @param {Uint16} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeU16(value: Uint16): Bytes {\n const serializer = new Serializer()\n serializer.serializeU16(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a uint32 value to bytes using BCS.\n *\n * @param {Uint32} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeU32(value: Uint32): Bytes {\n const serializer = new Serializer()\n serializer.serializeU32(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a uint128 value to bytes using BCS.\n *\n * @param {AnyNumber} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeU128(value: AnyNumber): Bytes {\n const serializer = new Serializer()\n serializer.serializeU128(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a uint256 value to bytes using BCS.\n *\n * @param {AnyNumber} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeU256(value: AnyNumber): Bytes {\n const serializer = new Serializer()\n serializer.serializeU256(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a boolean value to bytes using BCS.\n *\n * @param {boolean} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeBool(value: boolean): Bytes {\n const serializer = new Serializer()\n serializer.serializeBool(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a string value to bytes using BCS.\n *\n * @param {string} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeStr(value: string): Bytes {\n const serializer = new Serializer()\n serializer.serializeStr(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a byte array to bytes using BCS.\n *\n * @param {Bytes} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeBytes(value: Bytes): Bytes {\n const serializer = new Serializer()\n serializer.serializeBytes(value)\n return serializer.getBytes()\n}\n\n/**\n * Serializes a fixed-length byte array to bytes using BCS.\n *\n * @param {Bytes} value - The value to serialize.\n * @returns {Bytes} The serialized bytes.\n */\nexport function bcsSerializeFixedBytes(value: Bytes): Bytes {\n const serializer = new Serializer()\n serializer.serializeFixedBytes(value)\n return serializer.getBytes()\n}\n"]}