import isEmail from "validator/lib/isEmail.js" import isBase64 from "validator/lib/isBase64.js" import isUUID from "validator/lib/isUUID.js" import isDataURI from "validator/lib/isDataURI.js" import isURL from "validator/lib/isURL.js" import isIP from "validator/lib/isIP.js" export type IDtoIsFunction = (val: any) => { isOk: boolean; msg?: string } const dtoIs = { isEmail: (val: any) => { return isEmail(val) ? { isOk: true } : { isOk: false, msg: "is not email." } }, isBase64: (val: any) => { return isBase64(val) ? { isOk: true } : { isOk: false, msg: "is not base64." } }, isUUID: (val: any) => { return isUUID(val) ? { isOk: true } : { isOk: false, msg: "is not UUID." } }, isDataURI: (val: any) => { return isDataURI(val) ? { isOk: true } : { isOk: false, msg: "is not DataURI." } }, isURL: (val: any) => { // 先用标准规则验证,再用允许 localhost 的规则验证 const isValid = isURL(val) || isURL(val, { require_tld: false, host_whitelist: ["localhost", "127.0.0.1"] }) return isValid ? { isOk: true } : { isOk: false, msg: "is not URL." } }, isIP: (val: any) => { return isIP(val) ? { isOk: true } : { isOk: false, msg: "is not IP." } }, /** * 是否在指定的值列表中 * * 相当于白名单,只允许列表中的值通过验证 * * @example * import {dto, dtoIs } from "fzz" * const {in} = dtoIs * * class DtoA { * name : dto.String({is:in(['alice', 'bob'])}) * } * */ in: (values: any[]) => { return (val: any) => { return values.includes(val) ? { isOk: true } : { isOk: false, msg: `not in [${values.join(", ")}].` } } }, /** * 是否不在指定的值列表中 * 相当于黑名单,不允许列表中的值通过验证 * * @example * import {dto, dtoIs } from "fzz" * const {notIn} = dtoIs * * class DtoA { * name : dto.String({is:notIn(['admin', 'root'])}) * } */ notIn: (values: any[]) => { return (val: any) => { return !values.includes(val) ? { isOk: true } : { isOk: false, msg: `in blacklist [${values.join(", ")}].` } } }, } export { dtoIs }