UNPKG

@playbooks/utils

Version:

A collection of utilities used for Playbooks.

64 lines (63 loc) 2.49 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const HttpError = require("http-errors"); const helpers = require("./helpers.cjs"); const normalizeError = (error) => { const e = helpers.isArray(error) ? error[0] : error; switch (e.status) { case 401: return { status: e.status, title: e.name || e.title, message: e.detail || e.message }; case 403: return { status: e.status, title: e.name || e.title, message: e.detail || e.message }; case 404: return { status: e.status, title: e.name || e.title, message: e.detail || e.message }; case 422: return { status: e.status, title: e.name || e.title, message: e.detail || e.message }; case 429: return { status: e.status, title: e.name || e.title, message: e.detail || e.message }; default: return { status: 500, title: e.name || e.title, message: e.detail || e.message }; } }; const serializeError = (error) => { const code = error.status || error.statusCode || error.code || 500; const data = error.data; const message = error.message; const source = error.stack || error.framework || "Stack unavailable"; switch (code) { case 400: return error.data ? objectionError({ code, data, message, source }) : jsonApiError(error.code, "Unprocessable entity", message, source); case 401: return jsonApiError(code, "Not authorized", message, source); case 403: return jsonApiError(code, "Not authorized", message, source); case 404: return jsonApiError(code, "Not found", message, source); case 422: return jsonApiError(code, "Unprocessable entity", message, source); case 429: return jsonApiError(code, "Too many requests", message, source); default: return jsonApiError(code, "Server error", message, source); } }; const objectionError = (e) => { const messages = []; if (!helpers.isEmpty(e.data)) { Object.keys(e.data).forEach((key) => { messages.push(`${key}: ${e.data[key][0].message}`); }); } else { messages.push(e.message); } return jsonApiError(e.code, "Validation Failed", messages[0], e.source); }; const jsonApiError = (status, title, detail, source) => { return { status, title, detail, source }; }; const httpError = HttpError; exports.httpError = httpError; exports.jsonApiError = jsonApiError; exports.normalizeError = normalizeError; exports.objectionError = objectionError; exports.serializeError = serializeError;