UNPKG

@aeternity/aepp-calldata

Version:
41 lines (39 loc) 1.61 kB
"use strict"; 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;