const _ = require('lodash'); const debug = require('debug')('talk:graph:mutators'); const Comment = require('./comment'); const Action = require('./action'); const Tag = require('./tag'); const Token = require('./token'); const User = require('./user'); const plugins = require('../../services/plugins'); let mutators = [ // Load in the core mutators. Comment, Action, Tag, Token, User, // Load the plugin mutators from the manager. ...plugins .get('server', 'mutators').map(({plugin, mutators}) => { debug(`added plugin '${plugin.name}'`); return mutators; }) ]; /** * Creates a set of mutators based on a GraphQL context. * @param {Object} context the context of the GraphQL request * @return {Object} object of mutators */ module.exports = (context) => { // We need to return an object to be accessed. return _.merge(...mutators.map((mutators) => { // Each set of mutators is a function which takes the context. return mutators(context); })); };