adaptform 2.0.0 → 2.0.2
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/dist/index.cjs +984 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +94 -54
- package/dist/index.d.ts +94 -54
- package/dist/index.mjs +974 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/plugins/FieldPlugin.ts","../src/core/types/FieldType.ts","../src/core/types/BooleanType.ts","../src/core/utils/luxon-loader.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["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 {FieldOptions} from \"@core/options\";\nimport Form from \"@core/Form\";\n\n\nexport default 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 {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 type { DateTime as LuxonDateTime } from 'luxon';\n\nlet DateTime: typeof LuxonDateTime | null = null;\nlet isLoading = false;\nlet loadError: Error | null = null;\nlet loadPromise: Promise<typeof LuxonDateTime> | null = null;\n\nexport function getDateTime(): typeof LuxonDateTime {\n if (DateTime) {\n return DateTime;\n }\n\n if (loadError) {\n throw loadError;\n }\n\n if (isLoading) {\n throw new Error(\n 'Luxon is still loading. Please await initLuxon() first.'\n );\n }\n\n throw new Error(\n 'Luxon is not initialized. Call initLuxon() first or install: npm install luxon'\n );\n}\n\nexport function initLuxon(): Promise<typeof LuxonDateTime> {\n if (DateTime) {\n return Promise.resolve(DateTime);\n }\n\n if (loadPromise) {\n return loadPromise;\n }\n\n isLoading = true;\n loadPromise = (async () => {\n try {\n // Пробуем загрузить через ESM (работает везде)\n const luxon = await import('luxon');\n DateTime = luxon.DateTime;\n return DateTime!;\n } catch (error) {\n loadError = new Error(\n 'DateLuxonType requires the \"luxon\" package to be installed.\\n' +\n 'Please install it by running:\\n\\n' +\n ' npm install luxon\\n' +\n ' # or\\n' +\n ' yarn add luxon\\n' +\n ' # or\\n' +\n ' pnpm add luxon\\n'\n );\n throw loadError;\n } finally {\n isLoading = false;\n }\n })();\n\n return loadPromise;\n}\n\nexport function isLuxonAvailable(): boolean {\n return DateTime !== null;\n}\n\nexport function resetLuxon(): void {\n DateTime = null;\n isLoading = false;\n loadError = null;\n loadPromise = null;\n}\n\ninitLuxon().catch(() => {\n});\n\nexport type { LuxonDateTime };"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/fields/Field.ts","../src/core/fields/ArrayField.ts","../src/core/fields/ArrayFormField.ts","../src/core/Form.ts","../src/core/plugins/FieldPlugin.ts","../src/core/plugins/MaskPlugin.ts","../src/core/types/FieldType.ts","../src/core/types/StringType.ts","../src/core/types/NumberType.ts","../src/core/types/DecimalType.ts","../src/core/types/BooleanType.ts","../src/core/types/DateType.ts","../src/core/utils/luxon-loader.ts"],"names":["form"],"mappings":"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","file":"index.cjs","sourcesContent":["import {FieldOptions} from \"@core/options\";\nimport {FieldType} from \"@core/types/FieldType\";\nimport {Form} from \"@core/Form\";\n\n\ntype FieldTypeConstructor<T, O extends FieldOptions = FieldOptions> = new (options: O) => FieldType<T, O>\n\nexport class Field<T = any, O extends FieldOptions = FieldOptions> {\n protected _rawValue: any = null\n protected _valueClear: T | null = null\n protected filed_type: FieldType<T, O>\n protected defaultValue: T | null\n protected _errors: string[] = []\n\n isValid: boolean | null = null\n isTouched: boolean = false\n\n constructor(\n TypeConstructor: FieldTypeConstructor<T, O>,\n defaultValue?: T | null,\n options?: O | null,\n ) {\n this.filed_type = new TypeConstructor(options ?? {} as O)\n this.defaultValue = defaultValue ?? null\n\n for (const plugin of this.options.plugins ?? []) {\n plugin.init?.(this)\n }\n\n if (defaultValue !== undefined && defaultValue !== null) {\n this.rawValue = defaultValue\n } else {\n this._rawValue = null\n this._valueClear = null\n this.isValid = null\n }\n }\n\n // ========== Геттеры/сеттеры ==========\n\n protected get plugins() {\n return [...(this.options.plugins ?? [])].sort((a, b) => {\n return (a.pluginOptions?.priority ?? 0) - (b.pluginOptions?.priority ?? 0)\n })\n }\n\n get options() {\n return this.filed_type.options\n }\n\n set options(options: O) {\n let cur_options = this.filed_type.options\n this.filed_type.options = Object.assign(cur_options, options)\n }\n\n get rawValue(): T | null {\n return this._rawValue\n }\n\n set rawValue(input: any) {\n let rawValue = input\n\n for (const plugin of this.plugins) {\n if (plugin.toRawValue) {\n rawValue = plugin.toRawValue(rawValue, this)\n }\n }\n\n let valueClear = rawValue\n\n for (const plugin of this.plugins) {\n if (plugin.toValueClear) {\n valueClear = plugin.toValueClear(valueClear, this)\n }\n }\n\n this._rawValue = rawValue\n this._valueClear = this.filed_type.cast(valueClear)\n\n this._errors = []\n this.isTouched = true\n this.checkAndSetValid()\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n this.isValid = message ? false : null\n }\n\n get valueClear(): any {\n return this._valueClear\n }\n\n // ========== Валидация ==========\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n // 1. Проверка на пустоту и обязательность\n if (this.isEmpty) {\n if (this.isRequired(form)) {\n this._errors.push(this.options.messages?.isRequired ?? 'Поле обязательно для заполнения')\n return false\n }\n return true\n }\n\n // 2. Проверка, что значение привелось к нужному типу\n if (this._valueClear === null) {\n this._errors.push(\n this.options.messages?.type ??\n `Ожидается ${this.filed_type.getTypeName()}`\n )\n return false\n }\n\n // 3. Специфичная валидация типа\n const typeErrors = this.filed_type.validate(this._valueClear, form)\n if (typeErrors.length > 0) {\n this._errors.push(...typeErrors)\n return false\n }\n\n // 4. Кастомная валидация\n if (this.options.validate) {\n const result = this.options.validate(this._valueClear, form)\n if (result === false) {\n this._errors.push(this.options.messages?.validate ?? 'Значение не прошло валидацию')\n return false\n }\n if (typeof result === 'string') {\n this._errors.push(result)\n return false\n }\n }\n\n return true\n }\n\n checkAndSetValid(form?: Form): boolean {\n this.isValid = this.checkValid(form)\n return this.isValid\n }\n\n get isEmpty(): boolean {\n let isEmpty = false\n if (this._rawValue === null || this._rawValue === undefined) isEmpty = true\n else if (this._rawValue === '') isEmpty = true\n else if (Array.isArray(this._rawValue) && this._rawValue.length === 0) isEmpty = true\n return isEmpty\n }\n\n // ========== Вспомогательные методы ==========\n\n reset(): void {\n if (this.defaultValue !== null && this.defaultValue !== undefined) {\n this.rawValue = this.defaultValue\n this.isValid = true\n } else {\n this._rawValue = null\n this._valueClear = null\n this.isValid = null\n }\n this._errors = []\n this.isTouched = false\n }\n}","import {ArrayFieldOptions} from \"@core/options\";\nimport {Field} from \"@core/fields/Field\";\nimport {Form} from \"@core/Form\";\n\n\nexport class ArrayField<T = any> {\n protected options: ArrayFieldOptions\n protected _items: Field<T>[] = []\n protected _errors: string[] = []\n\n isTouched: boolean = false\n\n constructor(\n protected factory: (value?: T) => Field<T>,\n options: ArrayFieldOptions = {},\n initial: T[] = []\n ) {\n this.options = {\n isRequired: true,\n messages: {},\n ...options\n } as ArrayFieldOptions\n this._items = initial.map(v => this.factory(v))\n }\n\n // ===== value =====\n\n set itemsValue(items: T[]) {\n this.clear()\n\n for (const i of items) {\n this.add(i, false)\n }\n\n this.checkValid()\n }\n\n get itemsValue(): T[] {\n return this._items.map(i => i.valueClear)\n }\n\n get items(): Field<T>[] {\n return this._items\n }\n\n // ===== actions =====\n\n add(value?: T, force_check?: boolean): Field<T> {\n const field = this.factory(value)\n this.isTouched = true\n this._items.push(field)\n\n if (force_check) this.checkValid()\n\n return field\n }\n\n remove(index: number): void {\n this._items.splice(index, 1)\n this.checkValid()\n }\n\n clear(): void {\n this._items = []\n this.checkValid()\n }\n\n // ===== validation =====\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n if (this.isRequired(form) && this._items.length === 0) {\n this._errors.push(\n this.options.messages?.isRequired ??\n \"Добавьте хотя бы один элемент\"\n )\n return false\n }\n\n if (this.options.minItems != null && this._items.length < this.options.minItems) {\n this._errors.push(\n this.options.messages?.minItems ??\n `Значений должно быть не меньше ${this.options.minItems}`\n )\n return false\n }\n\n if (this.options.maxItems != null && this._items.length > this.options.maxItems) {\n this._errors.push(\n this.options.messages?.maxItems ??\n `Значений должно быть не больше ${this.options.maxItems}`\n )\n return false\n }\n\n let valid = true\n\n for (const field of this._items) {\n const ok = field.checkAndSetValid(form)\n if (!ok) valid = false\n }\n\n if (this.options.validate) {\n const result = this.options.validate(this._items, form)\n\n if (result === false) {\n this._errors.push(\n this.options.messages?.validate ?? \"Ошибка валидации\"\n )\n return false\n }\n\n if (typeof result === \"string\") {\n this._errors.push(result)\n return false\n }\n }\n\n return valid && this._errors.length === 0\n }\n\n checkAndSetValid(form?: Form): boolean {\n return this.checkValid(form)\n }\n\n get isValid(): boolean {\n return (\n this._errors.length === 0 &&\n this._items.every(i => i.isValid === true)\n )\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n reset(): void {\n this._items.forEach(i => i.reset())\n this._errors = []\n this.isTouched = false\n }\n}","import {Form} from \"@core/Form\";\nimport {ArrayFormFieldOptions} from \"@core/options\";\n\nexport class ArrayFormField<T extends Form = Form> {\n private _forms: T[] = []\n private _errors: string[] = []\n\n isTouched: boolean = false\n\n constructor(\n private FormConstructor: new () => T,\n private options: ArrayFormFieldOptions = {},\n initial: any[] = []\n ) {\n this._forms = initial.map(data => {\n const form = new this.FormConstructor()\n form.fields = data\n return form\n })\n }\n\n\n // ===== value =====\n\n set forms(forms: any[]) {\n this.clear()\n\n for (const f of forms) {\n this.add(f, false)\n }\n\n this.checkValid()\n }\n\n get forms(): Form[] {\n return this._forms\n }\n\n get formsFieldsValue(): any[] {\n return this._forms.map(i => i.fieldsValue)\n }\n\n // ===== actions =====\n\n add(data?: any, force_check?: boolean): T {\n const form = new this.FormConstructor()\n\n if (data) form.fields = data\n\n this.isTouched = true\n this._forms.push(form)\n\n if (force_check) this.checkValid()\n\n return form\n }\n\n remove(index: number): void {\n this._forms.splice(index, 1)\n this.checkValid()\n }\n\n clear(): void {\n this._forms = []\n this.checkValid()\n }\n\n reset(): void {\n this._forms.forEach(f => f.reset())\n this._errors = []\n this.isTouched = false\n }\n\n // ===== validation =====\n\n private isRequired(form?: Form): boolean {\n let isRequired\n if (typeof this.options.isRequired === 'function') {\n isRequired = this.options.isRequired(form ?? null)\n } else {\n isRequired = this.options.isRequired ?? false\n }\n\n return isRequired\n }\n\n checkValid(form?: Form): boolean {\n this._errors = []\n\n if (this.isRequired(form) && this.forms.length === 0) {\n this._errors.push(\n this.options.messages?.isRequired ??\n \"Добавьте хотя бы один элемент\"\n )\n return false\n }\n\n if (this.options.minForms != null && this._forms.length < this.options.minForms) {\n this._errors.push(\n this.options.messages?.minForms ??\n `Значений должно быть не меньше ${this.options.minForms}`\n )\n return false\n }\n\n if (this.options.maxForms != null && this._forms.length > this.options.maxForms) {\n this._errors.push(\n this.options.messages?.maxForms ??\n `Значений должно быть не больше ${this.options.maxForms}`\n )\n return false\n }\n\n let valid = true\n\n for (const form of this.forms) {\n const ok = form.checkValid(form)\n if (!ok) valid = false\n }\n\n if (this.options.validate) {\n const result = this.options.validate(this.forms, form)\n\n if (result === false) {\n this._errors.push(\n this.options.messages?.validate ??\n \"Ошибка валидации\"\n )\n return false\n }\n\n if (typeof result === \"string\") {\n this._errors.push(result)\n return false\n }\n }\n\n return valid && this._errors.length === 0\n }\n\n checkAndSetValid(form?: Form): boolean {\n return this.checkValid(form)\n }\n\n get isValid(): boolean {\n return (\n this._errors.length === 0 &&\n this._forms.every(i => i.checkValid() === true)\n )\n }\n\n get errors(): string[] {\n return this._errors\n }\n\n get error(): string {\n return this._errors[0] ?? ''\n }\n\n set error(message: string | null) {\n if (message) {\n this._errors = [message]\n } else {\n this._errors = []\n }\n }\n}","import {Field} from \"@core/fields/Field\";\nimport {ArrayField} from \"@core/fields/ArrayField\";\nimport {ArrayFormField} from \"@core/fields/ArrayFormField\";\n\n\nexport abstract class Form {\n private _globalErrors: Record<string, string> = {}\n\n protected get _fields(): Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>> {\n const fields: Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>> = {}\n\n for (const key of Object.keys(this)) {\n const property = (this as any)[key]\n if (property instanceof Field || property instanceof ArrayField || property instanceof ArrayFormField) {\n fields[key] = property\n }\n }\n\n return fields\n }\n\n checkValid(form?: this): boolean { // ✅ Form → this\n let isFormValid = true\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n const field = fields[key]\n if (!field.checkAndSetValid(form ?? this)) {\n isFormValid = false\n }\n }\n\n return isFormValid\n }\n\n get fieldsValue(): Record<string, any> {\n const data: Record<string, any> = {}\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n let valueClear = null\n const field = fields[key]\n if (field instanceof Field) valueClear = field.valueClear\n else if (field instanceof ArrayField) valueClear = field.itemsValue\n else if (field instanceof ArrayFormField) valueClear = field.formsFieldsValue\n else console.error(`Invalid field \"${key}\" type`)\n data[key] = valueClear\n }\n\n return data\n }\n\n set fields(data: Record<string, any>) {\n const fields = this._fields\n\n for (const key of Object.keys(data)) {\n const field = fields[key]\n if (field) {\n if (field instanceof Field) field.rawValue = data[key]\n else if (field instanceof ArrayField) field.itemsValue = data[key]\n else if (field instanceof ArrayFormField) field.forms = data[key]\n else console.error(`Invalid field \"${key}\" type`)\n }\n }\n }\n\n get allErrors(): Record<string, string[]> {\n const errors: Record<string, string[]> = {}\n const fields = this._fields\n\n for (const key of Object.keys(fields)) {\n const fieldErrors = fields[key].errors\n if (fieldErrors.length > 0) {\n errors[key] = fieldErrors\n }\n }\n\n // Добавляем глобальные ошибки\n for (const key of Object.keys(this._globalErrors)) {\n if (!errors[key]) {\n errors[key] = []\n }\n errors[key].push(this._globalErrors[key])\n }\n\n return errors\n }\n\n get globalErrors(): Record<string, string> {\n return {...this._globalErrors}\n }\n\n set errors(errors: Record<string, string>) {\n const fields = this._fields\n this._globalErrors = {}\n\n for (const key of Object.keys(errors)) {\n const keys = key.split('.')\n const cleanKey = keys.length > 1 ? keys[1] : key\n\n if (cleanKey in fields && fields[cleanKey]) {\n fields[cleanKey].error = errors[key]\n } else {\n this._globalErrors[key] = errors[key]\n }\n }\n }\n\n setGlobalError(key: string, message: string): void {\n this._globalErrors[key] = message\n }\n\n clearGlobalErrors(): void {\n this._globalErrors = {}\n }\n\n reset(): void {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n fields[key].reset()\n }\n this._globalErrors = {}\n }\n\n get isTouched(): boolean {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n if (fields[key].isTouched) return true\n }\n return false\n }\n\n // Проверить, валидна ли форма\n get isValid(): boolean {\n const fields = this._fields\n for (const key of Object.keys(fields)) {\n if (fields[key].isValid !== true) return false\n }\n return Object.keys(this._globalErrors).length === 0\n }\n\n // Получить все значения в виде FormData (для отправки на сервер)\n toFormData(): FormData {\n const formData = new FormData()\n const data = this.fieldsValue\n\n for (const [key, value] of Object.entries(data)) {\n if (value instanceof Date) {\n formData.append(key, value.toISOString())\n } else if (value !== null && value !== undefined) {\n formData.append(key, String(value))\n }\n }\n\n return formData\n }\n\n // Получить все значения в виде JSON\n toJSON(): Record<string, any> {\n const data = this.fieldsValue\n\n // Преобразуем даты в строки для JSON\n const json: Record<string, any> = {}\n for (const [key, value] of Object.entries(data)) {\n if (value instanceof Date) {\n json[key] = value.toISOString()\n } else {\n json[key] = value\n }\n }\n\n return json\n }\n}","import {PluginOptions} from \"@core/options\";\nimport {Field} from \"@core/fields/Field\";\n\nexport interface FieldPlugin<T = any> {\n pluginOptions?: PluginOptions\n\n init?(field: Field<T>): void\n\n toRawValue?(value: any, field: Field<T>): any\n\n toValueClear?(value: any, field: Field<T>): any\n}\n\nexport abstract class BasePlugin<T = any> implements FieldPlugin<T> {\n pluginOptions: PluginOptions\n\n constructor(pluginOptions: PluginOptions = {}) {\n this.pluginOptions = {\n priority: 0,\n ...pluginOptions\n }\n }\n}","import {BasePlugin} from \"@core/plugins/FieldPlugin\";\nimport {MaskPluginOptions, PluginOptions} from \"@core/options\";\nimport {Field} from \"@core/fields\";\n\ninterface MaskPart {\n char: string // символ для отображения\n isPlaceholder: boolean // true если это заполнитель (можно вводить)\n isEscaped: boolean // true если символ экранирован (попадает в rawValue)\n replacementValue?: string // фиксированная замена\n allowedChars?: string // разрешенные символы (вместо сложного паттерна)\n transformOnMatch?: string // во что преобразовать при совпадении\n transformOnMismatch?: string // во что преобразовать при несовпадении\n defaultValue?: string\n pushToNext?: boolean // если true, отправить символ в следующий placeholder\n}\n\nexport class MaskPlugin extends BasePlugin {\n private config: MaskPluginOptions\n private maskParts: MaskPart[] = []\n\n constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions) {\n super(pluginOptions)\n this.config = config\n }\n\n init(field: Field<any>): void {\n this.parseMask()\n }\n\n toRawValue(value: string, field: Field): string {\n return this.applyMask(value)\n }\n\n toValueClear(value: string, field: Field): string {\n return this.removeMask(value)\n }\n\n private parseMask(): void {\n this.maskParts = []\n let i = 0\n let escaped = false\n\n while (i < this.config.maskFormat.length) {\n const char = this.config.maskFormat[i]\n\n // Проверяем на экранирование\n if (char === '/' && !escaped) {\n escaped = true\n i++\n continue\n }\n\n if (char === this.config.maskPlaceholder &&\n i + 1 < this.config.maskFormat.length &&\n this.config.maskFormat[i + 1] === '{' &&\n !escaped) {\n\n const openBracket = i + 1\n const closeBracket = this.config.maskFormat.indexOf('}', openBracket)\n\n if (closeBracket !== -1 && closeBracket > openBracket + 1) {\n const configString = this.config.maskFormat.substring(openBracket + 1, closeBracket).trim()\n\n if (configString.includes('>')) {\n const parts = configString.split('>')\n const allowedChars = parts[0].trim()\n const replacementOnMatch = parts[1]?.trim() || ''\n\n // Проверяем на >> (pushToNext)\n let replacementOnMismatch = parts[2]?.trim() || ''\n let pushToNext = false\n\n if (parts.length > 2 && parts[2] === '' && parts[3] !== undefined) {\n // Синтаксис: allowedChars > match > > pushValue\n pushToNext = true\n replacementOnMismatch = parts[3]?.trim() || ''\n } else if (replacementOnMismatch === '' && parts.length > 3) {\n // Синтаксис: allowedChars > match > > pushValue\n pushToNext = true\n replacementOnMismatch = parts[3]?.trim() || ''\n }\n\n this.maskParts.push({\n char: replacementOnMatch || this.config.maskPlaceholder,\n isPlaceholder: true,\n isEscaped: escaped,\n allowedChars: allowedChars,\n transformOnMatch: replacementOnMatch,\n transformOnMismatch: replacementOnMismatch,\n defaultValue: replacementOnMatch,\n pushToNext: pushToNext\n })\n } else {\n this.maskParts.push({\n char: configString,\n isPlaceholder: true,\n isEscaped: escaped,\n replacementValue: configString,\n defaultValue: configString\n })\n }\n\n escaped = false\n i = closeBracket + 1\n continue\n }\n }\n\n const isPlaceholder = char === this.config.maskPlaceholder\n this.maskParts.push({\n char: char,\n isPlaceholder: isPlaceholder,\n isEscaped: escaped\n })\n\n escaped = false\n i++\n }\n }\n\n private applyMask(value: string): string {\n if (typeof value !== 'string' || !value) return ''\n\n let result = ''\n let inputIndex = 0\n\n for (let maskIndex = 0; maskIndex < this.maskParts.length; maskIndex++) {\n const part = this.maskParts[maskIndex]\n\n if (inputIndex >= value.length) {\n if (part.replacementValue) {\n result += part.replacementValue\n continue\n }\n if (part.transformOnMatch) {\n result += part.transformOnMatch\n continue\n }\n break\n }\n\n const inputChar = value[inputIndex]\n\n if (part.isPlaceholder) {\n if (part.replacementValue) {\n result += part.replacementValue\n inputIndex++\n } else if (part.allowedChars) {\n if (part.allowedChars.includes(inputChar)) {\n // Символ разрешен - заменяем на matchReplacement\n result += part.transformOnMatch || inputChar\n inputIndex++\n } else if (part.pushToNext) {\n // Символ не разрешен, но pushToNext = true\n // Вставляем mismatchReplacement, а символ идет дальше\n result += part.transformOnMismatch || this.config.maskPlaceholder\n // НЕ сдвигаем inputIndex - символ обработается в следующем placeholder\n } else if (part.transformOnMismatch !== undefined) {\n // Обычная замена при несовпадении\n result += part.transformOnMismatch || this.config.maskPlaceholder\n inputIndex++\n } else {\n result += this.config.maskPlaceholder\n }\n } else {\n // Обычный placeholder\n if (this.config.digitPattern.test(inputChar)) {\n result += inputChar\n inputIndex++\n } else if (inputChar === this.config.maskPlaceholder) {\n result += this.config.maskPlaceholder\n inputIndex++\n } else {\n inputIndex++\n maskIndex--\n }\n }\n } else {\n // Литерал\n if (inputChar === part.char) {\n result += part.char\n inputIndex++\n } else if (this.config.digitPattern.test(inputChar)) {\n result += part.char\n } else {\n result += part.char\n }\n }\n }\n\n return result\n }\n\n private removeMask(value: string): string {\n if (typeof value !== 'string' || !value) return ''\n\n let result = ''\n let inputIndex = 0\n\n for (let maskIndex = 0; maskIndex < this.maskParts.length; maskIndex++) {\n const part = this.maskParts[maskIndex]\n\n if (inputIndex >= value.length) {\n if (part.replacementValue) {\n result += part.replacementValue\n } else if (part.transformOnMatch) {\n result += part.transformOnMatch\n }\n continue\n }\n\n const inputChar = value[inputIndex]\n\n if (part.isPlaceholder) {\n if (part.replacementValue) {\n result += part.replacementValue\n } else if (part.allowedChars) {\n if (part.allowedChars.includes(inputChar)) {\n result += part.transformOnMatch || inputChar\n } else if (part.pushToNext) {\n // Вставляем mismatchReplacement, символ идет дальше\n result += part.transformOnMismatch || ''\n // НЕ сдвигаем inputIndex\n continue\n } else {\n result += part.transformOnMatch || ''\n }\n } else {\n if (inputChar !== this.config.maskPlaceholder &&\n this.config.digitPattern.test(inputChar)) {\n result += inputChar\n }\n }\n inputIndex++\n } else if (part.isEscaped) {\n result += part.char\n if (inputChar === part.char) inputIndex++\n } else {\n if (inputChar === part.char) inputIndex++\n }\n }\n\n return result\n }\n}","import {FieldOptions} from \"@core/options\";\nimport {Form} from \"@core/Form\";\n\n\nexport abstract class FieldType<T, O extends FieldOptions = FieldOptions> {\n options: O\n\n constructor(options: O) {\n this.options = {\n isRequired: true,\n messages: {},\n ...options\n } as O\n }\n\n abstract cast(rawValue: any): T | null\n\n abstract validate(value: T, form?: Form): string[]\n\n abstract getTypeName(): string\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {StringOptions} from \"@core/options\";\n\nexport class StringType extends FieldType<string, StringOptions> {\n cast(rawValue: any): string | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'string') return rawValue\n return String(rawValue)\n }\n\n validate(value: string): string[] {\n const errors: string[] = []\n\n if (this.options.minLength != null && value.length < this.options.minLength) {\n errors.push(\n this.options.messages?.minLength ??\n `Минимальная длина ${this.options.minLength} символов`\n )\n }\n\n if (this.options.maxLength != null && value.length > this.options.maxLength) {\n errors.push(\n this.options.messages?.maxLength ??\n `Максимальная длина ${this.options.maxLength} символов`\n )\n }\n\n if (this.options.pattern != null && !this.options.pattern.test(value)) {\n errors.push(this.options.messages?.pattern ?? 'Неверный формат')\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'строка'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {NumberOptions} from \"@core/options\";\n\nexport class NumberType extends FieldType<number, NumberOptions> {\n cast(rawValue: any): number | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'number' && !isNaN(rawValue)) return rawValue\n\n if (typeof rawValue === 'string') {\n const num = Number(rawValue)\n return isNaN(num) ? null : num\n }\n\n return null\n }\n\n validate(value: number): string[] {\n const errors: string[] = []\n\n if (!Number.isInteger(value)) {\n errors.push(this.options.messages?.invalid ?? 'Значение должно быть целым числом')\n }\n\n if (this.options.gt != null && value <= this.options.gt) {\n errors.push(\n this.options.messages?.gt ??\n `Значение должно быть больше ${this.options.gt}`\n )\n }\n\n if (this.options.ge != null && value < this.options.ge) {\n errors.push(\n this.options.messages?.ge ??\n `Значение должно быть не менее ${this.options.ge}`\n )\n }\n\n if (this.options.lt != null && value >= this.options.lt) {\n errors.push(\n this.options.messages?.lt ??\n `Значение должно быть меньше ${this.options.lt}`\n )\n }\n\n if (this.options.le != null && value > this.options.le) {\n errors.push(\n this.options.messages?.le ??\n `Значение должно быть не более ${this.options.le}`\n )\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'число'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {DecimalOptions} from \"@core/options\";\n\nexport class DecimalType extends FieldType<number | string, DecimalOptions> {\n constructor(options: DecimalOptions = {} as DecimalOptions) {\n super({\n decimalPlaces: 2,\n maxDigits: 8,\n ...options\n } as DecimalOptions)\n }\n\n cast(rawValue: any): number | string | null {\n if (rawValue === null || rawValue === undefined) return null\n\n if (typeof rawValue === 'string') {\n return this.castString(rawValue)\n }\n\n if (typeof rawValue === 'number' && !isNaN(rawValue)) {\n return rawValue\n }\n\n return null\n }\n\n private castString(value: string): string | null {\n const trimmed = value.trim()\n\n if (!trimmed) return null\n\n // Заменяем запятую на точку\n const normalized = trimmed.replace(',', '.')\n\n // Проверяем, что строка похожа на число\n if (!this.isValidNumberString(normalized)) {\n return null\n }\n\n return normalized\n }\n\n validate(value: number | string): string[] {\n const errors: string[] = []\n value = typeof value === 'number' ? this.numberToString(value) : value\n\n // Проверяем, что строка соответствует формату числа\n if (!this.isValidNumberString(value)) {\n errors.push(this.options.messages?.invalid ?? 'Пример: 1.00')\n return errors\n }\n\n const maxDigits = this.options.maxDigits || 8\n const decimalPlaces = this.options.decimalPlaces || 2\n const maxIntDigits = maxDigits - decimalPlaces\n\n // Разбираем строку на части\n const isNegative = value.startsWith('-')\n const normalizedValue = isNegative ? value.substring(1) : value\n const parts = normalizedValue.split('.')\n const intPart = parts[0]\n const decPart = parts.length > 1 ? parts[1] : ''\n\n // Проверка на точку в конце (пользователь ещё вводит)\n if (normalizedValue.endsWith('.')) {\n // Проверяем только целую часть\n if (intPart.length > maxIntDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков перед запятой ${maxIntDigits}`\n )\n }\n return errors\n }\n\n // Проверка целой части\n if (intPart.length === 0) {\n errors.push(this.options.messages?.invalid ?? 'Пример: 1.00')\n return errors\n }\n\n if (intPart.length > maxIntDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков перед запятой ${maxIntDigits}`\n )\n }\n\n // Проверка десятичной части\n if (parts.length === 2) {\n // Общее количество знаков\n if (intPart.length + decPart.length > maxDigits) {\n errors.push(\n this.options.messages?.maxDigits ??\n `Максимальное количество знаков ${maxDigits}`\n )\n }\n\n // Количество знаков после запятой\n if (decPart.length === 0) {\n errors.push(\n this.options.messages?.invalid ??\n 'После точки должен быть минимум 1 знак'\n )\n } else if (decPart.length > decimalPlaces) {\n errors.push(\n this.options.messages?.decimalPlaces ??\n `Максимальное количество знаков после запятой ${decimalPlaces}`\n )\n }\n }\n\n // Если есть ошибки формата — дальше не проверяем\n if (errors.length > 0) return errors\n\n // Проверка min/max (только если значение не в процессе ввода)\n if (!value.endsWith('.')) {\n const numValue = parseFloat(value)\n\n if (!isNaN(numValue)) {\n if (this.options.gt != null && numValue <= this.options.gt) {\n errors.push(\n this.options.messages?.gt ??\n `Значение должно быть больше ${this.options.gt}`\n )\n }\n\n if (this.options.ge != null && numValue < this.options.ge) {\n errors.push(\n this.options.messages?.ge ??\n `Значение должно быть не менее ${this.options.ge}`\n )\n }\n\n if (this.options.lt != null && numValue >= this.options.lt) {\n errors.push(\n this.options.messages?.lt ??\n `Значение должно быть меньше ${this.options.lt}`\n )\n }\n\n if (this.options.le != null && numValue > this.options.le) {\n errors.push(\n this.options.messages?.le ??\n `Значение должно быть не более ${this.options.le}`\n )\n }\n }\n }\n\n return errors\n }\n\n private isValidNumberString(value: string): boolean {\n // Разрешаем: 123, 123.45, -123.45, 123.\n const pattern = /^-?\\d+\\.?\\d*$/\n\n // Проверяем, что нет больше одной точки\n const dotCount = (value.match(/\\./g) || []).length\n if (dotCount > 1) return false\n\n // Проверяем формат\n return pattern.test(value)\n }\n\n private numberToString(value: number): string {\n const decimalPlaces = this.options.decimalPlaces\n\n return value.toFixed(decimalPlaces)\n }\n\n getTypeName(): string {\n return 'десятичное число'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {BooleanOptions} from \"@core/options\";\n\nexport class BooleanType extends FieldType<boolean, BooleanOptions> {\n cast(rawValue: any): boolean | null {\n if (rawValue === null || rawValue === undefined) return null\n if (typeof rawValue === 'boolean') return rawValue\n\n if (typeof rawValue === 'string') {\n if (rawValue === 'true' || rawValue === '1') return true\n if (rawValue === 'false' || rawValue === '0') return false\n }\n\n if (typeof rawValue === 'number') {\n if (rawValue === 1) return true\n if (rawValue === 0) return false\n }\n\n return null\n }\n\n validate(value: boolean): string[] {\n const errors: string[] = []\n\n if (this.options.mustBeTrue && value !== true) {\n errors.push(this.options.messages?.mustBeTrue ?? 'Значение должно быть true')\n }\n\n if (this.options.mustBeFalse && value !== false) {\n errors.push(this.options.messages?.mustBeFalse ?? 'Значение должно быть false')\n }\n\n return errors\n }\n\n getTypeName(): string {\n return 'логическое значение'\n }\n}","import {FieldType} from \"@core/types/FieldType\";\nimport {DateOptions} from \"@core/options\";\n\nexport class DateType extends FieldType<Date, DateOptions> {\n constructor(options: DateOptions = {}) {\n super(options)\n }\n\n cast(rawValue: any): Date | null {\n if (rawValue === null || rawValue === undefined) return null\n\n if (rawValue instanceof Date) {\n return isNaN(rawValue.getTime()) ? null : rawValue\n }\n\n if (typeof rawValue === 'string') {\n const date = new Date(rawValue)\n return isNaN(date.getTime()) ? null : date\n }\n\n return null\n }\n\n validate(value: Date): string[] {\n const errors: string[] = []\n\n if (isNaN(value.getTime())) {\n errors.push(this.options.messages?.invalid ?? 'Неверная дата')\n return errors\n }\n\n if (this.options.minDate) {\n if (!this.compareDates(value, this.options.minDate, 'min')) {\n errors.push(\n this.options.messages?.minDate ??\n `Дата должна быть не ранее ${this.options.minDate!.toLocaleDateString()}`\n )\n }\n }\n\n if (this.options.maxDate) {\n if (!this.compareDates(value, this.options.maxDate, 'max')) {\n errors.push(\n this.options.messages?.maxDate ??\n `Дата должна быть не позднее ${this.options.maxDate!.toLocaleDateString()}`\n )\n }\n }\n\n return errors\n }\n\n getTypeName(): string {\n return this.options.isDatetime ? 'дата и время' : 'дата'\n }\n\n // Сравнение дат с учётом времени\n private compareDates(value: Date, boundary: Date, type: 'min' | 'max'): boolean {\n if (this.options.isDatetime) {\n // Если время важно — сравниваем точно\n if (type === 'min') {\n return value >= boundary // value должен быть >= minDate\n } else {\n return value <= boundary // value должен быть <= maxDate\n }\n } else {\n // Если время не важно — сравниваем только даты\n const valueDate = this.toDateOnly(value)\n const boundaryDate = this.toDateOnly(boundary)\n\n if (type === 'min') {\n return valueDate >= boundaryDate\n } else {\n return valueDate <= boundaryDate\n }\n }\n }\n\n private toDateOnly(date: Date): Date {\n return new Date(date.getFullYear(), date.getMonth(), date.getDate())\n }\n}","let DateTimeConstructor: any = null\nlet isLoading = false\nlet loadError: Error | null = null\nlet loadPromise: Promise<any> | null = null\n\nexport function getDateTimeConstructor(): any {\n if (DateTimeConstructor) {\n return DateTimeConstructor\n }\n\n if (loadError) {\n throw loadError\n }\n\n if (isLoading) {\n throw new Error(\n 'Luxon is still loading. Please await initLuxon() first.'\n )\n }\n\n throw new Error(\n 'Luxon is not initialized. Install: npm install luxon'\n )\n}\n\nexport function initLuxon(): Promise<any> {\n if (DateTimeConstructor) {\n return Promise.resolve(DateTimeConstructor)\n }\n\n if (loadPromise) {\n return loadPromise\n }\n\n isLoading = true\n loadPromise = (async () => {\n try {\n const luxon = await import('luxon')\n DateTimeConstructor = luxon.DateTime\n return DateTimeConstructor\n } catch (error) {\n loadError = new Error(\n 'DateLuxonType requires the \"luxon\" package to be installed.\\n' +\n 'Install: npm install luxon'\n )\n throw loadError\n } finally {\n isLoading = false\n }\n })()\n\n return loadPromise\n}\n\nexport function isLuxonAvailable(): boolean {\n return DateTimeConstructor !== null\n}\n\nexport function resetLuxon(): void {\n DateTimeConstructor = null\n isLoading = false\n loadError = null\n loadPromise = null\n}\n\ninitLuxon().catch(() => {})"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { DateTime } from 'luxon';
|
|
2
|
-
export { DateTime as LuxonDateTime } from 'luxon';
|
|
3
|
-
|
|
4
1
|
interface FieldPlugin<T = any> {
|
|
5
2
|
pluginOptions?: PluginOptions;
|
|
6
3
|
init?(field: Field<T>): void;
|
|
@@ -12,6 +9,64 @@ declare abstract class BasePlugin<T = any> implements FieldPlugin<T> {
|
|
|
12
9
|
constructor(pluginOptions?: PluginOptions);
|
|
13
10
|
}
|
|
14
11
|
|
|
12
|
+
declare class ArrayField<T = any> {
|
|
13
|
+
protected factory: (value?: T) => Field<T>;
|
|
14
|
+
protected options: ArrayFieldOptions;
|
|
15
|
+
protected _items: Field<T>[];
|
|
16
|
+
protected _errors: string[];
|
|
17
|
+
isTouched: boolean;
|
|
18
|
+
constructor(factory: (value?: T) => Field<T>, options?: ArrayFieldOptions, initial?: T[]);
|
|
19
|
+
set itemsValue(items: T[]);
|
|
20
|
+
get itemsValue(): T[];
|
|
21
|
+
get items(): Field<T>[];
|
|
22
|
+
add(value?: T, force_check?: boolean): Field<T>;
|
|
23
|
+
remove(index: number): void;
|
|
24
|
+
clear(): void;
|
|
25
|
+
private isRequired;
|
|
26
|
+
checkValid(form?: Form): boolean;
|
|
27
|
+
checkAndSetValid(form?: Form): boolean;
|
|
28
|
+
get isValid(): boolean;
|
|
29
|
+
get error(): string;
|
|
30
|
+
set error(message: string | null);
|
|
31
|
+
get errors(): string[];
|
|
32
|
+
reset(): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare class ArrayFormField<T extends Form = Form> {
|
|
36
|
+
private FormConstructor;
|
|
37
|
+
private options;
|
|
38
|
+
private _forms;
|
|
39
|
+
private _errors;
|
|
40
|
+
isTouched: boolean;
|
|
41
|
+
constructor(FormConstructor: new () => T, options?: ArrayFormFieldOptions, initial?: any[]);
|
|
42
|
+
set forms(forms: any[]);
|
|
43
|
+
get forms(): Form[];
|
|
44
|
+
get formsFieldsValue(): any[];
|
|
45
|
+
add(data?: any, force_check?: boolean): T;
|
|
46
|
+
remove(index: number): void;
|
|
47
|
+
clear(): void;
|
|
48
|
+
reset(): void;
|
|
49
|
+
private isRequired;
|
|
50
|
+
checkValid(form?: Form): boolean;
|
|
51
|
+
checkAndSetValid(form?: Form): boolean;
|
|
52
|
+
get isValid(): boolean;
|
|
53
|
+
get errors(): string[];
|
|
54
|
+
get error(): string;
|
|
55
|
+
set error(message: string | null);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare class MaskPlugin extends BasePlugin {
|
|
59
|
+
private config;
|
|
60
|
+
private maskParts;
|
|
61
|
+
constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions);
|
|
62
|
+
init(field: Field<any>): void;
|
|
63
|
+
toRawValue(value: string, field: Field): string;
|
|
64
|
+
toValueClear(value: string, field: Field): string;
|
|
65
|
+
private parseMask;
|
|
66
|
+
private applyMask;
|
|
67
|
+
private removeMask;
|
|
68
|
+
}
|
|
69
|
+
|
|
15
70
|
interface messagesOptions {
|
|
16
71
|
isRequired?: string;
|
|
17
72
|
validate?: string;
|
|
@@ -88,8 +143,8 @@ interface DateOptions extends FieldOptions {
|
|
|
88
143
|
messages?: messagesDateOptions;
|
|
89
144
|
}
|
|
90
145
|
interface DateLuxonOptions extends FieldOptions {
|
|
91
|
-
minDate?:
|
|
92
|
-
maxDate?:
|
|
146
|
+
minDate?: any;
|
|
147
|
+
maxDate?: any;
|
|
93
148
|
inputFormat?: string;
|
|
94
149
|
outputFormat?: string;
|
|
95
150
|
isDatetime?: boolean;
|
|
@@ -161,52 +216,6 @@ declare class Field<T = any, O extends FieldOptions = FieldOptions> {
|
|
|
161
216
|
reset(): void;
|
|
162
217
|
}
|
|
163
218
|
|
|
164
|
-
declare class ArrayField<T = any> {
|
|
165
|
-
protected factory: (value?: T) => Field<T>;
|
|
166
|
-
protected options: ArrayFieldOptions;
|
|
167
|
-
protected _items: Field<T>[];
|
|
168
|
-
protected _errors: string[];
|
|
169
|
-
isTouched: boolean;
|
|
170
|
-
constructor(factory: (value?: T) => Field<T>, options?: ArrayFieldOptions, initial?: T[]);
|
|
171
|
-
set itemsValue(items: T[]);
|
|
172
|
-
get itemsValue(): T[];
|
|
173
|
-
get items(): Field<T>[];
|
|
174
|
-
add(value?: T, force_check?: boolean): Field<T>;
|
|
175
|
-
remove(index: number): void;
|
|
176
|
-
clear(): void;
|
|
177
|
-
private isRequired;
|
|
178
|
-
checkValid(form?: Form): boolean;
|
|
179
|
-
checkAndSetValid(form?: Form): boolean;
|
|
180
|
-
get isValid(): boolean;
|
|
181
|
-
get error(): string;
|
|
182
|
-
set error(message: string | null);
|
|
183
|
-
get errors(): string[];
|
|
184
|
-
reset(): void;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
declare class ArrayFormField<T extends Form = Form> {
|
|
188
|
-
private FormConstructor;
|
|
189
|
-
private options;
|
|
190
|
-
private _forms;
|
|
191
|
-
private _errors;
|
|
192
|
-
isTouched: boolean;
|
|
193
|
-
constructor(FormConstructor: new () => T, options?: ArrayFormFieldOptions, initial?: any[]);
|
|
194
|
-
set forms(forms: any[]);
|
|
195
|
-
get forms(): Form[];
|
|
196
|
-
get formsFieldsValue(): any[];
|
|
197
|
-
add(data?: any, force_check?: boolean): T;
|
|
198
|
-
remove(index: number): void;
|
|
199
|
-
clear(): void;
|
|
200
|
-
reset(): void;
|
|
201
|
-
private isRequired;
|
|
202
|
-
checkValid(form?: Form): boolean;
|
|
203
|
-
checkAndSetValid(form?: Form): boolean;
|
|
204
|
-
get isValid(): boolean;
|
|
205
|
-
get errors(): string[];
|
|
206
|
-
get error(): string;
|
|
207
|
-
set error(message: string | null);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
219
|
declare abstract class Form {
|
|
211
220
|
private _globalErrors;
|
|
212
221
|
protected get _fields(): Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>>;
|
|
@@ -225,15 +234,46 @@ declare abstract class Form {
|
|
|
225
234
|
toJSON(): Record<string, any>;
|
|
226
235
|
}
|
|
227
236
|
|
|
237
|
+
declare class StringType extends FieldType<string, StringOptions> {
|
|
238
|
+
cast(rawValue: any): string | null;
|
|
239
|
+
validate(value: string): string[];
|
|
240
|
+
getTypeName(): string;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
declare class NumberType extends FieldType<number, NumberOptions> {
|
|
244
|
+
cast(rawValue: any): number | null;
|
|
245
|
+
validate(value: number): string[];
|
|
246
|
+
getTypeName(): string;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
declare class DecimalType extends FieldType<number | string, DecimalOptions> {
|
|
250
|
+
constructor(options?: DecimalOptions);
|
|
251
|
+
cast(rawValue: any): number | string | null;
|
|
252
|
+
private castString;
|
|
253
|
+
validate(value: number | string): string[];
|
|
254
|
+
private isValidNumberString;
|
|
255
|
+
private numberToString;
|
|
256
|
+
getTypeName(): string;
|
|
257
|
+
}
|
|
258
|
+
|
|
228
259
|
declare class BooleanType extends FieldType<boolean, BooleanOptions> {
|
|
229
260
|
cast(rawValue: any): boolean | null;
|
|
230
261
|
validate(value: boolean): string[];
|
|
231
262
|
getTypeName(): string;
|
|
232
263
|
}
|
|
233
264
|
|
|
234
|
-
declare
|
|
235
|
-
|
|
265
|
+
declare class DateType extends FieldType<Date, DateOptions> {
|
|
266
|
+
constructor(options?: DateOptions);
|
|
267
|
+
cast(rawValue: any): Date | null;
|
|
268
|
+
validate(value: Date): string[];
|
|
269
|
+
getTypeName(): string;
|
|
270
|
+
private compareDates;
|
|
271
|
+
private toDateOnly;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
declare function getDateTimeConstructor(): any;
|
|
275
|
+
declare function initLuxon(): Promise<any>;
|
|
236
276
|
declare function isLuxonAvailable(): boolean;
|
|
237
277
|
declare function resetLuxon(): void;
|
|
238
278
|
|
|
239
|
-
export { type ArrayFieldOptions, type ArrayFormFieldOptions, BasePlugin, type BooleanOptions, BooleanType, type DateLuxonOptions, type DateOptions, type DecimalOptions, type FieldOptions, type FieldPlugin, type MaskPluginOptions, type NumberOptions, type PluginOptions, type StringOptions,
|
|
279
|
+
export { ArrayField, type ArrayFieldOptions, ArrayFormField, type ArrayFormFieldOptions, BasePlugin, type BooleanOptions, BooleanType, type DateLuxonOptions, type DateOptions, DateType, type DecimalOptions, DecimalType, Field, type FieldOptions, type FieldPlugin, FieldType, Form, MaskPlugin, type MaskPluginOptions, type NumberOptions, NumberType, type PluginOptions, type StringOptions, StringType, getDateTimeConstructor, initLuxon, isLuxonAvailable, type messagesArrayFieldOptions, type messagesArrayFormFieldOptions, type messagesBooleanOptions, type messagesDateLuxonOptions, type messagesDateOptions, type messagesDecimalOptions, type messagesNumberOptions, type messagesOptions, type messagesStringOptions, resetLuxon };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { DateTime } from 'luxon';
|
|
2
|
-
export { DateTime as LuxonDateTime } from 'luxon';
|
|
3
|
-
|
|
4
1
|
interface FieldPlugin<T = any> {
|
|
5
2
|
pluginOptions?: PluginOptions;
|
|
6
3
|
init?(field: Field<T>): void;
|
|
@@ -12,6 +9,64 @@ declare abstract class BasePlugin<T = any> implements FieldPlugin<T> {
|
|
|
12
9
|
constructor(pluginOptions?: PluginOptions);
|
|
13
10
|
}
|
|
14
11
|
|
|
12
|
+
declare class ArrayField<T = any> {
|
|
13
|
+
protected factory: (value?: T) => Field<T>;
|
|
14
|
+
protected options: ArrayFieldOptions;
|
|
15
|
+
protected _items: Field<T>[];
|
|
16
|
+
protected _errors: string[];
|
|
17
|
+
isTouched: boolean;
|
|
18
|
+
constructor(factory: (value?: T) => Field<T>, options?: ArrayFieldOptions, initial?: T[]);
|
|
19
|
+
set itemsValue(items: T[]);
|
|
20
|
+
get itemsValue(): T[];
|
|
21
|
+
get items(): Field<T>[];
|
|
22
|
+
add(value?: T, force_check?: boolean): Field<T>;
|
|
23
|
+
remove(index: number): void;
|
|
24
|
+
clear(): void;
|
|
25
|
+
private isRequired;
|
|
26
|
+
checkValid(form?: Form): boolean;
|
|
27
|
+
checkAndSetValid(form?: Form): boolean;
|
|
28
|
+
get isValid(): boolean;
|
|
29
|
+
get error(): string;
|
|
30
|
+
set error(message: string | null);
|
|
31
|
+
get errors(): string[];
|
|
32
|
+
reset(): void;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
declare class ArrayFormField<T extends Form = Form> {
|
|
36
|
+
private FormConstructor;
|
|
37
|
+
private options;
|
|
38
|
+
private _forms;
|
|
39
|
+
private _errors;
|
|
40
|
+
isTouched: boolean;
|
|
41
|
+
constructor(FormConstructor: new () => T, options?: ArrayFormFieldOptions, initial?: any[]);
|
|
42
|
+
set forms(forms: any[]);
|
|
43
|
+
get forms(): Form[];
|
|
44
|
+
get formsFieldsValue(): any[];
|
|
45
|
+
add(data?: any, force_check?: boolean): T;
|
|
46
|
+
remove(index: number): void;
|
|
47
|
+
clear(): void;
|
|
48
|
+
reset(): void;
|
|
49
|
+
private isRequired;
|
|
50
|
+
checkValid(form?: Form): boolean;
|
|
51
|
+
checkAndSetValid(form?: Form): boolean;
|
|
52
|
+
get isValid(): boolean;
|
|
53
|
+
get errors(): string[];
|
|
54
|
+
get error(): string;
|
|
55
|
+
set error(message: string | null);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
declare class MaskPlugin extends BasePlugin {
|
|
59
|
+
private config;
|
|
60
|
+
private maskParts;
|
|
61
|
+
constructor(config: MaskPluginOptions, pluginOptions?: PluginOptions);
|
|
62
|
+
init(field: Field<any>): void;
|
|
63
|
+
toRawValue(value: string, field: Field): string;
|
|
64
|
+
toValueClear(value: string, field: Field): string;
|
|
65
|
+
private parseMask;
|
|
66
|
+
private applyMask;
|
|
67
|
+
private removeMask;
|
|
68
|
+
}
|
|
69
|
+
|
|
15
70
|
interface messagesOptions {
|
|
16
71
|
isRequired?: string;
|
|
17
72
|
validate?: string;
|
|
@@ -88,8 +143,8 @@ interface DateOptions extends FieldOptions {
|
|
|
88
143
|
messages?: messagesDateOptions;
|
|
89
144
|
}
|
|
90
145
|
interface DateLuxonOptions extends FieldOptions {
|
|
91
|
-
minDate?:
|
|
92
|
-
maxDate?:
|
|
146
|
+
minDate?: any;
|
|
147
|
+
maxDate?: any;
|
|
93
148
|
inputFormat?: string;
|
|
94
149
|
outputFormat?: string;
|
|
95
150
|
isDatetime?: boolean;
|
|
@@ -161,52 +216,6 @@ declare class Field<T = any, O extends FieldOptions = FieldOptions> {
|
|
|
161
216
|
reset(): void;
|
|
162
217
|
}
|
|
163
218
|
|
|
164
|
-
declare class ArrayField<T = any> {
|
|
165
|
-
protected factory: (value?: T) => Field<T>;
|
|
166
|
-
protected options: ArrayFieldOptions;
|
|
167
|
-
protected _items: Field<T>[];
|
|
168
|
-
protected _errors: string[];
|
|
169
|
-
isTouched: boolean;
|
|
170
|
-
constructor(factory: (value?: T) => Field<T>, options?: ArrayFieldOptions, initial?: T[]);
|
|
171
|
-
set itemsValue(items: T[]);
|
|
172
|
-
get itemsValue(): T[];
|
|
173
|
-
get items(): Field<T>[];
|
|
174
|
-
add(value?: T, force_check?: boolean): Field<T>;
|
|
175
|
-
remove(index: number): void;
|
|
176
|
-
clear(): void;
|
|
177
|
-
private isRequired;
|
|
178
|
-
checkValid(form?: Form): boolean;
|
|
179
|
-
checkAndSetValid(form?: Form): boolean;
|
|
180
|
-
get isValid(): boolean;
|
|
181
|
-
get error(): string;
|
|
182
|
-
set error(message: string | null);
|
|
183
|
-
get errors(): string[];
|
|
184
|
-
reset(): void;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
declare class ArrayFormField<T extends Form = Form> {
|
|
188
|
-
private FormConstructor;
|
|
189
|
-
private options;
|
|
190
|
-
private _forms;
|
|
191
|
-
private _errors;
|
|
192
|
-
isTouched: boolean;
|
|
193
|
-
constructor(FormConstructor: new () => T, options?: ArrayFormFieldOptions, initial?: any[]);
|
|
194
|
-
set forms(forms: any[]);
|
|
195
|
-
get forms(): Form[];
|
|
196
|
-
get formsFieldsValue(): any[];
|
|
197
|
-
add(data?: any, force_check?: boolean): T;
|
|
198
|
-
remove(index: number): void;
|
|
199
|
-
clear(): void;
|
|
200
|
-
reset(): void;
|
|
201
|
-
private isRequired;
|
|
202
|
-
checkValid(form?: Form): boolean;
|
|
203
|
-
checkAndSetValid(form?: Form): boolean;
|
|
204
|
-
get isValid(): boolean;
|
|
205
|
-
get errors(): string[];
|
|
206
|
-
get error(): string;
|
|
207
|
-
set error(message: string | null);
|
|
208
|
-
}
|
|
209
|
-
|
|
210
219
|
declare abstract class Form {
|
|
211
220
|
private _globalErrors;
|
|
212
221
|
protected get _fields(): Record<string, Field<any> | ArrayField<any> | ArrayFormField<any>>;
|
|
@@ -225,15 +234,46 @@ declare abstract class Form {
|
|
|
225
234
|
toJSON(): Record<string, any>;
|
|
226
235
|
}
|
|
227
236
|
|
|
237
|
+
declare class StringType extends FieldType<string, StringOptions> {
|
|
238
|
+
cast(rawValue: any): string | null;
|
|
239
|
+
validate(value: string): string[];
|
|
240
|
+
getTypeName(): string;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
declare class NumberType extends FieldType<number, NumberOptions> {
|
|
244
|
+
cast(rawValue: any): number | null;
|
|
245
|
+
validate(value: number): string[];
|
|
246
|
+
getTypeName(): string;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
declare class DecimalType extends FieldType<number | string, DecimalOptions> {
|
|
250
|
+
constructor(options?: DecimalOptions);
|
|
251
|
+
cast(rawValue: any): number | string | null;
|
|
252
|
+
private castString;
|
|
253
|
+
validate(value: number | string): string[];
|
|
254
|
+
private isValidNumberString;
|
|
255
|
+
private numberToString;
|
|
256
|
+
getTypeName(): string;
|
|
257
|
+
}
|
|
258
|
+
|
|
228
259
|
declare class BooleanType extends FieldType<boolean, BooleanOptions> {
|
|
229
260
|
cast(rawValue: any): boolean | null;
|
|
230
261
|
validate(value: boolean): string[];
|
|
231
262
|
getTypeName(): string;
|
|
232
263
|
}
|
|
233
264
|
|
|
234
|
-
declare
|
|
235
|
-
|
|
265
|
+
declare class DateType extends FieldType<Date, DateOptions> {
|
|
266
|
+
constructor(options?: DateOptions);
|
|
267
|
+
cast(rawValue: any): Date | null;
|
|
268
|
+
validate(value: Date): string[];
|
|
269
|
+
getTypeName(): string;
|
|
270
|
+
private compareDates;
|
|
271
|
+
private toDateOnly;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
declare function getDateTimeConstructor(): any;
|
|
275
|
+
declare function initLuxon(): Promise<any>;
|
|
236
276
|
declare function isLuxonAvailable(): boolean;
|
|
237
277
|
declare function resetLuxon(): void;
|
|
238
278
|
|
|
239
|
-
export { type ArrayFieldOptions, type ArrayFormFieldOptions, BasePlugin, type BooleanOptions, BooleanType, type DateLuxonOptions, type DateOptions, type DecimalOptions, type FieldOptions, type FieldPlugin, type MaskPluginOptions, type NumberOptions, type PluginOptions, type StringOptions,
|
|
279
|
+
export { ArrayField, type ArrayFieldOptions, ArrayFormField, type ArrayFormFieldOptions, BasePlugin, type BooleanOptions, BooleanType, type DateLuxonOptions, type DateOptions, DateType, type DecimalOptions, DecimalType, Field, type FieldOptions, type FieldPlugin, FieldType, Form, MaskPlugin, type MaskPluginOptions, type NumberOptions, NumberType, type PluginOptions, type StringOptions, StringType, getDateTimeConstructor, initLuxon, isLuxonAvailable, type messagesArrayFieldOptions, type messagesArrayFormFieldOptions, type messagesBooleanOptions, type messagesDateLuxonOptions, type messagesDateOptions, type messagesDecimalOptions, type messagesNumberOptions, type messagesOptions, type messagesStringOptions, resetLuxon };
|