UNPKG

@digicms/cms

Version:

An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite

63 lines (50 loc) 1.54 kB
'use strict'; const { isNil, camelCase } = require('lodash/fp'); const Koa = require('koa'); const createError = require('http-errors'); const delegate = require('delegates'); const statuses = require('statuses'); const { formatHttpError } = require('../errors'); const addCustomMethods = (app) => { const delegator = delegate(app.context, 'response'); /* errors */ statuses.codes .filter((code) => code >= 400 && code < 600) .forEach((code) => { const name = statuses(code); const camelCasedName = camelCase(name); app.response[camelCasedName] = function responseCode(message, details = {}) { const httpError = createError(code, message, { details }); const { status, body } = formatHttpError(httpError); this.status = status; this.body = body; }; delegator.method(camelCasedName); }); /* send, created, deleted */ app.response.send = function send(data, status = 200) { this.status = status; this.body = data; }; app.response.created = function created(data) { this.status = 201; this.body = data; }; app.response.deleted = function deleted(data) { if (isNil(data)) { this.status = 204; } else { this.status = 200; this.body = data; } }; delegator.method('send').method('created').method('deleted'); return app; }; const createKoaApp = ({ proxy, keys }) => { const app = new Koa({ proxy }); app.keys = keys; addCustomMethods(app); return app; }; module.exports = createKoaApp;