@whisklabs/grpc
Version:
gRPC generator and http library for typescript
260 lines • 7 kB
JavaScript
;
/* eslint-disable id-blacklist */
Object.defineProperty(exports, "__esModule", { value: true });
exports.readMap = exports.readPacked = exports.uint32 = exports.skip = exports.BufRead = void 0;
var constant_1 = require("./constant");
var ieee754_1 = require("./ieee754");
var utf8_1 = require("./utf8");
var BufRead = /** @class */ (function () {
function BufRead(buf) {
this.buf = buf;
this.pos = 0;
this.type = 0;
this.path = '';
this.len = 0;
this.len = buf.length;
}
return BufRead;
}());
exports.BufRead = BufRead;
function skip(b, val) {
var type = val & 7;
if (type === constant_1.Varint) {
while (b.buf[b.pos++] > 127) { }
}
else if (type === constant_1.Bytes) {
b.pos = uint32(b) + b.pos;
}
else if (type === constant_1.Fixed32) {
b.pos += 4;
}
else if (type === constant_1.Fixed64) {
b.pos += 8;
}
else if (type === 3) {
var t = void 0;
while ((t = uint32(b) & 7) !== 4) {
skip(b, t);
}
}
else {
throw new Error("Unimplemented type: ".concat(type, " in path \"").concat(b.path, "\""));
}
}
exports.skip = skip;
function uint32(b) {
var value = constant_1.SHIFT_LEFT_32 - 1;
value = (b.buf[b.pos] & 127) >>> 0;
if (b.buf[b.pos++] < 128) {
return value;
}
value = (value | ((b.buf[b.pos] & 127) << 7)) >>> 0;
if (b.buf[b.pos++] < 128) {
return value;
}
value = (value | ((b.buf[b.pos] & 127) << 14)) >>> 0;
if (b.buf[b.pos++] < 128) {
return value;
}
value = (value | ((b.buf[b.pos] & 127) << 21)) >>> 0;
if (b.buf[b.pos++] < 128) {
return value;
}
value = (value | ((b.buf[b.pos] & 15) << 28)) >>> 0;
if (b.buf[b.pos++] < 128) {
return value;
}
if ((b.pos += 5) > b.len) {
b.pos = b.len;
throw outRange(b, 10);
}
return value;
}
exports.uint32 = uint32;
function int32(b) {
return uint32(b) | 0;
}
function sint32(b) {
var value = uint32(b);
return ((value >>> 1) ^ -(value & 1)) | 0;
}
function bool(b) {
return uint32(b) !== 0;
}
function readFixed32(b, num) {
return (b.buf[num - 4] | (b.buf[num - 3] << 8) | (b.buf[num - 2] << 16) | (b.buf[num - 1] << 24)) >>> 0;
}
function fixed32(b) {
if (b.pos + 4 > b.len) {
throw outRange(b, 4);
}
return readFixed32(b, (b.pos += 4));
}
function sfixed32(b) {
if (b.pos + 4 > b.len) {
throw outRange(b, 4);
}
return readFixed32(b, (b.pos += 4)) | 0;
}
function readFixed64(b, sign) {
if (b.pos + 8 > b.len) {
throw outRange(b, 8);
}
return toNumber(readFixed32(b, (b.pos += 4)) >>> 0, readFixed32(b, (b.pos += 4) >>> 0), sign);
}
function fixed64(b) {
return readFixed64(b, true);
}
function sfixed64(b) {
return readFixed64(b, false);
}
function int64(b) {
var _a = readLongVarint(b), lo = _a.lo, hi = _a.hi;
return toNumber(lo, hi, false);
}
function uint64(b) {
var _a = readLongVarint(b), lo = _a.lo, hi = _a.hi;
return toNumber(lo, hi, true);
}
function sint64(b) {
var _a;
var _b = readLongVarint(b), lo = _b.lo, hi = _b.hi;
(_a = zzDecode(lo, hi), lo = _a.lo, hi = _a.hi);
return toNumber(lo, hi, false);
}
var float = function (b) {
if (b.pos + 4 > b.len) {
throw outRange(b, 4);
}
var val = (0, ieee754_1.read)(b.buf, b.pos, true, 23, 4);
b.pos += 4;
return val;
};
function double(b) {
if (b.pos + 8 > b.len) {
throw outRange(b, 4);
}
var val = (0, ieee754_1.read)(b.buf, b.pos, true, 52, 8);
b.pos += 8;
return val;
}
function string(b) {
var end = uint32(b) + b.pos;
var pos = b.pos;
b.pos = end;
return (0, utf8_1.readUtf8)(b.buf, pos, end);
}
function bytes(b) {
var length = uint32(b);
var end = length + b.pos;
if (end > b.len) {
throw outRange(b, length);
}
var buffer = b.buf.subarray(b.pos, end);
b.pos = end;
return buffer;
}
var packedEnd = function (b) { return (b.type === constant_1.Bytes ? uint32(b) + b.pos : b.pos + 1); };
function readPacked(fn, b) {
if (b.type !== constant_1.Bytes) {
return [fn(b)];
}
var end = packedEnd(b);
var arr = [];
while (b.pos < end) {
arr.push(fn(b));
}
return arr;
}
exports.readPacked = readPacked;
exports.readMap = {
string: string,
float: float,
double: double,
bool: bool,
enum: uint32,
uint32: uint32,
uint64: uint64,
int32: int32,
int64: int64,
sint32: sint32,
sint64: sint64,
fixed32: fixed32,
fixed64: fixed64,
sfixed32: sfixed32,
sfixed64: sfixed64,
bytes: bytes,
};
function outRange(b, writeLength) {
return Error("Out of range [".concat(b.path, "]: ").concat(b.pos, " + ").concat(writeLength !== null && writeLength !== void 0 ? writeLength : 1, " > ").concat(b.len));
}
function toNumber(lo, hi, sign) {
if (!sign && hi >>> 31) {
lo = (~lo + 1) >>> 0;
hi = ~hi >>> 0;
if (!lo) {
hi = (hi + 1) >>> 0;
}
return -(lo + hi * constant_1.SHIFT_LEFT_32);
}
return lo + hi * constant_1.SHIFT_LEFT_32;
}
function zzDecode(lo, hi) {
var mask = -(lo & 1);
lo = (((lo >>> 1) | (hi << 31)) ^ mask) >>> 0;
hi = ((hi >>> 1) ^ mask) >>> 0;
return { lo: lo, hi: hi };
}
function readLongVarint(b) {
var lo = 0;
var hi = 0;
var i = 0;
if (b.len - b.pos > 4) {
for (; i < 4; ++i) {
lo = (lo | ((b.buf[b.pos] & 127) << (i * 7))) >>> 0;
if (b.buf[b.pos++] < 128) {
return { lo: lo, hi: hi };
}
}
lo = (lo | ((b.buf[b.pos] & 127) << 28)) >>> 0;
hi = (hi | ((b.buf[b.pos] & 127) >> 4)) >>> 0;
if (b.buf[b.pos++] < 128) {
return { lo: lo, hi: hi };
}
i = 0;
}
else {
for (; i < 3; ++i) {
if (b.pos >= b.len) {
throw outRange(b);
}
lo = (lo | ((b.buf[b.pos] & 127) << (i * 7))) >>> 0;
if (b.buf[b.pos++] < 128) {
return { lo: lo, hi: hi };
}
}
lo = (lo | ((b.buf[b.pos++] & 127) << (i * 7))) >>> 0;
return { lo: lo, hi: hi };
}
if (b.len - b.pos > 4) {
for (; i < 5; ++i) {
hi = (hi | ((b.buf[b.pos] & 127) << (i * 7 + 3))) >>> 0;
if (b.buf[b.pos++] < 128) {
return { lo: lo, hi: hi };
}
}
}
else {
for (; i < 5; ++i) {
if (b.pos >= b.len) {
throw outRange(b);
}
hi = (hi | ((b.buf[b.pos] & 127) << (i * 7 + 3))) >>> 0;
if (b.buf[b.pos++] < 128) {
return { lo: lo, hi: hi };
}
}
}
throw Error("Invalid varint encoding in \"".concat(b.path, "\""));
}
//# sourceMappingURL=read.js.map