@nerjs/errors

1.2.2 • Public • Published

Custom errors

Install

npm i @nerjs/errors

or:

yarn add @nerjs/errors

Use

HttpError

const HttpError = require('@nerjs/errors/HttpError')

const error = new HttpError(404) // HttpError: Not found

console.log(error) // { code: 404, message: 'Not Found' }

all status codes:

HttpError.STATUS_CODES

Gql Errors

Errors designed to integrate into the Apollo server

GqlError

const GqlError = require('@nerjs/errors/GqlError')

new GqlError(message: String, code: String, datails?: Object, originalError?: Error)

codes

GqlError.codes

{
    FORBIDDEN: 'FORBIDDEN',
    AUTH: 'UNAUTHORIZED',
    GRAPHQL_VALIDATION: 'GRAPHQL_VALIDATION_FAILED',
    VALIDATION: 'VALIDATION',
    INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',
    DB: 'DB_ERROR',
    NOT_FOUND: 'NOT_FOUND_ERROR',
    UNKNOWN: 'UNKNOWN',
}

.is(err)

resolver.js:

Query = {
    test: () => throw new GqlError('message')
}

app.js

new ApolloServer({
  typeDefs,
  resolvers,
  formatError: (err) => { 
    console.log(GqlError.is(err)) // true
    return err;
  },
})

AutGqlError

@nerjs/errors/AutGqlError extends GqlError code: GqlError.codes.AUTH props: message: String

ForbiddenGqlError

@nerjs/errors/ForbiddenGqlError extends GqlError code: GqlError.codes.FORBIDDEN props: message: String

DbGqlError

@nerjs/errors/DbGqlError extends GqlError code: GqlError.codes.DB props: err: Error

NotFoundGqlError

@nerjs/errors/NotFoundGqlError extends GqlError code: GqlError.codes.NOT_FOUND props: message: String

ValidationGqlError

@nerjs/errors/ValidationGqlError extends GqlError code: GqlError.codes.VALIDATION props: message: String, details: Object prop.details: {errors: Array, map: Object}

example:

new ValidationGqlError('Validation failed', {
    errors: [
        'character limit exceeded',
        'Invalid value'
    ],
    map: {
        firstField: 'character limit exceeded',
        secondField: 'Invalid value'
    }
})

YupGqlError

@nerjs/errors/YupGqlError extends ValidationGqlError code: GqlError.codes.VALIDATION props: err: Error

converts yup ValidationError to GqlError

helpers

PromiseDbGqlError

@nerjs/errors/PromiseDbGqlError extends Promise all thrown exceptions are wrapped in DbGqlError

example:

db.js

mongoose.Promise = PromiseDbGqlError

mongoose.model('Users', new mongoose.Schema({ /* ... */ }))

resolver.js:

Query = {
    test: () => User.create({/* ... */}) // throw Error
}

app.js

new ApolloServer({
  typeDefs,
  resolvers,
  formatError: (err) => { 
    console.log(DbGqlError.is(err)) // true
    return err;
  },
})

Client Gql errors

Parsing and conversion of client errors that come from the Apollo server

Error Codes Used

ClientGqlError

const ClientGqlError = require('@nerjs/errors/ClientGqlError')

new ClientGqlError(message: String, path: Array<String> | String , extensions = {})

ClientGqlError.codes equal Server codes

ClientGqlError.parseServerGqlError()

parse server errors.

Find error in graphQLErrors

Params

name type description
err Error Array of errors graphQLErrors
path String || Array<String> query path
code Strind Error code
defaultMessage String If no error is found
strict Boolean A way to compare paths when searching

recursive:

const graphQLErrors = [
  {
    "message": "Unauthorized",
    "locations": [/* ... */],
    "path": [
      "user",
      "id"
    ],
    "extensions": {
      "code": "UNAUTHORIZED",
      "exception": { /* ... */ }
    }
  }
]

ClientGqlError.parseServerGqlError(
  graphQLErrors,
  'user', // or ['user']
  'UNAUTHORIZED'
  'Default message',
  false
) // Not found. Returns new ClientGqlError(Default message)

ClientGqlError.parseServerGqlError(
  graphQLErrors,
  'user', // or ['user']
  'UNAUTHORIZED'
  null,
  false
) // Not found. Returns NULL

ClientGqlError.parseServerGqlError(
  graphQLErrors,
  ['user', 'id'],
  'UNAUTHORIZED'
  'Default message',
  false
) // Successfully Found Error. Returns new ClientGqlError(...)

ClientGqlError.parseServerGqlError(
  graphQLErrors,
  'user', // or ['user']
  'UNAUTHORIZED'
  'Default message',
  true // STRICT
) // Successfully Found Error. Returns new ClientGqlError(...)

ValidationClientGqlError

extends ClientGqlError

const ValidationClientGqlError = require('@nerjs/errors/ValidationClientGqlError')

new ValidationClientGqlError(message: String, path: Array<String> | String , extensions = {})

ValidationClientGqlError.parseServerGqlError(graphQLErrors, path)


🔗 All utils

Readme

Keywords

Package Sidebar

Install

npm i @nerjs/errors

Weekly Downloads

1

Version

1.2.2

License

MIT

Unpacked Size

14.6 kB

Total Files

16

Last publish

Collaborators

  • nerjs