adaptform 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/fields/Field.ts","../src/core/fields/ArrayField.ts","../src/core/fields/ArrayFormField.ts","../src/core/Form.ts","../src/core/plugins/FieldPlugin.ts","../src/core/plugins/MaskPlugin.ts","../src/core/types/FieldType.ts","../src/core/types/StringType.ts","../src/core/types/NumberType.ts","../src/core/types/DecimalType.ts","../src/core/types/BooleanType.ts","../src/core/types/DateType.ts"],"names":["form"],"mappings":"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","file":"index.cjs","sourcesContent":["import {FieldOptions} from \"@core/options\";\nimport {FieldType} from \"@core/types/FieldType\";\nimport {Form} from \"@core/Form\";\ntype FieldTypeConstructor<T, O extends FieldOptions = FieldOptions> = new (options: O) => FieldType<T, O>\n\nexport class Field<T = any, O extends FieldOptions = FieldOptions> {\n protected _rawValue: any = null\n protected _valueClear: T | null = null\n protected filed_type: FieldType<T, O>\n protected defaultValue: T | null\n protected _errors: string[] = []\n\n isValid: boolean | null = null\n isTouched: boolean = false\n\n constructor(\n TypeConstructor: FieldTypeConstructor<T, O>,\n defaultValue?: T | null,\n options?: O | null,\n ) {\n this.filed_type = new TypeConstructor(options ?? {} as O)\n this.defaultValue = defaultValue ?? null\n\n for (const plugin of this.options.plugins ?? []) {\n plugin.init?.(this)\n }\n\n if (defaultValue !== undefined && defaultValue !== null) {\n this.rawValue = defaultValue\n } else {\n this._rawValue = null\n this._valueClear = null\n this.isValid = null\n }\n }\n\n // ========== Геттеры/сеттеры ==========\n\n protected get plugins() {\n return [...(this.options.plugins ?? [])].sort((a, b) => {\n return (a.pluginOptions?.priority ?? 0) - (b.pluginOptions?.priority ?? 0)\n })\n }\n\n get options() {\n return this.filed_type.options\n }\n\n set options(options: O) {\n let cur_options = this.filed_type.options\n this.filed_type.options = Object.assign(cur_options, options)\n }\n\n get rawValue(): T | null {\n return this._rawValue\n }\n\n set rawValue(input: any) {\n let rawValue = input\n\n for (const plugin of this.plugins) {\n if (plugin.toRawValue) {\n rawValue = plugin.toRawValue(rawValue, this)\n }\n }\n\n let valueClear = rawValue\n\n for (const plugin of this.plugins) {\n if (plugin.toValueClear) {\n valueClear = plugin.toValueClear(valueClear, this)\n }\n }\n\n this._rawValue = rawValue\n this._valueClear = this.filed_type.cast(valueClear)\n\n this._errors = []\n this.isTouched = true\n this.checkAndSetValid()\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n this.isValid = message ? false : null\n }\n\n get valueClear(): any {\n return this._valueClear\n }\n\n // ========== Валидация ==========\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n // 1. Проверка на пустоту и обязательность\n if (this.isEmpty) {\n if (this.isRequired(form)) {\n this._errors.push(this.options.messages?.isRequired ?? 'Поле обязательно для заполнения')\n return false\n }\n return true\n }\n\n // 2. Проверка, что значение привелось к нужному типу\n if (this._valueClear === null) {\n this._errors.push(\n this.options.messages?.type ??\n `Ожидается ${this.filed_type.getTypeName()}`\n )\n return false\n }\n\n // 3. Специфичная валидация типа\n const typeErrors = this.filed_type.validate(this._valueClear, form)\n if (typeErrors.length > 0) {\n this._errors.push(...typeErrors)\n return false\n }\n\n // 4. Кастомная валидация\n if (this.options.validate) {\n const result = this.options.validate(this._valueClear, form)\n if (result === false) {\n this._errors.push(this.options.messages?.validate ?? 'Значение не прошло валидацию')\n return false\n }\n if (typeof result === 'string') {\n this._errors.push(result)\n return false\n }\n }\n\n return true\n }\n\n checkAndSetValid(form?: Form): boolean {\n this.isValid = this.checkValid(form)\n return this.isValid\n }\n\n get isEmpty(): boolean {\n let isEmpty = false\n if (this._rawValue === null || this._rawValue === undefined) isEmpty = true\n else if (this._rawValue === '') isEmpty = true\n else if (Array.isArray(this._rawValue) && this._rawValue.length === 0) isEmpty = true\n return isEmpty\n }\n\n // ========== Вспомогательные методы ==========\n\n reset(): void {\n if (this.defaultValue !== null && this.defaultValue !== undefined) {\n this.rawValue = this.defaultValue\n this.isValid = true\n } else {\n this._rawValue = null\n this._valueClear = null\n this.isValid = null\n }\n this._errors = []\n this.isTouched = false\n }\n}","import {ArrayFieldOptions} from \"@core/options\";\nimport {Field} from \"@core/fields/Field\";\nimport {Form} from \"@core/Form\";\n\nexport class ArrayField<T = any> {\n protected options: ArrayFieldOptions\n protected _items: Field<T>[] = []\n protected _errors: string[] = []\n\n isTouched: boolean = false\n\n constructor(\n protected factory: (value?: T) => Field<T>,\n options: ArrayFieldOptions = {},\n initial: T[] = []\n ) {\n this.options = {\n isRequired: true,\n messages: {},\n ...options\n } as ArrayFieldOptions\n this._items = initial.map(v => this.factory(v))\n }\n\n // ===== value =====\n\n set itemsValue(items: T[]) {\n this.clear()\n\n for (const i of items) {\n this.add(i, false)\n }\n\n this.checkValid()\n }\n\n get itemsValue(): T[] {\n return this._items.map(i => i.valueClear)\n }\n\n get items(): Field<T>[] {\n return this._items\n }\n\n // ===== actions =====\n\n add(value?: T, force_check?: boolean): Field<T> {\n const field = this.factory(value)\n this.isTouched = true\n this._items.push(field)\n\n if (force_check) this.checkValid()\n\n return field\n }\n\n remove(index: number): void {\n this._items.splice(index, 1)\n this.checkValid()\n }\n\n clear(): void {\n this._items = []\n this.checkValid()\n }\n\n // ===== validation =====\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n if (this.isRequired(form) && this._items.length === 0) {\n this._errors.push(\n this.options.messages?.isRequired ??\n \"Добавьте хотя бы один элемент\"\n )\n return false\n }\n\n if (this.options.minItems != null && this._items.length < this.options.minItems) {\n this._errors.push(\n this.options.messages?.minItems ??\n `Значений должно быть не меньше ${this.options.minItems}`\n )\n return false\n }\n\n if (this.options.maxItems != null && this._items.length > this.options.maxItems) {\n this._errors.push(\n this.options.messages?.maxItems ??\n `Значений должно быть не больше ${this.options.maxItems}`\n )\n return false\n }\n\n let valid = true\n\n for (const field of this._items) {\n const ok = field.checkAndSetValid(form)\n if (!ok) valid = false\n }\n\n if (this.options.validate) {\n const result = this.options.validate(this._items, form)\n\n if (result === false) {\n this._errors.push(\n this.options.messages?.validate ?? \"Ошибка валидации\"\n )\n return false\n }\n\n if (typeof result === \"string\") {\n this._errors.push(result)\n return false\n }\n }\n\n return valid && this._errors.length === 0\n }\n\n checkAndSetValid(form?: Form): boolean {\n return this.checkValid(form)\n }\n\n get isValid(): boolean {\n return (\n this._errors.length === 0 &&\n this._items.every(i => i.isValid === true)\n )\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n reset(): void {\n this._items.forEach(i => i.reset())\n this._errors = []\n this.isTouched = false\n }\n}","import {Form} from \"@core/Form\";\nimport {ArrayFormFieldOptions} from \"@core/options\";\n\nexport class ArrayFormField<T extends Form = Form> {\n private _forms: T[] = []\n private _errors: string[] = []\n\n isTouched: boolean = false\n\n constructor(\n private FormConstructor: new () => T,\n private options: ArrayFormFieldOptions = {},\n initial: any[] = []\n ) {\n this._forms = initial.map(data => {\n const form = new this.FormConstructor()\n form.fields = data\n return form\n })\n }\n\n\n // ===== value =====\n\n set forms(forms: any[]) {\n this.clear()\n\n for (const f of forms) {\n this.add(f, false)\n }\n\n this.checkValid()\n }\n\n get forms(): Form[] {\n return this._forms\n }\n\n get formsFieldsValue(): any[] {\n return this._forms.map(i => i.fieldsValue)\n }\n\n // ===== actions =====\n\n add(data?: any, force_check?: boolean): T {\n const form = new this.FormConstructor()\n\n if (data) form.fields = data\n\n this.isTouched = true\n this._forms.push(form)\n\n if (force_check) this.checkValid()\n\n return form\n }\n\n remove(index: number): void {\n this._forms.splice(index, 1)\n this.checkValid()\n }\n\n clear(): void {\n this._forms = []\n this.checkValid()\n }\n\n reset(): void {\n this._forms.forEach(f => f.reset())\n this._errors = []\n this.isTouched = false\n }\n\n // ===== validation =====\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n if (this.isRequired(form) && this.forms.length === 0) {\n this._errors.push(\n this.options.messages?.isRequired ??\n \"Добавьте хотя бы один элемент\"\n )\n return false\n }\n\n if (this.options.minForms != null && this._forms.length < this.options.minForms) {\n this._errors.push(\n this.options.messages?.minForms ??\n `Значений должно быть не меньше ${this.options.minForms}`\n )\n return false\n }\n\n if (this.options.maxForms != null && this._forms.length > this.options.maxForms) {\n this._errors.push(\n this.options.messages?.maxForms ??\n `Значений должно быть не больше ${this.options.maxForms}`\n )\n return false\n }\n\n let valid = true\n\n for (const form of this.forms) {\n const ok = form.checkValid(form)\n if (!ok) valid = false\n }\n\n if (this.options.validate) {\n const result = this.options.validate(this.forms, form)\n\n if (result === false) {\n this._errors.push(\n this.options.messages?.validate ??\n \"Ошибка валидации\"\n )\n return false\n }\n\n if (typeof result === \"string\") {\n this._errors.push(result)\n return false\n }\n }\n\n return valid && this._errors.length === 0\n }\n\n checkAndSetValid(form?: Form): boolean {\n return this.checkValid(form)\n }\n\n get isValid(): boolean {\n return (\n this._errors.length === 0 &&\n this._forms.every(i => i.checkValid() === true)\n )\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n }\n}","import {Field} from \"@core/fields/Field\";\nimport {ArrayField} from \"@core/fields/ArrayField\";\nimport {ArrayFormField} from \"@core/fields/ArrayFormField\";\n\nexport abstract class Form {\n private _globalErrors: Record<string, string> = {}\n\n protected get _fields(): Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>> {\n const fields: Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>> = {}\n\n for (const key of Object.keys(this)) {\n const property = (this as any)[key]\n if (property instanceof Field || property instanceof ArrayField || property instanceof ArrayFormField) {\n fields[key] = property\n }\n }\n\n return fields\n }\n\n checkValid(form?: this): boolean { // ✅ Form → this\n let isFormValid = true\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n const field = fields[key]\n if (!field.checkAndSetValid(form ?? this)) {\n isFormValid = false\n }\n }\n\n return isFormValid\n }\n\n get fieldsValue(): Record<string, any> {\n const data: Record<string, any> = {}\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n let valueClear = null\n const field = fields[key]\n if (field instanceof Field) valueClear = field.valueClear\n else if (field instanceof ArrayField) valueClear = field.itemsValue\n else if (field instanceof ArrayFormField) valueClear = field.formsFieldsValue\n else console.error(`Invalid field \"${key}\" type`)\n data[key] = valueClear\n }\n\n return data\n }\n\n set fields(data: Record<string, any>) {\n const fields = this._fields\n\n for (const key of Object.keys(data)) {\n const field = fields[key]\n if (field) {\n if (field instanceof Field) field.rawValue = data[key]\n else if (field instanceof ArrayField) field.itemsValue = data[key]\n else if (field instanceof ArrayFormField) field.forms = data[key]\n else console.error(`Invalid field \"${key}\" type`)\n }\n }\n }\n\n get allErrors(): Record<string, string[]> {\n const errors: Record<string, string[]> = {}\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n const fieldErrors = fields[key].errors\n if (fieldErrors.length > 0) {\n errors[key] = fieldErrors\n }\n }\n\n // Добавляем глобальные ошибки\n for (const key of Object.keys(this._globalErrors)) {\n if (!errors[key]) {\n errors[key] = []\n }\n errors[key].push(this._globalErrors[key])\n }\n\n return errors\n }\n\n get globalErrors(): Record<string, string> {\n return {...this._globalErrors}\n }\n\n set errors(errors: Record<string, string>) {\n const fields = this._fields\n this._globalErrors = {}\n\n for (const key of Object.keys(errors)) {\n const keys = key.split('.')\n const cleanKey = keys.length > 1 ? keys[1] : key\n\n if (cleanKey in fields && fields[cleanKey]) {\n fields[cleanKey].error = errors[key]\n } else {\n this._globalErrors[key] = errors[key]\n }\n }\n }\n\n setGlobalError(key: string, message: string): void {\n this._globalErrors[key] = message\n }\n\n clearGlobalErrors(): void {\n this._globalErrors = {}\n }\n\n reset(): void {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n fields[key].reset()\n }\n this._globalErrors = {}\n }\n\n get isTouched(): boolean {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n if (fields[key].isTouched) return true\n }\n return false\n }\n\n // Проверить, валидна ли форма\n get isValid(): boolean {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n if (fields[key].isValid !== true) return false\n }\n return Object.keys(this._globalErrors).length === 0\n }\n\n // Получить все значения в виде FormData (для отправки на сервер)\n toFormData(): FormData {\n const formData = new FormData()\n const data = this.fieldsValue\n\n for (const [key, value] of Object.entries(data)) {\n if (value instanceof Date) {\n formData.append(key, value.toISOString())\n } else if (value !== null && value !== undefined) {\n formData.append(key, String(value))\n }\n }\n\n return formData\n }\n\n // Получить все значения в виде JSON\n toJSON(): Record<string, any> {\n const data = this.fieldsValue\n\n // Преобразуем даты в строки для JSON\n const json: Record<string, any> = {}\n for (const [key, value] of Object.entries(data)) {\n if (value instanceof Date) {\n json[key] = value.toISOString()\n } else {\n json[key] = value\n }\n }\n\n return json\n }\n}","import {PluginOptions} from \"@core/options\";\nimport {Field} from \"@core/fields/Field\";\n\nexport interface FieldPlugin<T = any> {\n pluginOptions?: PluginOptions\n\n init?(field: Field<T>): void\n\n toRawValue?(value: any, field: Field<T>): any\n\n toValueClear?(value: any, field: Field<T>): any\n}\n\nexport abstract class BasePlugin<T = any> implements FieldPlugin<T> {\n pluginOptions: PluginOptions\n\n constructor(pluginOptions: PluginOptions = {}) {\n this.pluginOptions = {\n priority: 0,\n ...pluginOptions\n }\n }\n}","import {BasePlugin} from \"@core/plugins/FieldPlugin\";\nimport {MaskPluginOptions, PluginOptions} from \"@core/options\";\nimport {Field} from \"@core/fields\";\n\ninterface MaskPart {\n char: string // символ для отображения\n isPlaceholder: boolean // true если это заполнитель (можно вводить)\n isEscaped: boolean // true если символ экранирован (попадает в rawValue)\n replacementValue?: string // фиксированная замена\n allowedChars?: string // разрешенные символы (вместо сложного паттерна)\n transformOnMatch?: string // во что преобразовать при совпадении\n transformOnMismatch?: string // во что преобразовать при несовпадении\n defaultValue?: string\n pushToNext?: boolean // если true, отправить символ в следующий placeholder\n}\n\nexport class MaskPlugin extends BasePlugin {\n private config: MaskPluginOptions\n private maskParts: MaskPart[] = []\n\n constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions) {\n super(pluginOptions)\n this.config = config\n }\n\n init(field: Field<any>): void {\n this.parseMask()\n }\n\n toRawValue(value: string, field: Field): string {\n return this.applyMask(value)\n }\n\n toValueClear(value: string, field: Field): string {\n return this.removeMask(value)\n }\n\n private parseMask(): void {\n this.maskParts = []\n let i = 0\n let escaped = false\n\n while (i < this.config.maskFormat.length) {\n const char = this.config.maskFormat[i]\n\n // Проверяем на экранирование\n if (char === '/' && !escaped) {\n escaped = true\n i++\n continue\n }\n\n if (char === this.config.maskPlaceholder &&\n i + 1 < this.config.maskFormat.length &&\n this.config.maskFormat[i + 1] === '{' &&\n !escaped) {\n\n const openBracket = i + 1\n const closeBracket = this.config.maskFormat.indexOf('}', openBracket)\n\n if (closeBracket !== -1 && closeBracket > openBracket + 1) {\n const configString = this.config.maskFormat.substring(openBracket + 1, closeBracket).trim()\n\n if (configString.includes('>')) {\n const parts = configString.split('>')\n const allowedChars = parts[0].trim()\n const replacementOnMatch = parts[1]?.trim() || ''\n\n // Проверяем на >> (pushToNext)\n let replacementOnMismatch = parts[2]?.trim() || ''\n let pushToNext = false\n\n if (parts.length > 2 && parts[2] === '' && parts[3] !== undefined) {\n // Синтаксис: allowedChars > match > > pushValue\n pushToNext = true\n replacementOnMismatch = parts[3]?.trim() || ''\n } else if (replacementOnMismatch === '' && parts.length > 3) {\n // Синтаксис: allowedChars > match > > pushValue\n pushToNext = true\n replacementOnMismatch = parts[3]?.trim() || ''\n }\n\n this.maskParts.push({\n char: replacementOnMatch || this.config.maskPlaceholder,\n isPlaceholder: true,\n isEscaped: escaped,\n allowedChars: allowedChars,\n transformOnMatch: replacementOnMatch,\n transformOnMismatch: replacementOnMismatch,\n defaultValue: replacementOnMatch,\n pushToNext: pushToNext\n })\n } else {\n this.maskParts.push({\n char: configString,\n isPlaceholder: true,\n isEscaped: escaped,\n replacementValue: configString,\n defaultValue: configString\n })\n }\n\n escaped = false\n i = closeBracket + 1\n continue\n }\n }\n\n const isPlaceholder = char === this.config.maskPlaceholder\n this.maskParts.push({\n char: char,\n isPlaceholder: isPlaceholder,\n isEscaped: escaped\n })\n\n escaped = false\n i++\n }\n }\n\n private applyMask(value: string): string {\n if (typeof value !== 'string' || !value) return ''\n\n let result = ''\n let inputIndex = 0\n\n for (let maskIndex = 0; maskIndex < this.maskParts.length; maskIndex++) {\n const part = this.maskParts[maskIndex]\n\n if (inputIndex >= value.length) {\n if (part.replacementValue) {\n result += part.replacementValue\n continue\n }\n if (part.transformOnMatch) {\n result += part.transformOnMatch\n continue\n }\n break\n }\n\n const inputChar = value[inputIndex]\n\n if (part.isPlaceholder) {\n if (part.replacementValue) {\n result += part.replacementValue\n inputIndex++\n } else if (part.allowedChars) {\n if (part.allowedChars.includes(inputChar)) {\n // Символ разрешен - заменяем на matchReplacement\n result += part.transformOnMatch || inputChar\n inputIndex++\n } else if (part.pushToNext) {\n // Символ не разрешен, но pushToNext = true\n // Вставляем mismatchReplacement, а символ идет дальше\n result += part.transformOnMismatch || this.config.maskPlaceholder\n // НЕ сдвигаем inputIndex - символ обработается в следующем placeholder\n } else if (part.transformOnMismatch !== undefined) {\n // Обычная замена при несовпадении\n result += part.transformOnMismatch || this.config.maskPlaceholder\n inputIndex++\n } else {\n result += this.config.maskPlaceholder\n }\n } else {\n // Обычный placeholder\n if (this.config.digitPattern.test(inputChar)) {\n result += inputChar\n inputIndex++\n } else if (inputChar === this.config.maskPlaceholder) {\n result += this.config.maskPlaceholder\n inputIndex++\n } else {\n inputIndex++\n maskIndex--\n }\n }\n } else {\n // Литерал\n if (inputChar === part.char) {\n result += part.char\n inputIndex++\n } else if (this.config.digitPattern.test(inputChar)) {\n result += part.char\n } else {\n result += part.char\n }\n }\n }\n\n return result\n }\n\n private removeMask(value: string): string {\n if (typeof value !== 'string' || !value) return ''\n\n let result = ''\n let inputIndex = 0\n\n for (let maskIndex = 0; maskIndex < this.maskParts.length; maskIndex++) {\n const part = this.maskParts[maskIndex]\n\n if (inputIndex >= value.length) {\n if (part.replacementValue) {\n result += part.replacementValue\n } else if (part.transformOnMatch) {\n result += part.transformOnMatch\n }\n continue\n }\n\n const inputChar = value[inputIndex]\n\n if (part.isPlaceholder) {\n if (part.replacementValue) {\n result += part.replacementValue\n } else if (part.allowedChars) {\n if (part.allowedChars.includes(inputChar)) {\n result += part.transformOnMatch || inputChar\n } else if (part.pushToNext) {\n // Вставляем mismatchReplacement, символ идет дальше\n result += part.transformOnMismatch || ''\n // НЕ сдвигаем inputIndex\n continue\n } else {\n result += part.transformOnMatch || ''\n }\n } else {\n if (inputChar !== this.config.maskPlaceholder &&\n this.config.digitPattern.test(inputChar)) {\n result += inputChar\n }\n }\n inputIndex++\n } else if (part.isEscaped) {\n result += part.char\n if (inputChar === part.char) inputIndex++\n } else {\n if (inputChar === part.char) inputIndex++\n }\n }\n\n return result\n }\n}","import {FieldOptions} from \"@core/options\";\nimport {Form} from \"@core/Form\";\n\nexport abstract class FieldType<T, O extends FieldOptions = FieldOptions> {\n options: O\n\n constructor(options: O) {\n this.options = {\n isRequired: true,\n messages: {},\n ...options\n } as O\n }\n\n abstract cast(rawValue: any): T | null\n\n abstract validate(value: T, form?: Form): string[]\n\n abstract getTypeName(): string\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {StringOptions} from \"@core/options\";\n\nexport class StringType extends FieldType<string, StringOptions> {\n cast(rawValue: any): string | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'string') return rawValue\n return String(rawValue)\n }\n\n validate(value: string): string[] {\n const errors: string[] = []\n\n if (this.options.minLength != null && value.length < this.options.minLength) {\n errors.push(\n this.options.messages?.minLength ??\n `Минимальная длина ${this.options.minLength} символов`\n )\n }\n\n if (this.options.maxLength != null && value.length > this.options.maxLength) {\n errors.push(\n this.options.messages?.maxLength ??\n `Максимальная длина ${this.options.maxLength} символов`\n )\n }\n\n if (this.options.pattern != null && !this.options.pattern.test(value)) {\n errors.push(this.options.messages?.pattern ?? 'Неверный формат')\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'строка'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {NumberOptions} from \"@core/options\";\n\nexport class NumberType extends FieldType<number, NumberOptions> {\n cast(rawValue: any): number | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'number' && !isNaN(rawValue)) return rawValue\n\n if (typeof rawValue === 'string') {\n const num = Number(rawValue)\n return isNaN(num) ? null : num\n }\n\n return null\n }\n\n validate(value: number): string[] {\n const errors: string[] = []\n\n if (!Number.isInteger(value)) {\n errors.push(this.options.messages?.invalid ?? 'Значение должно быть целым числом')\n }\n\n if (this.options.gt != null && value <= this.options.gt) {\n errors.push(\n this.options.messages?.gt ??\n `Значение должно быть больше ${this.options.gt}`\n )\n }\n\n if (this.options.ge != null && value < this.options.ge) {\n errors.push(\n this.options.messages?.ge ??\n `Значение должно быть не менее ${this.options.ge}`\n )\n }\n\n if (this.options.lt != null && value >= this.options.lt) {\n errors.push(\n this.options.messages?.lt ??\n `Значение должно быть меньше ${this.options.lt}`\n )\n }\n\n if (this.options.le != null && value > this.options.le) {\n errors.push(\n this.options.messages?.le ??\n `Значение должно быть не более ${this.options.le}`\n )\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'число'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {DecimalOptions} from \"@core/options\";\n\nexport class DecimalType extends FieldType<number | string, DecimalOptions> {\n constructor(options: DecimalOptions = {} as DecimalOptions) {\n super({\n decimalPlaces: 2,\n maxDigits: 8,\n ...options\n } as DecimalOptions)\n }\n\n cast(rawValue: any): number | string | null {\n if (rawValue === null || rawValue === undefined) return null\n\n if (typeof rawValue === 'string') {\n return this.castString(rawValue)\n }\n\n if (typeof rawValue === 'number' && !isNaN(rawValue)) {\n return rawValue\n }\n\n return null\n }\n\n private castString(value: string): string | null {\n const trimmed = value.trim()\n\n if (!trimmed) return null\n\n // Заменяем запятую на точку\n const normalized = trimmed.replace(',', '.')\n\n // Проверяем, что строка похожа на число\n if (!this.isValidNumberString(normalized)) {\n return null\n }\n\n return normalized\n }\n\n validate(value: number | string): string[] {\n const errors: string[] = []\n value = typeof value === 'number' ? this.numberToString(value) : value\n\n // Проверяем, что строка соответствует формату числа\n if (!this.isValidNumberString(value)) {\n errors.push(this.options.messages?.invalid ?? 'Пример: 1.00')\n return errors\n }\n\n const maxDigits = this.options.maxDigits || 8\n const decimalPlaces = this.options.decimalPlaces || 2\n const maxIntDigits = maxDigits - decimalPlaces\n\n // Разбираем строку на части\n const isNegative = value.startsWith('-')\n const normalizedValue = isNegative ? value.substring(1) : value\n const parts = normalizedValue.split('.')\n const intPart = parts[0]\n const decPart = parts.length > 1 ? parts[1] : ''\n\n // Проверка на точку в конце (пользователь ещё вводит)\n if (normalizedValue.endsWith('.')) {\n // Проверяем только целую часть\n if (intPart.length > maxIntDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков перед запятой ${maxIntDigits}`\n )\n }\n return errors\n }\n\n // Проверка целой части\n if (intPart.length === 0) {\n errors.push(this.options.messages?.invalid ?? 'Пример: 1.00')\n return errors\n }\n\n if (intPart.length > maxIntDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков перед запятой ${maxIntDigits}`\n )\n }\n\n // Проверка десятичной части\n if (parts.length === 2) {\n // Общее количество знаков\n if (intPart.length + decPart.length > maxDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков ${maxDigits}`\n )\n }\n\n // Количество знаков после запятой\n if (decPart.length === 0) {\n errors.push(\n this.options.messages?.invalid ??\n 'После точки должен быть минимум 1 знак'\n )\n } else if (decPart.length > decimalPlaces) {\n errors.push(\n this.options.messages?.decimalPlaces ??\n `Максимальное количество знаков после запятой ${decimalPlaces}`\n )\n }\n }\n\n // Если есть ошибки формата — дальше не проверяем\n if (errors.length > 0) return errors\n\n // Проверка min/max (только если значение не в процессе ввода)\n if (!value.endsWith('.')) {\n const numValue = parseFloat(value)\n\n if (!isNaN(numValue)) {\n if (this.options.gt != null && numValue <= this.options.gt) {\n errors.push(\n this.options.messages?.gt ??\n `Значение должно быть больше ${this.options.gt}`\n )\n }\n\n if (this.options.ge != null && numValue < this.options.ge) {\n errors.push(\n this.options.messages?.ge ??\n `Значение должно быть не менее ${this.options.ge}`\n )\n }\n\n if (this.options.lt != null && numValue >= this.options.lt) {\n errors.push(\n this.options.messages?.lt ??\n `Значение должно быть меньше ${this.options.lt}`\n )\n }\n\n if (this.options.le != null && numValue > this.options.le) {\n errors.push(\n this.options.messages?.le ??\n `Значение должно быть не более ${this.options.le}`\n )\n }\n }\n }\n\n return errors\n }\n\n private isValidNumberString(value: string): boolean {\n // Разрешаем: 123, 123.45, -123.45, 123.\n const pattern = /^-?\\d+\\.?\\d*$/\n\n // Проверяем, что нет больше одной точки\n const dotCount = (value.match(/\\./g) || []).length\n if (dotCount > 1) return false\n\n // Проверяем формат\n return pattern.test(value)\n }\n\n private numberToString(value: number): string {\n const decimalPlaces = this.options.decimalPlaces\n\n return value.toFixed(decimalPlaces)\n }\n\n getTypeName(): string {\n return 'десятичное число'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {BooleanOptions} from \"@core/options\";\n\nexport class BooleanType extends FieldType<boolean, BooleanOptions> {\n cast(rawValue: any): boolean | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'boolean') return rawValue\n\n if (typeof rawValue === 'string') {\n if (rawValue === 'true' || rawValue === '1') return true\n if (rawValue === 'false' || rawValue === '0') return false\n }\n\n if (typeof rawValue === 'number') {\n if (rawValue === 1) return true\n if (rawValue === 0) return false\n }\n\n return null\n }\n\n validate(value: boolean): string[] {\n const errors: string[] = []\n\n if (this.options.mustBeTrue && value !== true) {\n errors.push(this.options.messages?.mustBeTrue ?? 'Значение должно быть true')\n }\n\n if (this.options.mustBeFalse && value !== false) {\n errors.push(this.options.messages?.mustBeFalse ?? 'Значение должно быть false')\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'логическое значение'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {DateOptions} from \"@core/options\";\n\nexport class DateType extends FieldType<Date, DateOptions> {\n constructor(options: DateOptions = {}) {\n super(options)\n }\n\n cast(rawValue: any): Date | null {\n if (rawValue === null || rawValue === undefined) return null\n\n if (rawValue instanceof Date) {\n return isNaN(rawValue.getTime()) ? null : rawValue\n }\n\n if (typeof rawValue === 'string') {\n const date = new Date(rawValue)\n return isNaN(date.getTime()) ? null : date\n }\n\n return null\n }\n\n validate(value: Date): string[] {\n const errors: string[] = []\n\n if (isNaN(value.getTime())) {\n errors.push(this.options.messages?.invalid ?? 'Неверная дата')\n return errors\n }\n\n if (this.options.minDate) {\n if (!this.compareDates(value, this.options.minDate, 'min')) {\n errors.push(\n this.options.messages?.minDate ??\n `Дата должна быть не ранее ${this.options.minDate!.toLocaleDateString()}`\n )\n }\n }\n\n if (this.options.maxDate) {\n if (!this.compareDates(value, this.options.maxDate, 'max')) {\n errors.push(\n this.options.messages?.maxDate ??\n `Дата должна быть не позднее ${this.options.maxDate!.toLocaleDateString()}`\n )\n }\n }\n\n return errors\n }\n\n getTypeName(): string {\n return this.options.isDatetime ? 'дата и время' : 'дата'\n }\n\n // Сравнение дат с учётом времени\n private compareDates(value: Date, boundary: Date, type: 'min' | 'max'): boolean {\n if (this.options.isDatetime) {\n // Если время важно — сравниваем точно\n if (type === 'min') {\n return value >= boundary // value должен быть >= minDate\n } else {\n return value <= boundary // value должен быть <= maxDate\n }\n } else {\n // Если время не важно — сравниваем только даты\n const valueDate = this.toDateOnly(value)\n const boundaryDate = this.toDateOnly(boundary)\n\n if (type === 'min') {\n return valueDate >= boundaryDate\n } else {\n return valueDate <= boundaryDate\n }\n }\n }\n\n private toDateOnly(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n }\n}"]}
1
+ {"version":3,"sources":["../src/core/fields/Field.ts","../src/core/fields/arrayUtils.ts","../src/core/fields/ArrayField.ts","../src/core/fields/ArrayFormField.ts","../src/core/ErrorsShema.ts","../src/core/Form.ts","../src/core/plugins/FieldPlugin.ts","../src/core/plugins/MaskPlugin.ts","../src/core/types/FieldType.ts","../src/core/types/StringType.ts","../src/core/types/NumberType.ts","../src/core/types/DecimalType.ts","../src/core/types/BooleanType.ts","../src/core/types/DateType.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import {FieldOptions} from \"@core/options\"\nimport {FieldType} from \"@core/types/FieldType\"\nimport {Form} from \"@core/Form\"\ntype FieldTypeConstructor<T, O extends FieldOptions = FieldOptions> = new (options: O) => FieldType<T, O>\n\nexport class Field<T = any, O extends FieldOptions = FieldOptions> {\n protected _rawValue: any = null\n protected _valueClear: T | null = null\n protected fieldType: FieldType<T, O>\n protected defaultValue: T | null\n protected _errors: string[] = []\n\n isValid: boolean | null = null\n isTouched: boolean = false\n\n constructor(\n TypeConstructor: FieldTypeConstructor<T, O>,\n defaultValue?: T | null,\n options?: O | null,\n ) {\n this.fieldType = new TypeConstructor(options ?? {} as O)\n this.defaultValue = defaultValue ?? null\n\n for (const plugin of this.options.plugins ?? []) {\n plugin.init?.(this)\n }\n\n if (defaultValue !== undefined && defaultValue !== null) {\n this.rawValue = defaultValue\n } else {\n this._rawValue = null\n this._valueClear = null\n // Keep isValid as null until checkValid has been called.\n this.isValid = null\n }\n\n // Constructor defaults are pristine values, not user edits.\n this.isTouched = false\n }\n\n // ========== Getters and setters ==========\n\n protected get plugins() {\n return [...(this.options.plugins ?? [])].sort((a, b) => {\n return (a.pluginOptions?.priority ?? 0) - (b.pluginOptions?.priority ?? 0)\n })\n }\n\n get options() {\n return this.fieldType.options\n }\n\n set options(options: O) {\n const currentOptions = this.fieldType.options\n this.fieldType.options = Object.assign(currentOptions, options)\n }\n\n get rawValue(): T | null {\n return this._rawValue\n }\n\n set rawValue(input: any) {\n this.setRawValue(input)\n }\n\n setRawValue(input: any, validate: boolean = true): void {\n this.assignRawValue(input)\n this._errors = []\n this.isTouched = true\n\n if (validate) {\n this.checkAndSetValid()\n } else {\n this.isValid = null\n }\n }\n\n private assignRawValue(input: any): void {\n let rawValue = input\n\n for (const plugin of this.plugins) {\n if (plugin.toRawValue) {\n rawValue = plugin.toRawValue(rawValue, this)\n }\n }\n\n let valueClear = rawValue\n\n for (const plugin of this.plugins) {\n if (plugin.toValueClear) {\n valueClear = plugin.toValueClear(valueClear, this)\n }\n }\n\n this._rawValue = rawValue\n this._valueClear = this.fieldType.cast(valueClear)\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n this.isValid = message ? false : null\n }\n\n get valueClear(): T | null {\n return this._valueClear\n }\n\n // ========== Validation ==========\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n // 1. Check emptiness and required status.\n if (this.isEmpty) {\n if (this.isRequired(form)) {\n this._errors.push(this.options.messages?.isRequired ?? 'Поле обязательно для заполнения')\n return false\n }\n return true\n }\n\n // 2. Check whether the value could be cast to the expected type.\n if (this._valueClear === null) {\n this._errors.push(\n this.options.messages?.type ??\n `Ожидается ${this.fieldType.getTypeName()}`\n )\n return false\n }\n\n // 3. Run type-specific validation.\n const typeErrors = this.fieldType.validate(this._valueClear, form)\n if (typeErrors.length > 0) {\n this._errors.push(...typeErrors)\n return false\n }\n\n // 4. Run custom validation.\n if (this.options.validate) {\n const result = this.options.validate(this._valueClear, form)\n if (result === false) {\n this._errors.push(this.options.messages?.validate ?? 'Значение не прошло валидацию')\n return false\n }\n if (typeof result === 'string') {\n this._errors.push(result)\n return false\n }\n }\n\n return true\n }\n\n checkAndSetValid(form?: Form): boolean {\n this.isValid = this.checkValid(form)\n return this.isValid\n }\n\n get isEmpty(): boolean {\n let isEmpty = false\n if (this._rawValue === null || this._rawValue === undefined) isEmpty = true\n else if (typeof this._rawValue === 'string' && this._rawValue.trim() === '') isEmpty = true\n else if (Array.isArray(this._rawValue) && this._rawValue.length === 0) isEmpty = true\n return isEmpty\n }\n\n // ========== Helper methods ==========\n\n reset(): void {\n if (this.defaultValue !== null && this.defaultValue !== undefined) {\n // Restore the default through the same plugin pipeline without validating it.\n this.assignRawValue(this.defaultValue)\n } else {\n this._rawValue = null\n this._valueClear = null\n }\n\n this._errors = []\n this.isValid = null\n this.isTouched = false\n }\n}\n","export function isValidArrayIndex(index: number, length: number): boolean {\n return Number.isInteger(index) && index >= 0 && index < length\n}\n","import {ArrayFieldOptions} from \"@core/options\"\nimport {Field} from \"@core/fields/Field\"\nimport {Form} from \"@core/Form\"\nimport {isValidArrayIndex} from \"@core/fields/arrayUtils\"\n\nexport class ArrayField<T = any> {\n protected options: ArrayFieldOptions\n protected _items: Field<T>[] = []\n protected _errors: string[] = []\n private _hasValidationResult = false\n\n isTouched: boolean = false\n\n constructor(\n protected factory: (value?: T) => Field<T>,\n options: ArrayFieldOptions = {},\n initial: (T | null)[] = []\n ) {\n this.options = {\n isRequired: true,\n messages: {},\n ...options\n } as ArrayFieldOptions\n this._items = initial.map(value => this.factory(value as T))\n this.checkValid()\n }\n\n // ===== value =====\n\n set itemsValue(items: (T | null)[]) {\n this.clear()\n\n for (const item of items) {\n this.add(item as T, false)\n }\n\n this.checkValid()\n }\n\n get itemsValue(): (T | null)[] {\n return this._items.map(item => item.valueClear)\n }\n\n get items(): Field<T>[] {\n return this._items\n }\n\n // ===== actions =====\n\n add(value?: T, force_check: boolean = true): Field<T> {\n const field = this.factory(value)\n this.isTouched = true\n this._items.push(field)\n\n if (force_check) this.checkValid()\n\n return field\n }\n\n remove(index: number): void {\n if (!isValidArrayIndex(index, this._items.length)) return\n\n this._items.splice(index, 1)\n this.checkValid()\n }\n\n clear(): void {\n this._items = []\n this.checkValid()\n }\n\n // ===== validation =====\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._hasValidationResult = true\n this._errors = []\n\n if (this.isRequired(form) && this._items.length === 0) {\n this._errors.push(\n this.options.messages?.isRequired ??\n \"Добавьте хотя бы один элемент\"\n )\n return false\n }\n\n if (this.options.minItems != null && this._items.length < this.options.minItems) {\n this._errors.push(\n this.options.messages?.minItems ??\n `Значений должно быть не меньше ${this.options.minItems}`\n )\n return false\n }\n\n if (this.options.maxItems != null && this._items.length > this.options.maxItems) {\n this._errors.push(\n this.options.messages?.maxItems ??\n `Значений должно быть не больше ${this.options.maxItems}`\n )\n return false\n }\n\n let valid = true\n\n for (const field of this._items) {\n const ok = field.checkAndSetValid(form)\n if (!ok) valid = false\n }\n\n if (this.options.validate) {\n const values = this._items.map(item => item.valueClear)\n const result = this.options.validate(values, form)\n\n if (result === false) {\n this._errors.push(\n this.options.messages?.validate ?? \"Ошибка валидации\"\n )\n return false\n }\n\n if (typeof result === \"string\") {\n this._errors.push(result)\n return false\n }\n }\n\n return valid && this._errors.length === 0\n }\n\n checkAndSetValid(form?: Form): boolean {\n return this.checkValid(form)\n }\n\n get isValid(): boolean {\n if (!this._hasValidationResult) return false\n if (this._errors.length > 0) return false\n\n return this._items.every(item => item.isValid === true)\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n this._hasValidationResult = true\n } else {\n this._errors = []\n this._hasValidationResult = false\n }\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n reset(): void {\n this._items.forEach(item => item.reset())\n this._errors = []\n this._hasValidationResult = false\n this.isTouched = false\n }\n}\n","import {Form, type FormFieldsValue} from \"@core/Form\"\nimport {ArrayFormFieldOptions} from \"@core/options\"\nimport {isValidArrayIndex} from \"@core/fields/arrayUtils\"\n\nexport class ArrayFormField<T extends Form = Form> {\n private _forms: T[] = []\n private _errors: string[] = []\n private _hasValidationResult = false\n\n isTouched: boolean = false\n\n constructor(\n private FormConstructor: new () => T,\n private options: ArrayFormFieldOptions = {},\n initial: unknown[] = []\n ) {\n this._forms = initial.map(data => {\n const form = new this.FormConstructor()\n form.setFields(data as Record<string, unknown>, false)\n return form\n })\n this.checkValid()\n }\n\n // ===== value =====\n\n set forms(forms: unknown[]) {\n this.setForms(forms)\n }\n\n setForms(forms: unknown[], validate: boolean = true): void {\n this._forms = []\n\n for (const formData of forms) {\n this.add(formData, false)\n }\n\n if (validate) this.checkValid()\n }\n\n get forms(): T[] {\n return this._forms\n }\n\n get formsFieldsValue(): FormFieldsValue<T>[] {\n return this._forms.map(form => form.fieldsValue)\n }\n\n // ===== actions =====\n\n add(data?: unknown, force_check: boolean = true): T {\n const form = new this.FormConstructor()\n\n if (data !== undefined && data !== null) {\n form.setFields(data as Record<string, unknown>, false)\n }\n\n this.isTouched = true\n this._forms.push(form)\n\n if (force_check) this.checkValid()\n\n return form\n }\n\n remove(index: number): void {\n if (!isValidArrayIndex(index, this._forms.length)) return\n\n this._forms.splice(index, 1)\n this.checkValid()\n }\n\n clear(): void {\n this._forms = []\n this.checkValid()\n }\n\n reset(): void {\n this._forms.forEach(form => form.reset())\n this._errors = []\n this._hasValidationResult = false\n this.isTouched = false\n }\n\n // ===== validation =====\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._hasValidationResult = true\n this._errors = []\n\n if (this.isRequired(form) && this._forms.length === 0) {\n this._errors.push(\n this.options.messages?.isRequired ??\n \"Добавьте хотя бы один элемент\"\n )\n return false\n }\n\n if (this.options.minForms != null && this._forms.length < this.options.minForms) {\n this._errors.push(\n this.options.messages?.minForms ??\n `Значений должно быть не меньше ${this.options.minForms}`\n )\n return false\n }\n\n if (this.options.maxForms != null && this._forms.length > this.options.maxForms) {\n this._errors.push(\n this.options.messages?.maxForms ??\n `Значений должно быть не больше ${this.options.maxForms}`\n )\n return false\n }\n\n let valid = true\n\n for (const nestedForm of this._forms) {\n const ok = nestedForm.checkValid(nestedForm)\n if (!ok) valid = false\n }\n\n if (this.options.validate) {\n const result = this.options.validate(this._forms, form)\n\n if (result === false) {\n this._errors.push(\n this.options.messages?.validate ??\n \"Ошибка валидации\"\n )\n return false\n }\n\n if (typeof result === \"string\") {\n this._errors.push(result)\n return false\n }\n }\n\n return valid && this._errors.length === 0\n }\n\n checkAndSetValid(form?: Form): boolean {\n return this.checkValid(form)\n }\n\n get isValid(): boolean {\n if (!this._hasValidationResult) return false\n if (this._errors.length > 0) return false\n\n return this._forms.every(form => form.isValid)\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n this._hasValidationResult = true\n } else {\n this._errors = []\n this._hasValidationResult = false\n }\n }\n}\n","type ErrorFieldMapping = string | ((errorValue: any) => string)\n\nexport interface ParsedError {\n fieldName: string\n message: string\n sourceKey: string\n matchedBy: 'static' | 'dynamic' | 'fallback'\n}\n\nexport interface DynamicRule {\n pattern: RegExp\n mapping: ErrorFieldMapping | ((match: RegExpMatchArray, value?: any) => string)\n priority: number\n}\n\nexport class ErrorsSchema {\n private _staticRules: Map<string, ErrorFieldMapping> = new Map()\n private _dynamicRules: DynamicRule[] = []\n private _fallbackHandler?: (key: string, value: any) => string | null\n private _valueTransformers: Array<(value: any) => any> = []\n\n /**\n * Add a static rule that matches an exact error key.\n * @param errorKey - Exact error key returned by the server.\n * @param fieldName - Form field name or a function that resolves it dynamically.\n */\n staticKey(errorKey: string, fieldName: string | ((errorValue: any) => string)): this {\n this._staticRules.set(errorKey, fieldName)\n return this\n }\n\n /**\n * Add a dynamic rule using a regular expression.\n * @param pattern - Regular expression used to match an error key.\n * @param mapping - Field name or function that derives it from the match.\n * @param options - Additional options, such as rule priority.\n */\n dynamicKey(\n pattern: RegExp,\n mapping: string | ((match: RegExpMatchArray, value?: any) => string),\n options?: { priority?: number }\n ): this {\n this._dynamicRules.push({\n pattern,\n mapping,\n priority: options?.priority ?? 0\n })\n // Sort by priority, highest first.\n this._dynamicRules.sort((a, b) => b.priority - a.priority)\n return this\n }\n\n /**\n * Set a handler for errors that do not match any rule.\n */\n fallback(handler: (key: string, value: any) => string | null): this {\n this._fallbackHandler = handler\n return this\n }\n\n /**\n * Add a transformer for error values.\n * Useful for normalizing messages, such as server responses containing arrays.\n */\n transformValue(transformer: (value: any) => any): this {\n this._valueTransformers.push(transformer)\n return this\n }\n\n /**\n * Create a schema from a simple mapping object.\n */\n static fromObject(mapping: Record<string, string>): ErrorsSchema {\n const schema = new ErrorsSchema()\n for (const [errorKey, fieldName] of Object.entries(mapping)) {\n schema.staticKey(errorKey, fieldName)\n }\n return schema\n }\n\n /**\n * Create a schema for an array of similarly structured forms.\n */\n static forArray(\n itemSchema: ErrorsSchema,\n arrayFieldName: string,\n indexExtractor?: (key: string) => number\n ): ErrorsSchema {\n const schema = new ErrorsSchema()\n\n for (const transformer of itemSchema._valueTransformers) {\n schema.transformValue(transformer)\n }\n\n const escapedArrayFieldName = arrayFieldName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n // Accept bracket and dotted indices by default; custom formats use indexExtractor.\n const indexPattern = indexExtractor\n ? '(.+?)'\n : '(?:\\\\[(\\\\d+)\\\\]|\\\\.(\\\\d+))'\n\n schema.dynamicKey(\n new RegExp(`^${escapedArrayFieldName}${indexPattern}\\\\.(.+)$`),\n (match, value) => {\n const sourceKey = match[0]\n const index = indexExtractor\n ? indexExtractor(sourceKey)\n : Number(match[1] ?? match[2])\n\n if (!Number.isInteger(index) || index < 0) {\n return ''\n }\n\n const fieldPath = match[indexExtractor ? 2 : 3]\n const itemMapping = itemSchema.findMapping(fieldPath, value)\n const mappedFieldPath = itemMapping\n ? typeof itemMapping === 'function'\n ? itemMapping(value)\n : itemMapping\n : fieldPath\n\n return `${arrayFieldName}.${index}.${mappedFieldPath}`\n },\n {priority: 100}\n )\n\n return schema\n }\n\n\n /**\n * Parse errors while applying configured value transformers.\n * Supports nested structures using dot notation.\n */\n parseErrors(errors: Record<string, any>, prefix: string = ''): Record<string, string> {\n const result: Record<string, string> = {}\n\n for (const [key, value] of Object.entries(errors)) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n\n // Recursively parse nested error objects.\n if (this.isNestedObject(value)) {\n const nestedErrors = this.parseErrors(value, fullKey)\n Object.assign(result, nestedErrors)\n continue\n }\n\n // Skip null and undefined values.\n if (value === null || value === undefined) {\n continue\n }\n\n // Apply value transformers.\n let transformedValue = value\n for (const transformer of this._valueTransformers) {\n transformedValue = transformer(transformedValue)\n }\n\n const mapping = this.findMapping(fullKey, transformedValue)\n\n if (mapping) {\n if (typeof mapping === 'function') {\n const fieldName = mapping(transformedValue)\n if (fieldName) {\n result[fieldName] = typeof transformedValue === 'string'\n ? transformedValue\n : JSON.stringify(transformedValue)\n }\n } else {\n result[mapping] = typeof transformedValue === 'string'\n ? transformedValue\n : JSON.stringify(transformedValue)\n }\n }\n }\n\n return result\n }\n\n /**\n * Parse server errors and return detailed metadata.\n */\n parseErrorsDetailed(errors: Record<string, any>, prefix: string = ''): Record<string, ParsedError> {\n const result: Record<string, ParsedError> = {}\n\n for (const [key, value] of Object.entries(errors)) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n\n // Recursively process nested objects.\n if (this.isNestedObject(value)) {\n const nestedErrors = this.parseErrorsDetailed(value, fullKey)\n Object.assign(result, nestedErrors)\n continue\n }\n\n // Skip null and undefined values.\n if (value === null || value === undefined) {\n continue\n }\n\n // Apply value transformers.\n let transformedValue = value\n for (const transformer of this._valueTransformers) {\n transformedValue = transformer(transformedValue)\n }\n\n const matchResult = this.findMappingDetailed(fullKey, transformedValue)\n\n if (matchResult) {\n const message = typeof transformedValue === 'string'\n ? transformedValue\n : JSON.stringify(transformedValue)\n\n result[matchResult.fieldName] = {\n fieldName: matchResult.fieldName,\n message,\n sourceKey: fullKey,\n matchedBy: matchResult.matchedBy\n }\n }\n }\n\n return result\n }\n\n /**\n * Create a schema for a nested form.\n */\n nest(prefix: string): ErrorsSchema {\n const nestedSchema = new ErrorsSchema()\n\n // Forward static rules with the prefix.\n for (const [key, mapping] of this._staticRules.entries()) {\n nestedSchema.staticKey(`${prefix}.${key}`, mapping)\n }\n\n // Forward dynamic rules with the prefix.\n for (const rule of this._dynamicRules) {\n const newPattern = new RegExp(`^${prefix}\\\\.${rule.pattern.source.replace(/^\\^/, '')}`)\n nestedSchema.dynamicKey(newPattern, rule.mapping, {priority: rule.priority})\n }\n\n // Forward value transformers.\n for (const transformer of this._valueTransformers) {\n nestedSchema.transformValue(transformer)\n }\n\n // Forward the fallback handler while removing the prefix.\n if (this._fallbackHandler) {\n nestedSchema.fallback((key, value) => {\n if (key.startsWith(`${prefix}.`)) {\n return this._fallbackHandler!(key.slice(prefix.length + 1), value)\n }\n return null\n })\n }\n\n return nestedSchema\n }\n\n /**\n * Clone the current schema.\n */\n clone(): ErrorsSchema {\n const cloned = new ErrorsSchema()\n\n // Copy static rules.\n for (const [key, mapping] of this._staticRules.entries()) {\n cloned._staticRules.set(key, mapping)\n }\n\n // Copy dynamic rules.\n for (const rule of this._dynamicRules) {\n cloned._dynamicRules.push({...rule})\n }\n\n // Copy the fallback handler and value transformers.\n cloned._fallbackHandler = this._fallbackHandler\n cloned._valueTransformers = [...this._valueTransformers]\n\n return cloned\n }\n\n /**\n * Merge the current schema with another schema.\n */\n merge(other: ErrorsSchema): ErrorsSchema {\n const merged = this.clone()\n\n // Add static rules from the other schema.\n for (const [key, mapping] of other._staticRules.entries()) {\n merged._staticRules.set(key, mapping)\n }\n\n // Add dynamic rules.\n merged._dynamicRules.push(...other._dynamicRules)\n merged._dynamicRules.sort((a, b) => b.priority - a.priority)\n\n // Add value transformers.\n merged._valueTransformers.push(...other._valueTransformers)\n\n // Replace the fallback handler when the other schema defines one.\n if (other._fallbackHandler) {\n merged._fallbackHandler = other._fallbackHandler\n }\n\n return merged\n }\n\n private isNestedObject(value: any): boolean {\n return value && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date)\n }\n\n private findMappingDetailed(key: string, value: any): {\n fieldName: string\n matchedBy: 'static' | 'dynamic' | 'fallback'\n } | null {\n // Check static rules (Map).\n if (this._staticRules.has(key)) {\n const mapping = this._staticRules.get(key)!\n const fieldName = typeof mapping === 'function' ? mapping(value) : mapping\n return fieldName ? {fieldName, matchedBy: 'static'} : null\n }\n\n // Check dynamic rules.\n for (const rule of this._dynamicRules) {\n const match = key.match(rule.pattern)\n if (match) {\n const fieldName = typeof rule.mapping === 'function'\n ? rule.mapping(match, value)\n : rule.mapping\n return fieldName ? {fieldName, matchedBy: 'dynamic'} : null\n }\n }\n\n // Fallback\n if (this._fallbackHandler) {\n const fieldName = this._fallbackHandler(key, value)\n return fieldName ? {fieldName, matchedBy: 'fallback'} : null\n }\n\n return null\n }\n\n private findMapping(key: string, value: any): ErrorFieldMapping | null {\n // Check static rules (Map).\n if (this._staticRules.has(key)) {\n return this._staticRules.get(key)!\n }\n\n // Check dynamic rules.\n for (const rule of this._dynamicRules) {\n const match = key.match(rule.pattern)\n if (match) {\n if (typeof rule.mapping === 'function') {\n const fieldName = rule.mapping(match, value)\n return fieldName\n }\n return rule.mapping\n }\n }\n\n // Fallback\n if (this._fallbackHandler) {\n const fieldName = this._fallbackHandler(key, value)\n return fieldName\n }\n\n return null\n }\n}\n\n/**\n * Default base schema.\n */\nexport const DefaultErrorsSchema = new ErrorsSchema()\n .fallback((key) => key)\n","import {Field} from \"@core/fields/Field\"\nimport {ArrayField} from \"@core/fields/ArrayField\"\nimport {ArrayFormField} from \"@core/fields/ArrayFormField\"\nimport {DefaultErrorsSchema, ErrorsSchema} from \"@core/ErrorsShema\"\n\nexport type FormFieldValue<TField> =\n TField extends Field<infer TValue, infer _Options> ? TValue | null :\n TField extends ArrayField<infer TValue> ? (TValue | null)[] :\n TField extends ArrayFormField<infer TForm>\n ? TForm extends Form ? FormFieldsValue<TForm>[] : unknown[]\n : never\n\nexport type FormFieldsValue<TForm extends Form> = {\n [K in keyof TForm as TForm[K] extends\n | Field<infer _Value, infer _Options>\n | ArrayField<infer _ArrayValue>\n | ArrayFormField<infer _NestedForm>\n ? K\n : never]: FormFieldValue<TForm[K]>\n}\n\nexport abstract class Form {\n private _globalErrors: Record<string, string> = {}\n errorsShema: ErrorsSchema = DefaultErrorsSchema\n\n protected get _fields(): Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>> {\n const fields: Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>> = {}\n\n for (const key of Object.keys(this)) {\n const property = (this as any)[key]\n if (property instanceof Field || property instanceof ArrayField || property instanceof ArrayFormField) {\n fields[key] = property\n }\n }\n\n return fields\n }\n\n checkValid(form?: this): boolean {\n let isFormValid = true\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n const field = fields[key]\n if (!field.checkAndSetValid(form ?? this)) {\n isFormValid = false\n }\n }\n\n return isFormValid && Object.keys(this._globalErrors).length === 0\n }\n\n get fieldsValue(): FormFieldsValue<this> {\n const data: Record<string, unknown> = {}\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n let valueClear = null\n const field = fields[key]\n if (field instanceof Field) valueClear = field.valueClear\n else if (field instanceof ArrayField) valueClear = field.itemsValue\n else if (field instanceof ArrayFormField) valueClear = field.formsFieldsValue\n else console.error(`Invalid field \"${key}\" type`)\n data[key] = valueClear\n }\n\n return data as FormFieldsValue<this>\n }\n\n set fields(data: Record<string, unknown>) {\n this.setFields(data)\n }\n\n setFields(data: Record<string, unknown>, validate: boolean = true): void {\n const fields = this._fields\n\n for (const key of Object.keys(data)) {\n const field = fields[key]\n if (field) {\n if (field instanceof Field) field.setRawValue(data[key], false)\n else if (field instanceof ArrayField) field.itemsValue = data[key] as any[]\n else if (field instanceof ArrayFormField) field.setForms(data[key] as unknown[], false)\n else console.error(`Invalid field \"${key}\" type`)\n }\n }\n\n // Validate after assignment so conditional rules see the complete form.\n if (validate) this.checkValid()\n }\n\n get allErrors(): Record<string, string[]> {\n const errors: Record<string, string[]> = {}\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n const field = fields[key]\n\n if (field instanceof ArrayFormField) {\n // Collect errors from all nested forms in an ArrayFormField.\n const formErrors = this.collectArrayFormErrors(field)\n if (formErrors.length > 0) {\n errors[key] = formErrors\n }\n } else {\n // Use the field's own errors for Field and ArrayField.\n const fieldErrors = field.errors\n if (fieldErrors.length > 0) {\n errors[key] = fieldErrors\n }\n }\n }\n\n // Add global errors.\n for (const key of Object.keys(this._globalErrors)) {\n if (!errors[key]) {\n errors[key] = []\n }\n errors[key].push(this._globalErrors[key])\n }\n\n return errors\n }\n\n /**\n * Recursively collect all errors from an ArrayFormField.\n */\n private collectArrayFormErrors(arrayField: ArrayFormField): string[] {\n const allErrors: string[] = []\n\n // Include errors from the ArrayFormField itself.\n allErrors.push(...arrayField.errors)\n\n // Include errors from each form in the array.\n for (let i = 0; i < arrayField.forms.length; i++) {\n const form = arrayField.forms[i]\n const formAllErrors = form.allErrors\n\n for (const [fieldName, fieldErrors] of Object.entries(formAllErrors)) {\n for (const error of fieldErrors) {\n allErrors.push(`Форма ${i + 1}, ${fieldName}: ${error}`)\n }\n }\n }\n\n return allErrors\n }\n\n get globalErrors(): Record<string, string> {\n return {...this._globalErrors}\n }\n\n set errors(errors: Record<string, unknown>) {\n this.clearErrorsRecursively()\n const fields = this._fields\n\n // Parse errors using the configured schema.\n const parsedErrors = this.errorsShema.parseErrors(errors)\n\n // Apply the parsed errors.\n for (const [fieldName, errorMessage] of Object.entries(parsedErrors)) {\n this.applyErrorToField(fieldName, errorMessage, fields, this)\n }\n }\n\n private clearErrorsRecursively(): void {\n this._globalErrors = {}\n\n for (const field of Object.values(this._fields)) {\n if (field instanceof Field) {\n field.error = null\n } else if (field instanceof ArrayField) {\n field.error = null\n for (const item of field.items) item.error = null\n } else if (field instanceof ArrayFormField) {\n field.error = null\n for (const nestedForm of field.forms) nestedForm.clearErrorsRecursively()\n }\n }\n }\n\n /**\n * Apply an error to the corresponding field.\n * Supports nested fields using dot notation.\n */\n private applyErrorToField(\n fieldPath: string,\n errorMessage: string,\n fields: Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>>,\n targetForm: Form\n ): void {\n // Guard against an undefined target form.\n if (!targetForm) {\n console.error('applyErrorToField: targetForm is undefined')\n return\n }\n\n // Check for a direct field match first.\n if (fieldPath in fields && fields[fieldPath]) {\n fields[fieldPath].error = errorMessage\n return\n }\n\n // If no direct match exists, interpret the key as a nested path.\n const parts = fieldPath.split('.')\n const rootField = parts[0]\n\n if (rootField in fields && fields[rootField]) {\n const field = fields[rootField]\n\n if (parts.length === 1) {\n field.error = errorMessage\n } else if (parts.length > 1) {\n this.applyNestedError(field, parts.slice(1), errorMessage, fieldPath, targetForm)\n }\n } else {\n // If the field is not found, add the error to the target form's global errors.\n targetForm.setGlobalError(fieldPath, errorMessage)\n }\n }\n\n private applyNestedError(\n field: Field<any> | ArrayField<any> | ArrayFormField<any>,\n pathParts: string[],\n errorMessage: string,\n fullPath: string,\n targetForm: Form\n ): void {\n // Guard against an undefined target form.\n if (!targetForm) {\n console.error('applyNestedError: targetForm is undefined')\n return\n }\n\n const [currentPart, ...remainingParts] = pathParts\n\n // Handle ArrayFormField (an array of forms).\n if (field instanceof ArrayFormField) {\n const index = parseInt(currentPart)\n if (!isNaN(index) && index >= 0 && index < field.forms.length) {\n const form = field.forms[index]\n if (remainingParts.length > 0) {\n // Recursively apply the error to a field inside the form.\n const formFields = form['_fields']\n // Use the nested form as the target for global errors.\n this.applyErrorToField(remainingParts.join('.'), errorMessage, formFields, form)\n } else {\n // If the path specifies an index without a field,\n // add it as a global form error.\n form.setGlobalError(`index_${index}`, errorMessage)\n }\n } else {\n // If the index is out of range, add a global error to the target form.\n targetForm.setGlobalError(fullPath, errorMessage)\n }\n }\n // For ArrayField and Field, add the error to the target form's global errors.\n else {\n targetForm.setGlobalError(fullPath, errorMessage)\n }\n }\n\n setGlobalError(key: string, message: string): void {\n this._globalErrors[key] = message\n }\n\n clearGlobalErrors(): void {\n this._globalErrors = {}\n }\n\n reset(): void {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n fields[key].reset()\n }\n this._globalErrors = {}\n }\n\n get isTouched(): boolean {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n if (fields[key].isTouched) return true\n }\n return false\n }\n\n // Check whether the form is valid.\n get isValid(): boolean {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n if (fields[key].isValid !== true) return false\n }\n return Object.keys(this._globalErrors).length === 0\n }\n\n // Serialize form values for multipart requests.\n toFormData(): FormData {\n const formData = new FormData()\n const data = this.fieldsValue\n\n for (const [key, value] of Object.entries(data)) {\n if (value === null || value === undefined) continue\n\n if (typeof Blob !== 'undefined' && value instanceof Blob) {\n formData.append(key, value)\n } else if (value instanceof Date) {\n formData.append(key, value.toISOString())\n } else if (typeof value === 'object') {\n // Encode collections and nested objects as JSON instead of lossy String(value).\n const serialized = JSON.stringify(value)\n if (serialized !== undefined) formData.append(key, serialized)\n } else {\n formData.append(key, String(value))\n }\n }\n\n return formData\n }\n\n // Get all values in JSON-compatible form.\n toJSON(): Record<string, unknown> {\n const json: Record<string, unknown> = {}\n\n for (const [key, value] of Object.entries(this.fieldsValue)) {\n json[key] = this.serializeJsonValue(value)\n }\n\n return json\n }\n\n private serializeJsonValue(value: unknown): unknown {\n if (value instanceof Date) {\n return value.toISOString()\n }\n\n if (Array.isArray(value)) {\n return value.map(item => this.serializeJsonValue(item))\n }\n\n if (value !== null && typeof value === 'object') {\n const prototype = Object.getPrototypeOf(value)\n if (prototype === Object.prototype || prototype === null) {\n return Object.fromEntries(\n Object.entries(value).map(([key, nestedValue]) => [key, this.serializeJsonValue(nestedValue)])\n )\n }\n }\n\n return value\n }\n}","import {PluginOptions} from \"@core/options\"\nimport {Field} from \"@core/fields/Field\"\n\nexport interface FieldPlugin<T = any> {\n pluginOptions?: PluginOptions\n\n init?(field: Field<T>): void\n\n toRawValue?(value: any, field: Field<T>): any\n\n toValueClear?(value: any, field: Field<T>): any\n}\n\nexport abstract class BasePlugin<T = any> implements FieldPlugin<T> {\n pluginOptions: PluginOptions\n\n constructor(pluginOptions: PluginOptions = {}) {\n this.pluginOptions = {\n priority: 0,\n ...pluginOptions\n }\n }\n}","import {BasePlugin} from \"@core/plugins/FieldPlugin\"\nimport {MaskPluginOptions, PluginOptions} from \"@core/options\"\nimport {Field} from \"@core/fields\"\n\ninterface MaskPart {\n char: string // Character to display\n isPlaceholder: boolean // True when this is an editable placeholder\n isEscaped: boolean // True when the character is escaped and should be included in rawValue\n replacementValue?: string // Fixed replacement\n allowedChars?: string // Allowed characters, as an alternative to a complex pattern\n transformOnMatch?: string // Value to use on a match\n transformOnMismatch?: string // Value to use on a mismatch\n defaultValue?: string\n pushToNext?: boolean // When true, pass the character to the next placeholder\n}\n\nexport class MaskPlugin extends BasePlugin {\n private config: MaskPluginOptions\n private maskParts: MaskPart[] = []\n\n constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions) {\n super(pluginOptions)\n this.config = config\n }\n\n init(_field: Field<any>): void {\n this.parseMask()\n }\n\n toRawValue(value: string, _field: Field): string {\n return this.applyMask(value)\n }\n\n toValueClear(value: string, _field: Field): string {\n return this.removeMask(value)\n }\n\n private parseMask(): void {\n this.maskParts = []\n let i = 0\n let escaped = false\n\n while (i < this.config.maskFormat.length) {\n const char = this.config.maskFormat[i]\n\n // Check for escaping\n if (char === '/' && !escaped) {\n escaped = true\n i++\n continue\n }\n\n if (char === this.config.maskPlaceholder &&\n i + 1 < this.config.maskFormat.length &&\n this.config.maskFormat[i + 1] === '{' &&\n !escaped) {\n\n const openBracket = i + 1\n const closeBracket = this.config.maskFormat.indexOf('}', openBracket)\n\n if (closeBracket !== -1 && closeBracket > openBracket + 1) {\n const configString = this.config.maskFormat.substring(openBracket + 1, closeBracket).trim()\n\n if (configString.includes('>')) {\n const parts = configString.split('>')\n const allowedChars = parts[0].trim()\n const replacementOnMatch = parts[1]?.trim() || ''\n\n // Check for >> (pushToNext)\n let replacementOnMismatch = parts[2]?.trim() || ''\n let pushToNext = false\n\n if (parts.length > 2 && parts[2] === '' && parts[3] !== undefined) {\n // Syntax: allowedChars > match > > pushValue\n pushToNext = true\n replacementOnMismatch = parts[3]?.trim() || ''\n } else if (replacementOnMismatch === '' && parts.length > 3) {\n // Syntax: allowedChars > match > > pushValue\n pushToNext = true\n replacementOnMismatch = parts[3]?.trim() || ''\n }\n\n this.maskParts.push({\n char: replacementOnMatch || this.config.maskPlaceholder,\n isPlaceholder: true,\n isEscaped: escaped,\n allowedChars: allowedChars,\n transformOnMatch: replacementOnMatch,\n transformOnMismatch: replacementOnMismatch,\n defaultValue: replacementOnMatch,\n pushToNext: pushToNext\n })\n } else {\n this.maskParts.push({\n char: configString,\n isPlaceholder: true,\n isEscaped: escaped,\n replacementValue: configString,\n defaultValue: configString\n })\n }\n\n escaped = false\n i = closeBracket + 1\n continue\n }\n }\n\n const isPlaceholder = char === this.config.maskPlaceholder\n this.maskParts.push({\n char: char,\n isPlaceholder: isPlaceholder,\n isEscaped: escaped\n })\n\n escaped = false\n i++\n }\n }\n\n private applyMask(value: string): string {\n if (typeof value !== 'string' || !value) return ''\n\n let result = ''\n let inputIndex = 0\n\n for (let maskIndex = 0; maskIndex < this.maskParts.length; maskIndex++) {\n const part = this.maskParts[maskIndex]\n\n if (inputIndex >= value.length) {\n if (part.replacementValue) {\n result += part.replacementValue\n continue\n }\n if (part.transformOnMatch) {\n result += part.transformOnMatch\n continue\n }\n break\n }\n\n const inputChar = value[inputIndex]\n\n if (part.isPlaceholder) {\n if (part.replacementValue) {\n result += part.replacementValue\n inputIndex++\n } else if (part.allowedChars) {\n if (part.allowedChars.includes(inputChar)) {\n // The character is allowed; replace it with matchReplacement\n result += part.transformOnMatch || inputChar\n inputIndex++\n } else if (part.pushToNext) {\n // The character is not allowed, but pushToNext is true\n // Insert mismatchReplacement and pass the character onward\n result += part.transformOnMismatch || this.config.maskPlaceholder\n // Do not advance inputIndex; the next placeholder will process this character\n } else if (part.transformOnMismatch !== undefined) {\n // Standard replacement on mismatch\n result += part.transformOnMismatch || this.config.maskPlaceholder\n inputIndex++\n } else {\n result += this.config.maskPlaceholder\n }\n } else {\n // Standard placeholder\n if (this.config.digitPattern.test(inputChar)) {\n result += inputChar\n inputIndex++\n } else if (inputChar === this.config.maskPlaceholder) {\n result += this.config.maskPlaceholder\n inputIndex++\n } else {\n inputIndex++\n maskIndex--\n }\n }\n } else {\n // Literal character\n if (inputChar === part.char) {\n result += part.char\n inputIndex++\n } else if (this.config.digitPattern.test(inputChar)) {\n result += part.char\n } else {\n result += part.char\n }\n }\n }\n\n return result\n }\n\n private removeMask(value: string): string {\n if (typeof value !== 'string' || !value) return ''\n\n let result = ''\n let inputIndex = 0\n\n for (let maskIndex = 0; maskIndex < this.maskParts.length; maskIndex++) {\n const part = this.maskParts[maskIndex]\n\n if (inputIndex >= value.length) {\n if (part.replacementValue) {\n result += part.replacementValue\n } else if (part.transformOnMatch) {\n result += part.transformOnMatch\n }\n continue\n }\n\n const inputChar = value[inputIndex]\n\n if (part.isPlaceholder) {\n if (part.replacementValue) {\n result += part.replacementValue\n } else if (part.allowedChars) {\n if (part.allowedChars.includes(inputChar)) {\n result += part.transformOnMatch || inputChar\n } else if (part.pushToNext) {\n // Insert mismatchReplacement and pass the character onward\n result += part.transformOnMismatch || ''\n // Do not advance inputIndex; the next placeholder will process this character.\n continue\n } else {\n result += part.transformOnMatch || ''\n }\n } else {\n if (inputChar !== this.config.maskPlaceholder &&\n this.config.digitPattern.test(inputChar)) {\n result += inputChar\n }\n }\n inputIndex++\n } else if (part.isEscaped) {\n result += part.char\n if (inputChar === part.char) inputIndex++\n } else {\n if (inputChar === part.char) inputIndex++\n }\n }\n\n return result\n }\n}","import {FieldOptions} from \"@core/options\"\nimport {Form} from \"@core/Form\"\n\nexport abstract class FieldType<T, O extends FieldOptions = FieldOptions> {\n options: O\n\n constructor(options: O) {\n this.options = {\n isRequired: true,\n messages: {},\n ...options\n } as O\n }\n\n abstract cast(rawValue: any): T | null\n\n abstract validate(value: T, form?: Form): string[]\n\n abstract getTypeName(): string\n}","import {FieldType} from \"@core/types/FieldType\"\nimport {StringOptions} from \"@core/options\"\n\nexport class StringType extends FieldType<string, StringOptions> {\n cast(rawValue: any): string | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'string') return rawValue\n return String(rawValue)\n }\n\n validate(value: string): string[] {\n const errors: string[] = []\n\n if (this.options.minLength != null && value.length < this.options.minLength) {\n errors.push(\n this.options.messages?.minLength ??\n `Минимальная длина ${this.options.minLength} символов`\n )\n }\n\n if (this.options.maxLength != null && value.length > this.options.maxLength) {\n errors.push(\n this.options.messages?.maxLength ??\n `Максимальная длина ${this.options.maxLength} символов`\n )\n }\n\n if (this.options.pattern != null) {\n const {source, flags} = this.options.pattern\n const stablePattern = new RegExp(source, flags.replace(/[gy]/g, ''))\n if (!stablePattern.test(value)) {\n errors.push(this.options.messages?.pattern ?? 'Неверный формат')\n }\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'строка'\n }\n}","import {FieldType} from \"@core/types/FieldType\"\nimport {NumberOptions} from \"@core/options\"\n\nexport class NumberType extends FieldType<number, NumberOptions> {\n cast(rawValue: any): number | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'number') return Number.isFinite(rawValue) ? rawValue : null\n\n if (typeof rawValue === 'string') {\n const normalized = rawValue.trim()\n if (normalized.length === 0) return null\n const num = Number(normalized)\n return Number.isFinite(num) ? num : null\n }\n\n return null\n }\n\n validate(value: number): string[] {\n const errors: string[] = []\n\n if (!Number.isFinite(value)) {\n errors.push(this.options.messages?.invalid ?? 'Значение должно быть конечным числом')\n return errors\n }\n\n if (!Number.isInteger(value)) {\n errors.push(this.options.messages?.invalid ?? 'Значение должно быть целым числом')\n }\n\n if (this.options.gt != null && value <= this.options.gt) {\n errors.push(\n this.options.messages?.gt ??\n `Значение должно быть больше ${this.options.gt}`\n )\n }\n\n if (this.options.ge != null && value < this.options.ge) {\n errors.push(\n this.options.messages?.ge ??\n `Значение должно быть не менее ${this.options.ge}`\n )\n }\n\n if (this.options.lt != null && value >= this.options.lt) {\n errors.push(\n this.options.messages?.lt ??\n `Значение должно быть меньше ${this.options.lt}`\n )\n }\n\n if (this.options.le != null && value > this.options.le) {\n errors.push(\n this.options.messages?.le ??\n `Значение должно быть не более ${this.options.le}`\n )\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'число'\n }\n}","import {FieldType} from \"@core/types/FieldType\"\nimport {DecimalOptions} from \"@core/options\"\n\nexport class DecimalType extends FieldType<number | string, DecimalOptions> {\n constructor(options: DecimalOptions = {} as DecimalOptions) {\n super({\n decimalPlaces: 2,\n maxDigits: 8,\n ...options\n } as DecimalOptions)\n }\n\n cast(rawValue: any): number | string | null {\n if (rawValue === null || rawValue === undefined) return null\n\n if (typeof rawValue === 'string') {\n return this.castString(rawValue)\n }\n\n if (typeof rawValue === 'number' && Number.isFinite(rawValue)) {\n return rawValue\n }\n\n return null\n }\n\n private castString(value: string): string | null {\n const trimmed = value.trim()\n\n if (!trimmed) return null\n\n // Replace commas with decimal points.\n const normalized = trimmed.replace(',', '.')\n\n // Check whether the input resembles a number.\n if (!this.isValidNumberString(normalized)) {\n return null\n }\n\n return normalized\n }\n\n validate(value: number | string): string[] {\n const errors: string[] = []\n value = typeof value === 'number' ? String(value) : value\n\n // Check whether the input matches the numeric format.\n if (!this.isValidNumberString(value)) {\n errors.push(this.options.messages?.invalid ?? 'Пример: 1.00')\n return errors\n }\n\n const maxDigits = this.options.maxDigits ?? 8\n const decimalPlaces = this.options.decimalPlaces ?? 2\n const maxIntDigits = maxDigits - decimalPlaces\n\n // Split the input into integer and decimal parts.\n const isNegative = value.startsWith('-')\n const normalizedValue = isNegative ? value.substring(1) : value\n const parts = normalizedValue.split('.')\n const intPart = parts[0]\n const decPart = parts.length > 1 ? parts[1] : ''\n\n // Handle a trailing decimal point while the user is still typing.\n if (normalizedValue.endsWith('.')) {\n // Validate only the integer part.\n if (intPart.length > maxIntDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков перед запятой ${maxIntDigits}`\n )\n }\n return errors\n }\n\n // Validate the integer part.\n if (intPart.length === 0) {\n errors.push(this.options.messages?.invalid ?? 'Пример: 1.00')\n return errors\n }\n\n if (intPart.length > maxIntDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков перед запятой ${maxIntDigits}`\n )\n }\n\n // Validate the decimal part.\n if (parts.length === 2) {\n // Check the total number of digits.\n if (intPart.length + decPart.length > maxDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков ${maxDigits}`\n )\n }\n\n // Check the number of digits after the decimal point.\n if (decPart.length === 0) {\n errors.push(\n this.options.messages?.invalid ??\n 'После точки должен быть минимум 1 знак'\n )\n } else if (decPart.length > decimalPlaces) {\n errors.push(\n this.options.messages?.decimalPlaces ??\n `Максимальное количество знаков после запятой ${decimalPlaces}`\n )\n }\n }\n\n // Stop further validation when the format is invalid.\n if (errors.length > 0) return errors\n\n // Check min/max constraints only when the value is not mid-entry.\n if (!value.endsWith('.')) {\n const numValue = parseFloat(value)\n\n if (!isNaN(numValue)) {\n if (this.options.gt != null && numValue <= this.options.gt) {\n errors.push(\n this.options.messages?.gt ??\n `Значение должно быть больше ${this.options.gt}`\n )\n }\n\n if (this.options.ge != null && numValue < this.options.ge) {\n errors.push(\n this.options.messages?.ge ??\n `Значение должно быть не менее ${this.options.ge}`\n )\n }\n\n if (this.options.lt != null && numValue >= this.options.lt) {\n errors.push(\n this.options.messages?.lt ??\n `Значение должно быть меньше ${this.options.lt}`\n )\n }\n\n if (this.options.le != null && numValue > this.options.le) {\n errors.push(\n this.options.messages?.le ??\n `Значение должно быть не более ${this.options.le}`\n )\n }\n }\n }\n\n return errors\n }\n\n private isValidNumberString(value: string): boolean {\n // Accept values such as 123, 123.45, -123.45, and 123.\n const pattern = /^-?\\d+\\.?\\d*$/\n\n // Ensure there is at most one decimal point.\n const dotCount = (value.match(/\\./g) || []).length\n if (dotCount > 1) return false\n\n // Validate the format.\n return pattern.test(value)\n }\n\n getTypeName(): string {\n return 'десятичное число'\n }\n}","import {FieldType} from \"@core/types/FieldType\"\nimport {BooleanOptions} from \"@core/options\"\n\nexport class BooleanType extends FieldType<boolean, BooleanOptions> {\n cast(rawValue: any): boolean | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'boolean') return rawValue\n\n if (typeof rawValue === 'string') {\n if (rawValue === 'true' || rawValue === '1') return true\n if (rawValue === 'false' || rawValue === '0') return false\n }\n\n if (typeof rawValue === 'number') {\n if (rawValue === 1) return true\n if (rawValue === 0) return false\n }\n\n return null\n }\n\n validate(value: boolean): string[] {\n const errors: string[] = []\n\n if (this.options.mustBeTrue && value !== true) {\n errors.push(this.options.messages?.mustBeTrue ?? 'Значение должно быть true')\n }\n\n if (this.options.mustBeFalse && value !== false) {\n errors.push(this.options.messages?.mustBeFalse ?? 'Значение должно быть false')\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'логическое значение'\n }\n}","import {FieldType} from \"@core/types/FieldType\"\nimport {DateOptions} from \"@core/options\"\n\nexport class DateType extends FieldType<Date, DateOptions> {\n constructor(options: DateOptions = {}) {\n super(options)\n }\n\n cast(rawValue: any): Date | null {\n if (rawValue === null || rawValue === undefined) return null\n\n if (rawValue instanceof Date) {\n return isNaN(rawValue.getTime()) ? null : rawValue\n }\n\n if (typeof rawValue === 'string') {\n const date = new Date(rawValue)\n return isNaN(date.getTime()) ? null : date\n }\n\n return null\n }\n\n validate(value: Date): string[] {\n const errors: string[] = []\n\n if (isNaN(value.getTime())) {\n errors.push(this.options.messages?.invalid ?? 'Неверная дата')\n return errors\n }\n\n if (this.options.minDate) {\n if (!this.compareDates(value, this.options.minDate, 'min')) {\n errors.push(\n this.options.messages?.minDate ??\n `Дата должна быть не ранее ${this.options.minDate!.toLocaleDateString()}`\n )\n }\n }\n\n if (this.options.maxDate) {\n if (!this.compareDates(value, this.options.maxDate, 'max')) {\n errors.push(\n this.options.messages?.maxDate ??\n `Дата должна быть не позднее ${this.options.maxDate!.toLocaleDateString()}`\n )\n }\n }\n\n return errors\n }\n\n getTypeName(): string {\n return this.options.isDatetime ? 'дата и время' : 'дата'\n }\n\n // Compare dates with optional time precision.\n private compareDates(value: Date, boundary: Date, type: 'min' | 'max'): boolean {\n if (this.options.isDatetime) {\n // Compare exact timestamps when time matters.\n if (type === 'min') {\n return value >= boundary // value must be >= minDate\n } else {\n return value <= boundary // value must be <= maxDate\n }\n } else {\n // Compare calendar dates only when time does not matter.\n const valueDate = this.toDateOnly(value)\n const boundaryDate = this.toDateOnly(boundary)\n\n if (type === 'min') {\n return valueDate >= boundaryDate\n } else {\n return valueDate <= boundaryDate\n }\n }\n }\n\n private toDateOnly(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n }\n}"]}
package/dist/index.d.cts CHANGED
@@ -1,13 +1,13 @@
1
- import { B as BasePlugin, M as MaskPluginOptions, P as PluginOptions, F as Field, a as FieldType, S as StringOptions, N as NumberOptions, D as DecimalOptions, b as BooleanOptions, c as DateOptions } from './Form-DOdrOtbT.cjs';
2
- export { o as ArrayField, A as ArrayFieldOptions, p as ArrayFormField, n as ArrayFormFieldOptions, l as FieldOptions, q as FieldPlugin, d as Form, j as messagesArrayFieldOptions, k as messagesArrayFormFieldOptions, g as messagesBooleanOptions, h as messagesDateOptions, i as messagesDecimalOptions, f as messagesNumberOptions, m as messagesOptions, e as messagesStringOptions } from './Form-DOdrOtbT.cjs';
1
+ import { B as BasePlugin, M as MaskPluginOptions, P as PluginOptions, F as Field, a as FieldType, S as StringOptions, N as NumberOptions, D as DecimalOptions, b as BooleanOptions, c as DateOptions } from './Form-kPYL4f-n.cjs';
2
+ export { A as ArrayField, d as ArrayFieldOptions, e as ArrayFormField, f as ArrayFormFieldOptions, g as DefaultErrorsSchema, h as DynamicRule, E as ErrorsSchema, i as FieldOptions, j as FieldPlugin, k as Form, l as FormFieldValue, m as FormFieldsValue, n as ParsedError, o as messagesArrayFieldOptions, p as messagesArrayFormFieldOptions, q as messagesBooleanOptions, r as messagesDateOptions, s as messagesDecimalOptions, t as messagesNumberOptions, u as messagesOptions, v as messagesStringOptions } from './Form-kPYL4f-n.cjs';
3
3
 
