@whisklabs/grpc
Version:
gRPC generator and http library for typescript
122 lines • 6.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.messages = void 0;
var typeguards_1 = require("@whisklabs/typeguards");
var constants_1 = require("./constants");
var enum_1 = require("./enum");
var field_1 = require("./field");
var utils_1 = require("./utils");
function messages(pack, out, items, messageRequired, list, parent) {
if (list === void 0) { list = []; }
var _loop_1 = function (msg) {
var newPack = (0, utils_1.joinPath)(parent !== null && parent !== void 0 ? parent : pack, msg.name);
list = list.concat(msg.messages.map(function (i) { return ({ name: i.name, pack: newPack }); }), msg.enums.map(function (i) { return ({ name: i.name, pack: newPack }); }));
message(pack, out, msg, list, messageRequired, parent);
if (msg.messages.length > 0) {
messages(pack, out, msg.messages, messageRequired, list, newPack);
}
};
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
var msg = items_1[_i];
_loop_1(msg);
}
}
exports.messages = messages;
// eslint-disable-next-line complexity
function message(pack, out, item, list, messageRequired, parent) {
var _a;
var option = item.options[constants_1.OPTION_MESSAGE_REQUIRED];
var isMessageRequired = (0, typeguards_1.isBoolean)(option) ? option : messageRequired;
var base = (0, utils_1.joinPath)(parent !== null && parent !== void 0 ? parent : pack, item.name);
(0, enum_1.enums)(base, out, item.enums);
var runtime = [];
var baseName = (0, utils_1.safeString)(base);
var oneof = {};
// const massagesNames = item.messages.map(m => m.name);
var packName = "".concat(pack, ".").concat(item.name);
var cID = (0, utils_1.checkSame)(out, 'id');
var cName = (0, utils_1.checkSame)(out, 'name');
if ((0, typeguards_1.isString)(constants_1.GOOGLE_WRAPPERS[packName])) {
var field = item.fields[0];
if (!((0, typeguards_1.isPresent)(field) && field.name === 'value' && field.tag === 1 && field.type === constants_1.GOOGLE_WRAPPERS[packName])) {
out.errors.push((0, utils_1.errorColor)("Incorrect google wrapper ".concat(packName), field.name, "".concat(field.type, ", ").concat(field.tag)));
}
}
if (item.fields.length > 0) {
out.dts.push("export type ".concat(baseName, " = {"));
for (var _i = 0, _b = item.fields; _i < _b.length; _i++) {
var field = _b[_i];
var fieldPack = getFieldPack(list, field, baseName, pack);
var naming = (0, utils_1.camelCase)(field.name);
var required = (0, field_1.isRequiredField)(field, isMessageRequired);
if ((0, typeguards_1.isText)(field.oneof)) {
field.oneof = (0, utils_1.camelCase)(field.oneof);
oneof[field.oneof] = (_a = oneof[field.oneof]) !== null && _a !== void 0 ? _a : [];
oneof[field.oneof].push(field);
}
else {
getComment(field, out);
var fieldName = (0, field_1.getField)(field, fieldPack, "in \"".concat(baseName, "\" field \"").concat(field.name, " = ").concat(field.tag, "\""), out, baseName);
out.dts.push(" ".concat(naming).concat(required ? '' : '?', ": ").concat(fieldName).concat(field.repeated ? '[]' : '', ";"));
}
var type = (0, field_1.getStruct)(field, fieldPack, out, baseName);
runtime.push(" [".concat(field.tag, ", \"").concat(naming, "\", ").concat(type, ", ").concat(required ? '1' : '0').concat((0, typeguards_1.isText)(field.oneof) ? ", \"".concat(field.oneof, "\"") : '', "],"));
var pathF = "".concat((0, typeguards_1.isString)(parent) ? "".concat(parent, ".") : '').concat(packName, ".").concat(field.name);
cID(field.tag, pathF);
cName(naming, pathF);
}
for (var one in oneof) {
out.dts.push(" ".concat(one, "?:"));
for (var _c = 0, _d = oneof[one]; _c < _d.length; _c++) {
var field = _d[_c];
var fieldPack = getFieldPack(list, field, baseName, pack);
getComment(field, out);
var naming = (0, utils_1.camelCase)(field.name);
var fieldName = (0, field_1.getField)(field, fieldPack, "in \"".concat(baseName, "\" field \"").concat(field.name, " = ").concat(field.tag, "\""), out, baseName);
out.dts.push(" | { oneof: '".concat(naming, "'; value").concat((0, field_1.isRequiredField)(field, isMessageRequired) ? '' : '?', ": ").concat(fieldName).concat(field.repeated ? '[]' : '', "; }"));
}
out.dts[out.dts.length - 1] += ';';
}
out.dts.push('};');
}
else {
out.dts.push("export type ".concat(baseName, " = FieldEmpty;"));
}
if ((0, typeguards_1.isText)(item.comment)) {
out.dts.push((0, utils_1.toComment)(item.comment));
}
out.dts.push("export const ".concat(baseName, ": Field<").concat(baseName, ">;"));
out.js.push("export function ".concat(baseName, " () { return ["));
for (var _e = 0, runtime_1 = runtime; _e < runtime_1.length; _e++) {
var field = runtime_1[_e];
out.js.push(field);
}
out.js.push(']; }');
}
function getComment(field, out) {
var comment = '';
if ((0, typeguards_1.isText)(field.options.deprecated)) {
comment += "@deprecated ".concat(field.options.deprecated, "\n");
}
else if (field.options.deprecated === true) {
comment += '@deprecated\n';
}
if ((0, typeguards_1.isText)(field.comment)) {
comment += field.comment;
}
if ((0, typeguards_1.isText)(comment)) {
out.dts.push((0, utils_1.toComment)(comment));
}
}
function getFieldPack(list, field, baseName, pack) {
// baseName for avoid duplicate name
var find = list.find(function (i) { var _a; return i.name === ((_a = field.map) === null || _a === void 0 ? void 0 : _a.to) || (i.name === field.type && baseName === (0, utils_1.safeString)(i.pack)); });
if ((0, typeguards_1.isPresent)(find)) {
return find.pack;
}
else {
var findTop = list.find(function (i) { var _a; return i.name === ((_a = field.map) === null || _a === void 0 ? void 0 : _a.to) || i.name === field.type; });
return (0, typeguards_1.isPresent)(findTop) ? findTop.pack : pack;
}
}
//# sourceMappingURL=message.js.map