UNPKG

nestjs-swagger-dto

Version:
70 lines 2.58 kB
"use strict"; 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