import { GraphQLError, GraphQLErrorExtensions } from 'graphql'; import { Errors } from 'moleculer'; import { MoleculerFileOperationError } from '@files-stack/hemera-files'; export class ApolloFileOperationError extends GraphQLError { public reason: any; public options?: any; constructor(message: string, type: string, reason: any, options?: any) { const extensions: GraphQLErrorExtensions = { code: type, ...(options && { options }), }; super(message, { extensions }); this.reason = reason; this.options = options; Object.defineProperty(this, 'name', { value: 'ApolloFileOperationError' }); } public static isMoleculerError(obj: any): obj is Errors.MoleculerError { // Check if the object is a MoleculerError or a MoleculerFileOperationError // Also handle deserialized objects by checking the name property return ( (obj instanceof Errors.MoleculerError && !!obj.type) || obj instanceof MoleculerFileOperationError || obj.name === 'MoleculerFileOperationError' ); } }