pomeranian-durations
Version:
An immutable duration library based on the ISO-8601 format for durations.
145 lines (124 loc) • 4.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.findYears = exports.findMonths = exports.findWeeks = exports.findDays = exports.findHours = exports.findMinutes = exports.findSeconds = void 0;
var _constants = require("./constants");
var _utils = require("./_utils");
/**
* Helpers for finding particular units in a given ISO8601 duration
* @name default
*/
var charsBetween = function charsBetween(string, start, end) {
return string.substring(string.lastIndexOf(start) + 1, string.lastIndexOf(end));
};
var containsTimeDesignator = function containsTimeDesignator(string) {
return string.lastIndexOf(_constants.TIME_DESIGNATOR) === -1;
};
var extractTimeComponents = function extractTimeComponents(isoString) {
return isoString.split(_constants.TIME_DESIGNATOR)[1] || '';
};
var extractDateComponents = function extractDateComponents(isoString) {
if (containsTimeDesignator(isoString)) {
return isoString.replace(_constants.DURATION_DESIGNATOR, '');
}
return charsBetween(isoString, _constants.DURATION_DESIGNATOR, _constants.TIME_DESIGNATOR);
};
var findUnit = function findUnit(stringComponent, unit) {
var matchedUnit = stringComponent.toUpperCase().match(new RegExp("[+,-]?[0-9]+(\\.[0-9]+)?".concat(unit)));
if (!matchedUnit) {
return void 0;
}
return parseFloat(matchedUnit[0].slice(0, -1));
};
var buildTimeFinder = (0, _utils.curry)(function (unit, isoString) {
if (!isoString) {
return void 0;
}
var timeComponent = extractTimeComponents(isoString);
return findUnit(timeComponent, unit);
});
var buildDateFinder = (0, _utils.curry)(function (unit, isoString) {
if (!isoString) {
return void 0;
}
var dateComponent = extractDateComponents(isoString);
return findUnit(dateComponent, unit);
});
/**
* Finds the seconds in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findSeconds('PT1S') // => 1
* @example
* findSeconds('PT1M') // => undefined
*/
var findSeconds = buildTimeFinder(_constants.UNITS.seconds);
/**
* Finds the minutes in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findMinutes('PT1M') // => 1
* @example
* findMinutes('P1Y') // => undefined
*/
exports.findSeconds = findSeconds;
var findMinutes = buildTimeFinder(_constants.UNITS.minutes);
/**
* Finds the hours in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findHours('PT1H') // => 1
* @example
* findHours('PT1M') // => undefined
*/
exports.findMinutes = findMinutes;
var findHours = buildTimeFinder(_constants.UNITS.hours);
/**
* Finds the days in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findDays('P1D') // => 1
* @example
* findDays('PT1M') // => undefined
*/
exports.findHours = findHours;
var findDays = buildDateFinder(_constants.UNITS.days);
/**
* Finds the weeks in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findWeeks('P1W') // => 1
* @example
* findWeeks('PT1M') // => undefined
*/
exports.findDays = findDays;
var findWeeks = buildDateFinder(_constants.UNITS.weeks);
/**
* Finds the months in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findMonths('P1M') // => 1
* @example
* findMonths('PT1s') // => undefined
*/
exports.findWeeks = findWeeks;
var findMonths = buildDateFinder(_constants.UNITS.months);
/**
* Finds the years in a given ISO8601 duration string.
* @param isoString {string} an ISO8601 duration
* @returns {(number|undefined)} number of seconds
* @example
* findYears('P1Y') // => 1
* @example
* findYears('PT1M') // => undefined
*/
exports.findMonths = findMonths;
var findYears = buildDateFinder(_constants.UNITS.years);
exports.findYears = findYears;