{"version":3,"file":"check-cas-number.esm.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":";;;;;;;AAEA;;;;;;;AAOM,SAAUA,KAAKA,CAACC,GAAW,EAAEC,OAAA,GAAwB,EAAE,EAAA;EAC3D,MAAM;AAAEC,IAAAA;AAAM,GAAE,GAAGD,OAAO;AAE1B,EAAA,IAAI,CAACD,GAAG,EAAEG,KAAK,CAAC,2BAA2B,CAAC,EAAE;AAC5CD,IAAAA,MAAM,EAAEE,KAAK,CACX,CAAA,oBAAA,EAAuBJ,GAAG,6CAA6C,CACxE;AACD,IAAA,OAAO,KAAK;AACd,EAAA;EAEA,IAAIK,GAAG,GAAG,CAAC;EACX,MAAMC,MAAM,GAAGN,GAAG,CAACO,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;AAEtC,EAAA,KAAK,IAAIC,CAAC,GAAGF,MAAM,CAACG,MAAM,GAAG,CAAC,EAAED,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AAC3C;IACAH,GAAG,GAAGA,GAAG,GAAGK,MAAM,CAACC,QAAQ,CAACL,MAAM,CAACE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAIF,MAAM,CAACG,MAAM,GAAGD,CAAC,GAAG,CAAC,CAAC;AACtE,EAAA;AAEA;AACA,EAAA,IAAIE,MAAM,CAACC,QAAQ,CAACX,GAAG,CAACO,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,EAAE;AACxDL,IAAAA,MAAM,EAAEE,KAAK,CACX,CAAA,oBAAA,EAAuBJ,GAAG,uCAAuC,CAClE;AACD,IAAA,OAAO,KAAK;AACd,EAAA;AAEA;AACA,EAAA,MAAMY,UAAU,GAAGP,GAAG,GAAG,EAAE;AAC3B,EAAA,IAAIO,UAAU,KAAKF,MAAM,CAACC,QAAQ,CAACX,GAAG,CAACa,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;AACrDX,IAAAA,MAAM,EAAEE,KAAK,CACX,CAAA,oBAAA,EAAuBJ,GAAG,+CACxBY,UACF,CAAA,UAAA,EAAaZ,GAAG,CAACa,KAAK,CAAC,EAAE,CAAC,GAAG,CAC9B;AACD,IAAA,OAAO,KAAK;AACd,EAAA;AACA,EAAA,OAAO,IAAI;AACb;;AC3CA;;;;;;;;;AASM,SAAUC,OAAOA,CAACC,MAAc,EAAEd,OAAA,GAAwB,EAAE,EAAA;EAChE,MAAMD,GAAG,GAAGe,MAAM,CAACZ,KAAK,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;AAC1D,EAAA,IAAI,CAACH,GAAG,EAAE,OAAO,IAAI;EAErB,IAAID,KAAK,CAACC,GAAG,EAAEC,OAAO,CAAC,EAAE,OAAOD,GAAG;AACnC,EAAA,OAAO,IAAI;AACb;;ACfA;;;;;;;;;AASM,SAAUgB,UAAUA,CAACD,MAAc,EAAEd,OAAA,GAAwB,EAAE,EAAA;EACnE,MAAMD,GAAG,GAAG,CAAC,GAAGe,MAAM,CAACE,QAAQ,CAAC,4BAA4B,CAAC,CAAC;EAC9D,OAAOjB,GAAG,CAACkB,MAAM,CAAEC,IAAI,IAAKpB,KAAK,CAACoB,IAAI,CAAC,CAAC,CAAC,EAAElB,OAAO,CAAC,CAAC,CAACmB,GAAG,CAAED,IAAI,IAAKA,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7E;;;;"}