mvom
Version:
Multivalue Object Mapper
75 lines (69 loc) • 2.28 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _dateFns = require("date-fns");
var _constants = require("../constants");
var _errors = require("../errors");
/** ISOCalendarDate Data Transformer */
class ISOCalendarDateDataTransformer {
/**
* Transform mv date data to ISO 8601 approved date format (yyyy-mm-dd)
* @throws {@link TransformDataError} Database value could not be transformed to external format
*/
transformFromDb(value) {
if (value == null) {
return null;
}
const castValue = Number(value);
if (!Number.isInteger(castValue)) {
throw new _errors.TransformDataError({
transformClass: this.constructor.name,
transformValue: value
});
}
return (0, _dateFns.format)((0, _dateFns.addDays)(_constants.mvEpoch, castValue), _constants.ISOCalendarDateFormat);
}
/**
* Transform ISO 8601 approved date format (yyyy-mm-dd) to mv date data
* @throws {@link TransformDataError} Value could not be transformed to database format
*/
transformToDb(value) {
if (value == null) {
return null;
}
if (typeof value !== 'string') {
throw new _errors.TransformDataError({
transformClass: this.constructor.name,
transformValue: value
});
}
return String((0, _dateFns.differenceInDays)(this.parseISOCalendarDate(value), _constants.mvEpoch));
}
/** Transform query constants to ISOCalendarDate format */
transformToQuery(value) {
if (value === '' || value == null) {
return '';
}
if (typeof value !== 'string') {
throw new _errors.TransformDataError({
transformClass: this.constructor.name,
transformValue: value
});
}
try {
return (0, _dateFns.format)(this.parseISOCalendarDate(value), _constants.ISOCalendarDateFormat);
} catch (error) {
throw new _errors.TransformDataError({
transformClass: this.constructor.name,
transformValue: value
});
}
}
/** Parse ISOCalendarDate string into date */
parseISOCalendarDate(value) {
return (0, _dateFns.parse)(value, _constants.ISOCalendarDateFormat, new Date());
}
}
var _default = exports.default = ISOCalendarDateDataTransformer;