Skip to content

Commit

Permalink
chore: format & lint fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
gregberge committed Aug 28, 2019
1 parent a6b4a65 commit ff85ef2
Show file tree
Hide file tree
Showing 12 changed files with 112 additions and 42 deletions.
7 changes: 3 additions & 4 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
module.exports = {
root: true,
ecmaVersion: 8,
env: {
jest: true,
},
extends: 'airbnb-base',
extends: ['airbnb-base', 'prettier'],
parser: 'babel-eslint',
parserOptions: {
ecmaVersion: 8,
sourceType: 'module',
},
rules: {
'semi': ['error', 'never'],
semi: ['error', 'never'],
},
};
}
4 changes: 4 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
node_modules/
/lib/
package.json
CHANGELOG.md
5 changes: 5 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"singleQuote": true,
"trailingComma": "all",
"semi": false
}
16 changes: 9 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,14 +71,16 @@ It's possible to provide your own formatters:
```js
import { text } from 'express-err/lib/formatters'

app.use(errorHandler({
formatters: {
json(err, req, res, next) {
res.send({ error: true })
app.use(
errorHandler({
formatters: {
json(err, req, res, next) {
res.send({ error: true })
},
default: text,
},
default: text,
}
}))
}),
)
```

## httpError(status, [message])
Expand Down
7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
"description": "Basic error handler for express.",
"main": "lib/index.js",
"scripts": {
"test": "eslint . && jest",
"lint": "eslint .",
"test": "yarn lint && jest",
"format": "prettier --write \"**/*.{js,md,mdx}\"",
"prepublishOnly": "babel src/ -d lib/",
"release": "standard-version && conventional-github-releaser --preset angular"
},
Expand All @@ -29,13 +31,16 @@
"@babel/core": "^7.5.5",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@babel/preset-env": "^7.5.5",
"babel-eslint": "^10.0.3",
"conventional-github-releaser": "^3.1.3",
"ejs": "^2.6.2",
"eslint": "^6.2.2",
"eslint-config-airbnb-base": "^14.0.0",
"eslint-config-prettier": "^6.1.0",
"eslint-plugin-import": "^2.18.2",
"express": "^4.17.1",
"jest": "^24.9.0",
"prettier": "^1.18.2",
"standard-version": "^7.0.0",
"supertest": "^4.0.2"
},
Expand Down
11 changes: 7 additions & 4 deletions src/errorHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@ const errorHandler = ({
formatters = { json, html, text, default: text },
exitOnUncaughtException = true,
exitCode = 1,
} = {}) => (err, req, res, next) => { // eslint-disable-line no-unused-vars
} = {}) => (err, req, res, next) => {
// eslint-disable-line no-unused-vars
const candidates = [err.statusCode, defaultStatusCode]
const statusCode = candidates.find(Number.isInteger)

if (exitOnUncaughtException && statusCode >= 500) {
res.once('finish', process.exit.bind(process, exitCode))
}

const bindedFormatters = Object.entries(formatters)
.reduce((acc, [name, format]) => ({
const bindedFormatters = Object.entries(formatters).reduce(
(acc, [name, format]) => ({
...acc,
[name]: () => format(err, req, res, next),
}), {})
}),
{},
)

res.status(statusCode).format(bindedFormatters)
}
Expand Down
32 changes: 22 additions & 10 deletions src/errorHandler.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,16 @@ describe('errorHandler', () => {
next(new Error('My error'))
})

app.use(errorHandler({
exitOnUncaughtException: false,
defaultStatusCode: 501,
}))

const response = await request(app).get('/').set('Accept', 'blabla')
app.use(
errorHandler({
exitOnUncaughtException: false,
defaultStatusCode: 501,
}),
)

