@aeternity/aepp-calldata
Version:
Aeternity data serialization library
46 lines (45 loc) • 2.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _FateVariant = _interopRequireDefault(require("../types/FateVariant.cjs"));
var _FateTypeError = _interopRequireDefault(require("../Errors/FateTypeError.cjs"));
var _BaseDataFactory = _interopRequireDefault(require("./BaseDataFactory.cjs"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const TYPES = ['variant', 'Chain.ttl', 'AENS.pointee', 'AENSv2.pointee', 'AENS.name', 'AENSv2.name'];
class VariantDataFactory extends _BaseDataFactory.default {
supports({
name,
_valueTypes
}) {
return TYPES.includes(name);
}
create(type, value) {
if (!this.isValid(value)) {
throw new _FateTypeError.default(type.name, `Variant should be an object mapping constructor to array of values, got "${value}" instead`);
}
const [variantCtor, variantArgs] = Object.entries(value)[0];
const arities = type.variants.map(e => {
const [[, args]] = Object.entries(e);
return args.length;
});
const tag = type.variants.findIndex(e => {
const [[key, _]] = Object.entries(e);
return key === variantCtor;
});
if (tag === -1) {
throw new _FateTypeError.default(type.name, `Unknown variant constructor: ${variantCtor}`);
}
const [[, variantTypes]] = Object.entries(type.variants[tag]);
if (variantArgs.length !== variantTypes.length) {
throw new _FateTypeError.default(type.name, `"${variantCtor}" variant constructor expects ${variantTypes.length} argument(s) but got ${variantArgs.length} instead`);
}
const variantValue = this.valueFactory.createMultiple(variantTypes, variantArgs);
return new _FateVariant.default(arities, tag, variantValue, variantTypes, type.variants);
}
isValid(value) {
return typeof value === 'object' && value !== null && Object.entries(value).length === 1 && Array.isArray(Object.values(value)[0]);
}
}
var _default = exports.default = VariantDataFactory;