{"version":3,"file":"index.es.min.mjs","sources":["../src/index.ts"],"sourcesContent":["export interface IRequirement {\n    minLength?: number | IMessage;\n    maxLength?: number | IMessage;\n    uniqueLettersMinLength?: number | IMessage;\n    uppercaseLettersMinLength?: number | IMessage;\n    lowercaseLettersMinLength?: number | IMessage;\n    numbersMinLength?: number | IMessage;\n    symbolsMinLength?: number | IMessage;\n    include?: string[] | IMessage;\n    exclude?: string[] | IMessage;\n    blackList?: string[] | IMessage;\n    startsWith?: string | IMessage;\n    endsWith?: string | IMessage;\n    includeOne?: string[] | IMessage;\n}\n\nexport interface IMessage {\n    value: number | string | string[];\n    message: string;\n}\n\nexport interface IResult {\n    score: number;\n    status: string;\n    percent: number;\n    errors?: string | string[];\n}\n\nexport class PasswordMeter {\n    private uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n    private lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz';\n    private numbers = '1234567890';\n    constructor(public requirements?: IRequirement, public scoreRange?: any) {}\n\n    private startsWith(str: string, word: string): boolean {\n        return str.lastIndexOf(word, 0) === 0;\n    }\n\n    private endsWith(str: string, word: string): boolean {\n        return str.indexOf(word, str.length - word.length) !== -1;\n    }\n\n    private chunkString(str: string, len: number): string[] {\n        const _size = Math.ceil(str.length / len),\n            _ret = new Array(_size);\n        let _offset = 0;\n        for (let _i = 0; _i < _size; _i++) {\n            _offset = _i * len;\n            _ret[_i] = str.substring(_offset, _offset + len);\n        }\n        return _ret;\n    }\n    private getLength(text: string): number {\n        if (text) {\n            return text.length;\n        }\n        return 0;\n    }\n    private doesNotContains(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                const doesnotContainsAll = list.every((x) => text.indexOf(x) == -1);\n                return doesnotContainsAll;\n            } else {\n                return true;\n            }\n        } else {\n            return true;\n        }\n    }\n    private contains(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                const containsAll = list.every((x) => text.indexOf(x) >= 0);\n                return containsAll;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n    private containsOne(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                const contains = list.some((x) => text.indexOf(x) >= 0);\n                return contains;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    private isInBlackList(text: string, list: string[]): boolean {\n        if (text) {\n            if (list) {\n                for (let index = 0; index < list.length; index++) {\n                    if (text === list[index]) {\n                        return true;\n                    }\n                }\n                return false;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    private between(x: number, min: number, max: number) {\n        return x >= min && x < max;\n    }\n\n    private isIMessage(arg: any): arg is IMessage {\n        const status = arg.message !== undefined;\n        return status;\n    }\n\n    private isNumber(text: string): boolean {\n        if (text) {\n            const pattern = /^\\d+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isLetter(text: string): boolean {\n        if (text) {\n            const pattern = /^[a-zA-Z]+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isUppercaseLetter(text: string): boolean {\n        if (text) {\n            const pattern = /^[A-Z]+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isLowercaseLetter(text: string): boolean {\n        if (text) {\n            const pattern = /^[a-z]+$/;\n            return pattern.test(text);\n        }\n        return false;\n    }\n\n    private isSymbol(text: string): boolean {\n        if (text) {\n            return !this.isNumber(text) && !this.isLetter(text);\n        }\n        return false;\n    }\n\n    private getSymbols(text: string): string | undefined {\n        let result = '';\n        if (text) {\n            for (let index = 0; index < text.length; index++) {\n                if (this.isSymbol(text[index])) result += text[index];\n            }\n        }\n        if (result.length === 0) return undefined;\n        return result;\n    }\n\n    private getLengthScore(text: string): number {\n        if (text) {\n            // +(n*9)\n            const ratio = 9;\n            return this.getLength(text) * ratio;\n        }\n        return 0;\n    }\n    private getUppercaseLettersScore(text: string): number {\n        if (text) {\n            // +((len-n)*2)\n            const ratio = 2;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isUppercaseLetter(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n    private getLowercaseLettersScore(text: string): number {\n        if (text) {\n            // +((len-n)*2)\n            const ratio = 2;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isLowercaseLetter(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n    private getNumbersScore(text: string): number {\n        if (text) {\n            // +((len-n)*4)\n            const ratio = 4;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isNumber(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n    private getSymbolsScore(text: string): number {\n        if (text) {\n            // +((len-n)*6)\n            const ratio = 6;\n            let n = 0;\n            text.split('').forEach((value) => {\n                if (this.isSymbol(value)) {\n                    n++;\n                }\n            });\n            if (n == 0) {\n                return 0;\n            }\n            return (this.getLength(text) - n) * ratio;\n        }\n        return 0;\n    }\n\n    private getLettersOnlyScore(text: string): number {\n        if (text) {\n            // -n\n            const ratio = -1;\n            if (this.isLetter(text)) {\n                return this.getLength(text) * ratio;\n            }\n        }\n        return 0;\n    }\n\n    private getNumbersOnlyScore(text: string): number {\n        if (text) {\n            // -n\n            const ratio = -1;\n            if (this.isNumber(text)) {\n                return this.getLength(text) * ratio;\n            }\n        }\n        return 0;\n    }\n\n    private getConsecutiveUppercaseLettersScore(text: string): number {\n        if (text) {\n            const pattern = /[A-Z]+/g;\n            const results = <RegExpMatchArray>text.match(pattern);\n            if (!results) {\n                return 0;\n            }\n            let score = 0;\n            const ratio = -2;\n            results.forEach((value) => {\n                if (this.getLength(value) > 1) {\n                    // -(n*2)\n                    score +=\n                        (this.getLength(value) - 1) *\n                        /*There is no problem with a character, but the remaining repetition creates the problem.*/\n                        ratio;\n                }\n            });\n            return score;\n        }\n        return 0;\n    }\n    private getConsecutiveLowercaseLettersScore(text: string): number {\n        if (text) {\n            const pattern = /[a-z]+/g;\n            const results = <RegExpMatchArray>text.match(pattern);\n            if (!results) {\n                return 0;\n            }\n            let score = 0;\n            const ratio = -2;\n            results.forEach((value) => {\n                if (this.getLength(value) > 1) {\n                    // -(n*2)\n                    score +=\n                        (this.getLength(value) - 1) *\n                        /*There is no problem with a character, but the remaining repetition creates the problem.*/\n                        ratio;\n                }\n            });\n            return score;\n        }\n        return 0;\n    }\n    private getConsecutiveNumbersScore(text: string): number {\n        if (text) {\n            const pattern = /[0-9]+/g;\n            const results = <RegExpMatchArray>text.match(pattern);\n            if (!results) {\n                return 0;\n            }\n            let score = 0;\n            const ratio = -2;\n            results.forEach((value) => {\n                if (this.getLength(value) > 1) {\n                    // -(n*2)\n                    score +=\n                        (this.getLength(value) - 1) *\n                        /*There is no problem with a character, but the remaining repetition creates the problem.*/\n                        ratio;\n                }\n            });\n            return score;\n        }\n        return 0;\n    }\n    private reverseString(str: string): string {\n        return str.split('').reverse().join('');\n    }\n\n    private sequentialBuilder(text: string, minChunk: number): string[] {\n        if (text) {\n            const list: string[] = [];\n            const len = text.split('').length - minChunk;\n            for (let i = 0; i < len; i++) {\n                for (let index = 0; index < len; index++) {\n                    const newText = text.substring(index, text.length);\n                    const arr = this.chunkString(newText, i + minChunk);\n                    for (let j = 0; j < arr.length; j++) {\n                        list.push(arr[j]);\n                        list.push(this.reverseString(arr[j]));\n                    }\n                }\n            }\n            const result = this.distinctArray(this.sortByLength(list, minChunk));\n            return result;\n        }\n        return [];\n    }\n\n    private distinctArray(arr: string[]): string[] {\n        const a = [];\n        for (let i = 0, l = arr.length; i < l; i++) if (a.indexOf(arr[i]) === -1 && arr[i] !== '') a.push(arr[i]);\n        return a;\n    }\n\n    private sortByLength(arr: string[], limit?: number): string[] {\n        arr.sort(function (a, b) {\n            return b.length - a.length;\n        });\n        const list: string[] = [];\n        for (let index = 0; index < arr.length; index++) {\n            if (limit) {\n                if (arr[index].length >= limit) {\n                    list.push(arr[index]);\n                }\n            } else {\n                list.push(arr[index]);\n            }\n        }\n        return list;\n    }\n\n    private getSequentialLettersScore(text: string): number {\n        const minChunk = 3;\n        if (text) {\n            const uStr = this.sequentialBuilder(this.uppercaseLetters, minChunk);\n            const lStr = this.sequentialBuilder(this.lowercaseLetters, minChunk);\n            let score = 0;\n            let uTxt = text;\n            let lTxt = text;\n            uStr.forEach((value) => {\n                if (uTxt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    uTxt = uTxt.replace(value, '');\n                }\n            });\n            lStr.forEach((value) => {\n                if (lTxt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    lTxt = lTxt.replace(value, '');\n                }\n            });\n            // -(n*3)\n            const ratio = -3;\n            return score * ratio;\n        }\n        return 0;\n    }\n\n    private getSequentialNumbersScore(text: string): number {\n        const minChunk = 3;\n        if (text) {\n            const num = this.sequentialBuilder(this.numbers, minChunk);\n            let score = 0;\n            let txt = text;\n            num.forEach((value) => {\n                if (txt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    txt = txt.replace(value, '');\n                }\n            });\n            // -(n*3)\n            const ratio = -3;\n            return score * ratio;\n        }\n        return 0;\n    }\n\n    private getSequentialSymbolsScore(text: string): number {\n        const minChunk = 3;\n        const sym = this.getSymbols(text);\n        if (text && sym) {\n            const num = this.sequentialBuilder(sym, minChunk);\n            let score = 0;\n            let txt = text;\n            num.forEach((value) => {\n                if (txt.indexOf(value) != -1) {\n                    score += value.length - (minChunk - 1);\n                    txt = txt.replace(value, '');\n                }\n            });\n            // -(n*3)\n            const ratio = -3;\n            return score * ratio;\n        }\n        return 0;\n    }\n\n    private getRepeatCharactersScore(text: string): number {\n        const pattern = /(.+)(?=.*?\\1)/g;\n        if (text) {\n            const matches = <RegExpMatchArray>text.match(pattern);\n            if (!matches) {\n                return 0;\n            }\n            const maxResultLength = this.sortByLength(matches)[0].length;\n            let ratio = 0;\n            if (maxResultLength >= 1 && maxResultLength <= 5) ratio = -8;\n            if (maxResultLength >= 6 && maxResultLength <= 10) ratio = -5;\n            if (maxResultLength >= 11) ratio = -2;\n            // (-X * maxRegexResultLength) + (textLength - (maxRegexResultLength *2))\n            const score = ratio * maxResultLength + (text.length - maxResultLength * 2);\n            return score;\n        }\n        return 0;\n    }\n\n    private getRequirementsScore(text: string, ignoreCase: boolean): string[] {\n        const req = this.requirements;\n        const errors: string[] = [];\n        if (req) {\n            const minLengthMsg = 'The minimum password length is ' + req.minLength + '.';\n            const maxLengthMsg = 'The maximum password length is ' + req.maxLength + '.';\n            const uppercaseLettersMinLengthMsg =\n                'You must use at least ' + req.uppercaseLettersMinLength + ' uppercase letter(s).';\n            const lowercaseLettersMinLengthMsg =\n                'You must use at least ' + req.lowercaseLettersMinLength + ' lowercase letter(s).';\n            const numbersMinLengthMsg = 'You must use at least ' + req.numbersMinLength + ' number(s).';\n            const symbolsMinLengthMsg = 'You must use at least ' + req.symbolsMinLength + ' symbol(s).';\n            const includeMsg = 'The Password must include all the items specified.';\n            const excludeMsg = 'The Password must exclude all the items specified.';\n            const startsWithMsg = 'The password must start with ' + req.startsWith + '.';\n            const endsWithMsg = 'The password must end with ' + req.endsWith + '.';\n            const blackListMsg = 'Your password is in the blacklist.';\n            const includeOneMsg = 'The Password must include at least one item specified [' + req.includeOne + '] .';\n\n            const uniqueLettersMinLength = 'You must use at least ' + req.uniqueLettersMinLength + ' unique letter(s).';\n\n            const upperCount = (text.match(/[A-Z]/g) || []).length;\n            const lowerCount = (text.match(/[a-z]/g) || []).length;\n            const numbersCount = (text.match(/[0-9]/g) || []).length;\n            const symbolsCount = text.length - (upperCount + lowerCount + numbersCount);\n\n            if (req.minLength) {\n                let val: number;\n                let msg = minLengthMsg;\n                if (this.isIMessage(req.minLength)) {\n                    val = <number>req.minLength.value;\n                    msg = <string>req.minLength.message;\n                } else {\n                    val = <number>req.minLength;\n                }\n                if (req.minLength && text.length < val) {\n                    errors.push(msg);\n                }\n            }\n            if (req.maxLength) {\n                let val: number;\n                let msg = maxLengthMsg;\n                if (this.isIMessage(req.maxLength)) {\n                    val = <number>req.maxLength.value;\n                    msg = <string>req.maxLength.message;\n                } else {\n                    val = <number>req.maxLength;\n                }\n                if (req.maxLength && text.length > val) {\n                    errors.push(msg);\n                }\n            }\n            if (req.startsWith) {\n                let val: string;\n                let msg = startsWithMsg;\n                if (this.isIMessage(req.startsWith)) {\n                    val = <string>req.startsWith.value;\n                    msg = <string>req.startsWith.message;\n                } else {\n                    val = <string>req.startsWith;\n                }\n                if (!this.startsWith(text, val)) {\n                    errors.push(msg);\n                }\n            }\n            if (req.endsWith) {\n                let val: string;\n                let msg = endsWithMsg;\n                if (this.isIMessage(req.endsWith)) {\n                    val = <string>req.endsWith.value;\n                    msg = <string>req.endsWith.message;\n                } else {\n                    val = <string>req.endsWith;\n                }\n                if (!this.endsWith(text, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.uppercaseLettersMinLength) {\n                let val: number;\n                let msg = uppercaseLettersMinLengthMsg;\n                if (this.isIMessage(req.uppercaseLettersMinLength)) {\n                    val = <number>req.uppercaseLettersMinLength.value;\n                    msg = <string>req.uppercaseLettersMinLength.message;\n                } else {\n                    val = <number>req.uppercaseLettersMinLength;\n                }\n                if (val > upperCount) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.lowercaseLettersMinLength) {\n                let val: number;\n                let msg = lowercaseLettersMinLengthMsg;\n                if (this.isIMessage(req.lowercaseLettersMinLength)) {\n                    val = <number>req.lowercaseLettersMinLength.value;\n                    msg = <string>req.lowercaseLettersMinLength.message;\n                } else {\n                    val = <number>req.lowercaseLettersMinLength;\n                }\n                if (val > lowerCount) {\n                    errors.push(msg);\n                }\n            }\n            if (req.numbersMinLength) {\n                let val: number;\n                let msg = numbersMinLengthMsg;\n                if (this.isIMessage(req.numbersMinLength)) {\n                    val = <number>req.numbersMinLength.value;\n                    msg = <string>req.numbersMinLength.message;\n                } else {\n                    val = <number>req.numbersMinLength;\n                }\n                if (val > numbersCount) {\n                    errors.push(msg);\n                }\n            }\n            if (req.symbolsMinLength) {\n                let val: number;\n                let msg = symbolsMinLengthMsg;\n                if (this.isIMessage(req.symbolsMinLength)) {\n                    val = <number>req.symbolsMinLength.value;\n                    msg = <string>req.symbolsMinLength.message;\n                } else {\n                    val = <number>req.symbolsMinLength;\n                }\n                if (val > symbolsCount) {\n                    errors.push(msg);\n                }\n            }\n            if (req.uniqueLettersMinLength) {\n                let val: number;\n                let msg = uniqueLettersMinLength;\n                if (this.isIMessage(req.uniqueLettersMinLength)) {\n                    val = <number>req.uniqueLettersMinLength.value;\n                    msg = <string>req.uniqueLettersMinLength.message;\n                } else {\n                    val = <number>req.uniqueLettersMinLength;\n                }\n                const isValid = Array.from(new Set(text.split(''))).length >= val;\n                if (req.uniqueLettersMinLength && !isValid) {\n                    errors.push(msg);\n                }\n            }\n            if (req.include) {\n                let val: string[];\n                let msg = includeMsg;\n                if (this.isIMessage(req.include)) {\n                    val = <string[]>req.include.value;\n                    msg = <string>req.include.message;\n                } else {\n                    val = <string[]>req.include;\n                }\n                if (!this.contains(text, val)) {\n                    errors.push(msg);\n                }\n            }\n            if (req.exclude) {\n                let txt = text;\n                let val: string[];\n                let msg = excludeMsg;\n                if (this.isIMessage(req.exclude)) {\n                    val = <string[]>req.exclude.value;\n                    msg = <string>req.exclude.message;\n                } else {\n                    val = <string[]>req.exclude;\n                }\n                if (ignoreCase) {\n                    txt = text.toLowerCase();\n                    val = val.map((v) => v.toLowerCase());\n                }\n                if (!this.doesNotContains(txt, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.blackList) {\n                let txt = text;\n                let val: string[];\n                let msg = blackListMsg;\n                if (this.isIMessage(req.blackList)) {\n                    val = <string[]>req.blackList.value;\n                    msg = <string>req.blackList.message;\n                } else {\n                    val = <string[]>req.blackList;\n                }\n                if (ignoreCase) {\n                    txt = text.toLowerCase();\n                    val = val.map((v) => v.toLowerCase());\n                }\n                if (this.isInBlackList(txt, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            if (req.includeOne) {\n                let txt = text;\n                let val: string[];\n                let msg = includeOneMsg;\n                if (this.isIMessage(req.includeOne)) {\n                    val = <string[]>req.includeOne.value;\n                    msg = <string>req.includeOne.message;\n                } else {\n                    val = <string[]>req.includeOne;\n                }\n                if (ignoreCase) {\n                    txt = text.toLowerCase();\n                    val = val.map((v) => v.toLowerCase());\n                }\n                if (!this.containsOne(txt, val)) {\n                    errors.push(msg);\n                }\n            }\n\n            return errors;\n        }\n        return [];\n    }\n\n    public getResults(passwords: string[], ignoreCase = false, skipReq = false): IResult[] {\n        const results = [];\n        if (passwords && passwords.length > 0) {\n            for (let index = 0; index < passwords.length; index++) {\n                results.push(this.getResult(passwords[index], ignoreCase, skipReq));\n            }\n            return results;\n        }\n        return [];\n    }\n\n    public getResult(password: string, ignoreCase = false, skipReq = false): IResult {\n        if (password) {\n            // Requirements\n            const req = this.getRequirementsScore(password, ignoreCase);\n            if (!skipReq && req.length) {\n                return {\n                    score: -1,\n                    status: 'needs requirement(s)',\n                    errors: req,\n                    percent: 0,\n                };\n            }\n            // Additions\n            const len = this.getLengthScore(password);\n            const upper = this.getUppercaseLettersScore(password);\n            const lower = this.getLowercaseLettersScore(password);\n            const num = this.getNumbersScore(password);\n            const symbol = this.getSymbolsScore(password);\n            // Deductions\n            const letterOnly = this.getLettersOnlyScore(password);\n            const numberOnly = this.getNumbersOnlyScore(password);\n            const repetition = this.getRepeatCharactersScore(password);\n            const consecutiveUpper = this.getConsecutiveUppercaseLettersScore(password);\n            const consecutiveLower = this.getConsecutiveLowercaseLettersScore(password);\n            const consecutiveNumber = this.getConsecutiveNumbersScore(password);\n            const seqLetters = this.getSequentialLettersScore(password);\n            const seqNumbers = this.getSequentialNumbersScore(password);\n            const seqSymbols = this.getSequentialSymbolsScore(password);\n\n            const score =\n                len +\n                upper +\n                lower +\n                num +\n                symbol +\n                letterOnly +\n                numberOnly +\n                repetition +\n                consecutiveUpper +\n                consecutiveLower +\n                consecutiveNumber +\n                seqLetters +\n                seqNumbers +\n                seqSymbols;\n\n            const defaultRanges = {\n                '40': 'veryWeak', // 001 <= x <  040\n                '80': 'weak', // 040 <= x <  080\n                '120': 'medium', // 080 <= x <  120\n                '180': 'strong', // 120 <= x <  180\n                '200': 'veryStrong', // 180 <= x <  200\n                _: 'perfect', //          >= 200\n            };\n            let stat = '';\n            if (!this.scoreRange) {\n                this.scoreRange = defaultRanges;\n            }\n\n            const range = Object.keys(this.scoreRange).sort(function (a: any, b: any) {\n                if (isNaN(a) || isNaN(b)) {\n                    if (a > b) return 1;\n                    else return -1;\n                }\n                return a - b;\n            });\n            if (range.length < 2) {\n                return {\n                    score: -2,\n                    status: 'error',\n                    errors: '\"scoreRange\" must have at least two members.',\n                    percent: 0,\n                };\n            }\n            for (let index = 0; index < range.length; index++) {\n                const key: any = range[index];\n                if (key != undefined) {\n                    if (index == 0) {\n                        if (this.between(score, 1, parseFloat(range[index]))) {\n                            stat = this.scoreRange[range[0]];\n                            break;\n                        }\n                    }\n                    if (index === range.length - 1) {\n                        if (range[index] == '_') {\n                            if (this.between(score, parseFloat(range[index - 1]), 1000000000000000000)) {\n                                stat = this.scoreRange[range[range.length - 1]];\n                                break;\n                            }\n                        } else {\n                            return {\n                                score: -2,\n                                status: 'error',\n                                errors: 'The last member of the \"scoreRange\" must be \"_\".',\n                                percent: 0,\n                            };\n                        }\n                    }\n                    if (this.between(score, parseFloat(range[index - 1]), parseFloat(range[index]))) {\n                        stat = this.scoreRange[range[index]];\n                        break;\n                    }\n                }\n            }\n            const percent = (score * 100) / parseFloat(range[range.length - 2]);\n\n            let data = {\n                score: score,\n                status: stat,\n                percent: percent >= 100 ? 100 : percent,\n            };\n\n            if (skipReq) {\n                data = Object.assign(data, { errors: req });\n            }\n\n            return data;\n        }\n        return {\n            score: 0,\n            status: 'Empty',\n            percent: 0,\n        };\n    }\n}\n"],"names":["PasswordMeter","requirements","scoreRange","this","uppercaseLetters","lowercaseLetters","numbers","prototype","startsWith","str","word","lastIndexOf","endsWith","indexOf","length","chunkString","len","_size","Math","ceil","_ret","Array","_offset","_i","substring","getLength","text","doesNotContains","list","every","x","contains","containsOne","some","isInBlackList","index","between","min","max","isIMessage","arg","undefined","message","isNumber","test","isLetter","isUppercaseLetter","isLowercaseLetter","isSymbol","getSymbols","result","getLengthScore","getUppercaseLettersScore","_this","n_1","split","forEach","value","getLowercaseLettersScore","n_2","getNumbersScore","n_3","getSymbolsScore","n_4","getLettersOnlyScore","getNumbersOnlyScore","getConsecutiveUppercaseLettersScore","results","match","score_1","getConsecutiveLowercaseLettersScore","score_2","getConsecutiveNumbersScore","score_3","reverseString","reverse","join","sequentialBuilder","minChunk","i","newText","arr","j","push","distinctArray","sortByLength","a","l","limit","sort","b","getSequentialLettersScore","uStr","lStr","score_4","uTxt_1","lTxt_1","replace","getSequentialNumbersScore","num","score_5","txt_1","getSequentialSymbolsScore","sym","score_6","txt_2","getRepeatCharactersScore","matches","maxResultLength","ratio","getRequirementsScore","ignoreCase","req","errors","minLengthMsg","minLength","maxLengthMsg","maxLength","uppercaseLettersMinLengthMsg","uppercaseLettersMinLength","lowercaseLettersMinLengthMsg","lowercaseLettersMinLength","numbersMinLengthMsg","numbersMinLength","symbolsMinLengthMsg","symbolsMinLength","startsWithMsg","endsWithMsg","includeOneMsg","includeOne","uniqueLettersMinLength","upperCount","lowerCount","numbersCount","symbolsCount","val","msg","isValid","from","Set","include","exclude","txt","toLowerCase","map","v","blackList","getResults","passwords","skipReq","getResult","password","score","status","percent","stat","_","range","Object","keys","isNaN","parseFloat","data","assign"],"mappings":"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"}