{"version":3,"file":"check-cas-number.esm.min.js","sources":["../lib/check.js","../lib/extract.js","../lib/extractAll.js"],"sourcesContent":["/**\n * Checks if a CAS number is valid.\n * A CAS number has the format XXXXXXXX-XX-X where X is a digit. The string can only contain the CAS number.\n * @param cas\n * @param options\n * @returns\n */\nexport function check(cas, options = {}) {\n    const { logger } = options;\n    if (!cas?.match(/[0-9]{2,8}-[0-9]{2}-[0-9]/)) {\n        logger?.error(`Invalid CAS number: ${cas}, the format does not match: XXXXXXXX-XX-X.`);\n        return false;\n    }\n    let sum = 0;\n    const digits = cas.replaceAll('-', '');\n    for (let i = digits.length - 2; i >= 0; i--) {\n        // @ts-expect-error we are sure that digits[i] exists\n        sum = sum + Number.parseInt(digits[i], 10) * (digits.length - i - 1);\n    }\n    // is it larger than 50000 ?\n    if (Number.parseInt(cas.replaceAll('-', ''), 10) < 50000) {\n        logger?.error(`Invalid CAS number: ${cas}, the number is smaller than 50-00-0.`);\n        return false;\n    }\n    // does the checkdigit match ?\n    const checkDigit = sum % 10;\n    if (checkDigit !== Number.parseInt(cas.slice(-1), 10)) {\n        logger?.error(`Invalid CAS number: ${cas}, the check digit does not match. Expected: ${checkDigit} but got: ${cas.slice(-1)}.`);\n        return false;\n    }\n    return true;\n}\n//# sourceMappingURL=check.js.map","import { check } from './check.js';\n/**\n * This method extracts the first CAS number from a string. A cas number is something\n * defined as matching the regex [0-9]{2,8}-[0-9]{2}-[0-9].\n * It returns the CAS number if found, or null otherwise.\n * A CAS number has the format XXXXXXXX-XX-X where X is a digit.\n * @param string\n * @param options\n * @returns\n */\nexport function extract(string, options = {}) {\n    const cas = string.match(/[0-9]{2,8}-[0-9]{2}-[0-9]/)?.[0];\n    if (!cas)\n        return null;\n    if (check(cas, options))\n        return cas;\n    return null;\n}\n//# sourceMappingURL=extract.js.map","import { check } from './check.js';\n/**\n * This method extracts the first CAS number from a string. A cas number is something\n * defined as matching the regex [0-9]{2,8}-[0-9]{2}-[0-9].\n * It returns the CAS number if found, or null otherwise.\n * A CAS number has the format XXXXXXXX-XX-X where X is a digit.\n * @param string\n * @param options\n * @returns\n */\nexport function extractAll(string, options = {}) {\n    const cas = [...string.matchAll(/[0-9]{2,8}-[0-9]{2}-[0-9]/g)];\n    return cas.filter((item) => check(item[0], options)).map((item) => item[0]);\n}\n//# sourceMappingURL=extractAll.js.map"],"names":["check","cas","options","logger","match","error","sum","digits","replaceAll","i","length","Number","parseInt","checkDigit","slice","extract","string","extractAll","matchAll","filter","item","map"],"mappings":";AASM,SAAUA,EAAMC,EAAaC,EAAwB,IACzD,MAAMC,OAAEA,GAAWD,EAEnB,IAAKD,GAAKG,MAAM,6BAId,OAHAD,GAAQE,MACN,uBAAuBJ,iDAElB,EAGT,IAAIK,EAAM,EACV,MAAMC,EAASN,EAAIO,WAAW,IAAK,IAEnC,IAAK,IAAIC,EAAIF,EAAOG,OAAS,EAAGD,GAAK,EAAGA,IAEtCH,GAAYK,OAAOC,SAASL,EAAOE,GAAI,KAAOF,EAAOG,OAASD,EAAI,GAIpE,GAAIE,OAAOC,SAASX,EAAIO,WAAW,IAAK,IAAK,IAAM,IAIjD,OAHAL,GAAQE,MACN,uBAAuBJ,2CAElB,EAIT,MAAMY,EAAaP,EAAM,GACzB,OAAIO,IAAeF,OAAOC,SAASX,EAAIa,OAAM,GAAK,MAChDX,GAAQE,MACN,uBAAuBJ,gDACrBY,cACWZ,EAAIa,eAEZ,EAGX,CClCM,SAAUC,EAAQC,EAAgBd,EAAwB,IAC9D,MAAMD,EAAMe,EAAOZ,MAAM,+BAA+B,GACxD,OAAKH,GAEDD,EAAMC,EAAKC,GAAiBD,EAFf,IAInB,CCNM,SAAUgB,EAAWD,EAAgBd,EAAwB,IAEjE,MADY,IAAIc,EAAOE,SAAS,+BACrBC,OAAQC,GAASpB,EAAMoB,EAAK,GAAIlB,IAAUmB,IAAKD,GAASA,EAAK,GAC1E"}