vexip-ui
Version:
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
156 lines (155 loc) • 4.02 kB
JavaScript
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