123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.AvroEncoder = void 0;
- class AvroEncoder {
- constructor(writer) {
- this.writer = writer;
- }
- encode(value) {
- const writer = this.writer;
- writer.reset();
- this.writeAny(value);
- return writer.flush();
- }
- writeUnknown(value) {
- this.writeNull();
- }
- writeAny(value) {
- switch (typeof value) {
- case 'boolean':
- return this.writeBoolean(value);
- case 'number':
- return this.writeNumber(value);
- case 'string':
- return this.writeStr(value);
- case 'object': {
- if (value === null)
- return this.writeNull();
- const constructor = value.constructor;
- switch (constructor) {
- case Object:
- return this.writeObj(value);
- case Array:
- return this.writeArr(value);
- case Uint8Array:
- return this.writeBin(value);
- default:
- return this.writeUnknown(value);
- }
- }
- case 'bigint':
- return this.writeLong(value);
- case 'undefined':
- return this.writeNull();
- default:
- return this.writeUnknown(value);
- }
- }
- writeNull() {
- }
- writeBoolean(bool) {
- this.writer.u8(bool ? 1 : 0);
- }
- writeInt(int) {
- this.writeVarIntSigned(this.encodeZigZag32(Math.trunc(int)));
- }
- writeLong(long) {
- if (typeof long === 'bigint') {
- this.writeVarLong(this.encodeZigZag64(long));
- }
- else {
- this.writeVarLong(this.encodeZigZag64(BigInt(Math.trunc(long))));
- }
- }
- writeFloatAvro(float) {
- const writer = this.writer;
- writer.ensureCapacity(4);
- writer.view.setFloat32(writer.x, float, true);
- writer.move(4);
- }
- writeDouble(double) {
- const writer = this.writer;
- writer.ensureCapacity(8);
- writer.view.setFloat64(writer.x, double, true);
- writer.move(8);
- }
- writeBin(bytes) {
- this.writeVarIntUnsigned(bytes.length);
- this.writer.buf(bytes, bytes.length);
- }
- writeStr(str) {
- const writer = this.writer;
- const maxSize = str.length * 4;
- writer.ensureCapacity(5 + maxSize);
- const lengthOffset = writer.x;
- writer.x += 5;
- const bytesWritten = writer.utf8(str);
- const endPos = writer.x;
- writer.x = lengthOffset;
- this.writeVarIntUnsigned(bytesWritten);
- const actualLengthSize = writer.x - lengthOffset;
- if (actualLengthSize < 5) {
- const stringStart = lengthOffset + 5;
- const stringData = writer.uint8.slice(stringStart, endPos);
- writer.x = lengthOffset + actualLengthSize;
- writer.buf(stringData, stringData.length);
- }
- else {
- writer.x = endPos;
- }
- }
- writeArr(arr) {
- this.writeVarIntUnsigned(arr.length);
- const length = arr.length;
- for (let i = 0; i < length; i++) {
- this.writeAny(arr[i]);
- }
- this.writeVarIntUnsigned(0);
- }
- writeObj(obj) {
- const entries = Object.entries(obj);
- const length = entries.length;
- this.writeVarIntUnsigned(length);
- for (let i = 0; i < length; i++) {
- const entry = entries[i];
- this.writeStr(entry[0]);
- this.writeAny(entry[1]);
- }
- this.writeVarIntUnsigned(0);
- }
- writeNumber(num) {
- if (Number.isInteger(num)) {
- if (num >= -2147483648 && num <= 2147483647) {
- this.writeInt(num);
- }
- else {
- this.writeLong(num);
- }
- }
- else {
- this.writeDouble(num);
- }
- }
- writeInteger(int) {
- this.writeInt(int);
- }
- writeUInteger(uint) {
- this.writeInt(uint);
- }
- writeFloat(float) {
- this.writeFloatValue(float);
- }
- writeFloatValue(float) {
- const writer = this.writer;
- writer.ensureCapacity(4);
- writer.view.setFloat32(writer.x, float, true);
- writer.move(4);
- }
- writeAsciiStr(str) {
- const writer = this.writer;
- this.writeVarIntUnsigned(str.length);
- writer.ascii(str);
- }
- writeVarIntSigned(value) {
- const writer = this.writer;
- let n = value >>> 0;
- while (n >= 0x80) {
- writer.u8((n & 0x7f) | 0x80);
- n >>>= 7;
- }
- writer.u8(n & 0x7f);
- }
- writeVarIntUnsigned(value) {
- const writer = this.writer;
- let n = value >>> 0;
- while (n >= 0x80) {
- writer.u8((n & 0x7f) | 0x80);
- n >>>= 7;
- }
- writer.u8(n & 0x7f);
- }
- writeVarLong(value) {
- const writer = this.writer;
- let n = value;
- const mask = BigInt(0x7f);
- const shift = BigInt(7);
- while (n >= BigInt(0x80)) {
- writer.u8(Number((n & mask) | BigInt(0x80)));
- n >>= shift;
- }
- writer.u8(Number(n & mask));
- }
- encodeZigZag32(value) {
- return (value << 1) ^ (value >> 31);
- }
- encodeZigZag64(value) {
- return (value << BigInt(1)) ^ (value >> BigInt(63));
- }
- }
- exports.AvroEncoder = AvroEncoder;
- //# sourceMappingURL=AvroEncoder.js.map
|