@aeternity/aepp-calldata
Version:
Aeternity data serialization library
58 lines (43 loc) • 1.2 kB
JavaScript
import FateData from './FateData.js'
import {FateTypeTuple} from '../FateTypes.js'
const zipObject = (keys, values) => {
const reducer = (acc, k, i) => {
acc[k] = values[i]
return acc
}
return keys.reduce(reducer, {})
}
class FateTuple extends FateData {
constructor(valueTypes = [], items = []) {
super('tuple')
this._valueTypes = (valueTypes.hasOwnProperty('valueTypes')) ? valueTypes.valueTypes : valueTypes
this._type = Array.isArray(valueTypes) ? FateTypeTuple(valueTypes) : valueTypes
this._items = Array.from(items)
}
get valueTypes() {
return this._valueTypes
}
get type() {
return this._type
}
get size() {
return this._items.length
}
get items() {
return this._items
}
valueOf() {
return this.prepareItems(e => e.valueOf())
}
prepareItems(callback) {
const items = this._items.map(callback)
if (this._type.name === 'record') {
return zipObject(this._type.keys, items)
}
return items
}
accept(visitor) {
return visitor.visitTuple(this)
}
}
export default FateTuple