ajv-formats-strong-password
Version:
Easy way to add configurable strong password format to ajv to use in schema validations
92 lines (89 loc) • 3.32 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
default: () => src_default,
defaultDigitCharacters: () => defaultDigitCharacters,
defaultLowerCharacters: () => defaultLowerCharacters,
defaultSpecialCharacters: () => defaultSpecialCharacters,
defaultUpperCharacters: () => defaultUpperCharacters,
generatePasswordStrengthValidator: () => generatePasswordStrengthValidator
});
module.exports = __toCommonJS(src_exports);
// src/addStrongPasswordFormat.ts
var defaultUpperCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var defaultLowerCharacters = "abcdefghijklmnopqrstuvwxyz";
var defaultDigitCharacters = "0123456789";
var defaultSpecialCharacters = " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
var countCharacters = (str, characters) => {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (characters.includes(str[i])) {
count++;
}
}
return count;
};
var generatePasswordStrengthValidator = ({
minUpper = 0,
minLower = 0,
minDigit = 0,
minSpecial = 0,
minLength = 0,
upperCharacters = defaultUpperCharacters,
lowerCharacters = defaultLowerCharacters,
digitCharacters = defaultDigitCharacters,
specialCharacters = defaultSpecialCharacters
} = {}) => {
return (password) => {
const effectiveMinLength = Math.max(
minUpper + minSpecial + minDigit + minLower,
minLength
);
const hasMinUpper = countCharacters(password, upperCharacters) >= minUpper;
const hasMinLower = countCharacters(password, lowerCharacters) >= minLower;
const hasMinDigit = countCharacters(password, digitCharacters) >= minDigit;
const hasMinSpecial = countCharacters(password, specialCharacters) >= minSpecial;
const hasMinLength = password.length >= effectiveMinLength;
const isStrongPassword = hasMinUpper && hasMinLower && hasMinDigit && hasMinSpecial && hasMinLength;
return isStrongPassword;
};
};
var addStrongPasswordFormat = ({
ajvInstance,
passwordCriteria
}) => {
const generatedPasswordStrengthValidator = generatePasswordStrengthValidator(passwordCriteria);
ajvInstance.addFormat("strong-password", {
type: "string",
validate: (x) => generatedPasswordStrengthValidator(x)
});
};
// src/index.ts
var src_default = addStrongPasswordFormat;
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
defaultDigitCharacters,
defaultLowerCharacters,
defaultSpecialCharacters,
defaultUpperCharacters,
generatePasswordStrengthValidator
});
//# sourceMappingURL=index.js.map