UNPKG

@cosmology/ast

Version:
303 lines (302 loc) 12.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.arrayTypes = exports.toTextualSig = exports.TEXTUAL_METHOD_NAME = exports.ARRAY_VAR_NAME = exports.MSG_VAR_NAME = void 0; const t = __importStar(require("@babel/types")); const utils_1 = require("../../../utils"); const types_1 = require("../../types"); exports.MSG_VAR_NAME = "message"; exports.ARRAY_VAR_NAME = "results"; exports.TEXTUAL_METHOD_NAME = "toTextualSig"; const setIfNotUndefinedAndNotNull = (prop, value) => { return t.ifStatement(t.logicalExpression("&&", t.binaryExpression("!==", t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(prop)), t.identifier("undefined")), t.binaryExpression("!==", t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(prop)), t.nullLiteral())), t.blockStatement([value])); }; exports.toTextualSig = { scalar(args, expr, indentInc) { const { propName, origName } = (0, types_1.getFieldNames)(args.field); return setIfNotUndefinedAndNotNull(propName, (0, types_1.getPushTextualSigLine)(exports.ARRAY_VAR_NAME, t.templateLiteral([ t.templateElement({ raw: `${(0, types_1.getTextualKeyName)(origName)}: `, }), t.templateElement({ raw: "", }), ], [ expr ?? t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(propName)), ]), indentInc)); }, /** * create code for formatted scalar with formatter * @param args * @param formatter * @param isFormatterFromUtilHelper is formatter from util helper. default is true * @returns */ formattedScalar(args, formatter, indentInc, expr, isFormatterFromUtilHelper = true) { if (isFormatterFromUtilHelper) { args.context.addUtil(formatter); } const { propName } = (0, types_1.getFieldNames)(args.field); return exports.toTextualSig.scalar(args, t.callExpression(t.identifier(formatter), [ expr ?? t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(propName)), ]), indentInc); }, // if (message.str !== undefined && message.str !== null) { // results.push({ // text: `Str: ${message.str}`, // indent: indent // }); // } string(args) { const isCosmosSDKDec = args.field.options?.["(gogoproto.customtype)"] == "github.com/cosmos/cosmos-sdk/types.Dec" || args.field.options?.["(gogoproto.customtype)"] == "github.com/cosmos/cosmos-sdk/types.Int" || args.field.options?.["(gogoproto.customtype)"] == "cosmossdk.io/math.LegacyDec"; if (isCosmosSDKDec) { return exports.toTextualSig.formattedScalar(args, "formatNumberWithThousandSeparator", 1); } else { return exports.toTextualSig.scalar(args, null, 1); } }, // if (message.b !== undefined && message.b !== null) { // results.push({ // text: `B: ${fromBooleanToString(message.b)}`, // indent: indent // }); // } bool(args) { return exports.toTextualSig.formattedScalar(args, "fromBooleanToString", 1); }, // if (message.num !== undefined && message.num !== null) { // results.push({ // text: `Num: ${formatNumberWithThousandSeparator(message.num)}`, // indent: indent // }); // } number(args) { return exports.toTextualSig.formattedScalar(args, "formatNumberWithThousandSeparator", 1); }, int32(args) { return exports.toTextualSig.number(args); }, uint32(args) { return exports.toTextualSig.number(args); }, sint32(args) { return exports.toTextualSig.number(args); }, fixed32(args) { return exports.toTextualSig.number(args); }, sfixed32(args) { return exports.toTextualSig.number(args); }, double(args) { return exports.toTextualSig.number(args); }, float(args) { return exports.toTextualSig.number(args); }, // if (message.big !== undefined && message.big !== null) { // results.push({ // text: `Big: ${formatNumberWithThousandSeparator(message.big)}`, // indent: indent // }); // } long(args) { return exports.toTextualSig.formattedScalar(args, "formatNumberWithThousandSeparator", 1); }, int64(args) { return exports.toTextualSig.long(args); }, uint64(args) { return exports.toTextualSig.long(args); }, sint64(args) { return exports.toTextualSig.long(args); }, fixed64(args) { return exports.toTextualSig.long(args); }, sfixed64(args) { return exports.toTextualSig.long(args); }, type(args) { if (!args.context.options.aminoEncoding.useLegacyInlineEncoding && args.context.options.interfaces.enabled && args.context.options.interfaces?.useGlobalDecoderRegistry && args.field.type === "google.protobuf.Any" && args.field.options["(cosmos_proto.accepts_interface)"]) { return exports.toTextualSig.anyType(args); } return exports.toTextualSig.protoType(args); }, anyType(args) { const { propName } = (0, types_1.getFieldNames)(args.field); return setIfNotUndefinedAndNotNull(propName, t.expressionStatement(t.callExpression(t.memberExpression(t.identifier("GlobalDecoderRegistry"), t.identifier(exports.TEXTUAL_METHOD_NAME)), [ t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(propName)), t.identifier(exports.ARRAY_VAR_NAME), t.conditionalExpression(t.identifier("indent"), t.binaryExpression("+", t.identifier("indent"), t.numericLiteral(1)), t.numericLiteral(1)), t.identifier("expert"), t.identifier("metadata"), ]))); }, protoType(args) { const { propName } = (0, types_1.getFieldNames)(args.field); const name = args.context.getTypeName(args.field); return setIfNotUndefinedAndNotNull(propName, t.expressionStatement(t.callExpression(t.memberExpression(t.identifier(name), t.identifier(exports.TEXTUAL_METHOD_NAME)), [ t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(propName)), t.identifier(exports.ARRAY_VAR_NAME), t.conditionalExpression(t.identifier("indent"), t.binaryExpression("+", t.identifier("indent"), t.numericLiteral(1)), t.numericLiteral(1)), t.identifier("expert"), t.identifier("metadata"), ]))); }, // if (message.opt !== undefined && message.opt !== null) { // results.push({ // text: `Opt: ${voteOptionToJSON(message.opt)}`, // indent: indent // }); // } enum(args) { const enumFuncName = args.context.getToEnum(args.field); return exports.toTextualSig.formattedScalar(args, enumFuncName, 1, null, false); }, // message.queryData = object.queryData ?? new Uint8Array() bytes(args) { const isCosmosSDKDec = args.field.options?.["(gogoproto.customtype)"] == "github.com/cosmos/cosmos-sdk/types.Dec" || args.field.options?.["(gogoproto.customtype)"] == "github.com/cosmos/cosmos-sdk/types.Int" || args.field.options?.["(gogoproto.customtype)"] == "cosmossdk.io/math.LegacyDec"; if (isCosmosSDKDec) { args.context.addUtil("fromUtf8"); args.context.addUtil("formatNumberWithThousandSeparator"); const { propName } = (0, types_1.getFieldNames)(args.field); return exports.toTextualSig.scalar(args, t.callExpression(t.identifier("formatNumberWithThousandSeparator"), [ t.callExpression(t.identifier("fromUtf8"), [ t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(propName)), ]), ])); } else { return exports.toTextualSig.formattedScalar(args, "toByteTextual", 1); } }, duration(args) { return exports.toTextualSig.formattedScalar(args, "toDurationTextual", 1); }, timestamp(args) { return exports.toTextualSig.formattedScalar(args, "toTimestampTextual", 1); }, keyHash(args) { return exports.toTextualSig.scalar(args, null, 1); }, // message.codeIds = object.codeIds?.map(e => Long.fromValue(e)) || []; array(args, expr) { const prop = args.field.name; return t.expressionStatement(t.assignmentExpression("=", t.memberExpression(t.identifier(exports.MSG_VAR_NAME), t.identifier(prop)), t.logicalExpression("||", t.optionalCallExpression(t.optionalMemberExpression(t.memberExpression(t.identifier("object"), t.identifier(prop)), t.identifier("map"), false, true), [t.arrowFunctionExpression([t.identifier("e")], expr)], false), t.arrayExpression([])))); }, }; exports.arrayTypes = { // message.overloadId = object.overloadId?.map(e => e) || []; identity() { return t.identifier("e"); }, string() { return exports.arrayTypes.identity(); }, bool() { return exports.arrayTypes.identity(); }, bytes() { return exports.arrayTypes.identity(); }, double() { return exports.arrayTypes.identity(); }, float() { return exports.arrayTypes.identity(); }, int32() { return exports.arrayTypes.identity(); }, uint32() { return exports.arrayTypes.identity(); }, sint32() { return exports.arrayTypes.identity(); }, fixed32() { return exports.arrayTypes.identity(); }, sfixed32() { return exports.arrayTypes.identity(); }, enum() { return exports.arrayTypes.identity(); }, // message.codeIds = object.codeIds?.map(e => Long.fromValue(e)) || []; long(args) { utils_1.TypeLong.addUtil(args.context); return utils_1.TypeLong.getFromValueWithArgs(args.context, t.identifier("e")); }, int64(args) { return exports.arrayTypes.long(args); }, uint64(args) { return exports.arrayTypes.long(args); }, sint64(args) { return exports.arrayTypes.long(args); }, fixed64(args) { return exports.arrayTypes.long(args); }, sfixed64(args) { return exports.arrayTypes.long(args); }, // message.tokenInMaxs = object.tokenInMaxs?.map(e => Coin.toTextualSig(e)) || []; type(args) { let name = args.context.getTypeName(args.field); let callee = t.memberExpression(t.identifier(name), t.identifier("toTextualSig")); if (!args.context.options.aminoEncoding.useLegacyInlineEncoding && args.context.options.interfaces.enabled && args.context.options.interfaces?.useGlobalDecoderRegistry && args.field.type === "google.protobuf.Any" && args.field.options["(cosmos_proto.accepts_interface)"]) { name = "GlobalDecoderRegistry"; callee = t.memberExpression(t.identifier(name), t.identifier("toTextualSig")); return t.tsAsExpression(t.callExpression(callee, [t.identifier("e")]), t.tsAnyKeyword()); } return t.callExpression(callee, [t.identifier("e")]); }, };