UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

146 lines (142 loc) 8.01 kB
'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