@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
146 lines (142 loc) • 8.01 kB
JavaScript
'use strict';
var tslib_es6 = require('../../../external/tslib/tslib.es6.js');
var foreignKeyViolation_class = require('../../../class/utility/dto/exception/details/foreign-key-violation.class.js');
var uniqueViolation_class = require('../../../class/utility/dto/exception/details/unique-violation.class.js');
var date_constant = require('../../../constant/date.constant.js');
var exception_constant = require('../../../constant/dto/exception.constant.js');
var number_constant = require('../../../constant/number.constant.js');
var enum_decorator = require('../../../decorator/api/property/enum.decorator.js');
var number_decorator = require('../../../decorator/api/property/number.decorator.js');
var object_decorator = require('../../../decorator/api/property/object.decorator.js');
var string_decorator = require('../../../decorator/api/property/string.decorator.js');
var uuid_decorator = require('../../../decorator/api/property/uuid.decorator.js');
require('../../../enum/decorator/api/action.enum.js');
require('../../../enum/decorator/api/authentication-type.enum.js');
require('../../../enum/decorator/api/controller/get-list/query/filter/missing-behavior.enum.js');
require('../../../enum/decorator/api/controller/get-list/query/unlisted-fields.enum.js');
require('../../../enum/decorator/api/controller/relation-reference-shape.enum.js');
require('../../../enum/decorator/api/controller/request/target.enum.js');
require('../../../enum/decorator/api/controller/request/transformer-type.enum.js');
require('../../../enum/decorator/api/controller/response-target.enum.js');
require('../../../enum/decorator/api/dto-type.enum.js');
require('../../../enum/decorator/api/function/context-storage-kind.enum.js');
require('../../../enum/decorator/api/function/subscriber-transaction-expectation.enum.js');
require('../../../enum/decorator/api/function/transaction/event-status.enum.js');
require('../../../enum/decorator/api/function/transaction/failure-stage.enum.js');
require('../../../enum/decorator/api/function/transaction/mode.enum.js');
require('../../../enum/decorator/api/function/transaction/outcome.enum.js');
require('../../../enum/decorator/api/function/transaction/owner-kind.enum.js');
require('../../../enum/decorator/api/function/transaction/trace-type.enum.js');
require('../../../enum/decorator/api/function/type.enum.js');
require('../../../enum/decorator/api/on-type.enum.js');
require('../../../enum/decorator/api/property/data-type.enum.js');
require('../../../enum/decorator/api/property/date/identifier.enum.js');
require('../../../enum/decorator/api/property/date/type.enum.js');
require('../../../enum/decorator/api/property/desribe-type.enum.js');
var numberType_enum = require('../../../enum/decorator/api/property/number-type.enum.js');
var stringType_enum = require('../../../enum/decorator/api/property/string-type.enum.js');
require('../../../enum/decorator/api/route/subscriber-authorization-expectation.enum.js');
require('../../../enum/decorator/api/route/type.enum.js');
var exceptionDetailsType_enum = require('../../../enum/utility/exception-details-type.enum.js');
var common = require('@nestjs/common');
var swagger = require('@nestjs/swagger');
var camelCaseString_utility = require('../../camel-case-string.utility.js');
const exceptionDtoCache = new Map();
/**
* Creates exception DTOs with standardized properties based on HTTP status codes.
* Generates a class with properties like correlationID, error name, message, status code, and timestamp,
* all properly decorated with Swagger and validation decorators.
* @param {HttpStatus} httpStatus - The HTTP status code for the exception
* @returns {Type<unknown>} A generated DTO class for the exception
*/
function DtoGenerateException(httpStatus) {
const cached = exceptionDtoCache.get(httpStatus);
if (cached) {
return cached;
}
const errorName = common.HttpStatus[httpStatus];
class GeneratedErrorDTO {
correlationID;
/* @ApiPropertyString({
description: "name",
entity: { name: "Error" },
exampleValue: CamelCaseString(errorName),
format: EApiPropertyStringType.STRING,
isResponse: true,
maxLength: EXCEPTION_DTO_CONSTANT.MAXIMUM_ERROR_LENGTH,
minLength: EXCEPTION_DTO_CONSTANT.MINIMUM_ERROR_LENGTH,
pattern: "/^[a-zA-Z_ ]{3,64}$/",
})
error: string = CamelCaseString(errorName); */
details;
message = "Error message";
statusCode = httpStatus;
timestamp;
}
tslib_es6.__decorate([
uuid_decorator.ApiPropertyUUID({ entity: { name: "Correlation" }, isResponse: true }),
tslib_es6.__metadata("design:type", String)
], GeneratedErrorDTO.prototype, "correlationID", void 0);
tslib_es6.__decorate([
object_decorator.ApiPropertyObject({
description: "details",
discriminator: {
mapping: {
[exceptionDetailsType_enum.EApiExceptionDetailsType.FOREIGN_KEY_VIOLATION]: foreignKeyViolation_class.ExceptionDetailsForeignKeyViolationDTO,
[exceptionDetailsType_enum.EApiExceptionDetailsType.UNIQUE_VIOLATION]: uniqueViolation_class.ExceptionDetailsUniqueViolationDTO,
},
propertyName: "type",
shouldKeepDiscriminatorProperty: true,
},
entity: { name: "Error" },
isRequired: false,
isResponse: true,
type: [foreignKeyViolation_class.ExceptionDetailsForeignKeyViolationDTO, uniqueViolation_class.ExceptionDetailsUniqueViolationDTO],
}),
tslib_es6.__metadata("design:type", Object)
], GeneratedErrorDTO.prototype, "details", void 0);
tslib_es6.__decorate([
string_decorator.ApiPropertyString({
description: "message",
entity: { name: "Error" },
exampleValue: "Error message",
format: stringType_enum.EApiPropertyStringType.STRING,
isResponse: true,
maxLength: exception_constant.EXCEPTION_DTO_CONSTANT.MAXIMUM_ERROR_MESSAGE_LENGTH,
minLength: exception_constant.EXCEPTION_DTO_CONSTANT.MINIMUM_ERROR_MESSAGE_LENGTH,
pattern: "/^[a-zA-Z_ ]{3,64}$/",
}),
tslib_es6.__metadata("design:type", String)
], GeneratedErrorDTO.prototype, "message", void 0);
tslib_es6.__decorate([
enum_decorator.ApiPropertyEnum({
description: "status code",
entity: { name: "Error" },
enum: common.HttpStatus,
enumName: "EHttpStatus",
exampleValue: httpStatus,
isResponse: true,
}),
tslib_es6.__metadata("design:type", Number)
], GeneratedErrorDTO.prototype, "statusCode", void 0);
tslib_es6.__decorate([
number_decorator.ApiPropertyNumber({
description: "timestamp",
entity: { name: "Error" },
exampleValue: Date.now(),
format: numberType_enum.EApiPropertyNumberType.INTEGER,
isResponse: true,
maximum: date_constant.DATE_CONSTANT.MAXIMUM_UNIX_TIME,
minimum: date_constant.DATE_CONSTANT.MINIMUM_UNIX_TIME,
multipleOf: number_constant.NUMBER_CONSTANT.ONE,
}),
tslib_es6.__metadata("design:type", Number)
], GeneratedErrorDTO.prototype, "timestamp", void 0);
// Register discriminator DTOs so Swagger includes their schemas in components.schemas
swagger.ApiExtraModels(foreignKeyViolation_class.ExceptionDetailsForeignKeyViolationDTO, uniqueViolation_class.ExceptionDetailsUniqueViolationDTO)(GeneratedErrorDTO);
Object.defineProperty(GeneratedErrorDTO, "name", { value: `Exception${camelCaseString_utility.CamelCaseString(errorName)}DTO` });
exceptionDtoCache.set(httpStatus, GeneratedErrorDTO);
return GeneratedErrorDTO;
}
exports.DtoGenerateException = DtoGenerateException;
//# sourceMappingURL=exception.utility.js.map