const response = await request(app)
.get('/')
.set('Accept', 'blabla')
expect(response.statusCode).toBe(501)
expect(response.text).toBe('My error')
})
Expand All @@ -36,7 +40,9 @@ describe('errorHandler', () => {

app.use(errorHandler({ exitOnUncaughtException: false }))

const response = await request(app).get('/').set('Accept', 'blabla')
const response = await request(app)
.get('/')
.set('Accept', 'blabla')
expect(response.statusCode).toBe(500)
expect(response.text).toBe('My error')
})
Expand All @@ -48,7 +54,9 @@ describe('errorHandler', () => {

app.use(errorHandler({ exitOnUncaughtException: false }))

const response = await request(app).get('/').set('Accept', 'application/json')
const response = await request(app)
.get('/')
.set('Accept', 'application/json')
expect(response.body.error).toEqual({
message: 'My error',
code: null,
Expand All @@ -62,7 +70,9 @@ describe('errorHandler', () => {

app.use(errorHandler({ exitOnUncaughtException: false }))

const response = await request(app).get('/').set('Accept', 'text/plain')
const response = await request(app)
.get('/')
.set('Accept', 'text/plain')
expect(response.text).toBe('My error')
})

Expand All @@ -73,7 +83,9 @@ describe('errorHandler', () => {

app.use(errorHandler({ exitOnUncaughtException: false }))

const response = await request(app).get('/').set('Accept', 'text/html')
const response = await request(app)
.get('/')
.set('Accept', 'text/html')
expect(response.text).toBe(`<!DOCTYPE html>
<html>
<head>
Expand Down
23 changes: 18 additions & 5 deletions src/formatters.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,27 @@ const errorToJson = ({ message = null, name, code = null }) => ({
},
})

export const json = (err, req, res, next) => // eslint-disable-line no-unused-vars
res.send(errorToJson(err))
export const json = (
err,
req,
res,
next, // eslint-disable-line no-unused-vars
) => res.send(errorToJson(err))

export const html = (err, req, res, next) => // eslint-disable-line no-unused-vars
export const html = (
err,
req,
res,
next, // eslint-disable-line no-unused-vars
) =>
res.render('error', {
error: err,
statusMessage: STATUS_CODES[res.statusCode],
})

export const text = (err, req, res, next) => // eslint-disable-line no-unused-vars
res.send(err.message || err.name)
export const text = (
err,
req,
res,
next, // eslint-disable-line no-unused-vars
) => res.send(err.message || err.name)
4 changes: 2 additions & 2 deletions src/httpErrorMiddleware.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import HttpError from './HttpError'

const httpErrorMiddleware = (statusCode, message) =>
(req, res, next) => next(new HttpError(statusCode, message))
const httpErrorMiddleware = (statusCode, message) => (req, res, next) =>
next(new HttpError(statusCode, message))

export default httpErrorMiddleware
4 changes: 3 additions & 1 deletion src/httpErrorMiddleware.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ describe('httpErrorMiddleware', () => {

app.use(errorHandler({ exitOnUncaughtException: false }))

const response = await request(app).get('/').set('Accept', 'application/json')
const response = await request(app)
.get('/')
.set('Accept', 'application/json')
expect(response.statusCode).toBe(401)
expect(response.body).toEqual({
error: {
Expand Down
6 changes: 1 addition & 5 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,4 @@ import HttpError from './HttpError'
import httpError from './httpErrorMiddleware'

export default errorHandler
export {
formatters,
HttpError,
httpError,
}
export { formatters, HttpError, httpError }
35 changes: 32 additions & 3 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@
esutils "^2.0.2"
js-tokens "^4.0.0"

"@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.3", "@babel/parser@^7.4.4", "@babel/parser@^7.5.5":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.5.tgz#02f077ac8817d3df4a832ef59de67565e71cca4b"
integrity sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g==
Expand Down Expand Up @@ -651,7 +651,7 @@
"@babel/parser" "^7.4.4"
"@babel/types" "^7.4.4"

"@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.3", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.5.tgz#f664f8f368ed32988cd648da9f72d5ca70f165bb"
integrity sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==
Expand Down Expand Up @@ -1135,6 +1135,18 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==

babel-eslint@^10.0.3:
version "10.0.3"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.3.tgz#81a2c669be0f205e19462fed2482d33e4687a88a"
integrity sha512-z3U7eMY6r/3f3/JB9mTsLjyxrv0Yb1zb8PCWCLpguxfCzBIZUwy23R1t/XKewP+8mEN2Ck8Dtr4q20z6ce6SoA==
dependencies:
"@babel/code-frame" "^7.0.0"
"@babel/parser" "^7.0.0"
"@babel/traverse" "^7.0.0"
"@babel/types" "^7.0.0"
eslint-visitor-keys "^1.0.0"
resolve "^1.12.0"

babel-jest@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.9.0.tgz#3fc327cb8467b89d14d7bc70e315104a783ccd54"
Expand Down Expand Up @@ -2149,6 +2161,13 @@ eslint-config-airbnb-base@^14.0.0:
object.assign "^4.1.0"
object.entries "^1.1.0"

eslint-config-prettier@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.1.0.tgz#e6f678ba367fbd1273998d5510f76f004e9dce7b"
integrity sha512-k9fny9sPjIBQ2ftFTesJV21Rg4R/7a7t7LCtZVrYQiHEp8Nnuk3EGaDmsKSAnsPj0BYcgB2zxzHa2NTkIxcOLg==
dependencies:
get-stdin "^6.0.0"

eslint-import-resolver-node@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
Expand Down Expand Up @@ -2675,6 +2694,11 @@ get-stdin@^4.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=

get-stdin@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==

get-stream@3.0.0, get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
Expand Down Expand Up @@ -4825,6 +4849,11 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=

prettier@^1.18.2:
version "1.18.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea"
integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==

pretty-format@^24.9.0:
version "24.9.0"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9"
Expand Down Expand Up @@ -5228,7 +5257,7 @@ resolve@1.1.7:
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=

resolve@^1.10.0, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.5.0:
resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0:
version "1.12.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6"
integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==
Expand Down

0 comments on commit ff85ef2

Please sign in to comment.