UNPKG

@whisklabs/grpc

Version:

gRPC generator and http library for typescript

187 lines 7.05 kB
"use strict"; /* eslint-disable @typescript-eslint/strict-boolean-expressions, @typescript-eslint/no-explicit-any */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Default = exports.Decode = exports.Encode = void 0; var typeguards_1 = require("@whisklabs/typeguards"); var constant_1 = require("./constant"); var default_1 = require("./default"); var packed_1 = require("./packed"); var read_1 = require("./read"); var write_1 = require("./write"); function GetStruct(struct) { var st = struct; var s = st.s, f = st.f; if (s && f) { return { s: s, f: f }; } s = s || {}; f = f || struct(); for (var _i = 0, f_1 = f; _i < f_1.length; _i++) { var field = f_1[_i]; s[field[0]] = field; } st.f = f; st.s = s; return { s: s, f: f }; } var Encode = function (struct, obj) { return EncodeHelper(new write_1.BufWrite(), struct, obj).get(); }; exports.Encode = Encode; function EncodeHelper(buf, struct, obj) { var f = GetStruct(struct).f; if ((0, typeguards_1.isObject)(obj)) { for (var _i = 0, f_2 = f; _i < f_2.length; _i++) { var _a = f_2[_i], tag = _a[0], fieldName = _a[1], item = _a[2], _ = _a[3], oneof = _a[4]; var one = (0, typeguards_1.isText)(oneof) ? obj[oneof] : undefined; var val = (0, typeguards_1.isObject)(one) && fieldName === one.oneof ? one.value : obj[fieldName]; if ((0, typeguards_1.isPresent)(val)) { EncodeWrite(buf, item, tag, val); } } } return buf; } function EncodeWrite(buf, item, tag, val) { if ((0, typeguards_1.isString)(item) && write_1.writeMap[item]) { write_1.writeMap[item](buf, tag, val); } else if ((0, typeguards_1.isFunction)(item)) { var enc = EncodeHelper(new write_1.BufWrite(), item, val); (0, write_1.writeTag)(buf, tag, constant_1.Bytes); (0, write_1.writeVarint)(buf, enc.buf.length); buf.concat(enc.buf); } else if ((0, typeguards_1.isArray)(item)) { if (item[0] === 'repeated' && (0, typeguards_1.isArray)(val)) { if (packed_1.PACKED[item[1]]) { (0, write_1.writePacked)(write_1.writeMapRaw[item[1]], buf, tag, val); } else { for (var _i = 0, val_1 = val; _i < val_1.length; _i++) { var v = val_1[_i]; EncodeWrite(buf, item[1], tag, v); } } } else if (item[0] === 'map' && (0, typeguards_1.isObject)(val)) { for (var key in val) { var value = val[key]; EncodeWrite(buf, (0, constant_1.MapStruct)(item), tag, { key: key, value: value }); } } else if (item[0] === 'wrapper') { EncodeWrite(buf, (0, constant_1.WrapperStruct)(item[1]), tag, { value: val }); } } } var Decode = function (struct, buffer) { return DecodeHelper(new read_1.BufRead(buffer), struct); }; exports.Decode = Decode; function DecodeDefault(struct, result) { if (result === void 0) { result = {}; } var f = GetStruct(struct).f; for (var _i = 0, f_3 = f; _i < f_3.length; _i++) { var field = f_3[_i]; var nameField = field[1], item = field[2], required = field[3], oneof = field[4]; if (required !== 1 || (0, typeguards_1.isPresent)(result[nameField])) { continue; } if (oneof) { if (!result[oneof]) { result[oneof] = { oneof: nameField, value: GetDefault(item), }; } } else { var val = GetDefault(item); if ((0, typeguards_1.isPresent)(val)) { result[nameField] = val; } } } return result; } var Default = function (struct) { return DecodeDefault(struct); }; exports.Default = Default; var GetDefault = function (item) { return (0, typeguards_1.isString)(item) ? (0, default_1.getDefault)(item) : (0, typeguards_1.isFunction)(item) ? DecodeDefault(item) : item[0] === 'repeated' ? [] : item[0] === 'map' ? {} : item[0] === 'wrapper' ? (0, default_1.getDefault)(item[1]) : undefined; }; function DecodeHelper(b, struct, result, path, end) { if (result === void 0) { result = {}; } if (path === void 0) { path = ''; } var s = GetStruct(struct).s; end = end || b.buf.length; b.path = path; while (b.pos < end) { var val = (0, read_1.uint32)(b); var tag = val >> 3; var startPos = b.pos; b.type = val & 0x7; if (s[tag]) { var _a = s[tag], id = _a[0], nameField = _a[1], item = _a[2], oneof = _a[4]; DecodeRead(b, nameField, result, "".concat(path ? "".concat(path, ".") : '').concat(nameField, "[").concat(id, "]"), item); if (oneof) { if (result[nameField]) { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment result[oneof] = { oneof: nameField, value: result[nameField] }; } delete result[nameField]; } } if (b.pos === startPos) { (0, read_1.skip)(b, val); } } return DecodeDefault(struct, result); } function DecodeRead(b, fieldName, result, path, item) { if ((0, typeguards_1.isString)(item)) { if (read_1.readMap[item]) { result[fieldName] = (0, default_1.getDefault)(item, read_1.readMap[item](b)); } } else if ((0, typeguards_1.isFunction)(item)) { result[fieldName] = DecodeHelper(b, item, {}, path, (0, read_1.uint32)(b) + b.pos); } else if ((0, typeguards_1.isArray)(item)) { if (item[0] === 'repeated') { if ((0, typeguards_1.isString)(item[1]) && packed_1.PACKED[item[1]]) { result[fieldName] = (0, read_1.readPacked)(read_1.readMap[item[1]], b); } else { var mm = result[fieldName]; var m = (0, typeguards_1.isArray)(mm) ? mm : []; result[fieldName] = m; var o = {}; DecodeRead(b, 'out', o, path, item[1]); m.push(o.out); } } else if (item[0] === 'map') { var mm = result[fieldName]; var m = (0, typeguards_1.isObject)(mm) ? mm : {}; result[fieldName] = m; var o = DecodeHelper(b, (0, constant_1.MapStruct)(item), {}, path, (0, read_1.uint32)(b) + b.pos); m[o.key] = o.value; } else if (item[0] === 'wrapper') { var o = DecodeHelper(b, (0, constant_1.WrapperStruct)(item[1]), {}, path, (0, read_1.uint32)(b) + b.pos); result[fieldName] = o.value; } } } //# sourceMappingURL=index.js.map