UNPKG

@aeternity/aepp-calldata

Version:
46 lines (45 loc) 2.03 kB
"use strict"; 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;