{"version":3,"file":"asoftwareworld-card-validator-common.mjs","sources":["../../src/card-validator/common/algo/luhn.ts","../../src/card-validator/common/directive/number-only.ts","../../src/card-validator/common/directive/date-format.ts","../../src/card-validator/common/directive/directive.module.ts","../../src/card-validator/common/service/card-cvv.service.ts","../../src/card-validator/common/validator/card-cvv-validator.ts","../../src/card-validator/common/validator/card-validator.ts","../../src/card-validator/common/validator/date-validator/card-month-expiration.ts","../../src/card-validator/common/validator/date-validator/card-year-expiration.ts","../../src/card-validator/common/validator/date-validator/parse-date.ts","../../src/card-validator/common/validator/date-validator/card-date-expiration.ts","../../src/card-validator/common/validator/date-validator/card-expiration-validator.ts","../../src/card-validator/common/public_api.ts","../../src/card-validator/common/asoftwareworld-card-validator-common.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nexport const luhnCheck = (cardNumber: string): boolean => {\r\n\r\n    if (!cardNumber?.length) {\r\n        return false;\r\n    }\r\n\r\n    // Remove all whitespaces from card number.\r\n    cardNumber = cardNumber.replace(/\\s/g, '');\r\n\r\n    // 1. Remove last digit;\r\n    const lastDigit = Number(cardNumber[cardNumber.length - 1]);\r\n\r\n    // 2. Reverse card number\r\n    const reverseCardNumber = cardNumber.slice(0, cardNumber.length - 1).split('').reverse().map(x => Number(x));\r\n    let sum = 0;\r\n\r\n    // 3. + 4. Multiply by 2 every digit on odd position. Subtract 9 if digit > 9\r\n    for (let i = 0; i <= reverseCardNumber.length - 1; i += 2) {\r\n        reverseCardNumber[i] = reverseCardNumber[i] * 2;\r\n        if (reverseCardNumber[i] > 9) {\r\n            reverseCardNumber[i] = reverseCardNumber[i] - 9;\r\n        }\r\n    }\r\n\r\n    // 5. Make the sum of obtained values from step 4.\r\n    sum = reverseCardNumber.reduce((acc, currValue) => (acc + currValue), 0);\r\n\r\n    // 6. Calculate modulo 10 of the sum from step 5. and the last digit. If it's 0, you have a valid card number :)\r\n    return ((sum + lastDigit) % 10 === 0);\r\n};\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { ElementRef, Directive, HostListener } from '@angular/core';\r\n\r\n@Directive({\r\n    selector: 'input[aswNumbersOnly]'\r\n})\r\nexport class AswNumberOnly {\r\n    constructor(private elementRef: ElementRef) { }\r\n\r\n    @HostListener('input', ['$event']) onInputChange(event: Event): void {\r\n        const initalValue = this.elementRef.nativeElement.value;\r\n        this.elementRef.nativeElement.value = initalValue.replace(/[^0-9]*/g, '');\r\n        if (initalValue !== this.elementRef.nativeElement.value) {\r\n            event.stopPropagation();\r\n        }\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { Directive, HostListener } from '@angular/core';\r\nimport { NgControl } from '@angular/forms';\r\n\r\n@Directive({\r\n    selector: '[aswDateFormat]'\r\n})\r\nexport class AswDateFormat {\r\n\r\n    /**\r\n     * validate if input is udpated or not\r\n     */\r\n    isUpdated = false;\r\n\r\n    constructor(private control: NgControl) { }\r\n\r\n    @HostListener('input', ['$event']) dateFormat(event: KeyboardEvent): void {\r\n        const eventValue = (event.target as HTMLInputElement).value;\r\n        const value = parseInt(eventValue, 10);\r\n        if (!eventValue) {\r\n            this.isUpdated = false;\r\n            this.control.control?.setValue(eventValue);\r\n            return;\r\n        }\r\n        if (!this.isUpdated && value >= 10 && value <= 12) {\r\n            this.control.control?.setValue(`${value} / `);\r\n            this.isUpdated = true;\r\n        } else if (!this.isUpdated && value >= 2 && value <= 9) {\r\n            this.control.control?.setValue(`0${value} / `);\r\n            this.isUpdated = true;\r\n        } else if (\r\n            !this.isUpdated &&\r\n            eventValue.length === 2 && (value < 12 && value > 0)) {\r\n            this.control.control?.setValue(`${eventValue} / `);\r\n            this.isUpdated = true;\r\n        } else {\r\n            this.control.control?.setValue(eventValue);\r\n        }\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AswNumberOnly } from './number-only';\r\nimport { AswDateFormat } from './date-format';\r\n\r\n@NgModule({\r\n    declarations: [\r\n        AswNumberOnly,\r\n        AswDateFormat\r\n    ],\r\n    imports: [\r\n        CommonModule\r\n    ],\r\n    exports: [\r\n        AswNumberOnly,\r\n        AswDateFormat\r\n    ]\r\n})\r\nexport class AswDirectiveModule { }\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { Verification } from '../type/verification';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class CardCvvService {\r\n    code: any;\r\n    cardNumber: any;\r\n    cardIcon: any;\r\n    private defaultLength = 3;\r\n\r\n    cvv(value: string | unknown, maxLength: number | number[] = this.defaultLength): Verification {\r\n        if (this.code) {\r\n            this.defaultLength = this.code.size.length <= 1\r\n                ? this.code.size[0] : this.code.size[1];\r\n        }\r\n        maxLength = maxLength instanceof Array ? maxLength : [this.defaultLength];\r\n\r\n        if (typeof value !== 'string') {\r\n            return { isValid: false, isPotentiallyValid: false };\r\n        }\r\n        if (!/^\\d*$/.test(value)) {\r\n            return { isValid: false, isPotentiallyValid: false };\r\n        }\r\n        if (this.includes(maxLength, value.length)) {\r\n            return { isValid: true, isPotentiallyValid: true };\r\n        }\r\n        if (value.length < Math.min.apply(null, maxLength)) {\r\n            return { isValid: false, isPotentiallyValid: true };\r\n        }\r\n        if (value.length > this.calculateCvvMaximumLength(maxLength)) {\r\n            return { isValid: false, isPotentiallyValid: false };\r\n        }\r\n        return { isValid: true, isPotentiallyValid: true };\r\n    }\r\n\r\n    private includes(array: number[], thing: number): boolean {\r\n        for (const item of array) {\r\n            if (thing === item) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    private calculateCvvMaximumLength(array: number[]): number {\r\n        let maximum = this.defaultLength;\r\n        let i = 0;\r\n\r\n        for (; i < array.length; i++) {\r\n            maximum = array[i] > maximum ? array[i] : maximum;\r\n        }\r\n        return maximum;\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { Directive } from '@angular/core';\r\nimport { AbstractControl, ValidationErrors, Validator } from '@angular/forms';\r\nimport { CardCvvService } from '../service/card-cvv.service';\r\n\r\n@Directive({\r\n    selector: '[aswCvvValidator]'\r\n})\r\nexport class CardCvvValidator implements Validator {\r\n    constructor(\r\n        private cardCvvService: CardCvvService) {\r\n    }\r\n    validate(control: AbstractControl): ValidationErrors | null {\r\n        const cardcvv = this.cardCvvService.cvv(control.value);\r\n        return (cardcvv.isValid) ? null : { invalidCardCvv: true };\r\n    }\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { FormControl } from '@angular/forms';\r\nimport { cards } from '@asoftwareworld/card-validator/api';\r\nimport { luhnCheck } from '../algo/luhn';\r\n\r\nexport const CardValidator = (control: FormControl) => {\r\n    return luhnCheck(control.value) ? null : { invalidCardNumber: true };\r\n};\r\n\r\nexport function validateCardNumber(cardNumber: string): any {\r\n    return cards.find((card: any) => {\r\n        const matchResult = card.patterns\r\n            .map((pattern: number | number[]) => validator(cardNumber, pattern))\r\n            .filter((result: any) => result);\r\n        return !!matchResult.length;\r\n    });\r\n}\r\n\r\nfunction validateRange(cardNumber: string, min: number | string, max: number | string): boolean {\r\n    const maxLengthToCheck = String(min).length;\r\n    const substr = cardNumber.substr(0, maxLengthToCheck);\r\n    const integerRepresentationOfCardNumber = parseInt(substr, 10);\r\n\r\n    min = parseInt(String(min).substr(0, substr.length), 10);\r\n    max = parseInt(String(max).substr(0, substr.length), 10);\r\n\r\n    return (\r\n        integerRepresentationOfCardNumber >= min &&\r\n        integerRepresentationOfCardNumber <= max\r\n    );\r\n}\r\n\r\nfunction validatePattern(cardNumber: string, pattern: string | number): boolean {\r\n    pattern = String(pattern);\r\n    return (pattern.substring(0, cardNumber.length) === cardNumber.substring(0, pattern.length));\r\n}\r\n\r\nexport function validator(cardNumber: string, pattern: string | number | string[] | number[]): boolean {\r\n    if (Array.isArray(pattern)) {\r\n        return validateRange(cardNumber, pattern[0], pattern[1]);\r\n    }\r\n    return validatePattern(cardNumber, pattern);\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { ExpirationMonthVerification } from '../../interface/expiration-date-verification';\r\n\r\nfunction verification(isValid: boolean, isPotentiallyValid: boolean, isValidForThisYear?: boolean): ExpirationMonthVerification {\r\n    return {\r\n        isValid,\r\n        isPotentiallyValid,\r\n        isValidForThisYear: isValidForThisYear || false,\r\n    };\r\n}\r\n\r\nexport function cardMonthExpiration(\r\n    value: string | unknown\r\n): ExpirationMonthVerification {\r\n    const currentMonth = new Date().getMonth() + 1;\r\n\r\n    if (typeof value !== 'string') {\r\n        return verification(false, false);\r\n    }\r\n    if (value.replace(/\\s/g, '') === '' || value === '0') {\r\n        return verification(false, true);\r\n    }\r\n    if (!/^\\d*$/.test(value)) {\r\n        return verification(false, false);\r\n    }\r\n\r\n    const month = parseInt(value, 10);\r\n\r\n    if (isNaN(Number(value))) {\r\n        return verification(false, false);\r\n    }\r\n\r\n    const result = month > 0 && month < 13;\r\n\r\n    return verification(result, result, result && month >= currentMonth);\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { ExpirationYearVerification } from '../../interface/expiration-date-verification';\r\n\r\n\r\nconst DEFAULT_VALID_NUMBER_OF_YEARS_IN_THE_FUTURE = 19;\r\n\r\nfunction verification(isValid: boolean, isPotentiallyValid: boolean, isCurrentYear?: boolean ): ExpirationYearVerification {\r\n    return {\r\n        isValid,\r\n        isPotentiallyValid,\r\n        isCurrentYear: isCurrentYear || false,\r\n    };\r\n}\r\n\r\nexport function cardYearExpiration(\r\n    value: string | unknown,\r\n    maxElapsedYear = DEFAULT_VALID_NUMBER_OF_YEARS_IN_THE_FUTURE): ExpirationYearVerification {\r\n    let isCurrentYear;\r\n\r\n    if (typeof value !== 'string') {\r\n        return verification(false, false);\r\n    }\r\n    if (value.replace(/\\s/g, '') === '') {\r\n        return verification(false, true);\r\n    }\r\n    if (!/^\\d*$/.test(value)) {\r\n        return verification(false, false);\r\n    }\r\n\r\n    const length = value.length;\r\n\r\n    if (length < 2) {\r\n        return verification(false, true);\r\n    }\r\n\r\n    const currentYear = new Date().getFullYear();\r\n\r\n    if (length === 3) {\r\n        // 20x === 20x\r\n        const firstTwo = value.slice(0, 2);\r\n        const currentFirstTwo = String(currentYear).slice(0, 2);\r\n\r\n        return verification(false, firstTwo === currentFirstTwo);\r\n    }\r\n\r\n    if (length > 4) {\r\n        return verification(false, false);\r\n    }\r\n\r\n    const numericValue = parseInt(value, 10);\r\n    const twoDigitYear = Number(String(currentYear).substr(2, 2));\r\n    let valid = false;\r\n\r\n    if (length === 2) {\r\n        if (String(currentYear).substr(0, 2) === value) {\r\n            return verification(false, true);\r\n        }\r\n\r\n        isCurrentYear = twoDigitYear === numericValue;\r\n        valid =\r\n            numericValue >= twoDigitYear &&\r\n            numericValue <= twoDigitYear + maxElapsedYear;\r\n    } else if (length === 4) {\r\n        isCurrentYear = currentYear === numericValue;\r\n        valid =\r\n            numericValue >= currentYear &&\r\n            numericValue <= currentYear + maxElapsedYear;\r\n    }\r\n\r\n    return verification(valid, valid, isCurrentYear);\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { MonthAndYear } from '../../type/verification';\r\nimport { cardYearExpiration } from './card-year-expiration';\r\n\r\nfunction getNumberOfMonthDigitsInDateString(dateString: string): number {\r\n    const firstCharacter = Number(dateString[0]);\r\n    let assumedYear;\r\n\r\n    /*\r\n      if the first character in the string starts with `0`,\r\n      we know that the month will be 2 digits.\r\n      '0122' => {month: '01', year: '22'}\r\n    */\r\n    if (firstCharacter === 0) {\r\n        return 2;\r\n    }\r\n\r\n    /*\r\n      if the first character in the string starts with\r\n      number greater than 1, it must be a 1 digit month\r\n      '322' => {month: '3', year: '22'}\r\n    */\r\n    if (firstCharacter > 1) {\r\n        return 1;\r\n    }\r\n\r\n    /*\r\n      if the first 2 characters make up a number between\r\n      13-19, we know that the month portion must be 1\r\n      '139' => {month: '1', year: '39'}\r\n    */\r\n    if (firstCharacter === 1 && Number(dateString[1]) > 2) {\r\n        return 1;\r\n    }\r\n\r\n    /*\r\n      if the first 2 characters make up a number between\r\n      10-12, we check if the year portion would be considered\r\n      valid if we assumed that the month was 1. If it is\r\n      not potentially valid, we assume the month must have\r\n      2 digits.\r\n      '109' => {month: '10', year: '9'}\r\n      '120' => {month: '1', year: '20'} // when checked in the year 2019\r\n      '120' => {month: '12', year: '0'} // when checked in the year 2021\r\n    */\r\n    if (firstCharacter === 1) {\r\n        assumedYear = dateString.substr(1);\r\n\r\n        return cardYearExpiration(assumedYear).isPotentiallyValid ? 1 : 2;\r\n    }\r\n\r\n    /*\r\n      If the length of the value is exactly 5 characters,\r\n      we assume a full year was passed in, meaning the remaining\r\n      single leading digit must be the month value.\r\n      '12202' => {month: '1', year: '2202'}\r\n    */\r\n    if (dateString.length === 5) {\r\n        return 1;\r\n    }\r\n\r\n    /*\r\n      If the length of the value is more than five characters,\r\n      we assume a full year was passed in addition to the month\r\n      and therefore the month portion must be 2 digits.\r\n      '112020' => {month: '11', year: '2020'}\r\n    */\r\n    if (dateString.length > 5) {\r\n        return 2;\r\n    }\r\n\r\n    /*\r\n      By default, the month value is the first value\r\n    */\r\n    return 1;\r\n}\r\n\r\nexport function parseDate(datestring: string): MonthAndYear {\r\n    let date;\r\n\r\n    if (/^\\d{4}-\\d{1,2}$/.test(datestring)) {\r\n        date = datestring.split('-').reverse();\r\n    } else if (/\\//.test(datestring)) {\r\n        date = datestring.split(/\\s*\\/\\s*/g);\r\n    } else if (/\\s/.test(datestring)) {\r\n        date = datestring.split(/ +/g);\r\n    }\r\n\r\n    if (isArray(date)) {\r\n        return {\r\n            month: date[0] || '',\r\n            year: date.slice(1).join(),\r\n        };\r\n    }\r\n\r\n    const numberOfDigitsInMonth = getNumberOfMonthDigitsInDateString(datestring);\r\n    const month = datestring.substr(0, numberOfDigitsInMonth);\r\n\r\n    return {\r\n        month,\r\n        year: datestring.substr(month.length),\r\n    };\r\n}\r\n\r\nexport const isArray =\r\n    Array.isArray ||\r\n    function isObjectArray(arg?): boolean {\r\n        return Object.prototype.toString.call(arg) === '[object Array]';\r\n    };\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nimport { ExpirationDateVerification } from '../../interface/expiration-date-verification';\r\nimport { cardMonthExpiration } from './card-month-expiration';\r\nimport { cardYearExpiration } from './card-year-expiration';\r\nimport { parseDate } from './parse-date';\r\n\r\nfunction verification(\r\n    isValid: boolean,\r\n    isPotentiallyValid: boolean,\r\n    month: string | null,\r\n    year: string | null): ExpirationDateVerification {\r\n    return {\r\n        isValid,\r\n        isPotentiallyValid,\r\n        month,\r\n        year,\r\n    };\r\n}\r\n\r\nexport function cardExpirationDate(\r\n    value: string | Record<string, string | number> | unknown,\r\n    maxElapsedYear?: number): ExpirationDateVerification {\r\n    let date;\r\n\r\n    if (typeof value === 'string') {\r\n        value = value.replace(/^(\\d\\d) (\\d\\d(\\d\\d)?)$/, '$1/$2');\r\n        date = parseDate(String(value));\r\n    } else if (value !== null && typeof value === 'object') {\r\n        const fullDate = { ...value } as ExpirationDateVerification;\r\n        date = {\r\n            month: String(fullDate.month),\r\n            year: String(fullDate.year),\r\n        };\r\n    } else {\r\n        return verification(false, false, null, null);\r\n    }\r\n\r\n    const monthValid = cardMonthExpiration(date.month);\r\n    const yearValid = cardYearExpiration(date.year, maxElapsedYear);\r\n\r\n    if (monthValid.isValid) {\r\n        if (yearValid.isCurrentYear) {\r\n            const isValidForThisYear = monthValid.isValidForThisYear;\r\n\r\n            return verification(\r\n                isValidForThisYear,\r\n                isValidForThisYear,\r\n                date.month,\r\n                date.year\r\n            );\r\n        }\r\n\r\n        if (yearValid.isValid) {\r\n            return verification(true, true, date.month, date.year);\r\n        }\r\n    }\r\n\r\n    if (monthValid.isPotentiallyValid && yearValid.isPotentiallyValid) {\r\n        return verification(false, true, null, null);\r\n    }\r\n\r\n    return verification(false, false, null, null);\r\n}\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\nimport { FormControl } from '@angular/forms';\r\nimport { cardExpirationDate } from './card-date-expiration';\r\n\r\nexport const CardExpirationValidator = (control: FormControl) => {\r\n    const date = cardExpirationDate(control.value);\r\n    return (date.isValid && date.month && date.year) ? null : { invalidCardDate: true };\r\n};\r\n","/**\r\n * @license\r\n * Copyright ASW (A Software World) All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file\r\n */\r\n\r\nexport * from './algo/luhn';\r\nexport * from './directive/number-only';\r\nexport * from './directive/date-format';\r\nexport * from './directive/directive.module';\r\nexport * from './validator/card-cvv-validator';\r\nexport * from './validator/card-validator';\r\nexport * from './validator/date-validator/card-expiration-validator';\r\nexport * from './service/card-cvv.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.CardCvvService","verification"],"mappings":"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"}