@taquito/michelson-encoder
Version:
converts michelson data and types into convenient JS/TS objects
96 lines (95 loc) • 2.78 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.OptionToken = void 0;
const token_1 = require("./token");
class OptionToken extends token_1.ComparableToken {
constructor(val, idx, fac) {
super(val, idx, fac);
this.val = val;
this.idx = idx;
this.fac = fac;
}
subToken() {
return this.createToken(this.val.args[0], this.idx);
}
schema() {
return this.createToken(this.val.args[0], 0);
}
annot() {
return Array.isArray(this.val.annots)
? super.annot()
: this.createToken(this.val.args[0], this.idx).annot();
}
Encode(args) {
const value = args;
if (value === undefined || value === null) {
return { prim: 'None' };
}
else if (Array.isArray(value) &&
(value[value.length - 1] === undefined || value[value.length - 1] === null)) {
value.pop();
return { prim: 'None' };
}
return { prim: 'Some', args: [this.schema().Encode(args)] };
}
EncodeObject(args, semantic) {
let value = args;
if (value === undefined || value === null) {
return { prim: 'None' };
}
value = typeof value === 'object' && 'Some' in value ? value['Some'] : value;
return { prim: 'Some', args: [this.schema().EncodeObject(value, semantic)] };
}
Execute(val, semantics) {
if (val.prim === 'None') {
return null;
}
return { Some: this.schema().Execute(val.args[0], semantics) };
}
/**
* @deprecated ExtractSchema has been deprecated in favor of generateSchema
*
*/
ExtractSchema() {
return { Some: this.schema().ExtractSchema() };
}
generateSchema() {
return {
__michelsonType: OptionToken.prim,
schema: this.schema().generateSchema(),
};
}
ExtractSignature() {
return [...this.schema().ExtractSignature()];
}
get KeySchema() {
return this.schema();
}
compare(val1, val2) {
if (!val1) {
return -1;
}
else if (!val2) {
return 1;
}
return this.KeySchema.compare(val1, val2);
}
ToKey(val) {
return this.Execute(val);
}
ToBigMapKey(val) {
return {
key: this.EncodeObject(val),
type: this.typeWithoutAnnotations(),
};
}
findAndReturnTokens(tokenToFind, tokens) {
if (OptionToken.prim === tokenToFind) {
tokens.push(this);
}
this.subToken().findAndReturnTokens(tokenToFind, tokens);
return tokens;
}
}
exports.OptionToken = OptionToken;
OptionToken.prim = 'option';