nestjs-swagger-dto
Version:
Nestjs swagger dto decorators
70 lines • 2.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.IsDate = void 0;
const class_transformer_1 = require("class-transformer");
const class_validator_1 = require("class-validator");
const core_1 = require("../core");
// TODO: array support
const IsDate = ({ format, default: def, example, ...base }) => {
const dateTime = format === 'date-time';
return (0, core_1.compose)({ type: 'string', format }, { ...base, default: stringify(def, dateTime), example: stringify(example, dateTime) }, TransformHandlingOptional(base, dateTime ? transformDateTime : transformDate), (0, class_validator_1.IsDate)({ message: ({ value }) => value?.message }));
};
exports.IsDate = IsDate;
function transformDate({ key, value, type }) {
if (type === class_transformer_1.TransformationType.CLASS_TO_PLAIN) {
if (typeof value === 'string') {
return value;
}
return dateToString(value);
}
if (!/^\d{4}-\d{2}-\d{2}$/.test(value)) {
return new Error(`${key} is not formatted as \`yyyy-mm-dd\``);
}
const date = new Date(value);
if (isNaN(date.getTime())) {
return new Error(`${key} is not a valid Date`);
}
return date;
}
function transformDateTime({ key, value, type }) {
if (type === class_transformer_1.TransformationType.CLASS_TO_PLAIN) {
if (typeof value === 'string') {
return value;
}
return dateTimeToString(value);
}
if (!(0, class_validator_1.isDateString)(value, { strict: true })) {
return new Error(`${key} is not ISO8601 format`);
}
return new Date(value);
}
function stringify(value, dateTime) {
if (value === undefined) {
return value;
}
if (value instanceof Date) {
return dateTime ? dateTimeToString(value) : dateToString(value);
}
return value.map((v) => stringify(v, dateTime));
}
function dateTimeToString(date) {
return date.toISOString();
}
function dateToString(date) {
return date.toISOString().split('T')[0];
}
function TransformHandlingOptional(config, transform) {
return (0, class_transformer_1.Transform)((params) => {
if (config.optional && params.value === undefined) {
return params.value;
}
if (config.nullable && params.value === null) {
return params.value;
}
if (params.value === null || params.value === undefined) {
return new Error(`${params.key} does not exist`);
}
return transform(params);
});
}
//# sourceMappingURL=is-date.js.map