'use strict' const { GraphQLUpload } = require('apollo-server-koa') const { GraphQLList, GraphQLObjectType, GraphQLNonNull } = require('graphql') const promisesAll = require('promises-all') const { FileType } = require('./File') exports.MutationType = new GraphQLObjectType({ name: 'Mutation', fields: () => ({ singleUpload: { description: 'Stores a single file.', type: GraphQLNonNull(FileType), args: { file: { description: 'File to store.', type: GraphQLNonNull(GraphQLUpload) } }, resolve: (parent, { file }, { storeUpload }) => storeUpload(file) }, multipleUpload: { description: 'Stores multiple files.', type: GraphQLNonNull(GraphQLList(GraphQLNonNull(FileType))), args: { files: { description: 'Files to store.', type: GraphQLNonNull(GraphQLList(GraphQLNonNull(GraphQLUpload))) } }, async resolve(parent, { files }, { storeUpload }) { const { resolve, reject } = await promisesAll.all( files.map(storeUpload) ) if (reject.length) reject.forEach(({ name, message }) => console.error(`${name}: ${message}`) ) return resolve } } }) })