Типы возвращаемых значений

Внутренний API Inputmask и публичные методы библиотеки оперируют ограниченным, но строго определённым набором типов возвращаемых значений. Это сделано для унификации поведения масок в разных окружениях (браузер, jQuery, vanilla JS, framework-обёртки) и для предсказуемой интеграции с формами, валидацией и внешними обработчиками.

Основной поток данных в Inputmask связан с преобразованием пользовательского ввода в структурированные формы представления: отображаемое значение, «сырое» значение без маски, метаданные маски, а также результаты проверок. Каждый из этих потоков возвращает данные в строго определённых типах, которые важно различать при построении логики обработки ввода.


Наиболее часто используемый тип возвращаемого значения в Inputmask — строка. Почти все методы, связанные с извлечением данных из поля ввода, возвращают именно строку, независимо от того, содержит ли она числовые данные, даты или смешанные форматы.

Ключевые методы, возвращающие строки:

  • inputmask.unmaskedvalue()
  • inputmask.getmaskedvalue()
  • inputmask.format(value)
  • inputmask.remove() (в некоторых режимах возвращает предыдущее значение как строку)

Строковое значение используется в трёх основных вариантах:

  1. Форматированное значение (masked value) Представляет собой текст, уже приведённый к маске. Например:

    +7 (999) 123-45-67
  2. Неформатированное значение (unmasked value) Возвращает только значимые символы без маскирующих элементов:

    79991234567
  3. Частично заполненные значения При неполном вводе возвращается строка с заполненными и незаполненными позициями, зависящая от конфигурации clearIncomplete.

Строковый тип выбран как основной, потому что DOM input всегда оперирует строками, а Inputmask лишь трансформирует их представление.


Булевы значения и результаты валидации

Второй важный тип возвращаемых значений — boolean. Он используется в методах проверки корректности введённых данных.

Основные методы:

  • inputmask.isValid(value)
  • inputmask.isComplete()
  • inputmask.isValidBuffer() (внутренние версии)

Булев результат отражает состояние соответствия введённого значения маске.

Типичные сценарии:

  • true — значение полностью соответствует маске и правилам
  • false — есть нарушение структуры или обязательных сегментов

Особенность Inputmask заключается в том, что валидность определяется не только форматом, но и состоянием заполненности. Например, частично введённый номер телефона может быть формально корректным по символам, но не считаться «complete».


Объектные возвращаемые значения

Inputmask активно использует объекты для передачи сложных структур данных, особенно при работе с конфигурацией, метаданными и внутренним состоянием маски.

Конфигурационные объекты

Методы инициализации и настройки возвращают объект Inputmask или расширенный экземпляр:

  • Inputmask(options)
  • element.inputmask

Возвращаемый объект содержит:

  • ссылки на DOM-элемент
  • конфигурацию (opts)
  • внутренний maskset
  • методы управления (setValue, remove, refresh)

Метаданные маски

Некоторые методы возвращают структурированные объекты:

  • inputmask.getmetadata()

Пример структуры:

{
  mask: "+7 (999) 999-99-99",
  definitions: { "9": { validator: "[0-9]" } },
  placeholder: "_"
}

Эти данные используются для анализа маски, генерации UI-подсказок и динамической перестройки поведения.

Внутреннее состояние maskset

Хотя напрямую редко используется в прикладном коде, maskset представляет собой сложный объект, описывающий:

  • допустимые символы
  • позиции маски
  • правила переходов
  • группы и повторения

Он всегда возвращается как объект, но его структура считается внутренней и может изменяться между версиями.


Возвращаемые значения методов манипуляции DOM

Методы, которые изменяют состояние поля ввода, часто возвращают undefined или сам экземпляр Inputmask для поддержки цепочек вызовов.

Примеры:

  • inputmask.setValue(value)undefined или Inputmask
  • inputmask.remove()undefined
  • $(selector).inputmask(...) → jQuery-цепочка (jQuery object)

Это поведение соответствует принципу «command vs query separation»: операции изменения состояния не обязаны возвращать данные.


Числовые значения и их косвенное возвращение

Inputmask сам по себе редко возвращает числа напрямую, поскольку работает на уровне строк DOM. Однако числовые значения могут появляться в двух сценариях:

  1. Преобразование unmasked value в число вручную:

    Number(inputmask.unmaskedvalue())
  2. Использование alias’ов (numeric, currency), где внутренние расчёты ведутся в числовом виде, но наружу всё равно отдаётся строка.

Таким образом, числовой тип не является нативным выходным типом API, а возникает как результат внешней интерпретации.


Null и пустые значения

Некоторые методы могут возвращать null или эквивалент пустого значения в зависимости от конфигурации:

  • пустой input при clearMaskOnLostFocus
  • отключённая маска
  • состояние до инициализации

На практике Inputmask предпочитает возвращать пустую строку "", а не null, чтобы сохранить совместимость с DOM API.


Массивоподобные структуры и буферы

Внутренне Inputmask использует буферы (buffer), которые представляют собой массив символов маски. Однако наружу они могут возвращаться в двух формах:

  • строка (основной вариант)
  • массив символов (внутренние режимы и debug-инструменты)

Буфер описывает текущее состояние ввода:

["+","7"," ","(","9","9","9", ...]

Этот формат используется для пошаговой сборки значения и обработки каретки.


Возвращаемые значения событийных обработчиков

Inputmask поддерживает множество callback-функций, и их возвращаемые значения обычно игнорируются библиотекой.

Примеры:

  • oncomplete
  • onincomplete
  • oncleared
  • onBeforeMask

Тип возвращаемого значения здесь не фиксирован:

  • undefined — наиболее частый случай
  • boolean — иногда используется для отмены операции (например, в onBeforeMask)
  • string — может использоваться для трансформации входа

Особенно важно поведение функций-перехватчиков: если callback возвращает строку, она может быть использована как новое значение для маски.


Возврат экземпляра Inputmask и цепочки вызовов

При инициализации Inputmask часто возвращается сам экземпляр, что позволяет строить цепочки:

  • установка маски
  • последующие вызовы методов
  • модификация конфигурации

Тип возвращаемого значения в этом случае — объект класса Inputmask, содержащий весь публичный API.

Это обеспечивает единый интерфейс управления без необходимости повторного обращения к DOM-элементу.


Итоговая типизация возвращаемых значений

В рамках всей библиотеки можно выделить устойчивую систему типов:

  • string — основной тип данных ввода и вывода
  • boolean — результаты проверок и валидации
  • object — конфигурации, maskset, экземпляры
  • undefined — операции изменения состояния
  • array (ограниченно) — буферы и внутренние структуры
  • number (косвенно) — через внешние преобразования

Эта типизация формирует предсказуемую модель поведения, в которой Inputmask всегда остаётся на уровне строкового представления данных, а более сложные типы используются только для управления и внутренней логики обработки маски.