91 lines
2.6 KiB
JavaScript
91 lines
2.6 KiB
JavaScript
'use strict';
|
||
|
||
const { GraphQLScalarType, GraphQLError } = require('graphql');
|
||
const Upload = require('./Upload');
|
||
|
||
/**
|
||
* A GraphQL `Upload` scalar that can be used in a
|
||
* [`GraphQLSchema`](https://graphql.org/graphql-js/type/#graphqlschema).
|
||
* It’s value in resolvers is a promise that resolves
|
||
* [file upload details]{@link FileUpload} for processing and storage.
|
||
* @kind class
|
||
* @name GraphQLUpload
|
||
* @example <caption>Ways to `import`.</caption>
|
||
* ```js
|
||
* import { GraphQLUpload } from 'graphql-upload';
|
||
* ```
|
||
*
|
||
* ```js
|
||
* import GraphQLUpload from 'graphql-upload/public/GraphQLUpload.js';
|
||
* ```
|
||
* @example <caption>Ways to `require`.</caption>
|
||
* ```js
|
||
* const { GraphQLUpload } = require('graphql-upload');
|
||
* ```
|
||
*
|
||
* ```js
|
||
* const GraphQLUpload = require('graphql-upload/public/GraphQLUpload');
|
||
* ```
|
||
* @example <caption>Setup for a schema built with [`makeExecutableSchema`](https://apollographql.com/docs/graphql-tools/generate-schema#makeExecutableSchema).</caption>
|
||
* ```js
|
||
* const { makeExecutableSchema } = require('graphql-tools');
|
||
* const { GraphQLUpload } = require('graphql-upload');
|
||
*
|
||
* const schema = makeExecutableSchema({
|
||
* typeDefs: /* GraphQL *\/ `
|
||
* scalar Upload
|
||
* `,
|
||
* resolvers: {
|
||
* Upload: GraphQLUpload,
|
||
* },
|
||
* });
|
||
* ```
|
||
* @example <caption>A manually constructed schema with an image upload mutation.</caption>
|
||
* ```js
|
||
* const {
|
||
* GraphQLSchema,
|
||
* GraphQLObjectType,
|
||
* GraphQLBoolean,
|
||
* } = require('graphql');
|
||
* const { GraphQLUpload } = require('graphql-upload');
|
||
*
|
||
* const schema = new GraphQLSchema({
|
||
* mutation: new GraphQLObjectType({
|
||
* name: 'Mutation',
|
||
* fields: {
|
||
* uploadImage: {
|
||
* description: 'Uploads an image.',
|
||
* type: GraphQLBoolean,
|
||
* args: {
|
||
* image: {
|
||
* description: 'Image file.',
|
||
* type: GraphQLUpload,
|
||
* },
|
||
* },
|
||
* async resolve(parent, { image }) {
|
||
* const { filename, mimetype, createReadStream } = await image;
|
||
* const stream = createReadStream();
|
||
* // Promisify the stream and store the file, then…
|
||
* return true;
|
||
* },
|
||
* },
|
||
* },
|
||
* }),
|
||
* });
|
||
* ```
|
||
*/
|
||
module.exports = new GraphQLScalarType({
|
||
name: 'Upload',
|
||
description: 'The `Upload` scalar type represents a file upload.',
|
||
parseValue(value) {
|
||
if (value instanceof Upload) return value.promise;
|
||
throw new GraphQLError('Upload value invalid.');
|
||
},
|
||
parseLiteral(ast) {
|
||
throw new GraphQLError('Upload literal unsupported.', ast);
|
||
},
|
||
serialize() {
|
||
throw new GraphQLError('Upload serialization unsupported.');
|
||
},
|
||
});
|