UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

156 lines (155 loc) 4.02 kB
import { isPromise as h, isDefined as c, isObject as d, isColor as E, toNumber as b, toDate as S } from "@vexip-ui/utils"; const l = "Validate failed", A = "1\\d\\d|2([0-4]\\d|5[0-5])", _ = `[1-9](\\d)?|${A}`, y = `\\d{1,2}|${A}`, $ = `(?:${_})\\.(?:${y})\\.(?:${y})\\.(?:${y})`, R = "(?:[a-zA-Z0-9][\\w-]*\\.)?(?:[a-zA-Z0-9][\\w-]*)(?:\\.[a-zA-Z]+){1,2}", w = "(?:(?:[\\/]+[^\\?\\.]+)+)?(?:[\\/]*)?(\\?([^&\\.]+=[^&\\.]*)(&[^&\\.]+=[^&\\.]*)*)?(#.*)?", I = new RegExp( `^(?:[a-z]{2,5}:(\\/+)?)?\\/\\/((?:${$})|(?:${R}))(?:${w})?$` ), N = /^(?:[a-zA-Z0-9][\w-]*)@(?:[a-zA-Z0-9][\w-]*)(?:\.[a-zA-Z]+){1,2}$/, z = /* @__PURE__ */ new Set([ "string", "number", "boolean", "int", "float", "array", "object", "date", "url", "color", "email" ]); async function U(r, t, e, n = !0, i = l) { Array.isArray(r) || (r = [r]); const s = []; for (const f of r) { const { message: u = i, validator: g } = f; if (typeof g == "function") { let a; try { a = g(t, e), h(a) && (a = await a); } catch (o) { a = o instanceof Error ? o.message : o; } if (a !== !0) { const o = typeof a == "string" ? a : u; if (s.push(o), !n) break; } } if (f.required && !T(t) && (s.push(u), !n) || c(t) && t !== "" && (f.enums && !G(t, f.enums) && (s.push(u), !n) || f.type && !M(t, f.type, f) && (s.push(u), !n))) break; } return s; } function T(r) { return !(!c(r) || r.toString().trim() === "" || Array.isArray(r) && !r.length || d(r) && !Object.keys(r).length); } function G(r, t) { if (!Array.isArray(t) || !t.length) return !0; if (Array.isArray(r)) { const e = new Set(t); for (const n of r) if (!e.has(n)) return !1; return !0; } else return t.includes(r); } function M(r, t, e = {}) { if (!z.has(t)) return !0; switch (t) { case "string": return P(r, e.length, e.range); case "number": return m(r, e.strict, e.length, e.range); case "boolean": return Z(r, e.strict); case "int": return k(r, e.strict, e.length, e.range); case "float": return D(r, e.strict, e.length, e.range); case "array": return Array.isArray(r); case "object": return d(r); case "date": return j(r, e.strict); case "url": return p(r); case "color": return typeof r == "string" && E(r); case "email": return x(r); } } function P(r, t, e) { if (typeof r != "string" || c(t) && r.length !== t) return !1; if (Array.isArray(e)) { const [n, i] = e; if (n && r.length < n || i && r.length > i) return !1; } return !0; } function m(r, t, e, n) { if (t) { if (typeof r != "number") return !1; } else if (r = Number(r), Number.isNaN(r)) return !1; const i = r; if (c(e) && i.toString().length !== e) return !1; if (Array.isArray(n)) { const [s, f] = n; if (c(s) && i < s || c(f) && i > f) return !1; } return !0; } function Z(r, t) { if (!t) { if (typeof r == "string") return r === "true" || r === "false"; if (typeof r == "number") return r === 1 || r === 0; } return typeof r == "boolean"; } function k(r, t, e, n) { if (m(r, t, e, n)) { const i = b(r); return Math.ceil(i) === i; } return !1; } function D(r, t, e, n) { if (m(r, t, e, n)) { const i = b(r); return t ? Math.ceil(i) !== i : i.toString().includes("."); } return !1; } function j(r, t) { if (t && !(r instanceof Date)) return !1; try { S(r); } catch { return !1; } return !0; } function p(r) { return typeof r == "string" && I.test(r); } function x(r) { return typeof r == "string" && N.test(r); } export { U as validate, Z as validateBoolean, j as validateDate, x as validateEmail, G as validateEnumeration, D as validateFloat, k as validateInt, m as validateNumber, T as validateRequirement, P as validateString, M as validateType, p as validateUrl }; //# sourceMappingURL=validator.mjs.map