in lib/generator.js [1414:1461]
visitObject(ast, level) {
assert.equal(ast.type, 'object');
if (ast.fields.length === 0) {
this.emit('[ ');
let comments = DSL.comment.getBetweenComments(this.comments, ast.tokenRange[0], ast.tokenRange[1]);
if (comments.length > 0) {
this.emit('\n');
this.visitComments(comments, level + 1);
this.emit('', level);
}
this.emit(']');
} else {
const mergeFields = [];
const mapFields = [];
for (let i = 0; i < ast.fields.length; i++) {
const field = ast.fields[i];
if (field.type === 'objectField') {
mapFields.push(field);
} else if (field.type === 'expandField') {
mergeFields.push(field);
} else {
throw new Error('unimpelemented');
}
}
if(mergeFields.length > 0) {
this.emit('Dara::merge(');
}
this.emit('[\n');
for (let i = 0; i < mapFields.length; i++) {
this.visitObjectField(mapFields[i], level + 1);
}
//find the last item's back comment
let comments = DSL.comment.getBetweenComments(this.comments, ast.fields[ast.fields.length - 1].tokenRange[0], ast.tokenRange[1]);
this.visitComments(comments, level + 1);
this.emit(']', level);
if(mergeFields.length > 0) {
for (let i = 0; i < mergeFields.length; i++) {
this.emit(', ');
this.visitExpr(mergeFields[i].expr, level + 1);
}
this.emit(')');
}
}
}