4
4
  declare class MaskPlugin extends BasePlugin {
5
5
  private config;
6
6
  private maskParts;
7
7
  constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions);
8
- init(field: Field<any>): void;
9
- toRawValue(value: string, field: Field): string;
10
- toValueClear(value: string, field: Field): string;
8
+ init(_field: Field<any>): void;
9
+ toRawValue(value: string, _field: Field): string;
10
+ toValueClear(value: string, _field: Field): string;
11
11
  private parseMask;
12
12
  private applyMask;
13
13
  private removeMask;
@@ -31,7 +31,6 @@ declare class DecimalType extends FieldType<number | string, DecimalOptions> {
31
31
  private castString;
32
32
  validate(value: number | string): string[];
33
33
  private isValidNumberString;
34
- private numberToString;
35
34
  getTypeName(): string;
36
35
  }
37
36
 
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- import { B as BasePlugin, M as MaskPluginOptions, P as PluginOptions, F as Field, a as FieldType, S as StringOptions, N as NumberOptions, D as DecimalOptions, b as BooleanOptions, c as DateOptions } from './Form-DOdrOtbT.js';
2
- export { o as ArrayField, A as ArrayFieldOptions, p as ArrayFormField, n as ArrayFormFieldOptions, l as FieldOptions, q as FieldPlugin, d as Form, j as messagesArrayFieldOptions, k as messagesArrayFormFieldOptions, g as messagesBooleanOptions, h as messagesDateOptions, i as messagesDecimalOptions, f as messagesNumberOptions, m as messagesOptions, e as messagesStringOptions } from './Form-DOdrOtbT.js';
1
+ import { B as BasePlugin, M as MaskPluginOptions, P as PluginOptions, F as Field, a as FieldType, S as StringOptions, N as NumberOptions, D as DecimalOptions, b as BooleanOptions, c as DateOptions } from './Form-kPYL4f-n.js';
2
+ export { A as ArrayField, d as ArrayFieldOptions, e as ArrayFormField, f as ArrayFormFieldOptions, g as DefaultErrorsSchema, h as DynamicRule, E as ErrorsSchema, i as FieldOptions, j as FieldPlugin, k as Form, l as FormFieldValue, m as FormFieldsValue, n as ParsedError, o as messagesArrayFieldOptions, p as messagesArrayFormFieldOptions, q as messagesBooleanOptions, r as messagesDateOptions, s as messagesDecimalOptions, t as messagesNumberOptions, u as messagesOptions, v as messagesStringOptions } from './Form-kPYL4f-n.js';
3
3
 
4
4
  declare class MaskPlugin extends BasePlugin {
5
5
  private config;
6
6
  private maskParts;
7
7
  constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions);
8
- init(field: Field<any>): void;
9
- toRawValue(value: string, field: Field): string;
10
- toValueClear(value: string, field: Field): string;
8
+ init(_field: Field<any>): void;
9
+ toRawValue(value: string, _field: Field): string;
10
+ toValueClear(value: string, _field: Field): string;
11
11
  private parseMask;
12
12
  private applyMask;
13
13
  private removeMask;
@@ -31,7 +31,6 @@ declare class DecimalType extends FieldType<number | string, DecimalOptions> {
31
31
  private castString;
32
32
  validate(value: number | string): string[];
33
33
  private isValidNumberString;
34
- private numberToString;
35
34
  getTypeName(): string;
36
35
  }
37
36