UNPKG

@whisklabs/grpc

Version:

gRPC generator and http library for typescript

120 lines 4.91 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ParseMessage = exports.MessageBody = exports.ParseExtend = void 0; var typeguards_1 = require("@whisklabs/typeguards"); var comment_1 = require("../comment"); var thrower_1 = require("../thrower"); var utils_1 = require("../utils"); var validators_1 = require("../validators"); var enums_1 = require("./enums"); var extensions_1 = require("./extensions"); var field_1 = require("./field"); var oneof_1 = require("./oneof"); var options_1 = require("./options"); var reserved_1 = require("./reserved"); function ParseExtend(tokens) { return { name: tokens[1], message: ParseMessage(tokens), }; } exports.ParseExtend = ParseExtend; function MessageBody(tokens, name) { var message = { name: name, enums: [], options: {}, messages: [], fields: [], extends: [], extensions: [], reserved: [], }; (0, comment_1.writeComment)(message); while (tokens.length > 0) { switch ((0, comment_1.next)(tokens)) { case '}': tokens.shift(); (0, comment_1.writeComment)(message); CheckReserved(message); return message; case 'map': case 'repeated': case 'optional': case 'required': message.fields.push((0, field_1.ParseField)(tokens)); break; case 'enum': message.enums.push((0, enums_1.ParseEnums)(tokens)); break; case 'message': message.messages.push(ParseMessage(tokens)); break; case 'extensions': message.extensions.push((0, extensions_1.ParseExtensions)(tokens)); break; case 'oneof': message.fields = message.fields.concat((0, oneof_1.ParseOneOf)(tokens)); break; case 'extend': message.extends.push(ParseExtend(tokens)); break; case ';': tokens.shift(); break; case 'reserved': message.reserved.push((0, reserved_1.ParseReserved)(tokens)); break; case 'option': { var _a = (0, options_1.ParseOptions)(tokens), field = _a.field, value = _a.value; (0, utils_1.insertOption)(message.options, field, value); break; } case undefined: continue; default: message.fields.push((0, field_1.ParseField)(tokens, true)); } } throw new thrower_1.Thrower('message', [['no close tag "}"', 0]]); } exports.MessageBody = MessageBody; function CheckReserved(message) { for (var _i = 0, _a = message.reserved; _i < _a.length; _i++) { var reserved = _a[_i]; for (var _b = 0, reserved_2 = reserved; _b < reserved_2.length; _b++) { var reserve = reserved_2[_b]; for (var _c = 0, _d = message.fields; _c < _d.length; _c++) { var field = _d[_c]; if ((0, validators_1.isText)(reserve) && reserve === field.name) { throw new thrower_1.Thrower('reserved', [["Field name \"".concat(field.name, "\" in message \"").concat(message.name, "\" is reserved"), 0]]); } else if ((0, validators_1.isNumber)(reserve) && reserve === field.tag) { throw new thrower_1.Thrower('reserved', [ ["Field \"".concat(field.name, "\" in message \"").concat(message.name, "\" with tag \"").concat(field.tag, "\" is reserved"), 0], ]); } else if ((0, typeguards_1.isObject)(reserve) && reserve.from <= field.tag && field.tag <= reserve.to) { throw new thrower_1.Thrower('reserved', [ [ // eslint-disable-next-line max-len "Field \"".concat(field.name, "\" with tag \"").concat(field.tag, "\" in message \"").concat(message.name, "\" is reserved between ").concat(reserve.from, " to ").concat(reserve.to), 0, ], ]); } } } } } function ParseMessage(tokens) { var len = (0, utils_1.check)({ type: 'message', tokens: [tokens[0], tokens[1], tokens[2], tokens[tokens.indexOf('}')]], rules: [(0, utils_1.ch)(['extend', 'message']), (0, utils_1.ch)(validators_1.isText), (0, utils_1.ch)('{'), (0, utils_1.ch)('}')], }).len; var _a = (0, utils_1.cut)(tokens, len - 1), messageName = _a[1]; return MessageBody(tokens, messageName); } exports.ParseMessage = ParseMessage; //# sourceMappingURL=message.js.map