UNPKG

abi-util-lite

Version:

A light impletation to parse abi string array to abi json

133 lines 5.89 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.FunctionFragment = void 0; var Logger_1 = require("../Logger"); var ParamType_1 = require("../ParamType"); var Fragments_1 = require("./Fragments"); var ConstructorFragment_1 = require("./ConstructorFragment"); var Checkers_1 = require("../Checkers"); var Utils_1 = require("../Utils"); var Format_1 = require("../Format"); var FunctionFragment = /** @class */ (function (_super) { __extends(FunctionFragment, _super); function FunctionFragment() { return _super !== null && _super.apply(this, arguments) || this; } FunctionFragment.from = function (value) { if (typeof (value) === "string") { return FunctionFragment.fromString(value); } return FunctionFragment.fromObject(value); }; FunctionFragment.prototype.format = function (format) { if (!format) { format = Format_1.FormatTypes.sighash; } if (!Format_1.FormatTypes[format]) { Logger_1.logger.throwArgumentError("invalid format type", "format", format); } if (format === Format_1.FormatTypes.json) { return JSON.stringify({ type: "function", name: this.name, constant: this.constant, stateMutability: this.stateMutability, payable: this.payable, // gas: (this.gas ? this.gas.toNumber(): undefined), inputs: this.inputs.map(function (input) { return JSON.parse(input.format(format)); }), outputs: this.outputs.map(function (output) { return JSON.parse(output.format(format)); }), }); } var result = ""; if (format !== Format_1.FormatTypes.sighash) { result += "function "; } result += this.name + "(" + this.inputs.map(function (input) { return input.format(format); }).join((format === Format_1.FormatTypes.full) ? ", " : ",") + ") "; if (format !== Format_1.FormatTypes.sighash) { if (this.stateMutability) { if (this.stateMutability !== "nonpayable") { result += (this.stateMutability + " "); } } else if (this.constant) { result += "view "; } if (this.outputs && this.outputs.length) { result += "returns (" + this.outputs.map(function (output) { return output.format(format); }).join(", ") + ") "; } // if (this.gas != null) { // result += "@" + this.gas.toString() + " "; // } } return result.trim(); }; FunctionFragment.fromObject = function (value) { if (FunctionFragment.isFunctionFragment(value)) { return value; } if (value.type !== "function") { Logger_1.logger.throwArgumentError("invalid function object", "value", value); } var state = (0, Checkers_1.verifyState)(value); var params = { type: value.type, name: (0, Checkers_1.verifyIdentifier)(value.name), constant: state.constant, inputs: (value.inputs ? value.inputs.map(ParamType_1.ParamType.fromObject) : []), outputs: (value.outputs ? value.outputs.map(ParamType_1.ParamType.fromObject) : []), payable: state.payable, stateMutability: state.stateMutability, }; return new FunctionFragment(Utils_1._constructorGuard, params); }; FunctionFragment.fromString = function (value) { var params = { type: "function" }; var comps = value.split(" returns "); if (comps.length > 2) { Logger_1.logger.throwArgumentError("invalid function string", "value", value); } var parens = comps[0].match(Fragments_1.regexParen); if (!parens) { Logger_1.logger.throwArgumentError("invalid function signature", "value", value); } params.name = parens[1].trim(); if (params.name) { (0, Checkers_1.verifyIdentifier)(params.name); } params.inputs = (0, ParamType_1.parseParams)(parens[2], false); (0, Fragments_1.parseModifiers)(parens[3].trim(), params); // We have outputs if (comps.length > 1) { var returns = comps[1].match(Fragments_1.regexParen); if (returns[1].trim() != "" || returns[3].trim() != "") { Logger_1.logger.throwArgumentError("unexpected tokens", "value", value); } params.outputs = (0, ParamType_1.parseParams)(returns[2], false); } else { params.outputs = []; } return FunctionFragment.fromObject(params); }; FunctionFragment.isFunctionFragment = function (value) { return (value && value._isFragment && value.type === "function"); }; return FunctionFragment; }(ConstructorFragment_1.ConstructorFragment)); exports.FunctionFragment = FunctionFragment; //# sourceMappingURL=FunctionFragment.js.map