adaptform 2.1.0 → 2.2.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.
- package/CHANGELOG.md +52 -4
- package/CHANGELOG.ru.md +52 -4
- package/README.md +43 -9
- package/README.ru.md +43 -9
- package/dist/{Form-kPYL4f-n.d.cts → Form-uHUaTUZS.d.cts} +81 -9
- package/dist/{Form-kPYL4f-n.d.ts → Form-uHUaTUZS.d.ts} +81 -9
- package/dist/index.cjs +735 -236
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.mjs +735 -236
- package/dist/index.mjs.map +1 -1
- package/dist/luxon.d.cts +1 -1
- package/dist/luxon.d.ts +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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.mjs","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}"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/state/value.ts","../src/core/state/snapshot.ts","../src/core/state/ObservableNode.ts","../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.mjs","sourcesContent":["/** Detached captures for supported mutable values; custom instances remain opaque. */\nexport function copyValue<T>(value: T, seen = new WeakMap<object, unknown>()): T {\n if (value === null || typeof value !== 'object') return value\n if (seen.has(value)) return seen.get(value) as T\n const remember = (copy: unknown): T => { seen.set(value, copy); return copy as T }\n if (value instanceof Date) return remember(new Date(value.getTime()))\n if (value instanceof RegExp) return remember(new RegExp(value.source, value.flags))\n if (value instanceof ArrayBuffer) return remember(value.slice(0))\n if (ArrayBuffer.isView(value)) {\n const bytes = value.buffer.slice(value.byteOffset, value.byteOffset + value.byteLength)\n return remember(value instanceof DataView ? new DataView(bytes) :\n new (value.constructor as new (buffer: ArrayBuffer) => object)(bytes as ArrayBuffer))\n }\n if (value instanceof Map) {\n const result = new Map()\n seen.set(value, result)\n for (const [key, item] of value) result.set(copyValue(key, seen), copyValue(item, seen))\n return result as T\n }\n if (value instanceof Set) {\n const result = new Set()\n seen.set(value, result)\n for (const item of value) result.add(copyValue(item, seen))\n return result as T\n }\n if (Array.isArray(value) || Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null) {\n const result = Array.isArray(value) ? new Array(value.length) : Object.create(Object.getPrototypeOf(value))\n seen.set(value, result)\n for (const key of Object.keys(value)) Object.defineProperty(result, key, {\n value: copyValue((value as Record<string, unknown>)[key], seen), enumerable: true, writable: true, configurable: true,\n })\n return result as T\n }\n return value\n}\n\nexport function equalValue(a: unknown, b: unknown, seen = new WeakMap<object, WeakSet<object>>()): boolean {\n if (Object.is(a, b)) return true\n if (a === null || b === null || typeof a !== 'object' || typeof b !== 'object') return false\n if (Object.getPrototypeOf(a) !== Object.getPrototypeOf(b)) return false\n if (seen.get(a)?.has(b)) return true\n const matches = seen.get(a) ?? new WeakSet<object>()\n matches.add(b)\n seen.set(a, matches)\n if (a instanceof Date && b instanceof Date) return Object.is(a.getTime(), b.getTime())\n if (a instanceof RegExp && b instanceof RegExp) return a.source === b.source && a.flags === b.flags\n if (a instanceof ArrayBuffer && b instanceof ArrayBuffer) return equalValue(new Uint8Array(a), new Uint8Array(b), seen)\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n const av = new Uint8Array(a.buffer, a.byteOffset, a.byteLength)\n const bv = new Uint8Array(b.buffer, b.byteOffset, b.byteLength)\n return av.length === bv.length && av.every((byte, i) => byte === bv[i])\n }\n if (a instanceof Map && b instanceof Map) return equalValue([...a], [...b], seen)\n if (a instanceof Set && b instanceof Set) return equalValue([...a], [...b], seen)\n // Luxon stays optional. Its immutable DateTime implements semantic equality.\n if ('isLuxonDateTime' in a && a.isLuxonDateTime === true && 'equals' in a && typeof a.equals === 'function') {\n return a.equals(b)\n }\n if (!Array.isArray(a) && Object.getPrototypeOf(a) !== Object.prototype && Object.getPrototypeOf(a) !== null) return false\n if (Array.isArray(a) && Array.isArray(b) && a.length !== b.length) return false\n const keys = Object.keys(a)\n return keys.length === Object.keys(b).length && keys.every(key =>\n Object.prototype.hasOwnProperty.call(b, key) && equalValue((a as Record<string, unknown>)[key], (b as Record<string, unknown>)[key], seen))\n}\n","/** Snapshots contain data only: mutable built-ins and opaque instances are described. */\nexport type SnapshotValue = null | undefined | string | number | boolean | bigint |\n readonly SnapshotValue[] | {readonly [key: string]: SnapshotValue}\n\nexport interface NodeSnapshot {\n readonly isValid: boolean | null\n readonly isTouched: boolean\n readonly isDirty: boolean\n}\nexport interface FieldSnapshot extends NodeSnapshot {\n readonly rawValue: SnapshotValue\n readonly valueClear: SnapshotValue\n readonly errors: readonly string[]\n}\nexport interface FormSnapshot extends NodeSnapshot {\n readonly fieldsValue: Readonly<Record<string, SnapshotValue>>\n readonly allErrors: Readonly<Record<string, readonly string[]>>\n readonly globalErrors: Readonly<Record<string, string>>\n readonly fields: Readonly<Record<string, FieldSnapshot | ArrayFieldSnapshot | ArrayFormSnapshot>>\n}\nexport interface ArrayFieldSnapshot extends NodeSnapshot {\n readonly itemsValue: readonly SnapshotValue[]\n readonly errors: readonly string[]\n readonly items: readonly FieldSnapshot[]\n}\nexport interface ArrayFormSnapshot extends NodeSnapshot {\n readonly formsFieldsValue: readonly Readonly<Record<string, SnapshotValue>>[]\n readonly errors: readonly string[]\n readonly forms: readonly FormSnapshot[]\n}\n\nexport function snapshotValue(value: unknown, seen = new WeakMap<object, SnapshotValue>()): SnapshotValue {\n if (value === null || value === undefined || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'bigint') return value\n if (typeof value !== 'object') return Object.freeze({kind: 'Opaque', type: typeof value})\n const previous = seen.get(value)\n if (previous) return previous\n if (value instanceof Date) return Object.freeze({kind: 'Date', timestamp: value.getTime()})\n if (value instanceof RegExp) return Object.freeze({kind: 'RegExp', source: value.source, flags: value.flags})\n if (value instanceof ArrayBuffer || ArrayBuffer.isView(value)) {\n const bytes = value instanceof ArrayBuffer ? new Uint8Array(value) : new Uint8Array(value.buffer, value.byteOffset, value.byteLength)\n return Object.freeze({kind: value.constructor.name, bytes: Object.freeze([...bytes])})\n }\n if ('isLuxonDateTime' in value && value.isLuxonDateTime === true && 'toISO' in value && typeof value.toISO === 'function') {\n return Object.freeze({kind: 'DateTime', iso: value.toISO() as string | null})\n }\n if (value instanceof Map || value instanceof Set) {\n const result: Record<string, SnapshotValue> = {kind: value instanceof Map ? 'Map' : 'Set'}\n seen.set(value, result)\n result.entries = snapshotValue([...value], seen)\n return Object.freeze(result)\n }\n if (Array.isArray(value)) {\n const result: SnapshotValue[] = []\n seen.set(value, result)\n for (const item of value) result.push(snapshotValue(item, seen))\n return Object.freeze(result)\n }\n if (Object.getPrototypeOf(value) === Object.prototype || Object.getPrototypeOf(value) === null) {\n const result: Record<string, SnapshotValue> = Object.create(null)\n seen.set(value, result)\n for (const [key, item] of Object.entries(value)) result[key] = snapshotValue(item, seen)\n return Object.freeze(result)\n }\n return Object.freeze({kind: 'Opaque', type: value.constructor?.name ?? 'object'})\n}\n\n/** Freeze node metadata without following or retaining model objects. */\nexport function freezeSnapshot<T>(value: T, seen = new WeakSet<object>()): T {\n if (value === null || typeof value !== 'object' || seen.has(value)) return value\n seen.add(value)\n for (const item of Object.values(value)) freezeSnapshot(item, seen)\n return Object.freeze(value)\n}\n","import {equalValue} from './value'\nimport {freezeSnapshot} from './snapshot'\n\nlet mutationDepth = 0\nlet flushing = false\nlet publishing = false\nlet batchDepth = 0\nconst validations = new Map<ObservableNode<unknown>, () => unknown>()\nconst batchRoots = new Map<ObservableNode<unknown>, () => unknown>()\nconst pending = new Set<SnapshotStore>()\n\nfunction flush(): void {\n if (mutationDepth || flushing) return\n flushing = true\n let failure: unknown\n let failed = false\n try {\n while (pending.size) {\n const stores = [...pending]\n const before = stores.map(store => store.committed())\n pending.clear()\n // Parent captures can refresh children: compare against all pre-flush snapshots.\n for (const store of stores) store.refresh()\n const changed = stores.filter((store, index) => !equalValue(before[index], store.committed()))\n publishing = true\n try {\n for (const store of changed) {\n try { store.notify() } catch (error) {\n if (!failed) { failure = error; failed = true }\n }\n }\n } finally {\n publishing = false\n }\n }\n } finally {\n flushing = false\n }\n if (failed) throw failure\n}\n\nclass SnapshotStore {\n private snapshot: unknown\n private initialized = false\n private listeners = new Set<() => void>()\n private parents = new Set<SnapshotStore>()\n private children = new Set<SnapshotStore>()\n\n constructor(private capture: () => unknown, private getChildren: () => readonly SnapshotStore[]) {}\n\n private reconcile(seen = new Set<SnapshotStore>()): void {\n if (seen.has(this)) return\n seen.add(this)\n const next = new Set(this.listeners.size || this.parents.size ? this.getChildren() : [])\n for (const child of this.children) {\n if (!next.has(child)) {\n child.parents.delete(this)\n child.reconcile(seen)\n }\n }\n const previous = this.children\n this.children = next\n for (const child of next) {\n if (!previous.has(child)) {\n child.parents.add(this)\n child.reconcile(seen)\n }\n }\n }\n\n read(): unknown {\n if (!mutationDepth && !publishing) this.refresh()\n else if (!this.initialized) this.refresh()\n return this.snapshot\n }\n\n committed(): unknown { return this.snapshot }\n\n refresh(): boolean {\n this.reconcile()\n const next = freezeSnapshot(this.capture())\n if (this.initialized && equalValue(this.snapshot, next)) return false\n this.snapshot = next\n this.initialized = true\n return true\n }\n\n subscribe(listener: () => void): () => void {\n this.read()\n // Each registration has its own lifetime, including repeated callbacks.\n const registration = () => listener()\n this.listeners.add(registration)\n this.reconcile()\n return () => {\n this.listeners.delete(registration)\n this.reconcile()\n }\n }\n\n changed(seen = new Set<SnapshotStore>()): void {\n if (seen.has(this)) return\n seen.add(this)\n this.reconcile()\n if (this.listeners.size || this.parents.size || this.initialized) pending.add(this)\n for (const parent of this.parents) parent.changed(seen)\n }\n\n notify(): void {\n let failure: unknown\n let failed = false\n for (const listener of [...this.listeners]) {\n if (!this.listeners.has(listener)) continue\n try { listener() } catch (error) {\n if (!failed) { failure = error; failed = true }\n }\n }\n if (failed) throw failure\n }\n}\n\n/** Shared mutation boundary; subclasses only describe state and their mutations. */\nexport abstract class ObservableNode<TSnapshot> {\n private readonly _stateStore: SnapshotStore = new SnapshotStore(\n () => this.captureState(),\n () => this.stateChildren().map(child => child._stateStore),\n )\n\n protected abstract captureState(): TSnapshot\n\n protected stateChildren(): readonly ObservableNode<unknown>[] { return [] }\n\n private contains(node: ObservableNode<unknown>, seen = new Set<ObservableNode<unknown>>()): boolean {\n if (this === node) return true\n if (seen.has(this)) return false\n seen.add(this)\n return this.stateChildren().some(child => child.contains(node, seen))\n }\n\n protected validateAfterMutation(callback: () => unknown): void {\n if (batchDepth) validations.set(this, callback)\n else callback()\n }\n\n protected batchUpdate<TResult>(callback: () => TResult, validate: () => unknown): TResult {\n // Capture committed state before the first write, including descendants.\n this.getSnapshot()\n return this.update(() => {\n batchDepth++\n batchRoots.set(this, validate)\n let failed = false\n let failure: unknown\n let result!: TResult\n try {\n result = callback()\n if (result !== null && (typeof result === 'object' || typeof result === 'function') &&\n 'then' in result && typeof result.then === 'function') {\n throw new TypeError('batch callbacks must be synchronous')\n }\n } catch (error) {\n failed = true\n failure = error\n } finally {\n batchDepth--\n }\n if (!batchDepth) {\n const requested = [...validations]\n const roots = [...batchRoots]\n validations.clear()\n batchRoots.clear()\n const selected = roots.filter(([root]) => requested.some(([node]) => root.contains(node)))\n .filter(([root], index, all) => !all.some(([other], otherIndex) =>\n other !== root && other.contains(root) && (!root.contains(other) || otherIndex < index)))\n const checks = [...selected.map(([, check]) => check),\n ...requested.filter(([node]) => !selected.some(([root]) => root.contains(node))).map(([, check]) => check)]\n for (const check of checks) {\n try { check() } catch (error) {\n if (!failed) { failed = true; failure = error }\n }\n }\n }\n if (failed) throw failure\n return result\n })\n }\n\n subscribe(listener: () => void): () => void {\n return this._stateStore.subscribe(listener)\n }\n\n getSnapshot(): TSnapshot {\n return this._stateStore.read() as TSnapshot\n }\n\n protected update<TResult>(callback: () => TResult): TResult {\n mutationDepth++\n let failed = false\n try {\n return callback()\n } catch (error) {\n failed = true\n throw error\n } finally {\n this._stateStore.changed()\n mutationDepth--\n // Preserve the mutation's exception if finalization also throws.\n if (failed) { try { flush() } catch { /* The original exception takes precedence. */ } }\n else flush()\n }\n }\n}\n","import {ObservableNode} from \"@core/state/ObservableNode\"\nimport {snapshotValue, type FieldSnapshot} from \"@core/state/snapshot\"\nimport {FieldOptions} from \"@core/options\"\nimport {FieldType} from \"@core/types/FieldType\"\nimport {Form} from \"@core/Form\"\nimport {copyValue, equalValue} from \"@core/state/value\"\n\ntype FieldTypeConstructor<T, O extends FieldOptions = FieldOptions> = new (options: O) => FieldType<T, O>\n\nexport class Field<T = any, O extends FieldOptions = FieldOptions> extends ObservableNode<FieldSnapshot> {\n protected _rawValue: any = null\n protected _valueClear: T | null = null\n protected fieldType: FieldType<T, O>\n protected defaultValue: T | null\n private _baseline: T | null = null\n protected _errors: string[] = []\n\n private _isValid: boolean | null = null\n\n get isValid(): boolean | null { return this._isValid }\n set isValid(value: boolean | null) {\n this.update(() => { this._isValid = value })\n }\n private _isTouched: boolean = false\n\n get isTouched(): boolean { return this._isTouched }\n set isTouched(value: boolean) {\n this.update(() => { this._isTouched = value })\n }\n\n constructor(\n TypeConstructor: FieldTypeConstructor<T, O>,\n defaultValue?: T | null,\n options?: O | null,\n ) {\n super()\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 this.commitBaseline()\n }\n\n protected captureState(): FieldSnapshot {\n return {rawValue: snapshotValue(this._rawValue), valueClear: snapshotValue(this._valueClear),\n errors: [...this._errors], isValid: this.isValid, isTouched: this.isTouched, isDirty: this.isDirty}\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 this.update(() => {\n const currentOptions = this.fieldType.options\n this.fieldType.options = Object.assign(currentOptions, options)\n })\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 return this.update(() => {\n this.assignRawValue(input)\n this._errors = []\n this.isTouched = true\n\n if (validate) {\n this.validateAfterMutation(() => this.checkAndSetValid())\n } else {\n this.isValid = null\n }\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 this.update(() => {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n this.isValid = message ? false : null\n })\n }\n\n get valueClear(): T | null {\n return this._valueClear\n }\n\n get isDirty(): boolean {\n return !equalValue(this._valueClear, this._baseline)\n }\n\n commitBaseline(): void {\n return this.update(() => {\n this._baseline = copyValue(this._valueClear)\n })\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 return this.update(() => {\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\n checkAndSetValid(form?: Form): boolean {\n return this.update(() => {\n this.isValid = this.checkValid(form)\n return this.isValid\n })\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 return this.update(() => {\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}\n","export function isValidArrayIndex(index: number, length: number): boolean {\n return Number.isInteger(index) && index >= 0 && index < length\n}\n","import {ObservableNode} from \"@core/state/ObservableNode\"\nimport {snapshotValue, type ArrayFieldSnapshot} from \"@core/state/snapshot\"\nimport {copyValue, equalValue} from \"@core/state/value\"\nimport {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> extends ObservableNode<ArrayFieldSnapshot> {\n protected captureState(): ArrayFieldSnapshot {\n return {itemsValue: snapshotValue(this.itemsValue) as ArrayFieldSnapshot['itemsValue'],\n items: this._items.map(item => item.getSnapshot()), errors: [...this._errors],\n isValid: this.isValid, isTouched: this.isTouched, isDirty: this.isDirty}\n }\n\n protected options: ArrayFieldOptions\n protected _items: Field<T>[] = []\n protected _errors: string[] = []\n protected stateChildren(): readonly ObservableNode<unknown>[] {\n return this._items\n }\n\n private _baseline: unknown = []\n private _hasValidationResult = false\n\n private _isTouched: boolean = false\n\n get isTouched(): boolean { return this._isTouched }\n set isTouched(value: boolean) {\n this.update(() => { this._isTouched = value })\n }\n\n constructor(\n protected factory: (value?: T) => Field<T>,\n options: ArrayFieldOptions = {},\n initial: (T | null)[] = []\n ) {\n super()\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.validateAfterMutation(() => this.checkValid())\n this.commitBaseline()\n }\n\n get isDirty(): boolean {\n return !equalValue(this.itemsValue, this._baseline) || this._items.some(child => child.isDirty)\n }\n\n commitBaseline(): void {\n return this.update(() => {\n for (const child of this._items) child.commitBaseline()\n this._baseline = copyValue(this.itemsValue)\n })\n }\n\n // ===== value =====\n\n set itemsValue(items: (T | null)[]) {\n this.setItemsValue(items)\n }\n\n setItemsValue(items: (T | null)[], validate: boolean = true): void {\n return this.update(() => {\n this._items = []\n this.error = null\n\n for (const item of items) {\n this.add(item as T, false)\n }\n\n if (validate) this.validateAfterMutation(() => this.checkValid())\n })\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 return this.update(() => {\n const field = this.factory(value)\n this.isTouched = true\n this._items.push(field)\n\n if (force_check) this.validateAfterMutation(() => this.checkValid())\n\n return field\n })\n }\n\n remove(index: number): void {\n return this.update(() => {\n if (!isValidArrayIndex(index, this._items.length)) return\n\n this._items.splice(index, 1)\n this.validateAfterMutation(() => this.checkValid())\n })\n }\n\n clear(): void {\n return this.update(() => {\n this._items = []\n this.validateAfterMutation(() => this.checkValid())\n })\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 return this.update(() => {\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\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 this.update(() => {\n if (message) {\n this._errors = [message]\n this._hasValidationResult = true\n } else {\n this._errors = []\n this._hasValidationResult = false\n }\n })\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n reset(): void {\n return this.update(() => {\n this._items.forEach(item => item.reset())\n this._errors = []\n this._hasValidationResult = false\n this.isTouched = false\n })\n }\n}\n","import {ObservableNode} from \"@core/state/ObservableNode\"\nimport {snapshotValue, type ArrayFormSnapshot} from \"@core/state/snapshot\"\nimport {copyValue, equalValue} from \"@core/state/value\"\nimport {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> extends ObservableNode<ArrayFormSnapshot> {\n protected captureState(): ArrayFormSnapshot {\n return {formsFieldsValue: snapshotValue(this.formsFieldsValue) as ArrayFormSnapshot['formsFieldsValue'],\n forms: this._forms.map(form => form.getSnapshot()), errors: [...this._errors],\n isValid: this.isValid, isTouched: this.isTouched, isDirty: this.isDirty}\n }\n\n private _forms: T[] = []\n private _errors: string[] = []\n protected stateChildren(): readonly ObservableNode<unknown>[] {\n return this._forms\n }\n\n private _baseline: unknown = []\n private _hasValidationResult = false\n\n private _isTouched: boolean = false\n\n get isTouched(): boolean { return this._isTouched }\n set isTouched(value: boolean) {\n this.update(() => { this._isTouched = value })\n }\n\n constructor(\n private FormConstructor: new () => T,\n private options: ArrayFormFieldOptions = {},\n initial: unknown[] = []\n ) {\n super()\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.validateAfterMutation(() => this.checkValid())\n this.commitBaseline()\n }\n\n get isDirty(): boolean {\n return !equalValue(this.formsFieldsValue, this._baseline) || this._forms.some(child => child.isDirty)\n }\n\n commitBaseline(): void {\n return this.update(() => {\n for (const child of this._forms) child.commitBaseline()\n this._baseline = copyValue(this.formsFieldsValue)\n })\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 return this.update(() => {\n this._forms = []\n\n for (const formData of forms) {\n this.add(formData, false)\n }\n\n if (validate) this.validateAfterMutation(() => this.checkValid())\n })\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 return this.update(() => {\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 form.commitBaseline()\n this.isTouched = true\n this._forms.push(form)\n\n if (force_check) this.validateAfterMutation(() => this.checkValid())\n\n return form\n })\n }\n\n remove(index: number): void {\n return this.update(() => {\n if (!isValidArrayIndex(index, this._forms.length)) return\n\n this._forms.splice(index, 1)\n this.validateAfterMutation(() => this.checkValid())\n })\n }\n\n clear(): void {\n return this.update(() => {\n this._forms = []\n this.validateAfterMutation(() => this.checkValid())\n })\n }\n\n reset(): void {\n return this.update(() => {\n this._forms.forEach(form => form.reset())\n this._errors = []\n this._hasValidationResult = false\n this.isTouched = false\n })\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 return this.update(() => {\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\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 this.update(() => {\n if (message) {\n this._errors = [message]\n this._hasValidationResult = true\n } else {\n this._errors = []\n this._hasValidationResult = false\n }\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 {ObservableNode} from \"@core/state/ObservableNode\"\nimport {snapshotValue, type FormSnapshot} from \"@core/state/snapshot\"\nimport {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 extends ObservableNode<FormSnapshot> {\n protected captureState(): FormSnapshot {\n return {fieldsValue: snapshotValue(this.fieldsValue) as FormSnapshot['fieldsValue'],\n allErrors: this.allErrors, globalErrors: this.globalErrors,\n fields: Object.fromEntries(Object.entries(this._fields).map(([key, field]) => [key, field.getSnapshot()])),\n isValid: this.isValid, isTouched: this.isTouched, isDirty: this.isDirty}\n }\n\n protected stateChildren(): readonly ObservableNode<unknown>[] {\n return Object.values(this._fields)\n }\n\n batch<TResult>(callback: () => TResult & (TResult extends PromiseLike<unknown> ? never : unknown)): TResult {\n return this.batchUpdate(callback, () => this.checkValid())\n }\n\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 return this.update(() => {\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\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 return this.update(() => {\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.setItemsValue(data[key] as unknown[], false)\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.validateAfterMutation(() => this.checkValid())\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 // 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.update(() => {\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\n private clearErrorsRecursively(): void {\n this.update(() => {\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 /**\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 return this.update(() => {\n this._globalErrors[key] = message\n })\n }\n\n clearGlobalErrors(): void {\n return this.update(() => {\n this._globalErrors = {}\n })\n }\n\n reset(): void {\n return this.update(() => {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n fields[key].reset()\n }\n this._globalErrors = {}\n })\n }\n\n get isDirty(): boolean {\n return Object.values(this._fields).some(field => field.isDirty)\n }\n\n commitBaseline(): void {\n return this.update(() => {\n for (const field of Object.values(this._fields)) field.commitBaseline()\n })\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}\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 // 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}\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}"]}
|