@aeternity/aepp-calldata
Version:
Aeternity data serialization library
92 lines (85 loc) • 3.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _Serializer = _interopRequireDefault(require("./Serializer.cjs"));
var _ApiEncoder = _interopRequireDefault(require("./ApiEncoder.cjs"));
var _CanonicalMapper = _interopRequireDefault(require("./Mapper/CanonicalMapper.cjs"));
var _ExternalDataFactory = _interopRequireDefault(require("./ExternalDataFactory.cjs"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
class ContractByteArrayEncoder {
constructor() {
/** @type {Serializer} */
this._serializer = new _Serializer.default();
/** @type {ApiEncoder} */
this._apiEncoder = new _ApiEncoder.default();
/** @type {ExternalDataFactory} */
this._externalDataFactory = new _ExternalDataFactory.default();
/** @type {CanonicalMapper} */
this._canonicalMapper = new _CanonicalMapper.default();
}
/**
* Encode FATE data to contract bytearray.
*
* @example
* const encoded = encoder.encode(FateTypeString(), "whoolymoly")
* console.log(`Encoded data: ${encoded}`)
* // Outputs:
* // Encoded data: cb_KXdob29seW1vbHlGazSE
*
* @param {object} type - Data as Javascript data structures. See README.md
* @param {Array} data - Data as Javascript data structures. See README.md
* @returns {string} Encoded contract byte array
*/
encode(type, value) {
const data = this._externalDataFactory.create(type, value);
const serialized = this._serializer.serialize(data);
const binData = new Uint8Array(serialized.flat(Infinity));
return this._apiEncoder.encode('contract_bytearray', binData);
}
/**
* Decodes arbitrary contract bytearray data.
*
* Note that:
* - Variants are not annotated with constructor names
* - Record keys are lost
* - Any custom type information is lost
* - STL type information is lost: i.e. Chain, AENS, Set, BLS12_381
*
* @example
* const decoded = encoder.decode('cb_KXdob29seW1vbHlGazSE')
* console.log(`Decoded data: ${decoded}`)
* // Outputs:
* // Decoded data: whoolymoly
*
* @param {string} data - Contract bytearray data in a canonical format.
* @returns {boolean|string|BigInt|Array|Map|Object}
* Decoded value as Javascript data structures. See README.md
*/
decode(data) {
const binData = this._apiEncoder.decodeWithType(data, 'contract_bytearray');
const deserialized = this._serializer.deserialize(binData);
return this._canonicalMapper.toCanonical(deserialized);
}
/**
* Decodes arbitrary contract bytearray data with type information.
*
* @example
* const decoded = encoder.decodeWithType('cb_KXdob29seW1vbHlGazSE', FateTypeString())
* console.log(`Decoded data: ${decoded}`)
* // Outputs:
* // Decoded data: whoolymoly
*
* @param {string} data - Contract bytearray data in a canonical format.
* @param {object} type - Data as Javascript data structures. See README.md
* @returns {boolean|string|BigInt|Array|Map|Object}
* Decoded value as Javascript data structures. See README.md
*/
decodeWithType(data, type) {
const binData = this._apiEncoder.decodeWithType(data, 'contract_bytearray');
const deserialized = this._serializer.deserializeWithType(binData, type);
return this._canonicalMapper.toCanonical(deserialized);
}
}
var _default = exports.default = ContractByteArrayEncoder;