mvom
Version:
Multivalue Object Mapper
64 lines (55 loc) • 2.54 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _errors = require("../errors");
var _ISOCalendarDateDataTransformer = _interopRequireDefault(require("./ISOCalendarDateDataTransformer"));
var _ISOTimeDataTransformer = _interopRequireDefault(require("./ISOTimeDataTransformer"));
/** ISOCalendarDateTime Data Transformer */
class ISOCalendarDateTimeDataTransformer {
/** Database time format is in milliseconds */
/** ISOCalendarDateDataTransformer instance to use for transformations of the date part of the DateTime */
/** ISOTimeDataTransformer instance to use for transformations of the time part of the DateTime */
constructor(dbFormat = 'ms') {
this.isDbInMs = dbFormat === 'ms';
this.isoCalendarDateTransformer = new _ISOCalendarDateDataTransformer.default();
this.isoTimeTransformer = new _ISOTimeDataTransformer.default(dbFormat);
}
/** Transform mv style timestamp data (ddddd.sssss[SSS]) to ISO 8601 approved date/time format (yyyy-mm-ddTHH:mm:ss.SSS) */
transformFromDb(value) {
if (value == null) {
return null;
}
const valueParts = String(value).split('.');
const datePart = this.isoCalendarDateTransformer.transformFromDb(+valueParts[0]);
const timePart = this.isoTimeTransformer.transformFromDb(+valueParts[1]);
return `${datePart}T${timePart}`;
}
/**
* Transform ISO 8601 approved date/time format (yyyy-mm-ddTHH:mm:ss.SSS) to mv style timestamp data (ddddd.sssss[SSS])
* @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
});
}
const [datePart, timePart] = value.split('T');
const padLength = this.isDbInMs ? 8 : 5;
const transformedDatePart = this.isoCalendarDateTransformer.transformToDb(datePart);
const transformedTimePart = this.isoTimeTransformer.transformToDb(timePart).padStart(padLength, '0');
return `${transformedDatePart}.${transformedTimePart}`;
}
/** Transform query constants to internal u2 date-time */
transformToQuery(value) {
return value === '' || value == null ? '' : this.transformToDb(value);
}
}
var _default = exports.default = ISOCalendarDateTimeDataTransformer;