UNPKG

@cosmology/ast

Version:
188 lines (187 loc) 8.95 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.toTextualSigMethod = exports.toTextualSigMethodFields = void 0; const t = __importStar(require("@babel/types")); const utils_1 = require("../../../utils"); const proto_1 = require("../../proto"); const utils_2 = require("./utils"); const types_1 = require("../../../encoding/types"); const needsImplementation = (name, field) => { throw new Error(`need to implement toTextualSig (${field.type} rules[${field.rule}] name[${name}])`); }; const toTextualSigMethodFields = (context, name, proto) => { const oneOfs = (0, proto_1.getOneOfs)(proto); const fields = Object.keys(proto.fields ?? {}).map((fieldName) => { const field = { name: fieldName, ...proto.fields[fieldName], }; const isOneOf = oneOfs.includes(fieldName); const isOptional = (0, proto_1.getFieldOptionality)(context, field, isOneOf); const args = { context, field, isOneOf, isOptional, }; if (field.rule === "repeated") { switch (field.type) { case "string": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.string()); case "bool": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.bool()); case "bytes": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.bytes()); case "float": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.float()); case "double": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.double()); case "int32": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.int32()); case "sint32": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.sint32()); case "uint32": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.uint32()); case "fixed32": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.fixed32()); case "sfixed32": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.sfixed32()); case "int64": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.int64(args)); case "sint64": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.sint64(args)); case "uint64": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.uint64(args)); case "fixed64": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.fixed64(args)); case "sfixed64": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.sfixed64(args)); default: switch (field.parsedType.type) { case "Enum": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.enum()); case "Type": return utils_2.toTextualSig.array(args, utils_2.arrayTypes.type(args)); } return needsImplementation(fieldName, field); } } if (field.keyType) { switch (field.keyType) { case "string": case "int32": case "sint32": case "uint32": case "fixed32": case "sfixed32": case "int64": case "sint64": case "uint64": case "fixed64": case "sfixed64": return utils_2.toTextualSig.keyHash(args); default: return needsImplementation(fieldName, field); } } switch (field.type) { case "string": return utils_2.toTextualSig.string(args); case "bytes": return utils_2.toTextualSig.bytes(args); case "bool": return utils_2.toTextualSig.bool(args); case "double": return utils_2.toTextualSig.double(args); case "float": return utils_2.toTextualSig.float(args); case "int32": return utils_2.toTextualSig.int32(args); case "sint32": return utils_2.toTextualSig.sint32(args); case "uint32": return utils_2.toTextualSig.uint32(args); case "fixed32": return utils_2.toTextualSig.fixed32(args); case "sfixed32": return utils_2.toTextualSig.sfixed32(args); case "int64": return utils_2.toTextualSig.int64(args); case "sint64": return utils_2.toTextualSig.sint64(args); case "uint64": return utils_2.toTextualSig.uint64(args); case "fixed64": return utils_2.toTextualSig.fixed64(args); case "sfixed64": return utils_2.toTextualSig.sfixed64(args); // TODO: handle Date and Duration choices case "google.protobuf.Duration": case "Duration": return utils_2.toTextualSig.duration(args); case "google.protobuf.Timestamp": case "Timestamp": return utils_2.toTextualSig.timestamp(args); default: switch (field.parsedType.type) { case "Enum": return utils_2.toTextualSig.enum(args); case "Type": return utils_2.toTextualSig.type(args); } return needsImplementation(fieldName, field); } }); return fields; }; exports.toTextualSigMethodFields = toTextualSigMethodFields; // toTextualSig(message: EncodingTestForDontOmit, indent?: number, metadata?: DenomMetadata[]): TextualSigLine[] { // const results: TextualSigLine[] = []; // results.push({ "text": "MsgSend object", "indent": indent }); const toTextualSigMethod = (context, name, proto) => { context.addUtil("DenomMetadata"); context.addUtil("ITextualSigLine"); context.addUtil("TextualSigLine"); const fields = (0, exports.toTextualSigMethodFields)(context, name, proto); let varName = utils_2.MSG_VAR_NAME; if (!fields.length) { varName = "_"; } return (0, utils_1.objectMethod)("method", t.identifier(utils_2.TEXTUAL_METHOD_NAME), [ (0, utils_1.identifier)(varName, t.tsTypeAnnotation(t.tsTypeReference(t.identifier(name)))), (0, utils_1.identifier)(utils_2.ARRAY_VAR_NAME, t.tsTypeAnnotation(t.tsArrayType(t.tsTypeReference(t.identifier("ITextualSigLine")))), true), (0, utils_1.identifier)("indent", t.tsTypeAnnotation(t.tsNumberKeyword()), true), (0, utils_1.identifier)("expert", t.tsTypeAnnotation(t.tsBooleanKeyword()), true), (0, utils_1.identifier)("metadata", t.tsTypeAnnotation(t.tsArrayType(t.tsTypeReference(t.identifier("DenomMetadata")))), true), ], t.blockStatement([ t.expressionStatement(t.assignmentExpression("=", t.identifier(utils_2.ARRAY_VAR_NAME), t.logicalExpression("??", t.identifier(utils_2.ARRAY_VAR_NAME), t.arrayExpression([])))), (0, types_1.getPushTextualSigLine)(utils_2.ARRAY_VAR_NAME, t.stringLiteral(`${name} object`)), ...fields, // RETURN t.returnStatement(t.identifier(utils_2.ARRAY_VAR_NAME)), ]), false, false, false, t.tsTypeAnnotation(t.tsArrayType(t.tsTypeReference(t.identifier("ITextualSigLine"))))); }; exports.toTextualSigMethod = toTextualSigMethod;