UNPKG

@taquito/michelson-encoder

Version:

converts michelson data and types into convenient JS/TS objects

119 lines (118 loc) 3.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AddressToken = exports.AddressValidationError = void 0; const token_1 = require("../token"); const utils_1 = require("@taquito/utils"); /** * @category Error * @description Error that indicates a failure happening when parsing encoding/executing an Address */ class AddressValidationError extends token_1.TokenValidationError { constructor(value, token, message) { super(value, token, message); this.value = value; this.token = token; this.name = 'AddressValidationError'; } } exports.AddressValidationError = AddressValidationError; class AddressToken extends token_1.ComparableToken { constructor(val, idx, fac) { super(val, idx, fac); this.val = val; this.idx = idx; this.fac = fac; } ToBigMapKey(val) { const decoded = (0, utils_1.b58decode)(val); return { key: { bytes: decoded }, type: { prim: 'bytes' }, }; } /** * @throws {@link AddressValidationError} */ validate(value) { if ((0, utils_1.validateAddress)(value) !== utils_1.ValidationResult.VALID) { throw new AddressValidationError(value, this, `Address is not valid: ${JSON.stringify(value)}`); } } /** * @throws {@link AddressValidationError} */ Encode(args) { const val = args.pop(); this.validate(val); return { string: val }; } /** * @throws {@link AddressValidationError} */ EncodeObject(val, semantic) { this.validate(val); if (semantic && semantic[AddressToken.prim]) { return semantic[AddressToken.prim](val); } return { string: val }; } /** * @throws {@link AddressValidationError} */ Execute(val) { if (val.string) { return val.string; } if (!val.bytes) { throw new AddressValidationError(val, this, `cannot be missing both string and bytes: ${JSON.stringify(val)}`); } return (0, utils_1.encodeAddress)(val.bytes); } /** * @deprecated ExtractSchema has been deprecated in favor of generateSchema * */ ExtractSchema() { return AddressToken.prim; } generateSchema() { return { __michelsonType: AddressToken.prim, schema: AddressToken.prim, }; } /** * @throws {@link AddressValidationError} */ ToKey({ bytes, string }) { if (string) { return string; } if (!bytes) { throw new AddressValidationError({ bytes, string }, this, `cannot be missing both string and bytes ${JSON.stringify({ string, bytes })}`); } return (0, utils_1.encodeAddress)(bytes); } compare(address1, address2) { const isImplicit = (address) => { return address.startsWith('tz'); }; const implicit1 = isImplicit(address1); const implicit2 = isImplicit(address2); if (implicit1 && !implicit2) { return -1; } else if (implicit2 && !implicit1) { return 1; } return super.compare(address1, address2); } findAndReturnTokens(tokenToFind, tokens) { if (AddressToken.prim === tokenToFind) { tokens.push(this); } return tokens; } } exports.AddressToken = AddressToken; AddressToken.prim = 'address';