Inputmask строится вокруг системы алиасов, которая превращает набор низкоуровневых правил маскирования в переиспользуемые конфигурации. Алиас в данной архитектуре представляет собой именованный объект описания поведения маски ввода, включающий шаблон, правила обработки символов, ограничения, постобработку и дополнительные опции форматирования.
Внутри библиотеки поддерживается глобальный реестр алиасов, представляющий собой словарь, где ключом выступает строковое имя алиаса, а значением — конфигурационный объект. Этот объект может содержать:
Такой подход позволяет отделить декларацию формата данных от логики его применения.
Регистрация нового алиаса осуществляется через расширение реестра. Каждый алиас добавляется как именованный конфигурационный объект:
Ключевой принцип — декларативность. Алиас описывает не действия, а конечное поведение маски.
В типичном сценарии регистрации определяется базовая структура:
Система алиасов поддерживает наследование, что позволяет строить сложные форматы поверх базовых.
При наследовании происходит:
Важно учитывать, что некоторые поля заменяются полностью, а другие сливаются по ключам. Например, definitions обычно объединяются, тогда как mask может быть полностью заменён.
При расширении алиаса используется механизм глубокого слияния:
Это создаёт предсказуемую модель поведения при расширении сложных алиасов, но требует контроля при проектировании цепочек наследования.
Существующий алиас может быть изменён в любой момент. Это используется для:
При переопределении важно учитывать, что уже инициализированные инстансы масок могут не обновляться автоматически, если библиотека не пересоздаёт их при изменении реестра.
При использовании алиаса в инициализации маски происходит следующий процесс:
Таким образом, итоговая маска является результатом цепочки трансформаций, а не статической сущностью.
Система различает два уровня определения:
Локальные алиасы имеют приоритет над глобальными при совпадении имён. Это позволяет изолировать поведение в рамках отдельных модулей приложения.
Алиасы могут строиться через композицию:
Композиция позволяет создавать дерево форматов без дублирования логики.
definitions являются ключевым механизмом расширения языка масок. В контексте алиасов они позволяют:
При объединении алиасов definitions сливаются по ключу, что позволяет безопасно расширять набор допустимых символов без разрушения базовой логики.
Алиасы могут включать набор жизненных циклов обработки ввода:
Эти функции позволяют реализовать сложные сценарии:
Важно, что порядок вызова callback-функций определяется внутренним пайплайном обработки ввода.
Существует несколько устойчивых архитектурных подходов:
1. Базовый алиас + расширения
Используется для форматов с вариативными правилами (телефоны, документы).
2. Семейство алиасов
Набор алиасов с общим префиксом и различными параметрами (например, currency-eur, currency-usd).
3. Контекстные алиасы
Изменяют поведение в зависимости от состояния формы или внешних данных.
4. Декларативные цепочки
Алиасы, которые последовательно накладываются друг на друга через наследование и переопределение.
При наличии конфликтующих определений применяется правило приоритета:
Конфликт definitions разрешается по ключу, тогда как конфликт mask приводит к полной замене шаблона.
Глубокие цепочки наследования могут влиять на скорость инициализации масок. Основные факторы:
Для оптимизации часто используется предварительная сборка алиасов в финальные конфигурации до инициализации UI.
Такие ошибки приводят к трудно поддерживаемым конфигурациям и непредсказуемому поведению масок ввода.