in tools/PasswordRulesParser.js [538:601]
function parsePasswordRules(input, formatRulesForMinifiedVersion)
{
let passwordRules = _parsePasswordRulesInternal(input) || [];
// When formatting rules for minified version, we should keep the formatted rules
// as similar to the input as possible. Avoid copying required rules to allowed rules.
let suppressCopyingRequiredToAllowed = formatRulesForMinifiedVersion;
let newPasswordRules = [];
let newAllowedValues = [];
let minimumMaximumConsecutiveCharacters = null;
let maximumMinLength = 0;
let minimumMaxLength = null;
for (let rule of passwordRules) {
switch (rule.name) {
case RuleName.MAX_CONSECUTIVE:
minimumMaximumConsecutiveCharacters = minimumMaximumConsecutiveCharacters ? Math.min(rule.value, minimumMaximumConsecutiveCharacters) : rule.value;
break;
case RuleName.MIN_LENGTH:
maximumMinLength = Math.max(rule.value, maximumMinLength);
break;
case RuleName.MAX_LENGTH:
minimumMaxLength = minimumMaxLength ? Math.min(rule.value, minimumMaxLength) : rule.value;
break;
case RuleName.REQUIRED:
rule.value = _canonicalizedPropertyValues(rule.value, formatRulesForMinifiedVersion);
newPasswordRules.push(rule);
if (!suppressCopyingRequiredToAllowed) {
newAllowedValues = newAllowedValues.concat(rule.value);
}
break;
case RuleName.ALLOWED:
newAllowedValues = newAllowedValues.concat(rule.value);
break;
}
}
newAllowedValues = _canonicalizedPropertyValues(newAllowedValues, suppressCopyingRequiredToAllowed);
if (!suppressCopyingRequiredToAllowed && !newAllowedValues.length) {
newAllowedValues = [new NamedCharacterClass(Identifier.ASCII_PRINTABLE)];
}
if (newAllowedValues.length) {
newPasswordRules.push(new Rule(RuleName.ALLOWED, newAllowedValues));
}
if (minimumMaximumConsecutiveCharacters !== null) {
newPasswordRules.push(new Rule(RuleName.MAX_CONSECUTIVE, minimumMaximumConsecutiveCharacters));
}
if (maximumMinLength > 0) {
newPasswordRules.push(new Rule(RuleName.MIN_LENGTH, maximumMinLength));
}
if (minimumMaxLength !== null) {
newPasswordRules.push(new Rule(RuleName.MAX_LENGTH, minimumMaxLength));
}
return newPasswordRules;
}