@adbros/vue-validation
Version:
Composable for schema-based form validation in Vue 3 using Valibot
38 lines (35 loc) • 2.73 kB
TypeScript
import * as vue from 'vue';
import { MaybeRefOrGetter } from 'vue';
import * as valibot from 'valibot';
import { BaseSchema, BaseIssue, BaseSchemaAsync, InferOutput } from 'valibot';
type CustomSchema = BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>>;
declare const useValidationKey: (obj: unknown) => string[];
declare const useValidation: <TSchema extends CustomSchema>(schema: MaybeRefOrGetter<TSchema>, data: MaybeRefOrGetter<Record<string, unknown>>) => {
validate: () => Promise<valibot.SafeParseResult<TSchema>>;
errors: vue.ComputedRef<{
[x: string]: string;
}>;
silentErrors: vue.Ref<{
readonly root?: [string, ...string[]] | undefined;
readonly nested?: (Readonly<Partial<Record<TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>> ? valibot.IssueDotPath<TSchema> : string, [string, ...string[]]>>> extends infer T ? { [TKey in keyof T]: Readonly<Partial<Record<TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>> ? valibot.IssueDotPath<TSchema> : string, [string, ...string[]]>>>[TKey]; } : never) | undefined;
readonly other?: [string, ...string[]] | undefined;
} | undefined, {
readonly root?: [string, ...string[]] | undefined;
readonly nested?: (Readonly<Partial<Record<TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>> ? valibot.IssueDotPath<TSchema> : string, [string, ...string[]]>>> extends infer T_1 ? { [TKey in keyof T_1]: Readonly<Partial<Record<TSchema extends BaseSchema<unknown, unknown, BaseIssue<unknown>> | BaseSchemaAsync<unknown, unknown, BaseIssue<unknown>> ? valibot.IssueDotPath<TSchema> : string, [string, ...string[]]>>>[TKey]; } : never) | undefined;
readonly other?: [string, ...string[]] | undefined;
} | undefined>;
output: vue.Ref<InferOutput<TSchema> | undefined, InferOutput<TSchema> | undefined>;
dirtyFields: vue.Ref<string[], string[]>;
validDirtyFields: vue.Ref<string[], string[]>;
makeFieldDirty: (name: string) => void;
makeFormDirty: () => void;
cleanField: (name: string) => void;
cleanForm: () => void;
setCustomError: (field: string, message: string) => void;
clearCustomError: (field: string) => void;
clearAllCustomErrors: () => void;
isDirty: (name: string) => boolean;
isFormValid: vue.ComputedRef<boolean>;
handleSubmit: (onSubmit: (values: InferOutput<TSchema>) => Promise<void> | void, onError?: () => void) => Promise<void>;
};
export { useValidation, useValidationKey };