UNPKG

@skiyee/uni-ui

Version:

一个由原子化CSS驱动、符合直觉设计、高度定制化、面向AI时代的移动端 UI 库,助力开发者打造独特且差异化的移动端应用程序

7 lines 1.54 kB
/** * @skiyee/uni-ui v1.0.0 * @author skiyee(https://github.com/skiyee) * @license Apache License 2.0 * @copyright 2025-present skiyee All rights reserved. **/ const e=require(`./schema.cjs`);var t=class{schema;messageTransformer;pathTransformer;constructor(e){this.schema=e.schema,this.messageTransformer=e.messageTransformer,this.pathTransformer=e.pathTransformer}getDotPath(e){return e.path?.map(e=>typeof e==`object`?e.key:e).join(`.`)}getErrors(e){let t={},n=[];for(let r of e){let e=this.getDotPath(r);e?t[e]?t[e].push(r.message):t[e]=[r.message]:n.push(r.message)}return{fieldErrors:t,formErrors:n}}async validateForm(t){try{let n=await e.validateSchema(this.schema,t);return{success:!0,data:n,fieldErrors:{},formErrors:[],issues:[]}}catch(e){let t=this.transformIssues(e.issues||[]),n=this.getErrors(t);return{success:!1,fieldErrors:n.fieldErrors,formErrors:n.formErrors,issues:t}}}async validateField(e,t,n){let r=n?{...n}:{},i=await this.validateForm(r),a=[],o=i.fieldErrors[e];o&&a.push(...o);let s=i.issues.filter(t=>this.getDotPath(t)===e);return{success:!o||o.length===0,data:t,error:a,issues:s}}transformIssues(e){return!this.messageTransformer&&!this.pathTransformer?e:e.map(e=>{let t={...e};if(this.messageTransformer&&(t.message=this.messageTransformer(e)),this.pathTransformer&&e.path){let n=this.getFieldPath(e),r=this.pathTransformer(n);t.path=r.split(`.`)}return t})}getFieldPath(e){return e.path?e.path.map(e=>typeof e==`object`?String(e.key):String(e)):[]}};function n(e){return new t(e)}exports.createFormValidator=n;