UNPKG

mvom

Version:

Multivalue Object Mapper

75 lines (69 loc) 2.28 kB
"use strict"; 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;