"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isInputDateSupported = exports.calculateMonth = exports.changeDateFormat = exports.parseDate = void 0;
var get_time_1 = __importDefault(require("date-fns/get_time"));
var start_of_day_1 = __importDefault(require("date-fns/start_of_day"));
var format_1 = __importDefault(require("date-fns/format"));
var is_valid_1 = __importDefault(require("date-fns/is_valid"));
var date_utils_1 = require("../lib/date-utils");
/**
 * Разбирает введенную пользователем дату используя заданный формат.
 *
 * @param value Дата
 * @param format Ожидаемый формат даты
 */
function parseDate(value, format) {
    var valueTrimmed = value ? value.replace(/~+$/, '') : '';
    var result = null;
    // Проверяем, чтобы пользователь ввёл полную строку даты без пробелов.
    if (valueTrimmed.length === format.length && !valueTrimmed.match(/\s/)) {
        var valueDate = date_utils_1.parse(valueTrimmed, format);
        if (is_valid_1.default(valueDate)) {
            result = valueDate.valueOf();
        }
    }
    return result;
}
exports.parseDate = parseDate;
/**
 * Изменяет формат даты с одного на другой.
 *
 * @param value Оригинальная строка с датой
 * @param inFormat Входной формат даты
 * @param outFormat Формат возвращаемой даты
 */
function changeDateFormat(value, inFormat, outFormat) {
    var date = parseDate(value, inFormat);
    if (date) {
        return format_1.default(date, outFormat);
    }
    return value;
}
exports.changeDateFormat = changeDateFormat;
/**
 * Возвращает дату с корректным месяцем.
 *
 * @param value Строка даты
 * @param format Формат строки с датой
 * @param earlierLimit Левая граница дат
 * @param laterLimit Правая граница дат
 */
function calculateMonth(value, format, earlierLimit, laterLimit) {
    var newValue = value;
    if (typeof newValue === 'string') {
        newValue = parseDate(newValue, format);
    }
    if (!newValue || newValue !== newValue) { // eslint-disable-line no-self-compare
        newValue = Date.now();
    }
    else {
        newValue = get_time_1.default(newValue);
    }
    if (earlierLimit && earlierLimit > newValue) {
        return start_of_day_1.default(earlierLimit).valueOf();
    }
    if (laterLimit && laterLimit < newValue) {
        return start_of_day_1.default(laterLimit).valueOf();
    }
    return start_of_day_1.default(newValue).valueOf();
}
exports.calculateMonth = calculateMonth;
/**
 * Возвращает `true`, если поддерживается `input[type="date"]`
 */
function isInputDateSupported() {
    var input = document.createElement('input');
    var value = 'a';
    input.setAttribute('type', 'date');
    input.setAttribute('value', value);
    return input.value !== value;
}
exports.isInputDateSupported = isInputDateSupported;

//# sourceMappingURL=utils.js.map
