Skip to content

Commit

Permalink
chore: Fix linting errors after eslint-config update
Browse files Browse the repository at this point in the history
  • Loading branch information
andreidmt committed Feb 19, 2021
1 parent 7887017 commit d546f23
Show file tree
Hide file tree
Showing 20 changed files with 227 additions and 225 deletions.
4 changes: 2 additions & 2 deletions examples/simple.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ const { block } = require("../src")
// initialize application
const app = block({
// always scan relative to current folder
plugins: glob.sync("./plugins/*.js", { cwd: __dirname, absolute: true }),
routes: glob.sync("./**/*.route.js", { cwd: __dirname, absolute: true }),
plugins: glob.sync("../src/plugins/*.js", { absolute: true }),
routes: glob.sync("../src/**/*.route.js", { absolute: true }),
})

// start node server
Expand Down
48 changes: 22 additions & 26 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const { AuthenticationError } = require("./errors/authentication")
const { AuthorizationError } = require("./errors/authorization")

const block = ({
plugins = [],
plugins: pluginPaths = [],
routes = [],
middleware: {
beforeRoute = [],
Expand All @@ -27,9 +27,9 @@ const block = ({
source: [
path.resolve(__dirname, "plugins", "router.js"),
path.resolve(__dirname, "plugins", "query-parser.js"),
...plugins,
...pluginPaths,
],
}).then(resolvedPlugins => {
}).then(plugins => {
/*
* Register routes
*/
Expand All @@ -38,17 +38,15 @@ const block = ({
const { authenticate, authorize, action, ...rest } =
typeof item === "string" ? require(item) : item

resolvedPlugins.Router.add({
plugins.Router.add({
...rest,
authenticate:
typeof authenticate === "function"
? authenticate(resolvedPlugins)
? authenticate(plugins)
: () => false,
authorize:
typeof authorize === "function"
? authorize(resolvedPlugins)
: () => false,
action: action(resolvedPlugins),
typeof authorize === "function" ? authorize(plugins) : () => false,
action: action(plugins),
})
},
["./routes/ping.route.js", ...routes]
Expand All @@ -59,35 +57,33 @@ const block = ({
* Middleware `connect` pipeline
*/
reduce(
(acc, item) => {
const middle =
typeof item === "string"
? require(item)(resolvedPlugins)
: item(resolvedPlugins)
(accumulator, item) => {
const middleware =
typeof item === "string" ? require(item)(plugins) : item(plugins)

return is(middle) ? acc.use(middle) : acc
return is(middleware) ? accumulator.use(middleware) : accumulator
},
connect(),
[
"./middleware/req-bootstrap",
"./middleware/req-cors",
"./middleware/req-route-exists",
"./middleware/request-bootstrap",
"./middleware/request-cors",
"./middleware/request-route-exists",
// "./middleware/req-jwt",
"./middleware/req-query",
"./middleware/req-body",
"./middleware/request-query",
"./middleware/request-body",
...beforeRoute,
"./middleware/res-route",
"./middleware/response-route",
...afterRoute,
"./middleware/res-error",
"./middleware/response-error",
...afterError,
"./middleware/res-goodbye-error",
"./middleware/response-goodbye-error",
...beforeSend,
"./middleware/res-helmet",
"./middleware/res-goodbye",
"./middleware/response-helmet",
"./middleware/response-goodbye",
]
),

resolvedPlugins,
plugins,
]
})
}
Expand Down
27 changes: 0 additions & 27 deletions src/middleware/req-bootstrap.js

This file was deleted.

9 changes: 0 additions & 9 deletions src/middleware/req-query.js

This file was deleted.

49 changes: 26 additions & 23 deletions src/middleware/req-body.js → src/middleware/request-body.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ const slugify = require("@sindresorhus/slugify")
const { tmpdir } = require("os")
const { pipe, is, isEmpty, clone } = require("@asd14/m")
const { createWriteStream } = require("fs")
const { extname, basename, join } = require("path")
const path = require("path")

const { InputError } = require("../errors/input")

const handleText = (req, { onParse, onError }) => {
const handleText = (request, { onParse, onError }) => {
const chunks = []

req
request
.on("data", chunk => chunks.push(chunk))
.on("end", () => {
try {
Expand All @@ -24,24 +24,27 @@ const handleText = (req, { onParse, onError }) => {
})
}

const handleForm = (req, { onParse, onError }) => {
if (req.method !== "POST") {
const handleForm = (request, { onParse, onError }) => {
if (request.method !== "POST") {
throw new Error("Use POST method when sending multipart data")
}

try {
const busboy = new Busboy({ headers: req.headers })
const busboy = new Busboy({ headers: request.headers })
const fields = {}
const files = {}

busboy.on("field", (fieldname, val) => {
fields[fieldname] = val
busboy.on("field", (fieldname, value) => {
fields[fieldname] = value
})

busboy.on("file", (fieldname, file, filename) => {
const ext = extname(filename)
const fileSlug = slugify(basename(filename, ext))
const saveToPath = join(tmpdir(), `${fileSlug}-${cuid.slug()}${ext}`)
const extension = path.extname(filename)
const fileSlug = slugify(path.basename(filename, extension))
const saveToPath = path.join(
tmpdir(),
`${fileSlug}-${cuid.slug()}${extension}`
)

file.pipe(createWriteStream(saveToPath))
files[fieldname] = saveToPath
Expand All @@ -51,23 +54,23 @@ const handleForm = (req, { onParse, onError }) => {
onParse({ ...fields, ...files })
})

req.pipe(busboy)
request.pipe(busboy)
} catch (error) {
onError(error)
}
}

module.exports = ({ QueryParser }) => (req, res, next) => {
switch (req.headers["x-content-type"]) {
module.exports = ({ QueryParser }) => (request, response, next) => {
switch (request.headers["x-content-type"]) {
//
case "application/json":
if (is(req.body)) {
req.ctx.body = clone(req.body)
if (is(request.body)) {
request.ctx.body = clone(request.body)
next()
} else {
handleText(req, {
handleText(request, {
onParse: source => {
req.ctx.body = isEmpty(source) ? {} : JSON.parse(source)
request.ctx.body = isEmpty(source) ? {} : JSON.parse(source)
next()
},
onError: error =>
Expand All @@ -79,10 +82,10 @@ module.exports = ({ QueryParser }) => (req, res, next) => {

//
case "application/x-www-form-urlencoded":
return handleText(req, {
return handleText(request, {
next,
onParse: source => {
req.ctx.body = QueryParser.parse(source)
request.ctx.body = QueryParser.parse(source)
next()
},
onError: error =>
Expand All @@ -91,9 +94,9 @@ module.exports = ({ QueryParser }) => (req, res, next) => {

//
case "multipart/form-data":
return handleForm(req, {
return handleForm(request, {
onParse: source => {
req.ctx.body = source
request.ctx.body = source
next()
},
onError: error =>
Expand All @@ -105,7 +108,7 @@ module.exports = ({ QueryParser }) => (req, res, next) => {
next(
new InputError(
`Can only parse request body for following content types: 'application/json', 'multipart/form-data' and 'application/x-www-form-urlencoded'. Received '${JSON.stringify(
req.headers["content-type-parsed"]
request.headers["content-type-parsed"]
)}'`
)
)
Expand Down
27 changes: 27 additions & 0 deletions src/middleware/request-bootstrap.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const debug = require("debug")("blocks:BootstrapMiddleware")

const cuid = require("cuid")
const contentType = require("content-type")
const { pluck } = require("@asd14/m")

module.exports = () => (request, response, next) => {
request.ctx = {
id: cuid(),
startAt: process.hrtime(),
body: {},
...pluck(["query", "pathname"], request._parsedUrl),
}

try {
request.headers["x-content-type"] = contentType.parse(
request.headers["content-type"]
).type
} catch {
// Do nothing, let JSON schemas handle the validation
request.headers["x-content-type"] = request.headers["content-type"]
}

response.ctx = {}

next()
}
5 changes: 3 additions & 2 deletions src/middleware/req-cors.js → src/middleware/request-cors.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,14 @@ module.exports = () => {
const ORIGIN = process.env.CORS_ORIGIN
const METHODS = process.env.CORS_METHODS

// Active middleware if CORS_ORIGIN present
return isEmpty(ORIGIN)
? null
? undefined
: cors({
origin: ORIGIN === "true" ? true : ORIGIN,
methods: is(METHODS) ? METHODS : "GET,HEAD,PUT,PATCH,POST,DELETE",

// some legacy browsers (IE11, various SmartTVs) choke on 204
// Some legacy browsers (IE11, various SmartTVs) choke on 204
optionsSuccessStatus: 200,
})
}
22 changes: 11 additions & 11 deletions src/middleware/req-jwt.js → src/middleware/request-jwt.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,24 @@ const { is, isEmpty } = require("@asd14/m")
const { InputError } = require("../errors/input")

module.exports = () =>
// only active middleware if JWT_SECRET present
// Active middleware if JWT_SECRET present
isEmpty(process.env.JWT_SECRET)
? null
: (req, res, next) => {
// safe destructuring in route methods
req.ctx.jwt = {}
? undefined
: (request, response, next) => {
// Safe destructuring in route methods
request.ctx.jwt = {}

if (is(req.headers.authorization)) {
if (is(request.headers.authorization)) {
try {
req.ctx.jwt = jwt.verify(
req.headers.authorization,
request.ctx.jwt = jwt.verify(
request.headers.authorization,
process.env.JWT_SECRET
)
} catch (error) {
} catch {
next(
new InputError("Invalid JWT", {
method: req.method,
path: req.ctx.pathname,
method: request.method,
path: request.ctx.pathname,
})
)
}
Expand Down
11 changes: 11 additions & 0 deletions src/middleware/request-query.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const debug = require("debug")("blocks:QueryMiddleware")

const { isEmpty } = require("@asd14/m")

module.exports = ({ QueryParser }) => (request, response, next) => {
request.ctx.query = isEmpty(request.ctx.query)
? {}
: QueryParser.parse(request.ctx.query)

next()
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
const debug = require("debug")("blocks:RouteExistsMiddleware")

module.exports = ({ Router }) => (req, res, next) => {
module.exports = ({ Router }) => (request, response, next) => {
try {
const { route, params } = Router.find({
method: req.method,
pathname: req.ctx.pathname,
method: request.method,
pathname: request.ctx.pathname,
})

req.ctx.params = params
req.ctx.route = route
request.ctx.params = params
request.ctx.route = route

next()
} catch (error) {
Expand Down
Loading

0 comments on commit d546f23

Please sign in to comment.