{"version":3,"file":"parseISO-B34t4Z2R.js","sources":["../../../node_modules/date-fns/parseISO.mjs"],"sourcesContent":["import { millisecondsInHour, millisecondsInMinute } from \"./constants.mjs\";\n\n/**\n * The {@link parseISO} function options.\n */\n\n/**\n * @name parseISO\n * @category Common Helpers\n * @summary Parse ISO string\n *\n * @description\n * Parse the given string in ISO 8601 format and return an instance of Date.\n *\n * Function accepts complete ISO 8601 formats as well as partial implementations.\n * ISO 8601: http://en.wikipedia.org/wiki/ISO_8601\n *\n * If the argument isn't a string, the function cannot parse the string or\n * the values are invalid, it returns Invalid Date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param argument - The value to convert\n * @param options - An object with options\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Convert string '2014-02-11T11:30:30' to date:\n * const result = parseISO('2014-02-11T11:30:30')\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert string '+02014101' to date,\n * // if the additional number of digits in the extended year format is 1:\n * const result = parseISO('+02014101', { additionalDigits: 1 })\n * //=> Fri Apr 11 2014 00:00:00\n */\nexport function parseISO(argument, options) {\n const additionalDigits = options?.additionalDigits ?? 2;\n const dateStrings = splitDateString(argument);\n\n let date;\n if (dateStrings.date) {\n const parseYearResult = parseYear(dateStrings.date, additionalDigits);\n date = parseDate(parseYearResult.restDateString, parseYearResult.year);\n }\n\n if (!date || isNaN(date.getTime())) {\n return new Date(NaN);\n }\n\n const timestamp = date.getTime();\n let time = 0;\n let offset;\n\n if (dateStrings.time) {\n time = parseTime(dateStrings.time);\n if (isNaN(time)) {\n return new Date(NaN);\n }\n }\n\n if (dateStrings.timezone) {\n offset = parseTimezone(dateStrings.timezone);\n if (isNaN(offset)) {\n return new Date(NaN);\n }\n } else {\n const dirtyDate = new Date(timestamp + time);\n // JS parsed string assuming it's in UTC timezone\n // but we need it to be parsed in our timezone\n // so we use utc values to build date in our timezone.\n // Year values from 0 to 99 map to the years 1900 to 1999\n // so set year explicitly with setFullYear.\n const result = new Date(0);\n result.setFullYear(\n dirtyDate.getUTCFullYear(),\n dirtyDate.getUTCMonth(),\n dirtyDate.getUTCDate(),\n );\n result.setHours(\n dirtyDate.getUTCHours(),\n dirtyDate.getUTCMinutes(),\n dirtyDate.getUTCSeconds(),\n dirtyDate.getUTCMilliseconds(),\n );\n return result;\n }\n\n return new Date(timestamp + time + offset);\n}\n\nconst patterns = {\n dateTimeDelimiter: /[T ]/,\n timeZoneDelimiter: /[Z ]/i,\n timezone: /([Z+-].*)$/,\n};\n\nconst dateRegex =\n /^-?(?:(\\d{3})|(\\d{2})(?:-?(\\d{2}))?|W(\\d{2})(?:-?(\\d{1}))?|)$/;\nconst timeRegex =\n /^(\\d{2}(?:[.,]\\d*)?)(?::?(\\d{2}(?:[.,]\\d*)?))?(?::?(\\d{2}(?:[.,]\\d*)?))?$/;\nconst timezoneRegex = /^([+-])(\\d{2})(?::?(\\d{2}))?$/;\n\nfunction splitDateString(dateString) {\n const dateStrings = {};\n const array = dateString.split(patterns.dateTimeDelimiter);\n let timeString;\n\n // The regex match should only return at maximum two array elements.\n // [date], [time], or [date, time].\n if (array.length > 2) {\n return dateStrings;\n }\n\n if (/:/.test(array[0])) {\n timeString = array[0];\n } else {\n dateStrings.date = array[0];\n timeString = array[1];\n if (patterns.timeZoneDelimiter.test(dateStrings.date)) {\n dateStrings.date = dateString.split(patterns.timeZoneDelimiter)[0];\n timeString = dateString.substr(\n dateStrings.date.length,\n dateString.length,\n );\n }\n }\n\n if (timeString) {\n const token = patterns.timezone.exec(timeString);\n if (token) {\n dateStrings.time = timeString.replace(token[1], \"\");\n dateStrings.timezone = token[1];\n } else {\n dateStrings.time = timeString;\n }\n }\n\n return dateStrings;\n}\n\nfunction parseYear(dateString, additionalDigits) {\n const regex = new RegExp(\n \"^(?:(\\\\d{4}|[+-]\\\\d{\" +\n (4 + additionalDigits) +\n \"})|(\\\\d{2}|[+-]\\\\d{\" +\n (2 + additionalDigits) +\n \"})$)\",\n );\n\n const captures = dateString.match(regex);\n // Invalid ISO-formatted year\n if (!captures) return { year: NaN, restDateString: \"\" };\n\n const year = captures[1] ? parseInt(captures[1]) : null;\n const century = captures[2] ? parseInt(captures[2]) : null;\n\n // either year or century is null, not both\n return {\n year: century === null ? year : century * 100,\n restDateString: dateString.slice((captures[1] || captures[2]).length),\n };\n}\n\nfunction parseDate(dateString, year) {\n // Invalid ISO-formatted year\n if (year === null) return new Date(NaN);\n\n const captures = dateString.match(dateRegex);\n // Invalid ISO-formatted string\n if (!captures) return new Date(NaN);\n\n const isWeekDate = !!captures[4];\n const dayOfYear = parseDateUnit(captures[1]);\n const month = parseDateUnit(captures[2]) - 1;\n const day = parseDateUnit(captures[3]);\n const week = parseDateUnit(captures[4]);\n const dayOfWeek = parseDateUnit(captures[5]) - 1;\n\n if (isWeekDate) {\n if (!validateWeekDate(year, week, dayOfWeek)) {\n return new Date(NaN);\n }\n return dayOfISOWeekYear(year, week, dayOfWeek);\n } else {\n const date = new Date(0);\n if (\n !validateDate(year, month, day) ||\n !validateDayOfYearDate(year, dayOfYear)\n ) {\n return new Date(NaN);\n }\n date.setUTCFullYear(year, month, Math.max(dayOfYear, day));\n return date;\n }\n}\n\nfunction parseDateUnit(value) {\n return value ? parseInt(value) : 1;\n}\n\nfunction parseTime(timeString) {\n const captures = timeString.match(timeRegex);\n if (!captures) return NaN; // Invalid ISO-formatted time\n\n const hours = parseTimeUnit(captures[1]);\n const minutes = parseTimeUnit(captures[2]);\n const seconds = parseTimeUnit(captures[3]);\n\n if (!validateTime(hours, minutes, seconds)) {\n return NaN;\n }\n\n return (\n hours * millisecondsInHour + minutes * millisecondsInMinute + seconds * 1000\n );\n}\n\nfunction parseTimeUnit(value) {\n return (value && parseFloat(value.replace(\",\", \".\"))) || 0;\n}\n\nfunction parseTimezone(timezoneString) {\n if (timezoneString === \"Z\") return 0;\n\n const captures = timezoneString.match(timezoneRegex);\n if (!captures) return 0;\n\n const sign = captures[1] === \"+\" ? -1 : 1;\n const hours = parseInt(captures[2]);\n const minutes = (captures[3] && parseInt(captures[3])) || 0;\n\n if (!validateTimezone(hours, minutes)) {\n return NaN;\n }\n\n return sign * (hours * millisecondsInHour + minutes * millisecondsInMinute);\n}\n\nfunction dayOfISOWeekYear(isoWeekYear, week, day) {\n const date = new Date(0);\n date.setUTCFullYear(isoWeekYear, 0, 4);\n const fourthOfJanuaryDay = date.getUTCDay() || 7;\n const diff = (week - 1) * 7 + day + 1 - fourthOfJanuaryDay;\n date.setUTCDate(date.getUTCDate() + diff);\n return date;\n}\n\n// Validation functions\n\n// February is null to handle the leap year (using ||)\nconst daysInMonths = [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\nfunction isLeapYearIndex(year) {\n return year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0);\n}\n\nfunction validateDate(year, month, date) {\n return (\n month >= 0 &&\n month <= 11 &&\n date >= 1 &&\n date <= (daysInMonths[month] || (isLeapYearIndex(year) ? 29 : 28))\n );\n}\n\nfunction validateDayOfYearDate(year, dayOfYear) {\n return dayOfYear >= 1 && dayOfYear <= (isLeapYearIndex(year) ? 366 : 365);\n}\n\nfunction validateWeekDate(_year, week, day) {\n return week >= 1 && week <= 53 && day >= 0 && day <= 6;\n}\n\nfunction validateTime(hours, minutes, seconds) {\n if (hours === 24) {\n return minutes === 0 && seconds === 0;\n }\n\n return (\n seconds >= 0 &&\n seconds < 60 &&\n minutes >= 0 &&\n minutes < 60 &&\n hours >= 0 &&\n hours < 25\n );\n}\n\nfunction validateTimezone(_hours, minutes) {\n return minutes >= 0 && minutes <= 59;\n}\n\n// Fallback for modularized imports:\nexport default parseISO;\n"],"names":["parseISO","argument","options","dateStrings","splitDateString","date","parseYearResult","parseYear","parseDate","timestamp","time","offset","parseTime","parseTimezone","dirtyDate","result","patterns","dateRegex","timeRegex","timezoneRegex","dateString","array","timeString","token","additionalDigits","regex","captures","year","century","isWeekDate","dayOfYear","parseDateUnit","month","day","week","dayOfWeek","validateWeekDate","dayOfISOWeekYear","validateDate","validateDayOfYearDate","value","hours","parseTimeUnit","minutes","seconds","validateTime","millisecondsInHour","millisecondsInMinute","timezoneString","sign","validateTimezone","isoWeekYear","fourthOfJanuaryDay","diff","daysInMonths","isLeapYearIndex","_year","_hours"],"mappings":"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","x_google_ignoreList":[0]}