@taquito/michelson-encoder
Version:
converts michelson data and types into convenient JS/TS objects
98 lines (97 loc) • 2.79 kB
JavaScript
;
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
* @description 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) {
const bigNumber = new bignumber_js_1.default(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() };
}
/**
* @deprecated ExtractSchema has been deprecated in favor of generateSchema
*
*/
ExtractSchema() {
return NatToken.prim;
}
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';