UNPKG

@taquito/michelson-encoder

Version:

converts michelson data and types into convenient JS/TS objects

91 lines (90 loc) 2.83 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ContractToken = exports.ContractValidationError = void 0; const utils_1 = require("@taquito/utils"); const token_1 = require("./token"); /** * @category Error * @description Error that indicates a failure happening when parsing encoding/executing a Contract */ class ContractValidationError extends token_1.TokenValidationError { constructor(value, token, message) { super(value, token, message); this.value = value; this.token = token; this.name = 'ContractValidationError'; } } exports.ContractValidationError = ContractValidationError; class ContractToken extends token_1.Token { constructor(val, idx, fac) { super(val, idx, fac); this.val = val; this.idx = idx; this.fac = fac; } /** * @throws {@link ContractValidationError} */ validate(value) { // tz1,tz2 and tz3 seems to be valid contract values (for Unit contract) if ((0, utils_1.validateAddress)(value) !== utils_1.ValidationResult.VALID) { throw new ContractValidationError(value, this, `Value ${JSON.stringify(value)} is not a valid contract address.`); } return null; } /** * @throws {@link ContractValidationError} */ Execute(val) { if (val.string) { return val.string; } if (!val.bytes) { throw new ContractValidationError(val, this, `Value ${JSON.stringify(val)} is not a valid contract address. must contain bytes or string.`); } return (0, utils_1.encodeAddress)(val.bytes); } /** * @throws {@link ContractValidationError} */ Encode(args) { const val = args.pop(); this.validate(val); return { string: val }; } /** * @throws {@link ContractValidationError} */ EncodeObject(val, semantic) { this.validate(val); if (semantic && semantic[ContractToken.prim]) { return semantic[ContractToken.prim](val); } return { string: val }; } /** * @deprecated ExtractSchema has been deprecated in favor of generateSchema * */ ExtractSchema() { return ContractToken.prim; } generateSchema() { const valueSchema = this.createToken(this.val.args[0], 0); return { __michelsonType: ContractToken.prim, schema: { parameter: this.val.args[0] ? valueSchema.generateSchema() : {}, }, }; } findAndReturnTokens(tokenToFind, tokens) { if (ContractToken.prim === tokenToFind) { tokens.push(this); } return tokens; } } exports.ContractToken = ContractToken; ContractToken.prim = 'contract';