@aeternity/aepp-calldata
Version:
Aeternity data serialization library
73 lines (71 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _ApiEncoder = _interopRequireDefault(require("../ApiEncoder.cjs"));
var _bls = require("../utils/bls12381.cjs");
var _int2ByteArray = require("../utils/int2ByteArray.cjs");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* Map the internal representation FATE data structure to Aesophia canonical structures and formats.
*/
class CanonicalMapper {
constructor() {
this._apiEncoder = new _ApiEncoder.default();
}
toCanonical(data) {
return data.accept(this);
}
visitData(acceptor) {
return acceptor.valueOf();
}
visitAddress(acceptor) {
return this._apiEncoder.encode(acceptor.name, acceptor.value);
}
visitList(acceptor) {
return acceptor.items.map(e => e.accept(this));
}
visitSet(acceptor) {
return new Set(acceptor.items.map(e => e.accept(this)));
}
visitMap(acceptor) {
const map = new Map();
for (const [key, value] of acceptor.iterator) {
map.set(key.accept(this), value.accept(this));
}
return map;
}
visitTuple(acceptor) {
return acceptor.prepareItems(e => e.accept(this));
}
visitVariant(acceptor) {
const value = acceptor.value.map(e => e.accept(this));
if (acceptor.variantName === 'None') {
return undefined;
}
if (acceptor.variantName === 'Some') {
return value[0];
}
return {
[acceptor.variantName]: value
};
}
visitBls12381Fr(acceptor) {
return (0, _bls.montBytes2Int)(acceptor.valueOf(), 'r');
}
visitBls12381Fp(acceptor) {
return (0, _bls.montBytes2Int)(acceptor.valueOf(), 'p');
}
visitCalldata(acceptor) {
const {
functionId,
args
} = acceptor.valueOf();
return {
functionId: (0, _int2ByteArray.byteArray2Hex)(functionId),
args: args.map(e => e.accept(this))
};
}
}
var _default = exports.default = CanonicalMapper;