UNPKG

@whisklabs/grpc

Version:

gRPC generator and http library for typescript

260 lines 7 kB
"use strict"; /* 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