/** * Module dependencies */ import * as mongo from 'mongodb'; import deepcopy = require('deepcopy'); import Message from '../models/messaging-message'; import serializeUser from './user'; import serializeDriveFile from './drive-file'; import parse from '../common/text'; /** * Serialize a message * * @param {any} message * @param {any} me? * @param {any} options? * @return {Promise} */ export default ( message: any, me?: any, options?: { populateRecipient: boolean } ) => new Promise(async (resolve, reject) => { const opts = options || { populateRecipient: true }; let _message: any; // Populate the message if 'message' is ID if (mongo.ObjectID.prototype.isPrototypeOf(message)) { _message = await Message.findOne({ _id: message }); } else if (typeof message === 'string') { _message = await Message.findOne({ _id: new mongo.ObjectID(message) }); } else { _message = deepcopy(message); } // Rename _id to id _message.id = _message._id; delete _message._id; // Parse text if (_message.text) { _message.ast = parse(_message.text); } // Populate user _message.user = await serializeUser(_message.user_id, me); if (_message.file) { // Populate file _message.file = await serializeDriveFile(_message.file_id); } if (opts.populateRecipient) { // Populate recipient _message.recipient = await serializeUser(_message.recipient_id, me); } resolve(_message); });