UNPKG

wix-style-react

Version:
287 lines (263 loc) 8.49 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = legacyParse; var _isDate = _interopRequireDefault(require("date-fns/isDate")); /** * This file is replacing the `@date-fns/upgrade/v2/ legacyParse` method with some local code that doesn’t require the whole date-fns library * See this open Github issue in the date-fns/upgrade/v2 library: https://github.com/date-fns/date-fns-upgrade/issues/14 * * A PR with the fix for the date-fns/upgrade/v2 library: https://github.com/date-fns/date-fns-upgrade/pull/20 * Once this PR will be merged we could use the original legacyParse method */ var MILLISECONDS_IN_HOUR = 3600000; var MILLISECONDS_IN_MINUTE = 60000; var DEFAULT_ADDITIONAL_DIGITS = 2; var parseTokenDateTimeDelimeter = /[T ]/; var parseTokenPlainTime = /:/; // year tokens var parseTokenYY = /^(\d{2})$/; var parseTokensYYY = [/^([+-]\d{2})$/, // 0 additional digits /^([+-]\d{3})$/, // 1 additional digit /^([+-]\d{4})$/ // 2 additional digits ]; var parseTokenYYYY = /^(\d{4})/; var parseTokensYYYYY = [/^([+-]\d{4})/, // 0 additional digits /^([+-]\d{5})/, // 1 additional digit /^([+-]\d{6})/ // 2 additional digits ]; // date tokens var parseTokenMM = /^-(\d{2})$/; var parseTokenDDD = /^-?(\d{3})$/; var parseTokenMMDD = /^-?(\d{2})-?(\d{2})$/; var parseTokenWww = /^-?W(\d{2})$/; var parseTokenWwwD = /^-?W(\d{2})-?(\d{1})$/; // time tokens var parseTokenHH = /^(\d{2}([.,]\d*)?)$/; var parseTokenHHMM = /^(\d{2}):?(\d{2}([.,]\d*)?)$/; var parseTokenHHMMSS = /^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/; // timezone tokens var parseTokenTimezone = /([Z+-].*)$/; var parseTokenTimezoneZ = /^(Z)$/; var parseTokenTimezoneHH = /^([+-])(\d{2})$/; var parseTokenTimezoneHHMM = /^([+-])(\d{2}):?(\d{2})$/; function legacyParse(argument) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if ((0, _isDate.default)(argument)) { // Prevent the date to lose the milliseconds when passed to new Date() in IE10 return new Date(argument.getTime()); } else if (typeof argument !== 'string') { return new Date(argument); } var additionalDigits = options.additionalDigits == null ? DEFAULT_ADDITIONAL_DIGITS : Number(options.additionalDigits); var dateStrings = splitDateString(argument); var parseYearResult = parseYear(dateStrings.date || '', additionalDigits); var year = parseYearResult.year; var restDateString = parseYearResult.restDateString; var date = parseDate(restDateString || '', year); if (date) { var timestamp = date.getTime(); var time = 0; var offset; if (dateStrings.time) { time = parseTime(dateStrings.time) || 0; } if (dateStrings.timezone) { offset = parseTimezone(dateStrings.timezone) * MILLISECONDS_IN_MINUTE; } else { var fullTime = timestamp + time; var fullTimeDate = new Date(fullTime); offset = getTimezoneOffsetInMilliseconds(fullTimeDate); // Adjust time when it's coming from DST var fullTimeDateNextDay = new Date(fullTime); fullTimeDateNextDay.setDate(fullTimeDate.getDate() + 1); var offsetDiff = getTimezoneOffsetInMilliseconds(fullTimeDateNextDay) - getTimezoneOffsetInMilliseconds(fullTimeDate); if (offsetDiff > 0) { offset += offsetDiff; } } return new Date(timestamp + time + offset); } else { return new Date(argument); } } function splitDateString(dateString) { var array = dateString.split(parseTokenDateTimeDelimeter); var timeString, date, time, timezone; if (parseTokenPlainTime.test(array[0])) { date = undefined; timeString = array[0]; } else { date = array[0]; timeString = array[1]; } if (timeString) { var token = parseTokenTimezone.exec(timeString); if (token) { time = timeString.replace(token[1], ''); timezone = token[1]; } else { time = timeString; } } return { date, time, timezone }; } function parseYear(dateString, additionalDigits) { var parseTokenYYY = parseTokensYYY[additionalDigits]; var parseTokenYYYYY = parseTokensYYYYY[additionalDigits]; var token; // YYYY or ±YYYYY token = parseTokenYYYY.exec(dateString) || parseTokenYYYYY.exec(dateString); if (token) { var yearString = token[1]; return { year: parseInt(yearString, 10), restDateString: dateString.slice(yearString.length) }; } // YY or ±YYY token = parseTokenYY.exec(dateString) || parseTokenYYY.exec(dateString); if (token) { var centuryString = token[1]; return { year: parseInt(centuryString, 10) * 100, restDateString: dateString.slice(centuryString.length) }; } // Invalid ISO-formatted year return { year: null }; } function parseDate(dateString, year) { // Invalid ISO-formatted year if (year === null) { return null; } var token; var date; var month; var week; // YYYY if (dateString.length === 0) { date = new Date(0); date.setUTCFullYear(year); return date; } // YYYY-MM token = parseTokenMM.exec(dateString); if (token) { date = new Date(0); month = parseInt(token[1], 10) - 1; date.setUTCFullYear(year, month); return date; } // YYYY-DDD or YYYYDDD token = parseTokenDDD.exec(dateString); if (token) { date = new Date(0); var dayOfYear = parseInt(token[1], 10); date.setUTCFullYear(year, 0, dayOfYear); return date; } // YYYY-MM-DD or YYYYMMDD token = parseTokenMMDD.exec(dateString); if (token) { date = new Date(0); month = parseInt(token[1], 10) - 1; var day = parseInt(token[2], 10); date.setUTCFullYear(year, month, day); return date; } // YYYY-Www or YYYYWww token = parseTokenWww.exec(dateString); if (token) { week = parseInt(token[1], 10) - 1; return dayOfISOYear(year, week); } // YYYY-Www-D or YYYYWwwD token = parseTokenWwwD.exec(dateString); if (token) { week = parseInt(token[1], 10) - 1; var dayOfWeek = parseInt(token[2], 10) - 1; return dayOfISOYear(year, week, dayOfWeek); } // Invalid ISO-formatted date return null; } function parseTime(timeString) { var token; var hours; var minutes; // hh token = parseTokenHH.exec(timeString); if (token) { hours = parseFloat(token[1].replace(',', '.')); return hours % 24 * MILLISECONDS_IN_HOUR; } // hh:mm or hhmm token = parseTokenHHMM.exec(timeString); if (token) { hours = parseInt(token[1], 10); minutes = parseFloat(token[2].replace(',', '.')); return hours % 24 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE; } // hh:mm:ss or hhmmss token = parseTokenHHMMSS.exec(timeString); if (token) { hours = parseInt(token[1], 10); minutes = parseInt(token[2], 10); var seconds = parseFloat(token[3].replace(',', '.')); return hours % 24 * MILLISECONDS_IN_HOUR + minutes * MILLISECONDS_IN_MINUTE + seconds * 1000; } // Invalid ISO-formatted time return null; } function parseTimezone(timezoneString) { var token; var absoluteOffset; // Z token = parseTokenTimezoneZ.exec(timezoneString); if (token) { return 0; } // ±hh token = parseTokenTimezoneHH.exec(timezoneString); if (token) { absoluteOffset = parseInt(token[2], 10) * 60; return token[1] === '+' ? -absoluteOffset : absoluteOffset; } // ±hh:mm or ±hhmm token = parseTokenTimezoneHHMM.exec(timezoneString); if (token) { absoluteOffset = parseInt(token[2], 10) * 60 + parseInt(token[3], 10); return token[1] === '+' ? -absoluteOffset : absoluteOffset; } return 0; } function dayOfISOYear(isoYear) { var week = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var day = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var date = new Date(0); date.setUTCFullYear(isoYear, 0, 4); var fourthOfJanuaryDay = date.getUTCDay() || 7; var diff = week * 7 + day + 1 - fourthOfJanuaryDay; date.setUTCDate(date.getUTCDate() + diff); return date; } function getTimezoneOffsetInMilliseconds(dirtyDate) { var date = new Date(dirtyDate.getTime()); var baseTimezoneOffset = date.getTimezoneOffset(); date.setSeconds(0, 0); var millisecondsPartOfTimezoneOffset = date.getTime() % MILLISECONDS_IN_MINUTE; return baseTimezoneOffset * MILLISECONDS_IN_MINUTE + millisecondsPartOfTimezoneOffset; } //# sourceMappingURL=legacyParse.js.map