Spaces:
Sleeping
Sleeping
File size: 5,196 Bytes
cd6720a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | "use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.HttpException = void 0;
const shared_utils_1 = require("../utils/shared.utils");
const intrinsic_exception_1 = require("./intrinsic.exception");
/**
* Defines the base Nest HTTP exception, which is handled by the default
* Exceptions Handler.
*
* @see [Built-in HTTP exceptions](https://docs.nestjs.com/exception-filters#built-in-http-exceptions)
*
* @publicApi
*/
class HttpException extends intrinsic_exception_1.IntrinsicException {
/**
* Instantiate a plain HTTP Exception.
*
* @example
* throw new HttpException('message', HttpStatus.BAD_REQUEST)
* throw new HttpException('custom message', HttpStatus.BAD_REQUEST, {
* cause: new Error('Cause Error'),
* })
*
*
* @usageNotes
* The constructor arguments define the response and the HTTP response status code.
* - The `response` argument (required) defines the JSON response body. alternatively, it can also be
* an error object that is used to define an error [cause](https://nodejs.org/en/blog/release/v16.9.0/#error-cause).
* - The `status` argument (required) defines the HTTP Status Code.
* - The `options` argument (optional) defines additional error options. Currently, it supports the `cause` attribute,
* and can be used as an alternative way to specify the error cause: `const error = new HttpException('description', 400, { cause: new Error() });`
*
* By default, the JSON response body contains two properties:
* - `statusCode`: the Http Status Code.
* - `message`: a short description of the HTTP error by default; override this
* by supplying a string in the `response` parameter.
*
* To override the entire JSON response body, pass an object to the `createBody`
* method. Nest will serialize the object and return it as the JSON response body.
*
* The `status` argument is required, and should be a valid HTTP status code.
* Best practice is to use the `HttpStatus` enum imported from `nestjs/common`.
*
* @param response string, object describing the error condition or the error cause.
* @param status HTTP response status code.
* @param options An object used to add an error cause.
*/
constructor(response, status, options) {
super();
this.response = response;
this.status = status;
this.options = options;
this.initMessage();
this.initName();
this.initCause();
}
/**
* Configures error chaining support
*
* @see https://nodejs.org/en/blog/release/v16.9.0/#error-cause
* @see https://github.com/microsoft/TypeScript/issues/45167
*/
initCause() {
if (this.options?.cause) {
this.cause = this.options.cause;
return;
}
}
initMessage() {
if ((0, shared_utils_1.isString)(this.response)) {
this.message = this.response;
}
else if ((0, shared_utils_1.isObject)(this.response) && (0, shared_utils_1.isString)(this.response.message)) {
this.message = this.response.message;
}
else if (this.constructor) {
this.message =
this.constructor.name.match(/[A-Z][a-z]+|[0-9]+/g)?.join(' ') ??
'Error';
}
}
initName() {
this.name = this.constructor.name;
}
getResponse() {
return this.response;
}
getStatus() {
return this.status;
}
static createBody(arg0, arg1, statusCode) {
if (!arg0) {
return {
message: arg1,
statusCode: statusCode,
};
}
if ((0, shared_utils_1.isString)(arg0) || Array.isArray(arg0) || (0, shared_utils_1.isNumber)(arg0)) {
return {
message: arg0,
error: arg1,
statusCode: statusCode,
};
}
return arg0;
}
static getDescriptionFrom(descriptionOrOptions) {
return (0, shared_utils_1.isString)(descriptionOrOptions)
? descriptionOrOptions
: descriptionOrOptions?.description;
}
static getHttpExceptionOptionsFrom(descriptionOrOptions) {
return (0, shared_utils_1.isString)(descriptionOrOptions) ? {} : descriptionOrOptions;
}
/**
* Utility method used to extract the error description and httpExceptionOptions from the given argument.
* This is used by inheriting classes to correctly parse both options.
* @returns the error description and the httpExceptionOptions as an object.
*/
static extractDescriptionAndOptionsFrom(descriptionOrOptions) {
const description = (0, shared_utils_1.isString)(descriptionOrOptions)
? descriptionOrOptions
: descriptionOrOptions?.description;
const httpExceptionOptions = (0, shared_utils_1.isString)(descriptionOrOptions)
? {}
: descriptionOrOptions;
return {
description,
httpExceptionOptions,
};
}
}
exports.HttpException = HttpException;
|