{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import type {\n  Obj,\n  ValidationFunction,\n  Extender,\n  ExtenderHandler,\n  AssignableErrors,\n} from '@felte/common';\nimport { _set, CurrentForm } from '@felte/common';\nimport type { create } from 'vest';\n\nexport type ValidatorConfig = {\n  suite: ReturnType<typeof create>;\n};\n\nfunction shapeErrors<Data extends Obj>(\n  errors: Record<string, string[]>\n): AssignableErrors<Data> {\n  let err = {} as AssignableErrors<Data>;\n  for (const [fieldName, messages] of Object.entries(errors)) {\n    err = _set(err, fieldName, messages);\n  }\n  return err;\n}\n\nexport function validateSuite<Data extends Obj>(\n  suite: ReturnType<typeof create>\n): ValidationFunction<Data> {\n  return async function validate(\n    values: Data\n  ): Promise<AssignableErrors<Data> | undefined> {\n    return new Promise((resolve) => {\n      suite(values).done((results) => {\n        if (results.hasErrors()) {\n          resolve(shapeErrors<Data>(results.getErrors()));\n        } else {\n          resolve(undefined);\n        }\n      });\n    });\n  };\n}\n\nexport function warnSuite<Data extends Obj>(\n  suite: ReturnType<typeof create>\n): ValidationFunction<Data> {\n  return async function validate(\n    values: Data\n  ): Promise<AssignableErrors<Data> | undefined> {\n    const results = suite(values);\n    if (results.hasWarnings()) {\n      return shapeErrors<Data>(results.getWarnings());\n    }\n  };\n}\n\nexport function validator<Data extends Obj = Obj>({\n  suite,\n}: ValidatorConfig): Extender<Data> {\n  return function extender(\n    currentForm: CurrentForm<Data>\n  ): ExtenderHandler<Data> {\n    if (currentForm.stage !== 'SETUP') return {};\n    const validateFn = validateSuite<Data>(suite);\n    const warnFn = warnSuite<Data>(suite);\n    currentForm.addValidator(validateFn);\n    currentForm.addValidator(warnFn, { level: 'warning' });\n    return {};\n  };\n}\n"],"names":[],"mappings":";;AAcA,SAAS,WAAW,CAClB,MAAgC,EAAA;IAEhC,IAAI,GAAG,GAAG,EAA4B;AACtC,IAAA,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC1D,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC;;AAEtC,IAAA,OAAO,GAAG;AACZ;AAEM,SAAU,aAAa,CAC3B,KAAgC,EAAA;AAEhC,IAAA,OAAO,eAAe,QAAQ,CAC5B,MAAY,EAAA;AAEZ,QAAA,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAI;YAC7B,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AAC7B,gBAAA,IAAI,OAAO,CAAC,SAAS,EAAE,EAAE;oBACvB,OAAO,CAAC,WAAW,CAAO,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;;qBAC1C;oBACL,OAAO,CAAC,SAAS,CAAC;;AAEtB,aAAC,CAAC;AACJ,SAAC,CAAC;AACJ,KAAC;AACH;AAEM,SAAU,SAAS,CACvB,KAAgC,EAAA;AAEhC,IAAA,OAAO,eAAe,QAAQ,CAC5B,MAAY,EAAA;AAEZ,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE;AACzB,YAAA,OAAO,WAAW,CAAO,OAAO,CAAC,WAAW,EAAE,CAAC;;AAEnD,KAAC;AACH;AAEgB,SAAA,SAAS,CAAyB,EAChD,KAAK,GACW,EAAA;IAChB,OAAO,SAAS,QAAQ,CACtB,WAA8B,EAAA;AAE9B,QAAA,IAAI,WAAW,CAAC,KAAK,KAAK,OAAO;AAAE,YAAA,OAAO,EAAE;AAC5C,QAAA,MAAM,UAAU,GAAG,aAAa,CAAO,KAAK,CAAC;AAC7C,QAAA,MAAM,MAAM,GAAG,SAAS,CAAO,KAAK,CAAC;AACrC,QAAA,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC;QACpC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACtD,QAAA,OAAO,EAAE;AACX,KAAC;AACH;;;;"}