adaptform 2.0.4 → 2.0.5

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/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":["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 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 // Пока не вызвали checkValid, isValid = 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.fieldType.options\n }\n\n set options(options: O) {\n let cur_options = this.fieldType.options\n this.fieldType.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.fieldType.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.fieldType.getTypeName()}`\n )\n return false\n }\n\n // 3. Специфичная валидация типа\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. Кастомная валидация\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 } 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 this.checkValid()\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 values = this._items.map(i => i.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 // Если есть ошибки массива - не валиден\n if (this._errors.length > 0) return false\n \n // Проверяем, что все элементы валидны (isValid === true)\n return this._items.every(i => i.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 } 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 this.checkValid()\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 // Если есть ошибки массива форм - не валиден\n if (this._errors.length > 0) return false\n \n // Проверяем, что все формы валидны (checkValid() === true)\n return this._forms.every(i => i.checkValid() === true)\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}","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) => 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 * Добавляет статическое правило - точное соответствие ключа ошибки\n * @param errorKey - точный ключ ошибки из ответа сервера\n * @param fieldName - имя поля в форме или функция для динамического определения\n */\n staticKey(errorKey: string, fieldName: string | ((errorValue: any) => string)): this {\n this._staticRules.set(errorKey, fieldName)\n return this\n }\n\n /**\n * Добавляет динамическое правило с регулярным выражением\n * @param pattern - регулярное выражение для сопоставления ключа ошибки\n * @param mapping - имя поля или функция для извлечения имени поля из совпадения\n * @param options - дополнительные опции (приоритет и т.д.)\n */\n dynamicKey(\n pattern: RegExp,\n mapping: string | ((match: RegExpMatchArray) => string),\n options?: { priority?: number }\n ): this {\n this._dynamicRules.push({\n pattern,\n mapping,\n priority: options?.priority ?? 0\n })\n // Сортируем по приоритету (высший приоритет первым)\n this._dynamicRules.sort((a, b) => b.priority - a.priority)\n return this\n }\n\n /**\n * Устанавливает обработчик для ошибок, которые не подошли ни под одно правило\n */\n fallback(handler: (key: string, value: any) => string | null): this {\n this._fallbackHandler = handler\n return this\n }\n\n /**\n * Добавляет трансформер для значений ошибок\n * Полезно для нормализации сообщений (например, если сервер возвращает массив ошибок)\n */\n transformValue(transformer: (value: any) => any): this {\n this._valueTransformers.push(transformer)\n return this\n }\n\n /**\n * Быстрый метод для создания схемы из простого объекта маппинга\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 * Создает схему для массива однотипных форм\n */\n static forArray(\n itemSchema: ErrorsSchema,\n arrayFieldName: string,\n indexExtractor?: (key: string) => number\n ): ErrorsSchema {\n const schema = new ErrorsSchema()\n\n const extractIndex = indexExtractor || ((key: string) => {\n const match = key.match(/\\[(\\d+)\\]/)\n return match ? parseInt(match[1]) : -1\n })\n\n // Динамически обрабатывает ошибки массива\n schema.dynamicKey(\n new RegExp(`^${arrayFieldName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\\\[(\\\\d+)\\\\]\\\\.(.+)$`),\n (match) => {\n const index = match[1]\n const fieldName = match[2]\n return `${arrayFieldName}.${index}.${fieldName}`\n },\n {priority: 100}\n )\n\n return schema\n }\n\n\n /**\n * Основной метод парсинга ошибок с поддержкой трансформеров\n * Поддерживает вложенные структуры через точечную нотацию\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 // Если значение - объект, рекурсивно парсим вложенные ошибки\n if (this.isNestedObject(value)) {\n const nestedErrors = this.parseErrors(value, fullKey)\n Object.assign(result, nestedErrors)\n continue\n }\n\n // Пропускаем null и undefined значения\n if (value === null || value === undefined) {\n continue\n }\n\n // Применяем трансформеры к значению\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 } else if (this._fallbackHandler) {\n const fieldName = this._fallbackHandler(fullKey, transformedValue)\n if (fieldName) {\n result[fieldName] = typeof transformedValue === 'string'\n ? transformedValue\n : JSON.stringify(transformedValue)\n }\n }\n }\n\n return result\n }\n\n /**\n * Парсит ошибки сервера и возвращает расширенную информацию\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 // Рекурсивно обрабатываем вложенные объекты\n if (this.isNestedObject(value)) {\n const nestedErrors = this.parseErrorsDetailed(value, fullKey)\n Object.assign(result, nestedErrors)\n continue\n }\n\n // Пропускаем null и undefined значения\n if (value === null || value === undefined) {\n continue\n }\n\n // Применяем трансформеры к значению\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 * Создает схему для вложенной формы\n */\n nest(prefix: string): ErrorsSchema {\n const nestedSchema = new ErrorsSchema()\n\n // Проксируем статические правила с префиксом\n for (const [key, mapping] of this._staticRules.entries()) {\n nestedSchema.staticKey(`${prefix}.${key}`, mapping)\n }\n\n // Проксируем динамические правила с префиксом\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 // Проксируем трансформеры\n for (const transformer of this._valueTransformers) {\n nestedSchema.transformValue(transformer)\n }\n\n // Проксируем fallback с обработкой префикса\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 * Клонирует текущую схему\n */\n clone(): ErrorsSchema {\n const cloned = new ErrorsSchema()\n\n // Копируем статические правила\n for (const [key, mapping] of this._staticRules.entries()) {\n cloned._staticRules.set(key, mapping)\n }\n\n // Копируем динамические правила\n for (const rule of this._dynamicRules) {\n cloned._dynamicRules.push({...rule})\n }\n\n // Копируем fallback и трансформеры\n cloned._fallbackHandler = this._fallbackHandler\n cloned._valueTransformers = [...this._valueTransformers]\n\n return cloned\n }\n\n /**\n * Объединяет текущую схему с другой\n */\n merge(other: ErrorsSchema): ErrorsSchema {\n const merged = this.clone()\n\n // Добавляем статические правила из другой схемы\n for (const [key, mapping] of other._staticRules.entries()) {\n merged._staticRules.set(key, mapping)\n }\n\n // Добавляем динамические правила\n merged._dynamicRules.push(...other._dynamicRules)\n merged._dynamicRules.sort((a, b) => b.priority - a.priority)\n\n // Добавляем трансформеры\n merged._valueTransformers.push(...other._valueTransformers)\n\n // Заменяем fallback если есть в другой схеме\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 // Проверяем статические правила (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 // Проверяем динамические правила\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)\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 // Проверяем статические правила (Map)\n if (this._staticRules.has(key)) {\n return this._staticRules.get(key)!\n }\n\n // Проверяем динамические правила\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)\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 * Базовая схема по умолчанию\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 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\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 field = fields[key]\n\n if (field instanceof ArrayFormField) {\n // Для ArrayFormField собираем ошибки из всех вложенных форм\n const formErrors = this.collectArrayFormErrors(field)\n if (formErrors.length > 0) {\n errors[key] = formErrors\n }\n } else {\n // Для Field и ArrayField берем их собственные ошибки\n const fieldErrors = field.errors\n if (fieldErrors.length > 0) {\n errors[key] = fieldErrors\n }\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 /**\n * Рекурсивно собирает все ошибки из ArrayFormField\n */\n private collectArrayFormErrors(arrayField: ArrayFormField): string[] {\n const allErrors: string[] = []\n\n // Ошибки самого ArrayFormField\n allErrors.push(...arrayField.errors)\n\n // Ошибки из каждой формы в массиве\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, any>) {\n const fields = this._fields\n this._globalErrors = {}\n\n // Очищаем все ошибки полей перед установкой новых\n for (const key of Object.keys(fields)) {\n fields[key].error = null\n }\n\n // Используем схему для парсинга ошибок\n const parsedErrors = this.errorsShema.parseErrors(errors)\n\n // Обрабатываем распарсенные ошибки\n for (const [fieldName, errorMessage] of Object.entries(parsedErrors)) {\n this.applyErrorToField(fieldName, errorMessage, fields, this)\n }\n }\n\n /**\n * Применяет ошибку к соответствующему полю\n * Поддерживает вложенные поля через точечную нотацию\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 // Защита от undefined targetForm\n if (!targetForm) {\n console.error('applyErrorToField: targetForm is undefined')\n return\n }\n\n // Сначала проверяем прямое совпадение с полем\n if (fieldPath in fields && fields[fieldPath]) {\n fields[fieldPath].error = errorMessage\n return\n }\n\n // Если прямого совпадения нет, разбираем как вложенный путь\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 // Если поле не найдено, добавляем в глобальные ошибки целевой формы\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 // Защита от undefined targetForm\n if (!targetForm) {\n console.error('applyNestedError: targetForm is undefined')\n return\n }\n\n const [currentPart, ...remainingParts] = pathParts\n\n // Обработка ArrayFormField (массив форм)\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 // Рекурсивно применяем к полю внутри формы\n const formFields = form['_fields']\n // Передаем form как целевую форму для глобальных ошибок\n this.applyErrorToField(remainingParts.join('.'), errorMessage, formFields, form)\n } else {\n // Если это индекс без указания конкретного поля,\n // добавляем как глобальную ошибку формы\n form.setGlobalError(`index_${index}`, errorMessage)\n }\n } else {\n // Индекс вне диапазона - добавляем в глобальные ошибки целевой формы\n targetForm.setGlobalError(fullPath, errorMessage)\n }\n }\n // Для ArrayField и Field - добавляем в глобальные ошибки целевой формы\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 // Проверить, валидна ли форма\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}"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
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-Be3I6LX0.cjs';
2
+ export { A as ArrayField, d as ArrayFieldOptions, e as ArrayFormField, f as ArrayFormFieldOptions, g as FieldOptions, h as FieldPlugin, i as Form, m as messagesArrayFieldOptions, j as messagesArrayFormFieldOptions, k as messagesBooleanOptions, l as messagesDateOptions, n as messagesDecimalOptions, o as messagesNumberOptions, p as messagesOptions, q as messagesStringOptions } from './Form-Be3I6LX0.cjs';
3
3
 
4
4
  declare class MaskPlugin extends BasePlugin {
5
5
  private config;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
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-Be3I6LX0.js';
2
+ export { A as ArrayField, d as ArrayFieldOptions, e as ArrayFormField, f as ArrayFormFieldOptions, g as FieldOptions, h as FieldPlugin, i as Form, m as messagesArrayFieldOptions, j as messagesArrayFormFieldOptions, k as messagesBooleanOptions, l as messagesDateOptions, n as messagesDecimalOptions, o as messagesNumberOptions, p as messagesOptions, q as messagesStringOptions } from './Form-Be3I6LX0.js';
3
3
 
4
4
  declare class MaskPlugin extends BasePlugin {
5
5
  private config;