UNPKG

pomeranian-durations

Version:

An immutable duration library based on the ISO-8601 format for durations.

130 lines (101 loc) 3.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toSql = exports.toPostgres = exports.toPostgresVerbose = void 0; var _transformations = require("./transformations"); var _validate = require("./validate"); var _constants = require("./constants"); var _utils = require("./_utils"); var _math = require("./math"); var _normalize = require("./normalize"); var _remove = require("./remove"); var _compare = require("./compare"); var KEY_TO_POSTGRES_MAP = { years: 'years', months: 'mons', days: 'days', hours: 'hours', minutes: 'mins', seconds: 'seconds' }; var leftPadZeros = function leftPadZeros(value) { return (0, _utils.leftPad)(2, '0', value); }; var isoStringToPostgresVerbose = function isoStringToPostgresVerbose(isoString) { var fragments = (0, _transformations.toFragments)(isoString); return Object.keys(fragments).sort(function (a, b) { return _constants.UNIT_ORDER.indexOf(b) - _constants.UNIT_ORDER.indexOf(a); }).filter(function (unit) { return fragments[unit] !== 0; }).map(function (unit) { return "".concat(fragments[unit], " ").concat(KEY_TO_POSTGRES_MAP[unit]); }).join(' '); }; var fragmentsToSqlTime = (0, _utils.curry)(function (leftPadHours, isoString) { if ((0, _compare.eq)(isoString, _constants.ZERO)) { return ''; } var updatedFragments = (0, _utils.pipe)(isoString, _math.absolute, _normalize.normalizeTime, _transformations.toFragments); var sign = (0, _compare.lt)(isoString, _constants.ZERO) ? '-' : ''; return sign + [leftPadHours ? leftPadZeros(updatedFragments.hours) : updatedFragments.hours, leftPadZeros(updatedFragments.minutes), leftPadZeros(updatedFragments.seconds)].join(':'); }); var fragmentsToSqlDate = function fragmentsToSqlDate(isoString) { var fragments = (0, _transformations.toFragments)(isoString); if ((0, _utils.values)(fragments).every(function (fragment) { return fragment === 0; })) { return ''; } return "".concat(fragments.years, "-").concat(fragments.months, " ").concat(fragments.days); }; /** * Converts an ISO8601 duration to a Postgres verbose duration. * @param isoString {string} - ISO8601 duration * @returns {string} - postgres verbose duration string * @example * toPostgresVerbose('P2DT3M') // => '@ 2 days 3 mins' */ var toPostgresVerbose = function toPostgresVerbose(isoString) { if ((0, _validate.isInvalid)(isoString)) { return _constants.INVALID_DURATION; } return "@ ".concat(isoStringToPostgresVerbose(isoString)).trim(); }; /** * Converts an ISO8601 duration to a Postgres duration. * @param isoString {string} - ISO8601 duration * @returns {string} - postgres duration string * @example * toPostgres('P2DT1M') // => '2 days 00:01:00' */ exports.toPostgresVerbose = toPostgresVerbose; var toPostgres = function toPostgres(isoString) { if ((0, _validate.isInvalid)(isoString)) { return _constants.INVALID_DURATION; } var timeParts = (0, _utils.pipe)(isoString, _remove.removeDateUnits, fragmentsToSqlTime(true)); var dateParts = (0, _utils.pipe)(isoString, _remove.removeTimeUnits, isoStringToPostgresVerbose); return (0, _utils.joinWhen)(function (value) { return value !== ''; }, ' ', dateParts, timeParts); }; /** * Converts an ISO8601 duration to a SQL duration. * @param isoString {string} - ISO8601 duration * @returns {string} - sql duration string * @example * toSql('P1Y2DT1M') // => '1-0 2 0:01:00' */ exports.toPostgres = toPostgres; var toSql = function toSql(isoString) { if ((0, _validate.isInvalid)(isoString)) { return _constants.INVALID_DURATION; } var timeParts = (0, _utils.pipe)(isoString, _remove.removeDateUnits, fragmentsToSqlTime(false)); var dateParts = (0, _utils.pipe)(isoString, _remove.removeTimeUnits, fragmentsToSqlDate); return (0, _utils.joinWhen)(function (value) { return value !== ''; }, ' ', dateParts, timeParts); }; exports.toSql = toSql;