UNPKG

graphql-upload-ts

Version:

TypeScript-first middleware and Upload scalar for GraphQL multipart requests (file uploads) with support for Apollo Server, Express, Koa, and more.

97 lines (94 loc) 3.97 kB
import { GraphQLError } from 'graphql'; var UploadErrorCode; (function (UploadErrorCode) { UploadErrorCode["FILE_TOO_LARGE"] = "FILE_TOO_LARGE"; UploadErrorCode["TOO_MANY_FILES"] = "TOO_MANY_FILES"; UploadErrorCode["FIELD_TOO_LARGE"] = "FIELD_TOO_LARGE"; UploadErrorCode["INVALID_MULTIPART"] = "INVALID_MULTIPART"; UploadErrorCode["MISSING_OPERATIONS"] = "MISSING_OPERATIONS"; UploadErrorCode["MISSING_MAP"] = "MISSING_MAP"; UploadErrorCode["INVALID_JSON"] = "INVALID_JSON"; UploadErrorCode["INVALID_MAP"] = "INVALID_MAP"; UploadErrorCode["FILE_MISSING"] = "FILE_MISSING"; UploadErrorCode["STREAM_ERROR"] = "STREAM_ERROR"; UploadErrorCode["REQUEST_DISCONNECTED"] = "REQUEST_DISCONNECTED"; UploadErrorCode["INVALID_UPLOAD_VALUE"] = "INVALID_UPLOAD_VALUE"; UploadErrorCode["UPLOAD_LITERAL_UNSUPPORTED"] = "UPLOAD_LITERAL_UNSUPPORTED"; UploadErrorCode["UPLOAD_SERIALIZATION_UNSUPPORTED"] = "UPLOAD_SERIALIZATION_UNSUPPORTED"; })(UploadErrorCode || (UploadErrorCode = {})); class UploadError extends Error { constructor(message, code, status = 400, expose = true) { super(message); this.name = 'UploadError'; this.code = code; this.status = status; this.expose = expose; Object.setPrototypeOf(this, UploadError.prototype); } toGraphQLError() { return new GraphQLError(this.message, { extensions: { code: this.code, status: this.status, }, }); } } class FileTooLargeError extends UploadError { constructor(maxSize) { super(`File truncated as it exceeds the ${maxSize} byte size limit.`, UploadErrorCode.FILE_TOO_LARGE, 413); } } class TooManyFilesError extends UploadError { constructor(maxFiles) { super(`${maxFiles} max file uploads exceeded.`, UploadErrorCode.TOO_MANY_FILES, 413); } } class FieldTooLargeError extends UploadError { constructor(fieldName, maxSize) { super(`The '${fieldName}' multipart field value exceeds the ${maxSize} byte size limit.`, UploadErrorCode.FIELD_TOO_LARGE, 413); } } class InvalidMultipartError extends UploadError { constructor(message) { super(message, UploadErrorCode.INVALID_MULTIPART); } } class MissingOperationsError extends UploadError { constructor() { super(`Missing multipart field 'operations' (${GRAPHQL_MULTIPART_REQUEST_SPEC_URL}).`, UploadErrorCode.MISSING_OPERATIONS); } } class MissingMapError extends UploadError { constructor() { super(`Missing multipart field 'map' (${GRAPHQL_MULTIPART_REQUEST_SPEC_URL}).`, UploadErrorCode.MISSING_MAP); } } class InvalidJSONError extends UploadError { constructor(fieldName) { super(`Invalid JSON in the '${fieldName}' multipart field (${GRAPHQL_MULTIPART_REQUEST_SPEC_URL}).`, UploadErrorCode.INVALID_JSON); } } class InvalidMapError extends UploadError { constructor(message) { super(`${message} (${GRAPHQL_MULTIPART_REQUEST_SPEC_URL}).`, UploadErrorCode.INVALID_MAP); } } class FileMissingError extends UploadError { constructor() { super('File missing in the request.', UploadErrorCode.FILE_MISSING); } } class StreamError extends UploadError { constructor(message) { super(message, UploadErrorCode.STREAM_ERROR, 500); } } class RequestDisconnectedError extends UploadError { constructor() { super('Request disconnected during file upload stream parsing.', UploadErrorCode.REQUEST_DISCONNECTED, 499); } } const GRAPHQL_MULTIPART_REQUEST_SPEC_URL = 'https://github.com/jaydenseric/graphql-multipart-request-spec'; export { FieldTooLargeError, FileMissingError, FileTooLargeError, InvalidJSONError, InvalidMapError, InvalidMultipartError, MissingMapError, MissingOperationsError, RequestDisconnectedError, StreamError, TooManyFilesError, UploadError, UploadErrorCode }; //# sourceMappingURL=upload-errors.mjs.map