UNPKG

mvom

Version:

Multivalue Object Mapper

64 lines (55 loc) 2.54 kB
"use strict"; 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;