36 lines
1002 B
JavaScript
36 lines
1002 B
JavaScript
'use strict'
|
|
const arrayify = require('array-back')
|
|
const Output = require('./output')
|
|
|
|
class GroupedOutput extends Output {
|
|
toObject () {
|
|
const superOutput = super.toObject()
|
|
delete superOutput._unknown
|
|
const grouped = {
|
|
_all: superOutput
|
|
}
|
|
if (this.unknown.length) grouped._unknown = this.unknown
|
|
|
|
this.definitions.whereGrouped().forEach(def => {
|
|
const outputValue = this.output[def.name]
|
|
for (const groupName of arrayify(def.group)) {
|
|
grouped[groupName] = grouped[groupName] || {}
|
|
if (outputValue && outputValue.isDefined()) {
|
|
grouped[groupName][def.name] = outputValue.value
|
|
}
|
|
}
|
|
})
|
|
|
|
this.definitions.whereNotGrouped().forEach(def => {
|
|
const outputValue = this.output[def.name]
|
|
if (outputValue && outputValue.isDefined()) {
|
|
if (!grouped._none) grouped._none = {}
|
|
grouped._none[def.name] = outputValue.value
|
|
}
|
|
})
|
|
return grouped
|
|
}
|
|
}
|
|
|
|
module.exports = GroupedOutput
|