import type { ManifestDefaultsDocument } from './defaults.js'; import { type ValidationError as SharedValidationError, type ValidationResult as SharedValidationResult } from '@wp-typia/api-client/runtime-primitives'; export type TypiaValidationError = SharedValidationError; export type ValidationResult = SharedValidationResult; export interface ValidationState extends ValidationResult { errorMessages: string[]; } export interface ValidationHookBindings { useMemo: (factory: () => S, deps: readonly unknown[]) => S; } export interface ScaffoldValidatorToolkitOptions { assert: (value: unknown) => T; clone: (value: T) => T; finalize?: (value: Partial) => unknown; is: (value: unknown) => value is T; manifest: ManifestDefaultsDocument; onValidationError?: (result: ValidationResult, key: keyof T) => void; prune: (value: T) => unknown; random: (...args: unknown[]) => T; validate: (value: unknown) => unknown; } export declare function normalizeValidationError(error: unknown): TypiaValidationError; export declare function toValidationResult(result: unknown): ValidationResult; export declare function formatValidationError(error: TypiaValidationError): string; export declare function formatValidationErrors(errors: readonly TypiaValidationError[]): string[]; export declare function toValidationState(result: ValidationResult): ValidationState; /** * Create a React-style hook that memoizes Typia validation results. * * @param bindings - Hook bindings supplied by the host runtime. * @returns A hook that validates one value and returns formatted error state. * @example * ```ts * const useTypiaValidation = createUseTypiaValidationHook({ useMemo }); * ``` * @category Scaffolding */ export declare function createUseTypiaValidationHook(bindings: ValidationHookBindings): (value: T, validator: (value: T) => ValidationResult) => ValidationState; /** * Create the validator toolkit used by generated scaffold runtimes. * * @remarks * The toolkit applies manifest defaults before validation and exposes safe * attribute updater helpers for editor integrations. * * @param options - Typia validators plus manifest-default metadata. * @returns Sanitizers, validators, and updater factories for scaffold attributes. * @example * ```ts * const toolkit = createScaffoldValidatorToolkit({ * assert, * clone, * is, * manifest, * prune, * random, * validate, * }); * ``` * @category Scaffolding */ export declare function createScaffoldValidatorToolkit(options: ScaffoldValidatorToolkitOptions): { createAttributeUpdater: (attributes: T, setAttributes: (attrs: Partial) => void, validator?: (value: T) => ValidationResult) => (key: K, value: T[K]) => boolean; sanitizeAttributes: (value: Partial) => T; validateAttributes: (value: unknown) => ValidationResult; validators: { assert: (value: unknown) => T; clone: (value: T) => T; is: (value: unknown) => value is T; prune: (value: T) => unknown; random: (...args: unknown[]) => T; validate: (value: unknown) => ValidationResult; }; }; /** * Create a shallow attribute updater that validates before committing changes. * * @param attributes - Current attribute snapshot. * @param setAttributes - Setter used to apply validated patches. * @param validate - Validator used to check the next attribute state. * @param onValidationError - Optional callback for rejected updates. * @returns A keyed updater that returns `true` when the patch is accepted. * @example * ```ts * const update = createAttributeUpdater(attributes, setAttributes, validate); * ``` * @category Scaffolding */ export declare function createAttributeUpdater(attributes: T, setAttributes: (attrs: Partial) => void, validate: (value: T) => ValidationResult, onValidationError?: (result: ValidationResult, key: keyof T) => void): (key: K, value: T[K]) => boolean; export declare function mergeNestedAttributeUpdate(attributes: T, path: string, value: unknown): T; export declare function toAttributePatch(key: K, value: T[K]): Pick; export declare function toNestedAttributePatch(attributes: T, path: string, value: unknown): Partial; /** * Create a nested attribute updater that validates dotted-path updates. * * @param attributes - Current attribute snapshot. * @param setAttributes - Setter used to apply validated patches. * @param validate - Validator used to check the next attribute state. * @param onValidationError - Optional callback for rejected nested updates. * @returns A path-based updater that returns `true` when the patch is accepted. * @example * ```ts * const updatePath = createNestedAttributeUpdater(attributes, setAttributes, validate); * ``` * @category Scaffolding */ export declare function createNestedAttributeUpdater(attributes: T, setAttributes: (attrs: Partial) => void, validate: (value: T) => ValidationResult, onValidationError?: (result: ValidationResult, path: string) => void): (path: string, value: unknown) => boolean;