UNPKG

@dazejs/framework

Version:

Daze.js - A powerful web framework for Node.js

146 lines 6.41 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ErrorHandler = void 0; const trace_page_1 = __importDefault(require("@dazejs/trace-page")); const statuses_1 = __importDefault(require("statuses")); const typeis = __importStar(require("type-is")); const container_1 = require("../container"); const response_1 = require("../http/response"); const redirect_1 = require("../http/response/redirect"); const view_1 = require("../view"); const http_error_1 = require("./http-error"); const validate_http_error_1 = require("./validate-http-error"); const defaultHttpErrorTemplate = { 401: 'errors/401.njk', 404: 'errors/404.njk', 500: 'errors/500.njk', 503: 'errors/503.njk', }; const renderTypes = ['html', 'text', 'json']; class ErrorHandler { constructor(error, request) { this.app = container_1.Container.get('app'); this.request = request; this.error = error; } report() { if (this.error instanceof http_error_1.HttpError) return; this.app.emit('error', this.error, this.request); } render() { var _a, _b, _c, _d, _e; if (this.error instanceof http_error_1.HttpError) { const contentType = (_d = (_b = (_a = this.error.headers) === null || _a === void 0 ? void 0 : _a['content-type']) !== null && _b !== void 0 ? _b : (_c = this.request) === null || _c === void 0 ? void 0 : _c.getHeader('content-type')) !== null && _d !== void 0 ? _d : ''; const headersType = typeis.is(contentType, ['html', 'text', 'json']) || 'text'; if (headersType && renderTypes.includes(headersType)) { return this[headersType](); } } const acceptsType = (_e = this.request) === null || _e === void 0 ? void 0 : _e.acceptsTypes('html', 'text', 'json'); if (typeof acceptsType === 'string' && renderTypes.includes(acceptsType)) { return this[acceptsType](); } return this.text(); } text() { if (this.error instanceof http_error_1.HttpError) { const data = this.error.message || statuses_1.default[+this.error.code || 500]; return new response_1.Response(data, this.error.code, this.error.headers).setType('txt'); } const data = this.error.message || 'something went error!'; return new response_1.Response(data, 500).setType('txt'); } json() { if (this.error instanceof http_error_1.HttpError) { const message = this.error.message || statuses_1.default[+this.error.code || 500]; const { errors } = this.error; const data = { message, errors }; if (this.app.isDebug) { if (this.error.code >= 500) { data.stack = this.error.stack; } } return new response_1.Response(data, this.error.code, this.error.headers).setType('json'); } const data = { message: this.error.message || 'something went error!' }; if (this.app.isDebug) { data.stack = this.error.stack; } return new response_1.Response(data, 500).setType('json'); } html() { if (this.error instanceof validate_http_error_1.ValidateHttpError) { return (new redirect_1.Redirect()).back(); } if (!(this.error instanceof http_error_1.HttpError)) { if (this.app.isDebug) { return this.renderTracePage(this.error); } return this.renderErrorPage(this.error); } return this.renderHttpErrorPage(this.error); } renderTracePage(error) { const page = (0, trace_page_1.default)(error, this.request); return new response_1.Response(page, 500).setType('html'); } renderErrorPage(error) { const config = this.app.get('config'); const httpErrorTemplate = config.get('app.httpErrorTemplate', {}); const temps = Object.assign({}, defaultHttpErrorTemplate, httpErrorTemplate); const view = (new view_1.View()).render(temps[500], { err: error, }); return new response_1.Response(view, 500).setType('html'); } renderHttpErrorPage(error) { const config = this.app.get('config'); const httpErrorTemplate = config.get('app.httpErrorTemplate', {}); const temps = Object.assign({}, defaultHttpErrorTemplate, httpErrorTemplate); if (temps[error.code]) { const view = (new view_1.View()).render(temps[error.code], { err: error, }); return new response_1.Response(view, error.code, error.headers).setType('html'); } if (temps.error) { const view = (new view_1.View()).render(temps.error, { err: error, }); return new response_1.Response(view, error.code, error.headers).setType('html'); } const view = (new view_1.View()).render('errors/error.njk', { err: error, }); return new response_1.Response(view, error.code, error.headers).setType('html'); } } exports.ErrorHandler = ErrorHandler; //# sourceMappingURL=handle.js.map