"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dayPeriodEnumToHours = dayPeriodEnumToHours; exports.isLeapYearIndex = isLeapYearIndex; exports.mapValue = mapValue; exports.normalizeTwoDigitYear = normalizeTwoDigitYear; exports.parseAnyDigitsSigned = parseAnyDigitsSigned; exports.parseNDigits = parseNDigits; exports.parseNDigitsSigned = parseNDigitsSigned; exports.parseNumericPattern = parseNumericPattern; exports.parseTimezonePattern = parseTimezonePattern; var _index = require("../../constants/index.js"); var _constants = require("./constants.js"); function mapValue(parseFnResult, mapFn) { if (!parseFnResult) { return parseFnResult; } return { value: mapFn(parseFnResult.value), rest: parseFnResult.rest }; } function parseNumericPattern(pattern, dateString) { var matchResult = dateString.match(pattern); if (!matchResult) { return null; } return { value: parseInt(matchResult[0], 10), rest: dateString.slice(matchResult[0].length) }; } function parseTimezonePattern(pattern, dateString) { var matchResult = dateString.match(pattern); if (!matchResult) { return null; } // Input is 'Z' if (matchResult[0] === 'Z') { return { value: 0, rest: dateString.slice(1) }; } var sign = matchResult[1] === '+' ? 1 : -1; var hours = matchResult[2] ? parseInt(matchResult[2], 10) : 0; var minutes = matchResult[3] ? parseInt(matchResult[3], 10) : 0; var seconds = matchResult[5] ? parseInt(matchResult[5], 10) : 0; return { value: sign * (hours * _index.millisecondsInHour + minutes * _index.millisecondsInMinute + seconds * _index.millisecondsInSecond), rest: dateString.slice(matchResult[0].length) }; } function parseAnyDigitsSigned(dateString) { return parseNumericPattern(_constants.numericPatterns.anyDigitsSigned, dateString); } function parseNDigits(n, dateString) { switch (n) { case 1: return parseNumericPattern(_constants.numericPatterns.singleDigit, dateString); case 2: return parseNumericPattern(_constants.numericPatterns.twoDigits, dateString); case 3: return parseNumericPattern(_constants.numericPatterns.threeDigits, dateString); case 4: return parseNumericPattern(_constants.numericPatterns.fourDigits, dateString); default: return parseNumericPattern(new RegExp('^\\d{1,' + n + '}'), dateString); } } function parseNDigitsSigned(n, dateString) { switch (n) { case 1: return parseNumericPattern(_constants.numericPatterns.singleDigitSigned, dateString); case 2: return parseNumericPattern(_constants.numericPatterns.twoDigitsSigned, dateString); case 3: return parseNumericPattern(_constants.numericPatterns.threeDigitsSigned, dateString); case 4: return parseNumericPattern(_constants.numericPatterns.fourDigitsSigned, dateString); default: return parseNumericPattern(new RegExp('^-?\\d{1,' + n + '}'), dateString); } } function dayPeriodEnumToHours(dayPeriod) { switch (dayPeriod) { case 'morning': return 4; case 'evening': return 17; case 'pm': case 'noon': case 'afternoon': return 12; case 'am': case 'midnight': case 'night': default: return 0; } } function normalizeTwoDigitYear(twoDigitYear, currentYear) { var isCommonEra = currentYear > 0; // Absolute number of the current year: // 1 -> 1 AC // 0 -> 1 BC // -1 -> 2 BC var absCurrentYear = isCommonEra ? currentYear : 1 - currentYear; var result; if (absCurrentYear <= 50) { result = twoDigitYear || 100; } else { var rangeEnd = absCurrentYear + 50; var rangeEndCentury = Math.floor(rangeEnd / 100) * 100; var isPreviousCentury = twoDigitYear >= rangeEnd % 100; result = twoDigitYear + rangeEndCentury - (isPreviousCentury ? 100 : 0); } return isCommonEra ? result : 1 - result; } function isLeapYearIndex(year) { return year % 400 === 0 || year % 4 === 0 && year % 100 !== 0; }