UNPKG

pomeranian-durations

Version:

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

145 lines (124 loc) 4.23 kB
"use strict"; 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;