UNPKG

@taquito/michelson-encoder

Version:

Michelson encoding and decoding utilities for Taquito.

97 lines (96 loc) 2.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NatToken = exports.NatValidationError = void 0; const token_1 = require("../token"); const bignumber_js_1 = require("bignumber.js"); /** * @category Error * Error that indicates a failure happening when parsing encoding/executing Nat */ class NatValidationError extends token_1.TokenValidationError { constructor(value, token, message) { super(value, token, message); this.value = value; this.token = token; this.name = 'NatValidationError'; } } exports.NatValidationError = NatValidationError; class NatToken extends token_1.ComparableToken { constructor(val, idx, fac) { super(val, idx, fac); this.val = val; this.idx = idx; this.fac = fac; } Execute(val) { return new bignumber_js_1.default(val[Object.keys(val)[0]]); } /** * @throws {@link NatValidationError} */ Encode(args) { const val = args.pop(); this.validate(val); return { int: new bignumber_js_1.default(val).toFixed() }; } /** * @throws {@link NatValidationError} */ validate(val) { let bigNumber; try { bigNumber = new bignumber_js_1.default(val); } catch { throw new NatValidationError(val, this, `Value is not a number: ${JSON.stringify(val)}`); } if (bigNumber.isNaN()) { throw new NatValidationError(val, this, `Value is not a number: ${JSON.stringify(val)}`); } if (bigNumber.isNegative()) { throw new NatValidationError(val, this, `Value cannot be negative: ${JSON.stringify(val)}`); } } /** * @throws {@link NatValidationError} */ EncodeObject(val, semantic) { this.validate(val); if (semantic && semantic[NatToken.prim]) { return semantic[NatToken.prim](val); } return { int: new bignumber_js_1.default(val).toFixed() }; } generateSchema() { return { __michelsonType: NatToken.prim, schema: NatToken.prim, }; } ToBigMapKey(val) { return { key: { int: String(val) }, type: { prim: NatToken.prim }, }; } ToKey({ int }) { return new bignumber_js_1.default(int); } compare(nat1, nat2) { const o1 = Number(nat1); const o2 = Number(nat2); if (o1 === o2) { return 0; } return o1 < o2 ? -1 : 1; } findAndReturnTokens(tokenToFind, tokens) { if (NatToken.prim === tokenToFind) { tokens.push(this); } return tokens; } } exports.NatToken = NatToken; NatToken.prim = 'nat';