@modern-kit/utils
Version:
1 lines • 5.78 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/validator/isValidPassword/index.ts"],"sourcesContent":["import {\n containsConsecutiveCharacters,\n containsHangul,\n containsLowerCase,\n containsNumber,\n containsSpecialCharacters,\n containsUpperCase,\n containsWhiteSpace,\n} from '../../regex';\nimport { contains } from '../../array';\n\ninterface ContainsOptions {\n lowerCase?: boolean;\n number?: boolean;\n specialCharacters?: boolean;\n upperCase?: boolean;\n}\n\ntype ErrorReason =\n | keyof ContainsOptions\n | 'hangul'\n | 'forbidden'\n | 'whiteSpace'\n | 'consecutiveCharacters'\n | 'length';\n\ninterface IsValidPasswordOptions {\n containsOptions: ContainsOptions;\n minLength: number;\n maxLength: number;\n maxRepeatChars: number;\n forbiddenPasswords: string[] | readonly string[];\n}\n\ninterface IsValidPasswordReturnType {\n isValid: boolean;\n errorReason: ErrorReason | null;\n}\n\nconst checkInValidLengthOptions = (\n minLength: IsValidPasswordOptions['minLength'],\n maxLength: IsValidPasswordOptions['maxLength']\n) => {\n if (minLength < 1 || maxLength < 1 || minLength > maxLength) {\n return true;\n }\n return !Number.isInteger(minLength) || !Number.isInteger(maxLength);\n};\n\nconst checkLength = (\n password: string,\n minLength: IsValidPasswordOptions['minLength'],\n maxLength: IsValidPasswordOptions['maxLength']\n) => {\n return password.length >= minLength && password.length <= maxLength;\n};\n\nexport function isValidPassword(\n password: string,\n options: Partial<IsValidPasswordOptions> = {}\n): IsValidPasswordReturnType {\n const {\n containsOptions = {},\n minLength = 8,\n maxLength = 24,\n maxRepeatChars = maxLength + 1,\n forbiddenPasswords = [],\n } = options;\n\n const {\n lowerCase = false,\n number = false,\n specialCharacters = false,\n upperCase = false,\n } = containsOptions;\n\n // Check invalid length options\n if (checkInValidLengthOptions(minLength, maxLength)) {\n throw new Error('Invalid length option value');\n }\n\n // Check Include forbidden password list\n if (contains(forbiddenPasswords, password)) {\n return { isValid: false, errorReason: 'forbidden' };\n }\n\n // Check for whitespace\n if (containsWhiteSpace(password)) {\n return { isValid: false, errorReason: 'whiteSpace' };\n }\n\n // Check for consecutive characters\n if (containsConsecutiveCharacters(password, maxRepeatChars)) {\n return { isValid: false, errorReason: 'consecutiveCharacters' };\n }\n\n // Check for Korean language inclusions\n if (containsHangul(password)) {\n return { isValid: false, errorReason: 'hangul' };\n }\n\n // Check password minimum/maximum length\n if (!checkLength(password, minLength, maxLength)) {\n return { isValid: false, errorReason: 'length' };\n }\n\n // Check for inclusion of lowerCase\n if (lowerCase && !containsLowerCase(password)) {\n return { isValid: false, errorReason: 'lowerCase' };\n }\n\n // Check for inclusion of numbers\n if (number && !containsNumber(password)) {\n return { isValid: false, errorReason: 'number' };\n }\n\n // Check for inclusion of special character\n if (specialCharacters && !containsSpecialCharacters(password)) {\n return { isValid: false, errorReason: 'specialCharacters' };\n }\n\n // Check for inclusion of upperCase\n if (upperCase && !containsUpperCase(password)) {\n return { isValid: false, errorReason: 'upperCase' };\n }\n\n return { isValid: true, errorReason: null };\n}\n"],"names":["contains","containsWhiteSpace","containsConsecutiveCharacters","containsHangul","containsLowerCase","containsNumber","containsSpecialCharacters","containsUpperCase"],"mappings":";;;;;;;;;;;;;AAuCA,MAAM,yBAAA,GAA4B,CAChC,SAAA,EACA,SAAA,KACG;AACH,EAAA,IAAI,SAAA,GAAY,CAAA,IAAK,SAAA,GAAY,CAAA,IAAK,YAAY,SAAA,EAAW;AAC3D,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,CAAC,OAAO,SAAA,CAAU,SAAS,KAAK,CAAC,MAAA,CAAO,UAAU,SAAS,CAAA;AACpE,CAAA;AAEA,MAAM,WAAA,GAAc,CAClB,QAAA,EACA,SAAA,EACA,SAAA,KACG;AACH,EAAA,OAAO,QAAA,CAAS,MAAA,IAAU,SAAA,IAAa,QAAA,CAAS,MAAA,IAAU,SAAA;AAC5D,CAAA;AAEO,SAAS,eAAA,CACd,QAAA,EACA,OAAA,GAA2C,EAAC,EACjB;AAC3B,EAAA,MAAM;AAAA,IACJ,kBAAkB,EAAC;AAAA,IACnB,SAAA,GAAY,CAAA;AAAA,IACZ,SAAA,GAAY,EAAA;AAAA,IACZ,iBAAiB,SAAA,GAAY,CAAA;AAAA,IAC7B,qBAAqB;AAAC,GACxB,GAAI,OAAA;AAEJ,EAAA,MAAM;AAAA,IACJ,SAAA,GAAY,KAAA;AAAA,IACZ,MAAA,GAAS,KAAA;AAAA,IACT,iBAAA,GAAoB,KAAA;AAAA,IACpB,SAAA,GAAY;AAAA,GACd,GAAI,eAAA;AAGJ,EAAA,IAAI,yBAAA,CAA0B,SAAA,EAAW,SAAS,CAAA,EAAG;AACnD,IAAA,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAAA,EAC/C;AAGA,EAAA,IAAIA,sBAAA,CAAS,kBAAA,EAAoB,QAAQ,CAAA,EAAG;AAC1C,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,WAAA,EAAY;AAAA,EACpD;AAGA,EAAA,IAAIC,0CAAA,CAAmB,QAAQ,CAAA,EAAG;AAChC,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,YAAA,EAAa;AAAA,EACrD;AAGA,EAAA,IAAIC,gEAAA,CAA8B,QAAA,EAAU,cAAc,CAAA,EAAG;AAC3D,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,uBAAA,EAAwB;AAAA,EAChE;AAGA,EAAA,IAAIC,kCAAA,CAAe,QAAQ,CAAA,EAAG;AAC5B,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,QAAA,EAAS;AAAA,EACjD;AAGA,EAAA,IAAI,CAAC,WAAA,CAAY,QAAA,EAAU,SAAA,EAAW,SAAS,CAAA,EAAG;AAChD,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,QAAA,EAAS;AAAA,EACjD;AAGA,EAAA,IAAI,SAAA,IAAa,CAACC,wCAAA,CAAkB,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,WAAA,EAAY;AAAA,EACpD;AAGA,EAAA,IAAI,MAAA,IAAU,CAACC,kCAAA,CAAe,QAAQ,CAAA,EAAG;AACvC,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,QAAA,EAAS;AAAA,EACjD;AAGA,EAAA,IAAI,iBAAA,IAAqB,CAACC,wDAAA,CAA0B,QAAQ,CAAA,EAAG;AAC7D,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,mBAAA,EAAoB;AAAA,EAC5D;AAGA,EAAA,IAAI,SAAA,IAAa,CAACC,wCAAA,CAAkB,QAAQ,CAAA,EAAG;AAC7C,IAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,WAAA,EAAa,WAAA,EAAY;AAAA,EACpD;AAEA,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAC5C;;;;"}