{"version":3,"file":"index.cjs","sources":["../src/index.ts"],"sourcesContent":["/**\n * Returns if a string is a valid email\n *\n * @param value The value to validate\n * @returns `true` if we think it is an email otherwise `false`\n */\nexport function isEmail(value: unknown): boolean {\n  if (!value || typeof value !== 'string') return false;\n  const emailParts = value.split('@');\n  if (emailParts.length !== 2) return false;\n\n  const account = emailParts[0];\n  const address = emailParts[1];\n  if (!account || account.length > 64) return false;\n  else if (!address || address.length > 255) return false;\n\n  const domainParts = address.split('.');\n  if (\n    domainParts.some(function (part) {\n      return part.length > 63;\n    })\n  )\n    return false;\n\n  const tester =\n    /^[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~](\\.?[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\\.?[a-zA-Z0-9])*\\.[a-zA-Z](-?[a-zA-Z0-9])+$/;\n  if (!tester.test(value)) return false;\n\n  return true;\n}\n\n/**\n * Returns if a string is a valid hex encoded sha256 hash\n *\n * @param value The value to validate\n * @returns `true` if we think it is a sha256 otherwise `false`\n */\nexport function isSHA256(value: unknown): boolean {\n  return (\n    typeof value === 'string' &&\n    value.length === 64 &&\n    RegExp(/^[A-Fa-f0-9]{64}$/).test(value)\n  );\n}\n\n/**\n * A class that handles non boolean validation scores.\n *\n * @typeParam T The type that we're trying to validate\n */\nexport class ValidationScore<T> {\n  /**\n   * @param values The values to validate\n   * @param validator A function that will act as the validator\n   * @param ignoreNull Defines if we should ignore null values in our final score\n   */\n  constructor(\n    public readonly values: Array<T | null>,\n    public readonly validator: (value: unknown) => boolean,\n    public readonly ignoreNull: boolean = true,\n  ) {}\n\n  /**\n   * Returns a number betwen 0-1 representing the percentage of values that are valid\n   *\n   * @returns the percentage of values that are valid\n   */\n  validate(): number {\n    const cleanedValues = this.ignoreNull\n      ? this.values.filter((v) => v !== null)\n      : this.values;\n\n    return (\n      cleanedValues.reduce((score, value) => {\n        if (this.ignoreNull && value === null) {\n          return score;\n        }\n        return this.validator(value) ? score + 1 : score;\n      }, 0) / cleanedValues.length\n    );\n  }\n}\n"],"names":[],"mappings":";;;;;;;;;;AAAA;;;;;AAKG;AACG,SAAU,OAAO,CAAC,KAAc,EAAA;AACpC,IAAA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK,CAAC;IACtD,IAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpC,IAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AAE1C,IAAA,IAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9B,IAAA,IAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9B,IAAA,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,EAAE;AAAE,QAAA,OAAO,KAAK,CAAC;AAC7C,SAAA,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;AAAE,QAAA,OAAO,KAAK,CAAC;IAExD,IAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,IAAA,IACE,WAAW,CAAC,IAAI,CAAC,UAAU,IAAI,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AAC1B,KAAC,CAAC;AAEF,QAAA,OAAO,KAAK,CAAC;IAEf,IAAM,MAAM,GACV,+HAA+H,CAAC;AAClI,IAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AAEtC,IAAA,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;AAKG;AACG,SAAU,QAAQ,CAAC,KAAc,EAAA;AACrC,IAAA,QACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,MAAM,KAAK,EAAE;QACnB,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EACvC;AACJ,CAAC;AAED;;;;AAIG;AACH,IAAA,eAAA,kBAAA,YAAA;AACE;;;;AAIG;AACH,IAAA,SAAA,eAAA,CACkB,MAAuB,EACvB,SAAsC,EACtC,UAA0B,EAAA;AAA1B,QAAA,IAAA,UAAA,KAAA,KAAA,CAAA,EAAA,EAAA,UAA0B,GAAA,IAAA,CAAA,EAAA;QAF1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAiB;QACvB,IAAS,CAAA,SAAA,GAAT,SAAS,CAA6B;QACtC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;KACxC;AAEJ;;;;AAIG;AACH,IAAA,eAAA,CAAA,SAAA,CAAA,QAAQ,GAAR,YAAA;QAAA,IAaC,KAAA,GAAA,IAAA,CAAA;AAZC,QAAA,IAAM,aAAa,GAAG,IAAI,CAAC,UAAU;AACnC,cAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,KAAK,IAAI,CAAA,EAAA,CAAC;AACvC,cAAE,IAAI,CAAC,MAAM,CAAC;QAEhB,QACE,aAAa,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;AAChC,YAAA,IAAI,KAAI,CAAC,UAAU,IAAI,KAAK,KAAK,IAAI,EAAE;AACrC,gBAAA,OAAO,KAAK,CAAC;AACd,aAAA;AACD,YAAA,OAAO,KAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;SAClD,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,EAC5B;KACH,CAAA;IACH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA;;;;;;"}