@aeternity/aepp-calldata
Version:
Aeternity data serialization library
41 lines (39 loc) • 1.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _BaseDataFactory = _interopRequireDefault(require("./BaseDataFactory.cjs"));
var _FateTuple = _interopRequireDefault(require("../types/FateTuple.cjs"));
var _FateTypes = require("../FateTypes.cjs");
var _FateTypeError = _interopRequireDefault(require("../Errors/FateTypeError.cjs"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
class RecordDataFactory extends _BaseDataFactory.default {
supports({
name,
_valueTypes
}) {
return 'record' === name;
}
create(type, value) {
if (typeof value !== 'object') {
throw new _FateTypeError.default(type.name, `Fate record must be an Object, got ${value} instead`);
}
const keyLen = Object.keys(value).length;
if (keyLen !== type.keys.length) {
throw new _FateTypeError.default(type.name, `Number of expected keys (${type.keys.length}) and actual keys (${keyLen}) should match`);
}
const resolvedValue = type.valueTypes.map((t, i) => {
const key = type.keys[i];
return this.valueFactory.create(t, value[key]);
});
// Unbox singleton tuples and records
// https://github.com/aeternity/aesophia/pull/205
// https://github.com/aeternity/aesophia/commit/a403a9d227ac56266cf5bb8fbc916f17e6141d15
if (resolvedValue.length === 1) {
return resolvedValue[0];
}
return new _FateTuple.default((0, _FateTypes.FateTypeRecord)(type.keys, type.valueTypes), resolvedValue);
}
}
var _default = exports.default = RecordDataFactory;