diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 7270f09..ec77942 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -1,5 +1,9 @@ ## CHANGELOG +### 3.1.1 (2024-10-16) + +- Fixed Validator Bug For CF Validation of People born in January + ### 3.1.0 (2024-09-19) - Replaced moment with dayjs diff --git a/dist/codice-fiscale-utils.bundle.min.js b/dist/codice-fiscale-utils.bundle.min.js index d393edb..1bc1c9b 100644 --- a/dist/codice-fiscale-utils.bundle.min.js +++ b/dist/codice-fiscale-utils.bundle.min.js @@ -1,8 +1,7 @@ /** - * @marketto/codice-fiscale-utils 3.1.0 + * @marketto/codice-fiscale-utils 3.1.1 * Copyright (c) 2019-2024, Marco Ricupero * License: MIT */ -var CodiceFiscaleUtils=function(t,e,i){"use strict";function r(t,e,i,r){return new(i||(i=Promise))((function(s,n){function a(t){try{c(r.next(t))}catch(t){n(t)}}function o(t){try{c(r.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(a,o)}c((r=r.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const s=15,n="[12][0-9]{3}",a="0[1-9]|1[0-2]",o="0[469]|11",c="0[13578]|1[02]",h=`(?:${a})-(?:0[1-9]|[12]\\d)|(?:${o})-30|(?:${c})-3[01]`,l="[01]\\d|2[0-3]",d="[0-5]\\d",u=d,f="\\d{3}",T=`Z|[-+](?:${l})(?::?${d})?`,$=`(?:${l})(?::${d}(?::${u}(\\.${f})?)?(?:${T})?)?`,A=`${n}-(?:${h})(?:T${$})?`,E=`${n}(?:-(?:(?:${a})|(?:${h})(?:T${$})?))?`;var _=Object.freeze({__proto__:null,DAY:"0[1-9]|[12][0-9]|3[01]",DAYS_30_MONTHS:o,DAYS_31_MONTHS:c,HOURS:l,ISO8601_DATE_TIME:E,ISO8601_SHORT_DATE:A,LEAP_MONTH:"02",MILLISECONDS:f,MINUTES:d,MONTH:a,MONTH_DAY:h,SECONDS:u,TIME:$,TIMEZONE:T,YEAR:n});class p{static parseDate(t){if(!(t instanceof Date||"string"==typeof t&&new RegExp(`^(?:${E})$`).test(t)||Array.isArray(t)&&t.length&&!t.some((t=>"number"!=typeof t||isNaN(t)))))return null;try{let i;if(Array.isArray(t)){const[r,s=0,n=1]=t;if(!(s>=0&&s<=11&&n>0&&n<=31))return null;i=e(Date.UTC(r,s||0,n||1))}else i=e(t);return i.isValid()?i.toDate():null}catch(t){return null}}static ymdToDate(t,e,i){return this.parseDate([t,e,i])}}const C="B-DF-HJ-NP-TV-Z",R="AEIOU",m="\\dLMNP-V",D="1-9MNP-V",v="0L",N="A-EHLMPR-T",M="DHPS",O="ACELMRT",I="A-M",S="Z",y=`[A-Z][${R}][${R}X]|[${R}]X{2}|[${C}]{2}[A-Z]`,g=y,L=`(?:${y}){2}`,P=`[${m}]{2}`,F="[02468LNQSU][048LQU]|[13579MPRTV][26NS]",b=`[${N}]`,B="[26NS]",w="[37PT]",H=`[${v}4Q][${D}]|[1256MNRS][${m}]`,Y=`[${w}][${v}]`,V=`[${w}][${v}1M]`,G=`(?:${H}|${w}[${v}1M])`,U=`(?:[${v}][${D}]|[12MN][${m}]|[3P][${v}1M])`,j=`(?:[4Q][${D}]|[56RS][${m}]|[7T][${v}1M])`,x=`${b}(?:${H})|[${M}]${Y}|[${O}]${V}`,Z=`${P}(?:${b}(?:[${v}4Q][${D}]|[15MR][${m}]|${B}[0-8LMNP-U])|[${M}]${w}[${v}]|[${O}]${w}[${v}1M]|[${M}${O}]${B}[9V])|(?:${F})B${B}[9V]`,k=`${P}(?:${b}(?:[${v}][${D}]|[1M][${m}]|[2N][0-8LMNP-U])|[${M}][3P][${v}]|[${O}][3P][${v}1M]|[${M}${O}][2N][9V])|(?:${F})B[2N][9V]`,X=`${P}(?:${b}(?:[4Q][${D}]|[5R][${m}]|[6S][0-8LMNP-U])|[${M}][7T][${v}]|[${O}][7T][${v}1M]|[${M}${O}][6S][9V])|(?:${F})B[6S][9V]`,Q=`[${I}](?:[${D}][${m}]{2}|[${v}](?:[${D}][${m}]|[${v}][${D}]))`,J=`${S}[${D}][${m}]{2}`,z=`(?:[${I}${S}][${D}][${m}]{2})|(?:[${I}][${v}](?:[${D}][${m}]|[${v}][${D}]))`,K="[A-Z]",W=`${L}(?:${Z})(?:${z})${K}`,q=`[A-Z][${R}]?|[${C}]{1,2}`,tt=`(?:${q})|(?:(?:${y})(?:${q})?)`,et=`[${m}]`,it=`${b}[${v}12456MNQRS]?|[${M}${O}]${w}`,rt=`${et}|(?:${P}(?:${it})?)`,st=`[${I}${S}](?:[${D}][${m}]?)?|[${S}](?:[${v}][${m}]?)?`,nt=`${tt}|(?:${L}(?:(?:${rt})|(?:${Z})(?:(?:${st})|(?:${z})${K}?)?)?)?`;var at,ot=Object.freeze({__proto__:null,BELFIORE_CODE_MATCHER:z,CF_FULL_NAME_MATCHER:L,CF_NAME_MATCHER:y,CF_SURNAME_MATCHER:g,CHECK_DIGIT:K,CITY_CODE_LIST:I,CITY_CODE_MATCHER:Q,CODICE_FISCALE:W,CONSONANT_LIST:C,COUNTRY_CODE_LIST:S,COUNTRY_CODE_MATCHER:J,DAY_29_MATCHER:H,DAY_2X_MATCHER:B,DAY_30_MATCHER:Y,DAY_31_MATCHER:V,DAY_3X_MATCHER:w,DAY_MATCHER:G,FEMALE_DAY_MATCHER:j,FEMALE_FULL_DATE_MATCHER:X,FULL_DATE_MATCHER:Z,LEAP_YEAR_MATCHER:F,MALE_DAY_MATCHER:U,MALE_FULL_DATE_MATCHER:k,MONTH_30DAYS_LIST:M,MONTH_31DAYS_LIST:O,MONTH_DAY_MATCHER:x,MONTH_LIST:N,MONTH_MATCHER:b,OMOCODE_NON_ZERO_NUMBER_LIST:D,OMOCODE_NUMBER_LIST:m,OMOCODE_ZERO_LIST:v,PARTIAL_BELFIORE_CODE_MATCHER:st,PARTIAL_CF:nt,PARTIAL_CF_FULL_NAME:tt,PARTIAL_CF_NAME_MATCHER:q,PARTIAL_FULL_DATE:rt,PARTIAL_MONTH_DAY:it,PARTIAL_YEAR:et,VOWEL_LIST:R,YEAR_MATCHER:P});!function(t){t[t.B=0]="B",t[t.A=1]="A",t[t.K=2]="K",t[t.P=3]="P",t[t.L=4]="L",t[t.C=5]="C",t[t.Q=6]="Q",t[t.D=7]="D",t[t.R=8]="R",t[t.E=9]="E",t[t.V=10]="V",t[t.O=11]="O",t[t.S=12]="S",t[t.F=13]="F",t[t.T=14]="T",t[t.G=15]="G",t[t.U=16]="U",t[t.H=17]="H",t[t.M=18]="M",t[t.I=19]="I",t[t.N=20]="N",t[t.J=21]="J",t[t.W=22]="W",t[t.Z=23]="Z",t[t.Y=24]="Y",t[t.X=25]="X"}(at||(at={}));var ct,ht=at;class lt{static checkDigit(t){if("string"==typeof t&&new RegExp(nt).test(t)){const e=t.substr(0,s);let i=0;for(const t of this.evaluateChar(e))i+=t;return String.fromCharCode(i%this.CRC_MOD+this.CHAR_OFFSET)}return null}static evaluateChar(t=""){return(e=this.evaluateCharGenerator(t))[Symbol.iterator]=()=>e,e;var e}static*evaluateCharGenerator(t=""){if("string"==typeof t&&t.length)for(let e=0;e0&&e<=this.MAX_MONTH_DAY?e:null}static getGender(t){return this.toArray().find((e=>t>=Tt[e]&&t<=Tt[e]+this.MAX_MONTH_DAY))||null}static genderizeDay(t,e){return t+Tt[e]}static toArray(){return["M","F"]}}At.MAX_MONTH_DAY=31;const Et=new Date("1973-09-29"),_t=new i;class pt{constructor(t){this.belfioreConnector=t,this.OMOCODE_BITMAP=30400,this.JOLLY_CHAR="*"}cfDeomocode(t){if(t&&t.length<=6)return t;const e=this.partialCfDeomocode(t);if(e.length=0;r--)if(Math.pow(2,r)&this.OMOCODE_BITMAP){if(!!(e&Math.pow(2,s))!==isNaN(parseInt(i[r],10))){const t=i[r].toUpperCase();i[r]=$t[t]}s++}const r=i[15];if(r){const t=i.slice(0,s).join("");i[15]=this.appyCaseToChar(lt.checkDigit(t)||"",r)}return i.join("")}cfOmocodeId(t){const e=t.split("").filter(((t,e)=>Math.pow(2,e)&this.OMOCODE_BITMAP)).map((t=>/^[a-z]$/i.test(_t[t])?1:0)).join("");return parseInt(e,2)}cfToLastName(t){const e=null==t?void 0:t.substring(0,3);if("string"!=typeof t||3!==e.length||!new RegExp(`^(?:${g})`,"iu").test(e))return null;const i=t.substring(0,3),[r=""]=i.match(new RegExp(`^[${C}]{1,3}`,"ig"))||[],[s=""]=i.match(new RegExp(`[${R}]{1,3}`,"ig"))||[],n=r.length+s.length;if(n<2||n<3&&"X"!==i[2].toUpperCase())return null;switch(r.length){case 3:return(r+s).split("").join(this.JOLLY_CHAR)+this.JOLLY_CHAR;case 2:return`${r[0]}${s[0]}*${r[1]}${this.JOLLY_CHAR}`;case 1:return`${r[0]}${s}${this.JOLLY_CHAR}`;default:return`${s}${3===s.length?this.JOLLY_CHAR:""}`}}cfToFirstName(t){const e=null==t?void 0:t.substring(3,6);return"string"==typeof t&&3===(null==e?void 0:e.length)&&new RegExp(`^(${y})$`,"iu").test(e)?this.cfToLastName(e):null}cfToGender(t){if("string"!=typeof t||t.length<10)return null;const e=t.substring(9,10),i=10*parseInt(this.partialCfDeomocode(e,9),10);return At.getGender(i)}cfToBirthYear(t){if("string"!=typeof t||t.length<8)return null;const i=t.substring(6,8),r=parseInt(this.partialCfDeomocode(i,6),10);if(isNaN(r))return null;const s=parseInt(e().format("YY"),10),n=100*(r>s?1:0);return e().subtract(s-r+n,"years").year()}cfToBirthMonth(t){if("string"!=typeof t||t.length<9)return null;const e=t.substring(8,9).toUpperCase(),i=ut[e];return"number"!=typeof i||i<0||i>11?null:i}cfToBirthDay(t){if("string"!=typeof t||t.length<11)return null;const e=t.substring(9,11),i=parseInt(this.partialCfDeomocode(e,9),10);return isNaN(i)?null:At.getDay(i)}cfToBirthDate(t){const e=this.cfToBirthDay(t);if(!e)return null;const i=this.cfToBirthMonth(t);if("number"!=typeof i)return null;const r=this.cfToBirthYear(t);return p.ymdToDate(r,i,e)}cfToBirthPlace(t){return r(this,arguments,void 0,(function*(t,i=!0){if("string"!=typeof t||t.length<15)return null;const r=t.substring(11,15),s=this.partialCfDeomocode(r,11),n=yield this.belfioreConnector.findByCode(s);if(!n)return null;const{creationDate:a,expirationDate:o}=n;if((a||o)&&i){const i=this.cfToBirthDate(t),r=e(Et).add(5,"years").isBefore(i,"day");if(i&&r){if(!((!o||e(i).isBefore(o,"day"))&&(!a||e(i).isAfter(a,"day"))))return null}}return n}))}cfDecode(t){return r(this,void 0,void 0,(function*(){var e;const i=this.cfToBirthYear(t)||void 0,r=null!==(e=this.cfToBirthMonth(t))&&void 0!==e?e:void 0,s=this.cfToBirthDay(t)||void 0,n=p.ymdToDate(i,r,s)||void 0,a=yield this.cfToBirthPlace(t),o={firstName:this.cfToFirstName(t)||void 0,lastName:this.cfToLastName(t)||void 0,day:s,month:r,year:i,date:n,gender:this.cfToGender(t)||void 0,place:a||void 0,omocodeId:this.cfOmocodeId(t)};return i&&r&&s&&(o.date=new Date(Date.UTC(i,r,s))),o}))}lastNameToCf(t){if(!t||(t||"").trim().length<2)return null;if(!/^[A-Z ']{1,32}$/iu.test(_t.replace(t)))return null;const e=(this.charExtractor(t,C)+this.charExtractor(t,R)).padEnd(3,"X").substring(0,3);return e.length<3?null:e.toUpperCase()}firstNameToCf(t){if(!t||(t||"").trim().length<2)return null;const e=this.charExtractor(t,C);return e.length>=4?(e[0]+e.substring(2,4)).toUpperCase():this.lastNameToCf(t)}yearToCf(t){let e;return e="string"==typeof t?parseInt(t,10):t,"number"!=typeof e||isNaN(e)||!(e>=1900||e<100)?null:`0${e}`.substr(-2)}monthToCf(t){return t<0||t>11?null:ut[t]||null}dayGenderToCf(t,e){if(t<1||t>31)return null;const i=Tt[e];return"number"!=typeof i?null:`0${t+i}`.substr(-2)}yearMonthDayToDate(t,i=0,r=1){if(!t||t<1861||[i,r].some((t=>"number"!=typeof t)))return null;const s=e(Date.UTC(t,i||0,r||1));return s.isValid()&&s.year()===t&&s.month()===i&&s.date()===r?s.toDate():null}parsePlace(t){return r(this,void 0,void 0,(function*(){let e;return t?("object"==typeof t&&t.belfioreCode?e=yield this.belfioreConnector.findByCode(t.belfioreCode):"string"==typeof t&&(e=(yield this.belfioreConnector.findByCode(t))||(yield this.belfioreConnector.findByName(t))),e||null):null}))}dateGenderToCf(t,e){const i=p.parseDate(t);if(!i)return null;return`${this.yearToCf(i.getFullYear())}${this.monthToCf(i.getMonth())}${this.dayGenderToCf(i.getDate(),e)}`}placeToCf(t,e,i){return r(this,void 0,void 0,(function*(){const r=p.parseDate(t);let s,n;if(r||"string"!=typeof t){if(!e)return null;s=e,n=i}else s=t,n=e;let a=this.belfioreConnector;if(n&&(a=a.byProvince(n)),r&&a&&(a=a.from(r)),a){const t=yield new pt(a).parsePlace(s);if(t)return t.belfioreCode}return null}))}encodeCf(t){return r(this,arguments,void 0,(function*({lastName:t,firstName:e,year:i,month:s,day:n,date:a,gender:o,place:c,omocodeId:h=0}){const l=p.parseDate(a)||this.yearMonthDayToDate(i,s,n);if(!(l&&t&&e&&o&&c))return null;const d=[()=>r(this,void 0,void 0,(function*(){return this.lastNameToCf(t)})),()=>r(this,void 0,void 0,(function*(){return this.firstNameToCf(e)})),()=>r(this,void 0,void 0,(function*(){return this.dateGenderToCf(l,o)})),()=>r(this,void 0,void 0,(function*(){return yield this.placeToCf(l,(null==c?void 0:c.belfioreCode)||c)}))];let u="";for(const t of d){const e=yield t();if(!e)return null;u+=e}return this.cfOmocode(u,h)}))}checkBitmap(t){return!!(Math.pow(2,t)&this.OMOCODE_BITMAP)}charOmocode(t,e){return/^[A-Z]$/giu.test(t)&&this.checkBitmap(e)?$t[t.toUpperCase()]:t}charExtractor(t,e){const i=new RegExp(`[${e}]{1,24}`,"ig");return(_t.replace(t).trim().match(i)||[]).join("")}partialCfDeomocode(t,e=0){return t.replace(/[\dA-Z]/giu,((t,i)=>this.charOmocode(t,i+e)))}appyCaseToChar(t,e){if(t&&e){const i=e[0]===e[0].toUpperCase(),r=e[0]===e[0].toLowerCase();if(i&&!r)return t[0].toUpperCase();if(!i&&r)return t[0].toLowerCase()}return t[0]}}const Ct="Provided lastName is not valid, only letters, diacritics and apostrophe allowed",Rt="Provided name is not valid, only letters, diacritics and apostrophe allowed",mt="Provided day is not valid",Dt="Provided gender is not valid",vt="Provided day and/or gender are not valid",Nt="Provided year is not valid, only 2 or 4 digit numbers are allowed",Mt="Provided date is not valid";var Ot=Object.freeze({__proto__:null,INVALID_DATE:Mt,INVALID_DAY:mt,INVALID_DAY_OR_GENDER:vt,INVALID_GENDER:Dt,INVALID_NAME:Rt,INVALID_PLACE_NAME:"Proviced City/Country name is not valid",INVALID_SURNAME:Ct,INVALID_YEAR:Nt});class It extends Error{constructor(t){super((Object.entries(Ot).find((([e])=>e===t))||[])[1]||t)}}const St=new i;class yt{constructor(t){this.belfioreConnector=t,this.LETTER_SET=`[A-Z${St.matcherBy(/^[A-Z]$/iu)}]`,this.SEPARATOR_SET="(?:'?\\s{0,4})",this.parser=new pt(t)}cfLastName(t){let e=g;if(t){if(!this.lastName().test(t))throw new It(Ct);e=this.parser.lastNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfFirstName(t){let e=y;if(t){if(!this.lastName().test(t))throw new It(Rt);e=this.parser.firstNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfYear(t){let e=P;if(t){const i=this.parser.yearToCf(t);if(!i)throw new It(Nt);e=this.deomocode(i)}return this.isolatedInsensitiveTailor(e)}cfMonth(t){let e=b;return t&&(e=this.parser.monthToCf(t)||e),this.isolatedInsensitiveTailor(e)}cfDay(t){let e=G;if(t){const i=this.parser.dayGenderToCf(t,"M"),r=this.parser.dayGenderToCf(t,"F");if(!i||!r)throw new It(mt);e=`(?:${this.deomocode(i)})|(?:${this.deomocode(r)})`}return this.isolatedInsensitiveTailor(e)}cfDayGender(t,e){if(!e)return this.cfDay(t);let i;if(t){const r=this.parser.dayGenderToCf(t,e);if(!r)throw new It(vt);i=this.deomocode(r)}else switch(e){case"M":i=U;break;case"F":i=j;break;default:throw new It(Dt)}return this.isolatedInsensitiveTailor(i)}cfDateGender(t,e){if(t&&!p.parseDate(t))throw new It(Mt);if(e&&!At.toArray().includes(e))throw new It(Dt);let i=Z;if(t){const r=e&&this.parser.dateGenderToCf(t,e);if(r)i=this.deomocode(r);else{const e=e=>{const i=this.parser.dateGenderToCf(t,e);if(!i)throw new It(Mt);return i&&this.deomocode(i)};i=`(?:${At.toArray().map(e).join("|")})`}}else"M"===e?i=k:"F"===e&&(i=X);return this.isolatedInsensitiveTailor(i)}cfPlace(t,e){return r(this,void 0,void 0,(function*(){let i=z;if(t){const r=p.parseDate(t);if(r&&e){const t=e,s=yield this.parser.placeToCf(r,t);i=this.deomocode(s||"")}else if(!r&&"string"==typeof t){const e=t,r=yield this.parser.placeToCf(e);i=this.deomocode(r||"")}}return this.isolatedInsensitiveTailor(i)}))}codiceFiscale(t){return r(this,void 0,void 0,(function*(){let e=W;if(t){const i=yield this.parser.encodeCf(t);if(i)e=this.deomocode(i);else{const{lastName:i,firstName:s,year:n,month:a,day:o,date:c,gender:h,place:l}=t;if(i||s||n||a||o||c||h||l){let t=null;c?t=p.parseDate(c):n&&(t=this.parser.yearMonthDayToDate(n,a,o));const d=[()=>r(this,void 0,void 0,(function*(){return this.cfLastName(i)})),()=>r(this,void 0,void 0,(function*(){return this.cfFirstName(s)})),()=>r(this,void 0,void 0,(function*(){return this.cfDateGender(t,h)})),()=>r(this,void 0,void 0,(function*(){return yield this.cfPlace(t,(null==l?void 0:l.belfioreCode)||l)}))];e="";for(const t of d){const i=(yield t()).toString(),r=i.match(/\^(.{1,256})\$/),s=r&&r[1];if(!s)throw new Error(`Unable to handle [${i}]`);e+=`(?:${s})`}e+=K}}}return this.isolatedInsensitiveTailor(e)}))}lastName(t){let e=`${this.LETTER_SET}{1,24}`;if(t&&/^[A-Z]{1,3}/iu.test(t)){const i=t.substr(0,3),r=t=>t.split("").map((t=>`[${St.insensitiveMatcher[t]}]`)),[s,n]=[`^[${C}]{1,3}`,`[${R}]{1,3}`].map((t=>r((i.match(new RegExp(t,"ig"))||[])[0]||""))),a=`[${R+St.matcherBy(new RegExp(`^[${R}]$`,"ui"))}]`,o=`(?:${a}${this.SEPARATOR_SET}){0,24}`,c=`(?:${this.SEPARATOR_SET}${o}${a})?`;switch(s.length){case 3:{const t=o;e=t+s.join(`${this.SEPARATOR_SET}${t}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;break}case 2:e=`(?:${[`${n[0]}${o}${this.SEPARATOR_SET}${s[0]}${o}${s[1]}`,`${s[0]}${this.SEPARATOR_SET}`+n.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${o}${s[1]}`,s.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${n[0]}`].join("|")})${c}`;break;case 1:e=`(?:${[n.slice(0,2).join(`${this.SEPARATOR_SET}`)+o+s.join(`${this.SEPARATOR_SET}`),`${n[0]}${this.SEPARATOR_SET}`+s.join(`${this.SEPARATOR_SET}`)+n[1],[s[0],...n.slice(0,2)].join(`${this.SEPARATOR_SET}`)].join("|")})${c}`;break;default:e=`${n.join(`${this.SEPARATOR_SET}`)}${c}`}if((null==n?void 0:n.length)+(null==s?void 0:s.length)<3)return this.isolatedInsensitiveTailor(`\\s{0,4}(${e})\\s{0,4}`)}return this.isolatedInsensitiveTailor(`\\s{0,4}((?:${e})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\s{0,4}`)}firstName(t){if(t&&new RegExp(`^[A-Z]{3}[${C}]{3}`,"iu").test(t)){const e=((t.substr(3,3).match(new RegExp(`^[${C}]{1,3}`,"ig"))||[])[0]||"").split("").map((t=>`[${St.insensitiveMatcher[t]}]`)),[i,r]=[R,C].map((t=>t+St.matcherBy(new RegExp(`^[${t}]$`,"ui")))),s=`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}${e[0]}${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${r}]${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24})?`+e.slice(1,3).join(`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;return this.isolatedInsensitiveTailor(s)}return this.lastName((t||"").substr(3,3))}date(t){let i=E;if(t){const r=this.parser.cfToBirthDate(t);if(r){const t=r.toJSON();if(e().diff(e(r),"y")<50){const e=parseInt(t.substr(0,2),10);i=`(?:${[e-1,e].map((t=>t.toString().padStart(2,"0"))).join("|")})`+t.substr(2,8)}else i=t.substr(0,10)}}return this.isolatedInsensitiveTailor(`${i}(?:T${$}(?:${T})?)?`)}gender(t){const e=t&&this.parser.cfToGender(t)||`[${At.toArray().join("")}]`;return this.isolatedInsensitiveTailor(e)}place(t){return r(this,void 0,void 0,(function*(){let e=".{1,32}";const i=t&&(yield this.parser.cfToBirthPlace(t));if(i){e=`(?:(?:${i.name.replace(/./gu,(t=>St[t]===t?t:`[${t}${St[t]}]`))})|${i.belfioreCode})`}return this.isolatedInsensitiveTailor(e)}))}deomocode(t){return t.replace(/\d/gu,(t=>`[${t}${$t[t]}]`))}isolatedInsensitiveTailor(t){return new RegExp(`^(?:${t})$`,"iu")}}class gt{constructor(t,e){this.codiceFiscale=e,this.pattern=new yt(t),this.parser=new pt(t)}get hasLastName(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=3}get hasFirstName(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=6}get hasBirthYear(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=8}get hasBirthDate(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=11}get hasGender(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=10}get hasBirthPlace(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=15}get hasCRC(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=16}matchPersonalInfo(t){return r(this,void 0,void 0,(function*(){return(yield this.pattern.codiceFiscale(t)).test(this.codiceFiscale)}))}mismatchPersonalInfo(t){return r(this,void 0,void 0,(function*(){return!(!(this.codiceFiscale&&t&&t.lastName&&t.firstName&&(t.date||t.day&&t.month&&t.year)&&t.gender&&t.place)||(yield this.matchPersonalInfo(t)))}))}matchLastName(t){return this.hasLastName&&this.pattern.lastName(this.codiceFiscale).test(t||"")}mismatchLastName(t){return this.hasLastName&&!!t&&!this.matchLastName(t)}matchFirstName(t){return this.hasFirstName&&this.pattern.firstName(this.codiceFiscale).test(t||"")}mismatchFirstName(t){return this.hasFirstName&&!!t&&!this.matchFirstName(t)}matchBirthDate(t){if(this.hasBirthDate){const i=this.parser.cfToBirthDate(this.codiceFiscale),r=p.parseDate(t);if(i&&r)return e(i).isSame(r,"d")}return!1}mismatchBirthDate(t){return this.hasBirthYear&&!!p.parseDate(t)&&!this.matchBirthDate(t)}matchGender(t){return this.hasGender&&this.pattern.gender(this.codiceFiscale).test(t||"")}mismatchGender(t){return this.hasGender&&!!t&&!this.matchGender(t)}matchBirthPlace(t){return r(this,void 0,void 0,(function*(){if(this.hasBirthPlace&&t){const e=yield this.pattern.place(this.codiceFiscale),i=yield this.parser.parsePlace(t);return!!i&&e.test(null==i?void 0:i.belfioreCode)}return!1}))}mismatchBirthPlace(t){return r(this,void 0,void 0,(function*(){return this.hasBirthPlace&&!!t&&!(yield this.matchBirthPlace(t))}))}get errors(){return Promise.all([this.parser.cfToBirthPlace(this.codiceFiscale,!1),this.parser.cfToBirthPlace(this.codiceFiscale,!0)]).then((([t,e])=>{var i,r;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},this.parser.cfToLastName(this.codiceFiscale)?{}:{lastName:"MISSING_OR_INVALID_LAST_NAME"}),this.parser.cfToFirstName(this.codiceFiscale)?{}:{firstName:"MISSING_OR_INVALID_FIRST_NAME"}),this.parser.cfToBirthDate(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DATE"}),this.parser.cfToBirthDay(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DAY"}),this.parser.cfToBirthMonth(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_MONTH"}),this.parser.cfToBirthYear(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_YEAR"}),this.parser.cfToGender(this.codiceFiscale)?{}:{gender:"MISSING_DAY"}),t?{}:{place:"MISSING_OR_INVALID_PLACE"}),e?{}:{place:"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE",date:"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE"}),(null===(r=null===(i=this.codiceFiscale)||void 0===i?void 0:i.substring(s,16))||void 0===r?void 0:r.toUpperCase())===lt.checkDigit(this.codiceFiscale)?{}:{crc:"INVALID_CRC_CODE"}),this.hasCRC?{}:{crc:"MISSING_CRC_CODE"})})).then((t=>Object.keys(t).length?t:null))}get valid(){return Promise.all([this.pattern.codiceFiscale(),this.parser.cfToBirthPlace(this.codiceFiscale)]).then((([t,e])=>{var i,r;return!(!this.hasCRC||!t.test(this.codiceFiscale)||(null===(r=null===(i=this.codiceFiscale)||void 0===i?void 0:i.substring(s,16))||void 0===r?void 0:r.toUpperCase())!==lt.checkDigit(this.codiceFiscale)||!e)}))}get invalid(){return this.valid.then((t=>!!this.codiceFiscale&&!t))}}class Lt{constructor(t){this.belfioreConnector=t,this.parser=new pt(t),this.pattern=new yt(t)}codiceFiscale(t){return new gt(this.belfioreConnector,t)}isLastNameValid(t){return this.pattern.lastName().test(t)}isLastNameInvalid(t){return!!t&&!this.isLastNameValid(t)}isFirstNameValid(t){return this.pattern.firstName().test(t)}isFirstNameInvalid(t){return!!t&&!this.isFirstNameValid(t)}isBirthDateValid(t){return!!p.parseDate(t)}isBirthDateInvalid(t){return!!t&&!this.isBirthDateValid(t)}isGenderValid(t){return this.pattern.gender().test(t)}isGenderInvalid(t){return!!t&&!this.isGenderValid(t)}isBirthPlaceValid(t){return r(this,void 0,void 0,(function*(){const e=yield this.parser.parsePlace(t);return!!e&&!!(yield this.belfioreConnector.findByCode(e.belfioreCode))}))}isBirthPlaceInvalid(t){return r(this,void 0,void 0,(function*(){return!!t&&!(yield this.isBirthPlaceValid(t))}))}birthDatePlaceMatch(t,i){return r(this,void 0,void 0,(function*(){const r=yield this.parser.parsePlace(i);return this.isBirthDateValid(t)&&!!r&&(!!(yield this.belfioreConnector.from(t).findByCode(r.belfioreCode))||!e(p.parseDate(t)).isAfter(Et,"day"))}))}birthDatePlaceMismatch(t,e){return r(this,void 0,void 0,(function*(){const i=yield this.parser.parsePlace(e);return this.isBirthDateValid(t)&&!!i&&!(yield this.birthDatePlaceMatch(t,e))}))}birthPlaceDateMatch(t,e){return r(this,void 0,void 0,(function*(){return yield this.birthDatePlaceMatch(e,t)}))}birthPlaceDateMismatch(t,e){return r(this,void 0,void 0,(function*(){return yield this.birthDatePlaceMismatch(e,t)}))}}class Pt{constructor(t){this.belfioreConnector=t,this.validator=new Lt(t),this.parser=new pt(t),this.pattern=new yt(t)}}return t.BirthMonth=ut,t.CFMismatchValidator=gt,t.CRC=ht,t.CheckDigitizer=lt,t.CodiceFiscaleUtils=Pt,t.DATE_MATCHER=_,t.DateUtils=p,t.Gender=At,t.Matcher=ot,t.Omocodes=$t,t.Parser=pt,t.Pattern=yt,t.VALIDATOR=ot,t.Validator=Lt,t.default=Pt,Object.defineProperty(t,"__esModule",{value:!0}),t}({},dayjs,DiacriticRemover); -//# sourceMappingURL=codice-fiscale-utils.bundle.min.js.map +var CodiceFiscaleUtils=function(t,e,i){"use strict";function r(t,e,i,r){return new(i||(i=Promise))((function(s,n){function a(t){try{c(r.next(t))}catch(t){n(t)}}function o(t){try{c(r.throw(t))}catch(t){n(t)}}function c(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(a,o)}c((r=r.apply(t,e||[])).next())}))}"function"==typeof SuppressedError&&SuppressedError;const s=15,n="[12][0-9]{3}",a="0[1-9]|1[0-2]",o="0[469]|11",c="0[13578]|1[02]",h=`(?:${a})-(?:0[1-9]|[12]\\d)|(?:${o})-30|(?:${c})-3[01]`,l="[01]\\d|2[0-3]",d="[0-5]\\d",u=d,f="\\d{3}",T=`Z|[-+](?:${l})(?::?${d})?`,$=`(?:${l})(?::${d}(?::${u}(\\.${f})?)?(?:${T})?)?`,A=`${n}-(?:${h})(?:T${$})?`,E=`${n}(?:-(?:(?:${a})|(?:${h})(?:T${$})?))?`;var _=Object.freeze({__proto__:null,DAY:"0[1-9]|[12][0-9]|3[01]",DAYS_30_MONTHS:o,DAYS_31_MONTHS:c,HOURS:l,ISO8601_DATE_TIME:E,ISO8601_SHORT_DATE:A,LEAP_MONTH:"02",MILLISECONDS:f,MINUTES:d,MONTH:a,MONTH_DAY:h,SECONDS:u,TIME:$,TIMEZONE:T,YEAR:n});class p{static parseDate(t){if(!(t instanceof Date||"string"==typeof t&&new RegExp(`^(?:${E})$`).test(t)||Array.isArray(t)&&t.length&&!t.some((t=>"number"!=typeof t||isNaN(t)))))return null;try{let i;if(Array.isArray(t)){const[r,s=0,n=1]=t;if(!(s>=0&&s<=11&&n>0&&n<=31))return null;i=e(Date.UTC(r,s||0,n||1))}else i=e(t);return i.isValid()?i.toDate():null}catch(t){return null}}static ymdToDate(t,e,i){return this.parseDate([t,e,i])}}const C="B-DF-HJ-NP-TV-Z",R="AEIOU",m="\\dLMNP-V",D="1-9MNP-V",v="0L",N="A-EHLMPR-T",M="DHPS",O="ACELMRT",y="A-M",I="Z",S=`[A-Z][${R}][${R}X]|[${R}]X{2}|[${C}]{2}[A-Z]`,g=S,L=`(?:${S}){2}`,P=`[${m}]{2}`,F="[02468LNQSU][048LQU]|[13579MPRTV][26NS]",b=`[${N}]`,B="[26NS]",w="[37PT]",H=`[${v}4Q][${D}]|[1256MNRS][${m}]`,Y=`[${w}][${v}]`,V=`[${w}][${v}1M]`,G=`(?:${H}|${w}[${v}1M])`,U=`(?:[${v}][${D}]|[12MN][${m}]|[3P][${v}1M])`,j=`(?:[4Q][${D}]|[56RS][${m}]|[7T][${v}1M])`,x=`${b}(?:${H})|[${M}]${Y}|[${O}]${V}`,Z=`${P}(?:${b}(?:[${v}4Q][${D}]|[15MR][${m}]|${B}[0-8LMNP-U])|[${M}]${w}[${v}]|[${O}]${w}[${v}1M]|[${M}${O}]${B}[9V])|(?:${F})B${B}[9V]`,k=`${P}(?:${b}(?:[${v}][${D}]|[1M][${m}]|[2N][0-8LMNP-U])|[${M}][3P][${v}]|[${O}][3P][${v}1M]|[${M}${O}][2N][9V])|(?:${F})B[2N][9V]`,X=`${P}(?:${b}(?:[4Q][${D}]|[5R][${m}]|[6S][0-8LMNP-U])|[${M}][7T][${v}]|[${O}][7T][${v}1M]|[${M}${O}][6S][9V])|(?:${F})B[6S][9V]`,Q=`[${y}](?:[${D}][${m}]{2}|[${v}](?:[${D}][${m}]|[${v}][${D}]))`,J=`${I}[${D}][${m}]{2}`,z=`(?:[${y}${I}][${D}][${m}]{2})|(?:[${y}][${v}](?:[${D}][${m}]|[${v}][${D}]))`,K="[A-Z]",W=`${L}(?:${Z})(?:${z})${K}`,q=`[A-Z][${R}]?|[${C}]{1,2}`,tt=`(?:${q})|(?:(?:${S})(?:${q})?)`,et=`[${m}]`,it=`${b}[${v}12456MNQRS]?|[${M}${O}]${w}`,rt=`${et}|(?:${P}(?:${it})?)`,st=`[${y}${I}](?:[${D}][${m}]?)?|[${I}](?:[${v}][${m}]?)?`,nt=`${tt}|(?:${L}(?:(?:${rt})|(?:${Z})(?:(?:${st})|(?:${z})${K}?)?)?)?`;var at,ot=Object.freeze({__proto__:null,BELFIORE_CODE_MATCHER:z,CF_FULL_NAME_MATCHER:L,CF_NAME_MATCHER:S,CF_SURNAME_MATCHER:g,CHECK_DIGIT:K,CITY_CODE_LIST:y,CITY_CODE_MATCHER:Q,CODICE_FISCALE:W,CONSONANT_LIST:C,COUNTRY_CODE_LIST:I,COUNTRY_CODE_MATCHER:J,DAY_29_MATCHER:H,DAY_2X_MATCHER:B,DAY_30_MATCHER:Y,DAY_31_MATCHER:V,DAY_3X_MATCHER:w,DAY_MATCHER:G,FEMALE_DAY_MATCHER:j,FEMALE_FULL_DATE_MATCHER:X,FULL_DATE_MATCHER:Z,LEAP_YEAR_MATCHER:F,MALE_DAY_MATCHER:U,MALE_FULL_DATE_MATCHER:k,MONTH_30DAYS_LIST:M,MONTH_31DAYS_LIST:O,MONTH_DAY_MATCHER:x,MONTH_LIST:N,MONTH_MATCHER:b,OMOCODE_NON_ZERO_NUMBER_LIST:D,OMOCODE_NUMBER_LIST:m,OMOCODE_ZERO_LIST:v,PARTIAL_BELFIORE_CODE_MATCHER:st,PARTIAL_CF:nt,PARTIAL_CF_FULL_NAME:tt,PARTIAL_CF_NAME_MATCHER:q,PARTIAL_FULL_DATE:rt,PARTIAL_MONTH_DAY:it,PARTIAL_YEAR:et,VOWEL_LIST:R,YEAR_MATCHER:P});!function(t){t[t.B=0]="B",t[t.A=1]="A",t[t.K=2]="K",t[t.P=3]="P",t[t.L=4]="L",t[t.C=5]="C",t[t.Q=6]="Q",t[t.D=7]="D",t[t.R=8]="R",t[t.E=9]="E",t[t.V=10]="V",t[t.O=11]="O",t[t.S=12]="S",t[t.F=13]="F",t[t.T=14]="T",t[t.G=15]="G",t[t.U=16]="U",t[t.H=17]="H",t[t.M=18]="M",t[t.I=19]="I",t[t.N=20]="N",t[t.J=21]="J",t[t.W=22]="W",t[t.Z=23]="Z",t[t.Y=24]="Y",t[t.X=25]="X"}(at||(at={}));var ct,ht=at;class lt{static checkDigit(t){if("string"==typeof t&&new RegExp(nt).test(t)){const e=t.substr(0,s);let i=0;for(const t of this.evaluateChar(e))i+=t;return String.fromCharCode(i%this.CRC_MOD+this.CHAR_OFFSET)}return null}static evaluateChar(t=""){return(e=this.evaluateCharGenerator(t))[Symbol.iterator]=()=>e,e;var e}static*evaluateCharGenerator(t=""){if("string"==typeof t&&t.length)for(let e=0;e0&&e<=this.MAX_MONTH_DAY?e:null}static getGender(t){return this.toArray().find((e=>t>=Tt[e]&&t<=Tt[e]+this.MAX_MONTH_DAY))||null}static genderizeDay(t,e){return t+Tt[e]}static toArray(){return["M","F"]}}At.MAX_MONTH_DAY=31;const Et=new Date("1973-09-29"),_t=new i;class pt{constructor(t){this.belfioreConnector=t,this.OMOCODE_BITMAP=30400,this.JOLLY_CHAR="*"}cfDeomocode(t){if(t&&t.length<=6)return t;const e=this.partialCfDeomocode(t);if(e.length=0;r--)if(Math.pow(2,r)&this.OMOCODE_BITMAP){if(!!(e&Math.pow(2,s))!==isNaN(parseInt(i[r],10))){const t=i[r].toUpperCase();i[r]=$t[t]}s++}const r=i[15];if(r){const t=i.slice(0,s).join("");i[15]=this.appyCaseToChar(lt.checkDigit(t)||"",r)}return i.join("")}cfOmocodeId(t){const e=t.split("").filter(((t,e)=>Math.pow(2,e)&this.OMOCODE_BITMAP)).map((t=>/^[a-z]$/i.test(_t[t])?1:0)).join("");return parseInt(e,2)}cfToLastName(t){const e=null==t?void 0:t.substring(0,3);if("string"!=typeof t||3!==e.length||!new RegExp(`^(?:${g})`,"iu").test(e))return null;const i=t.substring(0,3),[r=""]=i.match(new RegExp(`^[${C}]{1,3}`,"ig"))||[],[s=""]=i.match(new RegExp(`[${R}]{1,3}`,"ig"))||[],n=r.length+s.length;if(n<2||n<3&&"X"!==i[2].toUpperCase())return null;switch(r.length){case 3:return(r+s).split("").join(this.JOLLY_CHAR)+this.JOLLY_CHAR;case 2:return`${r[0]}${s[0]}*${r[1]}${this.JOLLY_CHAR}`;case 1:return`${r[0]}${s}${this.JOLLY_CHAR}`;default:return`${s}${3===s.length?this.JOLLY_CHAR:""}`}}cfToFirstName(t){const e=null==t?void 0:t.substring(3,6);return"string"==typeof t&&3===(null==e?void 0:e.length)&&new RegExp(`^(${S})$`,"iu").test(e)?this.cfToLastName(e):null}cfToGender(t){if("string"!=typeof t||t.length<10)return null;const e=t.substring(9,10),i=10*parseInt(this.partialCfDeomocode(e,9),10);return At.getGender(i)}cfToBirthYear(t){if("string"!=typeof t||t.length<8)return null;const i=t.substring(6,8),r=parseInt(this.partialCfDeomocode(i,6),10);if(isNaN(r))return null;const s=parseInt(e().format("YY"),10),n=100*(r>s?1:0);return e().subtract(s-r+n,"years").year()}cfToBirthMonth(t){if("string"!=typeof t||t.length<9)return null;const e=t.substring(8,9).toUpperCase(),i=ut[e];return"number"!=typeof i||i<0||i>11?null:i}cfToBirthDay(t){if("string"!=typeof t||t.length<11)return null;const e=t.substring(9,11),i=parseInt(this.partialCfDeomocode(e,9),10);return isNaN(i)?null:At.getDay(i)}cfToBirthDate(t){const e=this.cfToBirthDay(t);if(!e)return null;const i=this.cfToBirthMonth(t);if("number"!=typeof i)return null;const r=this.cfToBirthYear(t);return p.ymdToDate(r,i,e)}cfToBirthPlace(t){return r(this,arguments,void 0,(function*(t,i=!0){if("string"!=typeof t||t.length<15)return null;const r=t.substring(11,15),s=this.partialCfDeomocode(r,11),n=yield this.belfioreConnector.findByCode(s);if(!n)return null;const{creationDate:a,expirationDate:o}=n;if((a||o)&&i){const i=this.cfToBirthDate(t),r=e(Et).add(5,"years").isBefore(i,"day");if(i&&r){if(!((!o||e(i).isBefore(o,"day"))&&(!a||e(i).isAfter(a,"day"))))return null}}return n}))}cfDecode(t){return r(this,void 0,void 0,(function*(){var e;const i=this.cfToBirthYear(t)||void 0,r=null!==(e=this.cfToBirthMonth(t))&&void 0!==e?e:void 0,s=this.cfToBirthDay(t)||void 0,n=p.ymdToDate(i,r,s)||void 0,a=yield this.cfToBirthPlace(t),o={firstName:this.cfToFirstName(t)||void 0,lastName:this.cfToLastName(t)||void 0,day:s,month:r,year:i,date:n,gender:this.cfToGender(t)||void 0,place:a||void 0,omocodeId:this.cfOmocodeId(t)};return i&&r&&s&&(o.date=new Date(Date.UTC(i,r,s))),o}))}lastNameToCf(t){if(!t||(t||"").trim().length<2)return null;if(!/^[A-Z ']{1,32}$/iu.test(_t.replace(t)))return null;const e=(this.charExtractor(t,C)+this.charExtractor(t,R)).padEnd(3,"X").substring(0,3);return e.length<3?null:e.toUpperCase()}firstNameToCf(t){if(!t||(t||"").trim().length<2)return null;const e=this.charExtractor(t,C);return e.length>=4?(e[0]+e.substring(2,4)).toUpperCase():this.lastNameToCf(t)}yearToCf(t){let e;return e="string"==typeof t?parseInt(t,10):t,"number"!=typeof e||isNaN(e)||!(e>=1900||e<100)?null:`0${e}`.substr(-2)}monthToCf(t){return t<0||t>11?null:ut[t]||null}dayGenderToCf(t,e){if(t<1||t>31)return null;const i=Tt[e];return"number"!=typeof i?null:`0${t+i}`.substr(-2)}yearMonthDayToDate(t,i=0,r=1){if(!t||t<1861||[i,r].some((t=>"number"!=typeof t)))return null;const s=e(Date.UTC(t,i||0,r||1));return s.isValid()&&s.year()===t&&s.month()===i&&s.date()===r?s.toDate():null}parsePlace(t){return r(this,void 0,void 0,(function*(){let e;return t?("object"==typeof t&&t.belfioreCode?e=yield this.belfioreConnector.findByCode(t.belfioreCode):"string"==typeof t&&(e=(yield this.belfioreConnector.findByCode(t))||(yield this.belfioreConnector.findByName(t))),e||null):null}))}dateGenderToCf(t,e){const i=p.parseDate(t);if(!i)return null;return`${this.yearToCf(i.getFullYear())}${this.monthToCf(i.getMonth())}${this.dayGenderToCf(i.getDate(),e)}`}placeToCf(t,e,i){return r(this,void 0,void 0,(function*(){const r=p.parseDate(t);let s,n;if(r||"string"!=typeof t){if(!e)return null;s=e,n=i}else s=t,n=e;let a=this.belfioreConnector;if(n&&(a=a.byProvince(n)),r&&a&&(a=a.from(r)),a){const t=yield new pt(a).parsePlace(s);if(t)return t.belfioreCode}return null}))}encodeCf(t){return r(this,arguments,void 0,(function*({lastName:t,firstName:e,year:i,month:s,day:n,date:a,gender:o,place:c,omocodeId:h=0}){const l=p.parseDate(a)||this.yearMonthDayToDate(i,s,n);if(!(l&&t&&e&&o&&c))return null;const d=[()=>r(this,void 0,void 0,(function*(){return this.lastNameToCf(t)})),()=>r(this,void 0,void 0,(function*(){return this.firstNameToCf(e)})),()=>r(this,void 0,void 0,(function*(){return this.dateGenderToCf(l,o)})),()=>r(this,void 0,void 0,(function*(){return yield this.placeToCf(l,(null==c?void 0:c.belfioreCode)||c)}))];let u="";for(const t of d){const e=yield t();if(!e)return null;u+=e}return this.cfOmocode(u,h)}))}checkBitmap(t){return!!(Math.pow(2,t)&this.OMOCODE_BITMAP)}charOmocode(t,e){return/^[A-Z]$/giu.test(t)&&this.checkBitmap(e)?$t[t.toUpperCase()]:t}charExtractor(t,e){const i=new RegExp(`[${e}]{1,24}`,"ig");return(_t.replace(t).trim().match(i)||[]).join("")}partialCfDeomocode(t,e=0){return t.replace(/[\dA-Z]/giu,((t,i)=>this.charOmocode(t,i+e)))}appyCaseToChar(t,e){if(t&&e){const i=e[0]===e[0].toUpperCase(),r=e[0]===e[0].toLowerCase();if(i&&!r)return t[0].toUpperCase();if(!i&&r)return t[0].toLowerCase()}return t[0]}}const Ct="Provided lastName is not valid, only letters, diacritics and apostrophe allowed",Rt="Provided name is not valid, only letters, diacritics and apostrophe allowed",mt="Provided day is not valid",Dt="Provided gender is not valid",vt="Provided day and/or gender are not valid",Nt="Provided year is not valid, only 2 or 4 digit numbers are allowed",Mt="Provided date is not valid";var Ot=Object.freeze({__proto__:null,INVALID_DATE:Mt,INVALID_DAY:mt,INVALID_DAY_OR_GENDER:vt,INVALID_GENDER:Dt,INVALID_NAME:Rt,INVALID_PLACE_NAME:"Proviced City/Country name is not valid",INVALID_SURNAME:Ct,INVALID_YEAR:Nt});class yt extends Error{constructor(t){super((Object.entries(Ot).find((([e])=>e===t))||[])[1]||t)}}const It=new i;class St{constructor(t){this.belfioreConnector=t,this.LETTER_SET=`[A-Z${It.matcherBy(/^[A-Z]$/iu)}]`,this.SEPARATOR_SET="(?:'?\\s{0,4})",this.parser=new pt(t)}cfLastName(t){let e=g;if(t){if(!this.lastName().test(t))throw new yt(Ct);e=this.parser.lastNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfFirstName(t){let e=S;if(t){if(!this.lastName().test(t))throw new yt(Rt);e=this.parser.firstNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfYear(t){let e=P;if(t){const i=this.parser.yearToCf(t);if(!i)throw new yt(Nt);e=this.deomocode(i)}return this.isolatedInsensitiveTailor(e)}cfMonth(t){let e=b;return t&&(e=this.parser.monthToCf(t)||e),this.isolatedInsensitiveTailor(e)}cfDay(t){let e=G;if(t){const i=this.parser.dayGenderToCf(t,"M"),r=this.parser.dayGenderToCf(t,"F");if(!i||!r)throw new yt(mt);e=`(?:${this.deomocode(i)})|(?:${this.deomocode(r)})`}return this.isolatedInsensitiveTailor(e)}cfDayGender(t,e){if(!e)return this.cfDay(t);let i;if(t){const r=this.parser.dayGenderToCf(t,e);if(!r)throw new yt(vt);i=this.deomocode(r)}else switch(e){case"M":i=U;break;case"F":i=j;break;default:throw new yt(Dt)}return this.isolatedInsensitiveTailor(i)}cfDateGender(t,e){if(t&&!p.parseDate(t))throw new yt(Mt);if(e&&!At.toArray().includes(e))throw new yt(Dt);let i=Z;if(t){const r=e&&this.parser.dateGenderToCf(t,e);if(r)i=this.deomocode(r);else{const e=e=>{const i=this.parser.dateGenderToCf(t,e);if(!i)throw new yt(Mt);return i&&this.deomocode(i)};i=`(?:${At.toArray().map(e).join("|")})`}}else"M"===e?i=k:"F"===e&&(i=X);return this.isolatedInsensitiveTailor(i)}cfPlace(t,e){return r(this,void 0,void 0,(function*(){let i=z;if(t){const r=p.parseDate(t);if(r&&e){const t=e,s=yield this.parser.placeToCf(r,t);i=this.deomocode(s||"")}else if(!r&&"string"==typeof t){const e=t,r=yield this.parser.placeToCf(e);i=this.deomocode(r||"")}}return this.isolatedInsensitiveTailor(i)}))}codiceFiscale(t){return r(this,void 0,void 0,(function*(){let e=W;if(t){const i=yield this.parser.encodeCf(t);if(i)e=this.deomocode(i);else{const{lastName:i,firstName:s,year:n,month:a,day:o,date:c,gender:h,place:l}=t;if(i||s||n||a||o||c||h||l){let t=null;c?t=p.parseDate(c):n&&(t=this.parser.yearMonthDayToDate(n,a,o));const d=[()=>r(this,void 0,void 0,(function*(){return this.cfLastName(i)})),()=>r(this,void 0,void 0,(function*(){return this.cfFirstName(s)})),()=>r(this,void 0,void 0,(function*(){return this.cfDateGender(t,h)})),()=>r(this,void 0,void 0,(function*(){return yield this.cfPlace(t,(null==l?void 0:l.belfioreCode)||l)}))];e="";for(const t of d){const i=(yield t()).toString(),r=i.match(/\^(.{1,256})\$/),s=r&&r[1];if(!s)throw new Error(`Unable to handle [${i}]`);e+=`(?:${s})`}e+=K}}}return this.isolatedInsensitiveTailor(e)}))}lastName(t){let e=`${this.LETTER_SET}{1,24}`;if(t&&/^[A-Z]{1,3}/iu.test(t)){const i=t.substr(0,3),r=t=>t.split("").map((t=>`[${It.insensitiveMatcher[t]}]`)),[s,n]=[`^[${C}]{1,3}`,`[${R}]{1,3}`].map((t=>r((i.match(new RegExp(t,"ig"))||[])[0]||""))),a=`[${R+It.matcherBy(new RegExp(`^[${R}]$`,"ui"))}]`,o=`(?:${a}${this.SEPARATOR_SET}){0,24}`,c=`(?:${this.SEPARATOR_SET}${o}${a})?`;switch(s.length){case 3:{const t=o;e=t+s.join(`${this.SEPARATOR_SET}${t}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;break}case 2:e=`(?:${[`${n[0]}${o}${this.SEPARATOR_SET}${s[0]}${o}${s[1]}`,`${s[0]}${this.SEPARATOR_SET}`+n.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${o}${s[1]}`,s.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${n[0]}`].join("|")})${c}`;break;case 1:e=`(?:${[n.slice(0,2).join(`${this.SEPARATOR_SET}`)+o+s.join(`${this.SEPARATOR_SET}`),`${n[0]}${this.SEPARATOR_SET}`+s.join(`${this.SEPARATOR_SET}`)+n[1],[s[0],...n.slice(0,2)].join(`${this.SEPARATOR_SET}`)].join("|")})${c}`;break;default:e=`${n.join(`${this.SEPARATOR_SET}`)}${c}`}if((null==n?void 0:n.length)+(null==s?void 0:s.length)<3)return this.isolatedInsensitiveTailor(`\\s{0,4}(${e})\\s{0,4}`)}return this.isolatedInsensitiveTailor(`\\s{0,4}((?:${e})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\s{0,4}`)}firstName(t){if(t&&new RegExp(`^[A-Z]{3}[${C}]{3}`,"iu").test(t)){const e=((t.substr(3,3).match(new RegExp(`^[${C}]{1,3}`,"ig"))||[])[0]||"").split("").map((t=>`[${It.insensitiveMatcher[t]}]`)),[i,r]=[R,C].map((t=>t+It.matcherBy(new RegExp(`^[${t}]$`,"ui")))),s=`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}${e[0]}${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${r}]${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24})?`+e.slice(1,3).join(`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;return this.isolatedInsensitiveTailor(s)}return this.lastName((t||"").substr(3,3))}date(t){let i=E;if(t){const r=this.parser.cfToBirthDate(t);if(r){const t=r.toJSON();if(e().diff(e(r),"y")<50){const e=parseInt(t.substr(0,2),10);i=`(?:${[e-1,e].map((t=>t.toString().padStart(2,"0"))).join("|")})`+t.substr(2,8)}else i=t.substr(0,10)}}return this.isolatedInsensitiveTailor(`${i}(?:T${$}(?:${T})?)?`)}gender(t){const e=t&&this.parser.cfToGender(t)||`[${At.toArray().join("")}]`;return this.isolatedInsensitiveTailor(e)}place(t){return r(this,void 0,void 0,(function*(){let e=".{1,32}";const i=t&&(yield this.parser.cfToBirthPlace(t));if(i){e=`(?:(?:${i.name.replace(/./gu,(t=>It[t]===t?t:`[${t}${It[t]}]`))})|${i.belfioreCode})`}return this.isolatedInsensitiveTailor(e)}))}deomocode(t){return t.replace(/\d/gu,(t=>`[${t}${$t[t]}]`))}isolatedInsensitiveTailor(t){return new RegExp(`^(?:${t})$`,"iu")}}class gt{constructor(t,e){this.codiceFiscale=e,this.pattern=new St(t),this.parser=new pt(t)}get hasLastName(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=3}get hasFirstName(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=6}get hasBirthYear(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=8}get hasBirthDate(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=11}get hasGender(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=10}get hasBirthPlace(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=15}get hasCRC(){var t;return(null===(t=this.codiceFiscale)||void 0===t?void 0:t.length)>=16}matchPersonalInfo(t){return r(this,void 0,void 0,(function*(){return(yield this.pattern.codiceFiscale(t)).test(this.codiceFiscale)}))}mismatchPersonalInfo(t){return r(this,void 0,void 0,(function*(){return!(!(this.codiceFiscale&&t&&t.lastName&&t.firstName&&(t.date||t.day&&"number"==typeof t.month&&t.year)&&t.gender&&t.place)||(yield this.matchPersonalInfo(t)))}))}matchLastName(t){return this.hasLastName&&this.pattern.lastName(this.codiceFiscale).test(t||"")}mismatchLastName(t){return this.hasLastName&&!!t&&!this.matchLastName(t)}matchFirstName(t){return this.hasFirstName&&this.pattern.firstName(this.codiceFiscale).test(t||"")}mismatchFirstName(t){return this.hasFirstName&&!!t&&!this.matchFirstName(t)}matchBirthDate(t){if(this.hasBirthDate){const i=this.parser.cfToBirthDate(this.codiceFiscale),r=p.parseDate(t);if(i&&r)return e(i).isSame(r,"d")}return!1}mismatchBirthDate(t){return this.hasBirthYear&&!!p.parseDate(t)&&!this.matchBirthDate(t)}matchGender(t){return this.hasGender&&this.pattern.gender(this.codiceFiscale).test(t||"")}mismatchGender(t){return this.hasGender&&!!t&&!this.matchGender(t)}matchBirthPlace(t){return r(this,void 0,void 0,(function*(){if(this.hasBirthPlace&&t){const e=yield this.pattern.place(this.codiceFiscale),i=yield this.parser.parsePlace(t);return!!i&&e.test(null==i?void 0:i.belfioreCode)}return!1}))}mismatchBirthPlace(t){return r(this,void 0,void 0,(function*(){return this.hasBirthPlace&&!!t&&!(yield this.matchBirthPlace(t))}))}get errors(){return Promise.all([this.parser.cfToBirthPlace(this.codiceFiscale,!1),this.parser.cfToBirthPlace(this.codiceFiscale,!0)]).then((([t,e])=>{var i,r;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},this.parser.cfToLastName(this.codiceFiscale)?{}:{lastName:"MISSING_OR_INVALID_LAST_NAME"}),this.parser.cfToFirstName(this.codiceFiscale)?{}:{firstName:"MISSING_OR_INVALID_FIRST_NAME"}),this.parser.cfToBirthDate(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DATE"}),this.parser.cfToBirthDay(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DAY"}),"number"==typeof this.parser.cfToBirthMonth(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_MONTH"}),this.parser.cfToBirthYear(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_YEAR"}),this.parser.cfToGender(this.codiceFiscale)?{}:{gender:"MISSING_DAY"}),t?{}:{place:"MISSING_OR_INVALID_PLACE"}),e?{}:{place:"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE",date:"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE"}),(null===(r=null===(i=this.codiceFiscale)||void 0===i?void 0:i.substring(s,16))||void 0===r?void 0:r.toUpperCase())===lt.checkDigit(this.codiceFiscale)?{}:{crc:"INVALID_CRC_CODE"}),this.hasCRC?{}:{crc:"MISSING_CRC_CODE"})})).then((t=>Object.keys(t).length?t:null))}get valid(){return Promise.all([this.pattern.codiceFiscale(),this.parser.cfToBirthPlace(this.codiceFiscale)]).then((([t,e])=>{var i,r;return!(!this.hasCRC||!t.test(this.codiceFiscale)||(null===(r=null===(i=this.codiceFiscale)||void 0===i?void 0:i.substring(s,16))||void 0===r?void 0:r.toUpperCase())!==lt.checkDigit(this.codiceFiscale)||!e)}))}get invalid(){return this.valid.then((t=>!!this.codiceFiscale&&!t))}}class Lt{constructor(t){this.belfioreConnector=t,this.parser=new pt(t),this.pattern=new St(t)}codiceFiscale(t){return new gt(this.belfioreConnector,t)}isLastNameValid(t){return this.pattern.lastName().test(t)}isLastNameInvalid(t){return!!t&&!this.isLastNameValid(t)}isFirstNameValid(t){return this.pattern.firstName().test(t)}isFirstNameInvalid(t){return!!t&&!this.isFirstNameValid(t)}isBirthDateValid(t){return!!p.parseDate(t)}isBirthDateInvalid(t){return!!t&&!this.isBirthDateValid(t)}isGenderValid(t){return this.pattern.gender().test(t)}isGenderInvalid(t){return!!t&&!this.isGenderValid(t)}isBirthPlaceValid(t){return r(this,void 0,void 0,(function*(){const e=yield this.parser.parsePlace(t);return!!e&&!!(yield this.belfioreConnector.findByCode(e.belfioreCode))}))}isBirthPlaceInvalid(t){return r(this,void 0,void 0,(function*(){return!!t&&!(yield this.isBirthPlaceValid(t))}))}birthDatePlaceMatch(t,i){return r(this,void 0,void 0,(function*(){const r=yield this.parser.parsePlace(i);return this.isBirthDateValid(t)&&!!r&&(!!(yield this.belfioreConnector.from(t).findByCode(r.belfioreCode))||!e(p.parseDate(t)).isAfter(Et,"day"))}))}birthDatePlaceMismatch(t,e){return r(this,void 0,void 0,(function*(){const i=yield this.parser.parsePlace(e);return this.isBirthDateValid(t)&&!!i&&!(yield this.birthDatePlaceMatch(t,e))}))}birthPlaceDateMatch(t,e){return r(this,void 0,void 0,(function*(){return yield this.birthDatePlaceMatch(e,t)}))}birthPlaceDateMismatch(t,e){return r(this,void 0,void 0,(function*(){return yield this.birthDatePlaceMismatch(e,t)}))}}class Pt{constructor(t){this.belfioreConnector=t,this.validator=new Lt(t),this.parser=new pt(t),this.pattern=new St(t)}}return t.BirthMonth=ut,t.CFMismatchValidator=gt,t.CRC=ht,t.CheckDigitizer=lt,t.CodiceFiscaleUtils=Pt,t.DATE_MATCHER=_,t.DateUtils=p,t.Gender=At,t.Matcher=ot,t.Omocodes=$t,t.Parser=pt,t.Pattern=St,t.VALIDATOR=ot,t.Validator=Lt,t.default=Pt,Object.defineProperty(t,"__esModule",{value:!0}),t}({},dayjs,DiacriticRemover); diff --git a/dist/codice-fiscale-utils.bundle.min.js.map b/dist/codice-fiscale-utils.bundle.min.js.map deleted file mode 100644 index 8ffd99b..0000000 --- a/dist/codice-fiscale-utils.bundle.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"codice-fiscale-utils.bundle.min.js","sources":["../src/const/cf-offsets.const.ts","../src/date-utils/date-matcher.const.ts","../src/date-utils/date-utils.class.ts","../src/const/matcher.const.ts","../src/enums/crc.enum.ts","../src/enums/birth-month.enum.ts","../src/classes/check-digitizer.class.ts","../src/functions/generator-wrapper.function.ts","../src/enums/gender-weight.enum.ts","../src/enums/omocodes.enum.ts","../src/classes/gender.class.ts","../src/const/logic.const.ts","../src/classes/parser.class.ts","../src/const/error-messages.const.ts","../src/classes/cfu-error.class.ts","../src/classes/pattern.class.ts","../src/classes/cf-mismatch-validator.class.ts","../src/classes/validator.class.ts","../src/index.ts"],"sourcesContent":["export const LASTNAME_OFFSET = 0;\r\nexport const LASTNAME_SIZE = 3;\r\nexport const FIRSTNAME_OFFSET = 3;\r\nexport const FIRSTNAME_SIZE = 3;\r\nexport const YEAR_OFFSET = 6;\r\nexport const YEAR_SIZE = 2;\r\nexport const MONTH_OFFSET = 8;\r\nexport const MONTH_SIZE = 1;\r\nexport const DAY_OFFSET = 9;\r\nexport const DAY_SIZE = 2;\r\nexport const DATE_OFFSET = YEAR_OFFSET;\r\nexport const DATE_SIZE = YEAR_SIZE + MONTH_SIZE + DAY_SIZE;\r\nexport const GENDER_OFFSET = DAY_OFFSET;\r\nexport const GENDER_SIZE = 1;\r\nexport const PLACE_OFFSET = 11;\r\nexport const PLACE_SIZE = 4;\r\nexport const CRC_OFFSET = 15;\r\nexport const CRC_SIZE = 1;\r\nexport const CF_SIZE =\r\n\tLASTNAME_SIZE + FIRSTNAME_SIZE + DATE_SIZE + PLACE_SIZE + CRC_SIZE;\r\n","const YEAR: string = \"[12][0-9]{3}\";\r\nconst MONTH: string = \"0[1-9]|1[0-2]\";\r\nconst DAY: string = \"0[1-9]|[12][0-9]|3[01]\";\r\nconst LEAP_MONTH: string = \"02\";\r\nconst DAYS_30_MONTHS: string = \"0[469]|11\";\r\nconst DAYS_31_MONTHS: string = \"0[13578]|1[02]\";\r\nconst MONTH_DAY: string = `(?:${MONTH})-(?:0[1-9]|[12]\\\\d)|(?:${DAYS_30_MONTHS})-30|(?:${DAYS_31_MONTHS})-3[01]`;\r\nconst HOURS: string = \"[01]\\\\d|2[0-3]\";\r\nconst MINUTES: string = \"[0-5]\\\\d\";\r\nconst SECONDS: string = MINUTES;\r\nconst MILLISECONDS: string = \"\\\\d{3}\";\r\nconst TIMEZONE: string = `Z|[-+](?:${HOURS})(?::?${MINUTES})?`;\r\nconst TIME: string = `(?:${HOURS})(?::${MINUTES}(?::${SECONDS}(\\\\.${MILLISECONDS})?)?(?:${TIMEZONE})?)?`;\r\nconst ISO8601_SHORT_DATE: string = `${YEAR}-(?:${MONTH_DAY})(?:T${TIME})?`;\r\nconst ISO8601_DATE_TIME: string = `${YEAR}(?:-(?:(?:${MONTH})|(?:${MONTH_DAY})(?:T${TIME})?))?`;\r\n\r\n/**\r\n * Date Matcher consts\r\n * @property {Object} DATE_VALIDATOR\r\n * @property {string} DATE_VALIDATOR.YEAR Matcher for ISO8601 4 digits year (limited to 1000-2999)\r\n * @property {string} DATE_VALIDATOR.MONTH Matcher for ISO8601 2 digits month (01-12)\r\n * @property {string} DATE_VALIDATOR.DAY Matcher for ISO8601 2 digits day (01-31)\r\n * @property {string} DATE_VALIDATOR.LEAP_MONTH Matcher for ISO8601 2 digits leap month\r\n * @property {string} DATE_VALIDATOR.DAYS_30_MONTHS Matcher for ISO8601 2 digits 30 days month\r\n * @property {string} DATE_VALIDATOR.DAYS_31_MONTHS Matcher for ISO8601 2 digits 31 days month\r\n * @property {string} DATE_VALIDATOR.MONTH_DAY Matcher for ISO8601 2 + 2 digits (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.ISO8601_SHORT_DATE Matcher for ISO8601 date: 4+2+2 digits year + (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.HOURS Matcher for ISO8601 2 digits hours (00-23)\r\n * @property {string} DATE_VALIDATOR.MINUTES Matcher for ISO8601 2 digits minutes (00-59)\r\n * @property {string} DATE_VALIDATOR.SECONDS Matcher for ISO8601 2 digits seconds (00-59)\r\n * @property {string} DATE_VALIDATOR.MILLISECONDS Matcher for ISO8601 3 digits milliseconds (000-999)\r\n * @property {string} DATE_VALIDATOR.TIMEZONE Matcher for ISO8601 timezone (Z or ±## or ±##:## or ±####)\r\n * @property {string} DATE_VALIDATOR.TIME Matcher for ISO8601 for time (T## , T##:## , T##:##:## , T##:##:##.###)\r\n * @property {string} DATE_VALIDATOR.ISO8601_DATE_TIME Matcher for ISO8601 date/time format\r\n */\r\nexport {\r\n\tDAY,\r\n\tDAYS_30_MONTHS,\r\n\tDAYS_31_MONTHS,\r\n\tHOURS,\r\n\tISO8601_DATE_TIME,\r\n\tISO8601_SHORT_DATE,\r\n\tLEAP_MONTH,\r\n\tMILLISECONDS,\r\n\tMINUTES,\r\n\tMONTH,\r\n\tMONTH_DAY,\r\n\tSECONDS,\r\n\tTIME,\r\n\tTIMEZONE,\r\n\tYEAR,\r\n};\r\n","import dayjs, { Dayjs } from \"dayjs\";\r\nimport type DateDay from \"./date-day.type\";\r\nimport { ISO8601_DATE_TIME } from \"./date-matcher.const\";\r\nimport type DateMonth from \"./date-month.type\";\r\nimport type MultiFormatDate from \"./multi-format-date.type\";\r\nexport default class DateUtils {\r\n\t/**\r\n\t * Parse a Dated and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @returns Parsed Date or null if not valid\r\n\t */\r\n\tpublic static parseDate(date?: MultiFormatDate | null): Date | null {\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\tdate instanceof Date ||\r\n\t\t\t\t(typeof date === \"string\" &&\r\n\t\t\t\t\tnew RegExp(`^(?:${ISO8601_DATE_TIME})$`).test(date)) ||\r\n\t\t\t\t(Array.isArray(date) &&\r\n\t\t\t\t\tdate.length &&\r\n\t\t\t\t\t!date.some((value) => typeof value !== \"number\" || isNaN(value)))\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tlet parsedDate: Dayjs;\r\n\t\t\tif (Array.isArray(date)) {\r\n\t\t\t\tconst [year, month = 0, day = 1] = date;\r\n\t\t\t\tif (month >= 0 && month <= 11 && day > 0 && day <= 31) {\r\n\t\t\t\t\tparsedDate = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tparsedDate = dayjs(date);\r\n\t\t\t}\r\n\t\t\treturn parsedDate.isValid() ? parsedDate.toDate() : null;\r\n\t\t} catch (err) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static ymdToDate(\r\n\t\tyear?: number | null,\r\n\t\tmonth?: DateMonth | null,\r\n\t\tday?: DateDay | null\r\n\t): Date | null {\r\n\t\treturn this.parseDate([year, month, day] as number[]);\r\n\t}\r\n}\r\n","export const CONSONANT_LIST: string = \"B-DF-HJ-NP-TV-Z\";\r\nexport const VOWEL_LIST: string = \"AEIOU\";\r\nexport const OMOCODE_NUMBER_LIST: string = \"\\\\dLMNP-V\";\r\nexport const OMOCODE_NON_ZERO_NUMBER_LIST: string = \"1-9MNP-V\";\r\nexport const OMOCODE_ZERO_LIST: string = \"0L\";\r\nexport const MONTH_LIST: string = \"A-EHLMPR-T\";\r\nexport const MONTH_30DAYS_LIST: string = \"DHPS\";\r\nexport const MONTH_31DAYS_LIST: string = \"ACELMRT\";\r\nexport const CITY_CODE_LIST: string = \"A-M\";\r\nexport const COUNTRY_CODE_LIST: string = \"Z\";\r\n\r\nexport const CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}][${VOWEL_LIST}X]|[${VOWEL_LIST}]X{2}|[${CONSONANT_LIST}]{2}[A-Z]`;\r\nexport const CF_SURNAME_MATCHER: string = CF_NAME_MATCHER;\r\nexport const CF_FULL_NAME_MATCHER: string = `(?:${CF_NAME_MATCHER}){2}`;\r\n\r\nexport const YEAR_MATCHER: string = `[${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const LEAP_YEAR_MATCHER: string =\r\n\t\"[02468LNQSU][048LQU]|[13579MPRTV][26NS]\";\r\nexport const MONTH_MATCHER: string = `[${MONTH_LIST}]`;\r\nexport const DAY_2X_MATCHER: string = \"[26NS]\";\r\nexport const DAY_3X_MATCHER: string = \"[37PT]\";\r\nexport const DAY_29_MATCHER: string = `[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1256MNRS][${OMOCODE_NUMBER_LIST}]`;\r\nexport const DAY_30_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}]`;\r\nexport const DAY_31_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}1M]`;\r\n\r\nexport const DAY_MATCHER: string = `(?:${DAY_29_MATCHER}|${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MALE_DAY_MATCHER: string = `(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[12MN][${OMOCODE_NUMBER_LIST}]|[3P][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const FEMALE_DAY_MATCHER: string = `(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[56RS][${OMOCODE_NUMBER_LIST}]|[7T][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MONTH_DAY_MATCHER: string = `${MONTH_MATCHER}(?:${DAY_29_MATCHER})|[${MONTH_30DAYS_LIST}]${DAY_30_MATCHER}|[${MONTH_31DAYS_LIST}]${DAY_31_MATCHER}`;\r\nexport const FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[15MR][${OMOCODE_NUMBER_LIST}]|${DAY_2X_MATCHER}[0-8LMNP-U])|[${MONTH_30DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_2X_MATCHER}[9V])|(?:${LEAP_YEAR_MATCHER})B${DAY_2X_MATCHER}[9V]`;\r\nexport const MALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1M][${OMOCODE_NUMBER_LIST}]|[2N][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][2N][9V])|(?:${LEAP_YEAR_MATCHER})B[2N][9V]`;\r\nexport const FEMALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[5R][${OMOCODE_NUMBER_LIST}]|[6S][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][6S][9V])|(?:${LEAP_YEAR_MATCHER})B[6S][9V]`;\r\n\r\nexport const CITY_CODE_MATCHER: string = `[${CITY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}|[${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\nexport const COUNTRY_CODE_MATCHER: string = `${COUNTRY_CODE_LIST}[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const BELFIORE_CODE_MATCHER: string = `(?:[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2})|(?:[${CITY_CODE_LIST}][${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\n\r\nexport const CHECK_DIGIT: string = \"[A-Z]\";\r\n\r\nexport const CODICE_FISCALE: string = `${CF_FULL_NAME_MATCHER}(?:${FULL_DATE_MATCHER})(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}`;\r\n\r\nexport const PARTIAL_CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}]?|[${CONSONANT_LIST}]{1,2}`;\r\nexport const PARTIAL_CF_FULL_NAME: string = `(?:${PARTIAL_CF_NAME_MATCHER})|(?:(?:${CF_NAME_MATCHER})(?:${PARTIAL_CF_NAME_MATCHER})?)`;\r\nexport const PARTIAL_YEAR: string = `[${OMOCODE_NUMBER_LIST}]`;\r\nexport const PARTIAL_MONTH_DAY: string = `${MONTH_MATCHER}[${OMOCODE_ZERO_LIST}12456MNQRS]?|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}`;\r\nexport const PARTIAL_FULL_DATE: string = `${PARTIAL_YEAR}|(?:${YEAR_MATCHER}(?:${PARTIAL_MONTH_DAY})?)`;\r\nexport const PARTIAL_BELFIORE_CODE_MATCHER: string = `[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]?)?|[${COUNTRY_CODE_LIST}](?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NUMBER_LIST}]?)?`;\r\n\r\nexport const PARTIAL_CF: string = `${PARTIAL_CF_FULL_NAME}|(?:${CF_FULL_NAME_MATCHER}(?:(?:${PARTIAL_FULL_DATE})|(?:${FULL_DATE_MATCHER})(?:(?:${PARTIAL_BELFIORE_CODE_MATCHER})|(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}?)?)?)?`;\r\n","enum CRC {\r\n \"B\",\r\n \"A\",\r\n \"K\",\r\n \"P\",\r\n \"L\",\r\n \"C\",\r\n \"Q\",\r\n \"D\",\r\n \"R\",\r\n \"E\",\r\n \"V\",\r\n \"O\",\r\n \"S\",\r\n \"F\",\r\n \"T\",\r\n \"G\",\r\n \"U\",\r\n \"H\",\r\n \"M\",\r\n \"I\",\r\n \"N\",\r\n \"J\",\r\n \"W\",\r\n \"Z\",\r\n \"Y\",\r\n \"X\",\r\n}\r\n\r\nexport default CRC;\r\n","enum BirthMonth {\r\n\t\"A\",\r\n\t\"B\",\r\n\t\"C\",\r\n\t\"D\",\r\n\t\"E\",\r\n\t\"H\",\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"P\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n}\r\n\r\nexport default BirthMonth;\r\n","import { CRC_OFFSET, LASTNAME_OFFSET } from \"../const/cf-offsets.const\";\r\nimport { PARTIAL_CF } from \"../const/matcher.const\";\r\nimport CRC from \"../enums/crc.enum\";\r\nimport generatorWrapper from \"../functions/generator-wrapper.function\";\r\nimport type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nimport type CodiceFiscaleCRC from \"../types/codice-fiscale-crc.type\";\r\nclass CheckDigitizer {\r\n\t/**\r\n\t * Evaluate given partial CF to produce last check digit character\r\n\t * @param codiceFiscale Partial or complete Fiscal Code to evaluate to produce last character\r\n\t * @returns 16th CF char\r\n\t */\r\n\tpublic static checkDigit(codiceFiscale: string): CodiceFiscaleCRC | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale === \"string\" &&\r\n\t\t\tnew RegExp(PARTIAL_CF).test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst partialCF = codiceFiscale.substr(LASTNAME_OFFSET, CRC_OFFSET);\r\n\t\t\tlet partialCfValue = 0;\r\n\t\t\tfor (const charValue of this.evaluateChar(partialCF)) {\r\n\t\t\t\tpartialCfValue += charValue as number;\r\n\t\t\t}\r\n\t\t\treturn String.fromCharCode(\r\n\t\t\t\t(partialCfValue % this.CRC_MOD) + this.CHAR_OFFSET\r\n\t\t\t) as CodiceFiscaleCRC;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic static evaluateChar(\r\n\t\tpartialCF: string = \"\"\r\n\t): IGeneratorWrapper {\r\n\t\treturn generatorWrapper(this.evaluateCharGenerator(partialCF));\r\n\t}\r\n\r\n\tprivate static CHAR_OFFSET: number = 65;\r\n\tprivate static CRC_MOD: number = 26;\r\n\r\n\t/**\r\n\t * Partial FiscalCode Evaluator\r\n\t * @param Partial Fiscal Code to evaluate\r\n\t * @yields character value odd/even\r\n\t */\r\n\tprivate static *evaluateCharGenerator(partialCF: string = \"\"): Generator {\r\n\t\tif (typeof partialCF === \"string\" && partialCF.length) {\r\n\t\t\tfor (let index = 0; index < partialCF.length; index++) {\r\n\t\t\t\tlet char: string = partialCF[index].toUpperCase();\r\n\t\t\t\tconst isNumber: boolean = /^\\d$/u.test(char);\r\n\t\t\t\tif (isNumber) {\r\n\t\t\t\t\t// Numbers have always (odd/even) the same values of corresponding letters (0-9 => A-J)\r\n\t\t\t\t\tchar = String.fromCharCode(parseInt(char, 10) + this.CHAR_OFFSET);\r\n\t\t\t\t}\r\n\t\t\t\t// Odd/Even are shifted/swapped\r\n\t\t\t\t// array starts from 0, \"Agenzia delle Entrate\" documentation counts the string from 1\r\n\t\t\t\tconst isOdd: boolean = !(index % 2); // Odd according to documentation\r\n\t\t\t\tif (isOdd) {\r\n\t\t\t\t\t// Odd positions\r\n\t\t\t\t\tyield parseInt(CRC[char as any], 10);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Even positions\r\n\t\t\t\t\tyield char.charCodeAt(0) - this.CHAR_OFFSET;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\nexport default CheckDigitizer;\r\n","import type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nexport default function generatorWrapper<\r\n\tT = unknown,\r\n\tTReturn = any,\r\n\tTNext = unknown\r\n>(generator: Generator): IGeneratorWrapper {\r\n\tgenerator[Symbol.iterator] = () => generator;\r\n\treturn generator as IGeneratorWrapper;\r\n}\r\n","enum GenderWeight {\r\n\t\"M\" = 0,\r\n\t\"F\" = 40,\r\n}\r\n\r\nexport default GenderWeight;\r\n","enum Omocodes {\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"N\",\r\n\t\"P\",\r\n\t\"Q\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n\t\"U\",\r\n\t\"V\",\r\n}\r\n\r\nexport default Omocodes;\r\n","import { DateDay } from \"../date-utils/\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport type Genders from \"../types/genders.type\";\r\n\r\nclass Gender {\r\n\tpublic static getDay(genderDay: number): DateDay | null {\r\n\t\tconst plainDay = genderDay % GenderWeight.F;\r\n\t\treturn plainDay > 0 && plainDay <= this.MAX_MONTH_DAY\r\n\t\t\t? (plainDay as DateDay)\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tpublic static getGender(genderDay: number): Genders | null {\r\n\t\treturn (\r\n\t\t\tthis.toArray().find(\r\n\t\t\t\t(gender) =>\r\n\t\t\t\t\tgenderDay >= GenderWeight[gender] &&\r\n\t\t\t\t\tgenderDay <= GenderWeight[gender] + this.MAX_MONTH_DAY\r\n\t\t\t) || null\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static genderizeDay(day: number, gender: Genders): number {\r\n\t\treturn day + GenderWeight[gender];\r\n\t}\r\n\r\n\tpublic static toArray(): Genders[] {\r\n\t\treturn [\"M\", \"F\"];\r\n\t}\r\n\r\n\tprivate static MAX_MONTH_DAY: number = 31;\r\n}\r\n\r\nexport default Gender;\r\n","export const CF_INTRODUCTION_DATE = new Date(\"1973-09-29\");\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDAY_OFFSET,\r\n\tDAY_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tMONTH_OFFSET,\r\n\tMONTH_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { CF_NAME_MATCHER, CF_SURNAME_MATCHER } from \"../const/matcher.const\";\r\nimport { CONSONANT_LIST, VOWEL_LIST } from \"../const/matcher.const\";\r\nimport { DateDay, DateMonth, DateUtils, MultiFormatDate } from \"../date-utils\";\r\nimport BirthMonth from \"../enums/birth-month.enum\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Gender from \"./gender.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Parser {\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {}\r\n\r\n\t/**\r\n\t * Default omocode bitmap\r\n\t */\r\n\tpublic OMOCODE_BITMAP: number = 0b0111011011000000;\r\n\r\n\t/**\r\n\t * Convert omocode CF into plain one\r\n\t * @param codiceFiscale Partial or complete Omocode/Regular CF to parse, starting from LastName\r\n\t * @returns Regular CF w/o omocodes chars\r\n\t */\r\n\tpublic cfDeomocode(codiceFiscale: string): string {\r\n\t\tif (codiceFiscale && codiceFiscale.length <= YEAR_OFFSET) {\r\n\t\t\treturn codiceFiscale;\r\n\t\t}\r\n\t\tconst deomocodedCf = this.partialCfDeomocode(codiceFiscale);\r\n\t\tif (deomocodedCf.length < CRC_OFFSET) {\r\n\t\t\treturn deomocodedCf;\r\n\t\t}\r\n\t\tconst partialDeomocodedCf = deomocodedCf.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tCRC_OFFSET\r\n\t\t);\r\n\t\treturn (\r\n\t\t\tpartialDeomocodedCf +\r\n\t\t\tthis.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(deomocodedCf) || \"\",\r\n\t\t\t\tdeomocodedCf.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic cfOmocode(codiceFiscale: string, omocodeId: number): string {\r\n\t\tif (!omocodeId) {\r\n\t\t\treturn this.cfDeomocode(codiceFiscale);\r\n\t\t}\r\n\t\tconst omocodedCf = codiceFiscale.split(\"\");\r\n\t\t// tslint:disable-next-line: prefer-for-of\r\n\t\tfor (let i = codiceFiscale.length - 1, o = 0; i >= 0; i--) {\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\tif ((2 ** i) & this.OMOCODE_BITMAP) {\r\n\t\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t\tconst charToEncode: boolean = !!(omocodeId & (2 ** o));\r\n\t\t\t\tconst isOmocode: boolean = isNaN(parseInt(omocodedCf[i], 10));\r\n\t\t\t\tif (charToEncode !== isOmocode) {\r\n\t\t\t\t\tconst char: any = omocodedCf[i].toUpperCase();\r\n\t\t\t\t\tomocodedCf[i] = Omocodes[char];\r\n\t\t\t\t}\r\n\t\t\t\to++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst crc = omocodedCf[CRC_OFFSET];\r\n\t\tif (crc) {\r\n\t\t\tconst partialCf = omocodedCf.slice(LASTNAME_OFFSET, CRC_OFFSET).join(\"\");\r\n\t\t\tomocodedCf[CRC_OFFSET] = this.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(partialCf) || \"\",\r\n\t\t\t\tcrc\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn omocodedCf.join(\"\");\r\n\t}\r\n\r\n\tpublic cfOmocodeId(codiceFiscale: string): number {\r\n\t\tconst cfOmocodeBitmap = codiceFiscale\r\n\t\t\t.split(\"\")\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t.filter((char, index) => (2 ** index) & this.OMOCODE_BITMAP)\r\n\t\t\t.map((char) => (/^[a-z]$/i.test(diacriticRemover[char]) ? 1 : 0))\r\n\t\t\t.join(\"\");\r\n\t\treturn parseInt(cfOmocodeBitmap, 2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible lastName\r\n\t */\r\n\tpublic cfToLastName(codiceFiscale: string): string | null {\r\n\t\tconst cfLastNamePart = codiceFiscale?.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfLastNamePart.length !== LASTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(?:${CF_SURNAME_MATCHER})`, \"iu\").test(cfLastNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst lastNameCf = codiceFiscale.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\r\n\t\tconst [cons = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) || [];\r\n\t\tconst [vow = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`[${VOWEL_LIST}]{1,3}`, \"ig\")) || [];\r\n\r\n\t\tconst matchingLength = cons.length + vow.length;\r\n\r\n\t\tif (\r\n\t\t\tmatchingLength < 2 ||\r\n\t\t\t(matchingLength < 3 && lastNameCf[2].toUpperCase() !== \"X\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (cons.length) {\r\n\t\t\tcase 3:\r\n\t\t\t\treturn (cons + vow).split(\"\").join(this.JOLLY_CHAR) + this.JOLLY_CHAR;\r\n\t\t\tcase 2:\r\n\t\t\t\treturn `${cons[0]}${vow[0]}*${cons[1]}${this.JOLLY_CHAR}`;\r\n\t\t\tcase 1:\r\n\t\t\t\treturn `${cons[0]}${vow}${this.JOLLY_CHAR}`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn `${vow}${vow.length === 3 ? this.JOLLY_CHAR : \"\"}`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible firstName\r\n\t */\r\n\tpublic cfToFirstName(codiceFiscale: string): string | null {\r\n\t\tconst cfFirstNamePart = codiceFiscale?.substring(\r\n\t\t\tFIRSTNAME_OFFSET,\r\n\t\t\tFIRSTNAME_OFFSET + FIRSTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfFirstNamePart?.length !== FIRSTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(${CF_NAME_MATCHER})$`, \"iu\").test(cfFirstNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.cfToLastName(cfFirstNamePart);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse gender information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Male or female\r\n\t */\r\n\tpublic cfToGender(codiceFiscale: string): Genders | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < GENDER_OFFSET + GENDER_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfGenderPart = codiceFiscale.substring(\r\n\t\t\tGENDER_OFFSET,\r\n\t\t\tGENDER_OFFSET + GENDER_SIZE\r\n\t\t);\r\n\t\tconst genderInt =\r\n\t\t\tparseInt(this.partialCfDeomocode(cfGenderPart, GENDER_OFFSET), 10) * 10;\r\n\t\treturn Gender.getGender(genderInt);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth year information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Year (4 digits)\r\n\t */\r\n\tpublic cfToBirthYear(codiceFiscale: string): number | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < YEAR_OFFSET + YEAR_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfBirthYearPart = codiceFiscale.substring(\r\n\t\t\tYEAR_OFFSET,\r\n\t\t\tYEAR_OFFSET + YEAR_SIZE\r\n\t\t);\r\n\t\tconst birthYear: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthYearPart, YEAR_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthYear)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst current2DigitsYear: number = parseInt(dayjs().format(\"YY\"), 10);\r\n\r\n\t\tconst century: number = (birthYear > current2DigitsYear ? 1 : 0) * 100;\r\n\t\treturn dayjs()\r\n\t\t\t.subtract(current2DigitsYear - birthYear + century, \"years\")\r\n\t\t\t.year();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth month information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Month (0...11 - Date notation)\r\n\t */\r\n\tpublic cfToBirthMonth(codiceFiscale: string): DateMonth | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < MONTH_OFFSET + MONTH_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthMonthPart: any = codiceFiscale\r\n\t\t\t.substring(MONTH_OFFSET, MONTH_OFFSET + MONTH_SIZE)\r\n\t\t\t.toUpperCase();\r\n\t\tconst birthMonth = BirthMonth[cfBirthMonthPart];\r\n\t\tif (typeof birthMonth !== \"number\" || birthMonth < 0 || birthMonth > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn birthMonth as DateMonth;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth day information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth day (1..31)\r\n\t */\r\n\tpublic cfToBirthDay(codiceFiscale: string): DateDay | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < DAY_OFFSET + DAY_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthDayPart = codiceFiscale.substring(\r\n\t\t\tDAY_OFFSET,\r\n\t\t\tDAY_OFFSET + DAY_SIZE\r\n\t\t);\r\n\t\tconst birthDay: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthDayPart, DAY_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthDay)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn Gender.getDay(birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth date information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Date\r\n\t */\r\n\tpublic cfToBirthDate(codiceFiscale: string): Date | null {\r\n\t\tconst birthDay = this.cfToBirthDay(codiceFiscale);\r\n\t\tif (!birthDay) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthMonth = this.cfToBirthMonth(codiceFiscale);\r\n\t\tif (typeof birthMonth !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthYear = this.cfToBirthYear(codiceFiscale);\r\n\r\n\t\treturn DateUtils.ymdToDate(birthYear, birthMonth, birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth place information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @param checkBirthDateConsistency Ensure birthday is between creation and expiran date of the cf city or country, default value: true\r\n\t * @returns Birth place\r\n\t */\r\n\tpublic async cfToBirthPlace(\r\n\t\tcodiceFiscale: string,\r\n\t\tcheckBirthDateConsistency: boolean = true\r\n\t): Promise {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < PLACE_OFFSET + PLACE_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthPlacePart = codiceFiscale.substring(\r\n\t\t\tPLACE_OFFSET,\r\n\t\t\tPLACE_OFFSET + PLACE_SIZE\r\n\t\t);\r\n\t\tconst belfioreCode: string = this.partialCfDeomocode(\r\n\t\t\tcfBirthPlacePart,\r\n\t\t\tPLACE_OFFSET\r\n\t\t);\r\n\r\n\t\tconst birthPlace: BelfiorePlace | undefined | null =\r\n\t\t\tawait this.belfioreConnector.findByCode(belfioreCode);\r\n\t\tif (!birthPlace) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst { creationDate, expirationDate } = birthPlace;\r\n\t\tif ((creationDate || expirationDate) && checkBirthDateConsistency) {\r\n\t\t\tconst birthDate = this.cfToBirthDate(codiceFiscale);\r\n\t\t\tconst isBirthDateAfterCfIntroduction = dayjs(CF_INTRODUCTION_DATE)\r\n\t\t\t\t// Adding some tolerance\r\n\t\t\t\t.add(5, \"years\")\r\n\t\t\t\t.isBefore(birthDate, \"day\");\r\n\r\n\t\t\t// Skipping birthDate vs Creation/Expiration check for people born up to 5y after cf introduction\r\n\t\t\tif (birthDate && isBirthDateAfterCfIntroduction) {\r\n\t\t\t\tconst datePlaceConsistency =\r\n\t\t\t\t\t// BirthDay is before expiration date\r\n\t\t\t\t\t(!expirationDate ||\r\n\t\t\t\t\t\tdayjs(birthDate).isBefore(expirationDate, \"day\")) &&\r\n\t\t\t\t\t// BirthDay is after creation date\r\n\t\t\t\t\t(!creationDate || dayjs(birthDate).isAfter(creationDate, \"day\"));\r\n\t\t\t\tif (!datePlaceConsistency) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn birthPlace;\r\n\t}\r\n\r\n\t/**\r\n\t * @param fiscalCode 16 character Codice Fiscale to decode\r\n\t * @returns Decoded CF Info\r\n\t */\r\n\tpublic async cfDecode(fiscalCode: string): Promise {\r\n\t\tconst year = this.cfToBirthYear(fiscalCode) || undefined;\r\n\t\t// 0 is a month\r\n\t\tconst month = this.cfToBirthMonth(fiscalCode) ?? undefined;\r\n\t\tconst day = this.cfToBirthDay(fiscalCode) || undefined;\r\n\t\tconst date = DateUtils.ymdToDate(year, month, day) || undefined;\r\n\t\tconst place = await this.cfToBirthPlace(fiscalCode);\r\n\t\tconst personalInfo: IPersonalInfo = {\r\n\t\t\tfirstName: this.cfToFirstName(fiscalCode) || undefined,\r\n\t\t\tlastName: this.cfToLastName(fiscalCode) || undefined,\r\n\r\n\t\t\tday,\r\n\t\t\tmonth,\r\n\t\t\tyear,\r\n\r\n\t\t\tdate,\r\n\r\n\t\t\tgender: this.cfToGender(fiscalCode) || undefined,\r\n\t\t\tplace: place || undefined,\r\n\r\n\t\t\tomocodeId: this.cfOmocodeId(fiscalCode),\r\n\t\t};\r\n\r\n\t\tif (year && month && day) {\r\n\t\t\tpersonalInfo.date = new Date(Date.UTC(year, month, day));\r\n\t\t}\r\n\r\n\t\treturn personalInfo;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName to cf part\r\n\t * @param lastName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic lastNameToCf(lastName?: string | null): string | null {\r\n\t\tif (!lastName || (lastName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!/^[A-Z ']{1,32}$/iu.test(diacriticRemover.replace(lastName))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst consonants = this.charExtractor(lastName, CONSONANT_LIST);\r\n\t\tconst vowels = this.charExtractor(lastName, VOWEL_LIST);\r\n\r\n\t\tconst partialCf = (consonants + vowels).padEnd(3, \"X\").substring(0, 3);\r\n\r\n\t\tif (partialCf.length < 3) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn partialCf.toUpperCase();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName to cf part\r\n\t * @param firstName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic firstNameToCf(firstName?: string | null): string | null {\r\n\t\tif (!firstName || (firstName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst consonants = this.charExtractor(firstName, CONSONANT_LIST);\r\n\t\tif (consonants.length >= 4) {\r\n\t\t\treturn (consonants[0] + consonants.substring(2, 4)).toUpperCase();\r\n\t\t}\r\n\t\treturn this.lastNameToCf(firstName);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse year to cf part\r\n\t * @param year Birth year 2 or 4 digit string, number above 19XX or below 100\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic yearToCf(year: string | number): string | null {\r\n\t\tlet parsedYear: number;\r\n\t\tif (typeof year === \"string\") {\r\n\t\t\tparsedYear = parseInt(year, 10);\r\n\t\t} else {\r\n\t\t\tparsedYear = year;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\ttypeof parsedYear === \"number\" &&\r\n\t\t\t\t!isNaN(parsedYear) &&\r\n\t\t\t\t(parsedYear >= 1900 || parsedYear < 100)\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${parsedYear}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse month information\r\n\t * @param month Month number 0..11\r\n\t * @returns Birth Month CF code\r\n\t */\r\n\tpublic monthToCf(month: DateMonth | number): string | null {\r\n\t\tif (month < 0 || month > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn BirthMonth[month] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse day information\r\n\t * @param day Day number 1..31\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth Day CF code\r\n\t */\r\n\tpublic dayGenderToCf(day: DateDay | number, gender: Genders): string | null {\r\n\t\tif (day < 1 || day > 31) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst genderValue = GenderWeight[gender as any];\r\n\t\tif (typeof genderValue !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${day + genderValue}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Year, Month, Day to Dated\r\n\t * @param year 4 digits Year\r\n\t * @param month 1 or 2 digits Month 0..11\r\n\t * @param day 1,2 digits Day 1..31\r\n\t * @returns Date or null if provided year/month/day are not valid\r\n\t */\r\n\tpublic yearMonthDayToDate(\r\n\t\tyear: number | null | undefined,\r\n\t\tmonth: DateMonth | null | undefined = 0,\r\n\t\tday: DateDay | null | undefined = 1\r\n\t): Date | null {\r\n\t\tif (\r\n\t\t\t!year ||\r\n\t\t\tyear < 1861 ||\r\n\t\t\t[month, day].some((param) => typeof param !== \"number\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst date = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\tif (\r\n\t\t\t!date.isValid() ||\r\n\t\t\tdate.year() !== year ||\r\n\t\t\tdate.month() !== month ||\r\n\t\t\tdate.date() !== day\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn date.toDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Place information to return city or country details\r\n\t * @param place Belfiore place instance, belfiore code or city/country name\r\n\t * @returns BelfiorePlace instance with the target city or country details\r\n\t */\r\n\tpublic async parsePlace(\r\n\t\tplace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tlet verifiedBirthPlace: BelfiorePlace | null | undefined;\r\n\t\tif (!place) {\r\n\t\t\treturn null;\r\n\t\t} else if (typeof place === \"object\" && place.belfioreCode) {\r\n\t\t\tverifiedBirthPlace = await this.belfioreConnector.findByCode(\r\n\t\t\t\tplace.belfioreCode\r\n\t\t\t);\r\n\t\t} else if (typeof place === \"string\") {\r\n\t\t\tverifiedBirthPlace =\r\n\t\t\t\t(await this.belfioreConnector.findByCode(place)) ||\r\n\t\t\t\t(await this.belfioreConnector.findByName(place));\r\n\t\t}\r\n\t\treturn verifiedBirthPlace || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Date and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth date and Gender CF code\r\n\t */\r\n\tpublic dateGenderToCf(date: MultiFormatDate, gender: Genders): string | null {\r\n\t\tconst parsedDate = DateUtils.parseDate(date);\r\n\t\tif (!parsedDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfYear = this.yearToCf(parsedDate.getFullYear());\r\n\t\tconst cfMonth = this.monthToCf(parsedDate.getMonth());\r\n\t\tconst cfDayGender = this.dayGenderToCf(parsedDate.getDate(), gender);\r\n\r\n\t\treturn `${cfYear}${cfMonth}${cfDayGender}`;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse place name and province to Belfiore code\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\t/**\r\n\t * Parse a Date and Gender information to create Date/Gender CF part\r\n\t * @param birthDate Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\tpublic async placeToCf(\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise;\r\n\tpublic async placeToCf(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise;\r\n\tpublic async placeToCf(\r\n\t\tdateOrName: MultiFormatDate,\r\n\t\tnameOrProvince?: string,\r\n\t\tprovinceId?: string\r\n\t): Promise {\r\n\t\tconst birthDate: Date | null = DateUtils.parseDate(dateOrName);\r\n\t\tlet name: string;\r\n\t\tlet province: string | undefined;\r\n\t\tif (!birthDate && typeof dateOrName === \"string\") {\r\n\t\t\tname = dateOrName;\r\n\t\t\tprovince = nameOrProvince;\r\n\t\t} else if (nameOrProvince) {\r\n\t\t\tname = nameOrProvince;\r\n\t\t\tprovince = provinceId;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet placeFinder: IBelfioreConnector | undefined = this.belfioreConnector;\r\n\t\tif (province) {\r\n\t\t\tplaceFinder = placeFinder.byProvince(province);\r\n\t\t}\r\n\t\tif (birthDate && placeFinder) {\r\n\t\t\tplaceFinder = placeFinder.from(birthDate);\r\n\t\t}\r\n\t\tif (placeFinder) {\r\n\t\t\tconst foundPlace: BelfiorePlace | null = await new Parser(\r\n\t\t\t\tplaceFinder\r\n\t\t\t).parsePlace(name);\r\n\t\t\tif (foundPlace) {\r\n\t\t\t\treturn foundPlace.belfioreCode;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF\r\n\t * @returns Complete CF\r\n\t */\r\n\tpublic async encodeCf({\r\n\t\tlastName,\r\n\t\tfirstName,\r\n\r\n\t\tyear,\r\n\t\tmonth,\r\n\t\tday,\r\n\t\tdate,\r\n\r\n\t\tgender,\r\n\t\tplace,\r\n\r\n\t\tomocodeId = 0,\r\n\t}: Omit & {\r\n\t\tplace?: BelfiorePlace | string | undefined;\r\n\t}): Promise {\r\n\t\tconst dtParams =\r\n\t\t\tDateUtils.parseDate(date) || this.yearMonthDayToDate(year, month, day);\r\n\t\tif (!(dtParams && lastName && firstName && gender && place)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst generator = [\r\n\t\t\tasync () => this.lastNameToCf(lastName),\r\n\t\t\tasync () => this.firstNameToCf(firstName),\r\n\t\t\tasync () => this.dateGenderToCf(dtParams, gender),\r\n\t\t\tasync () =>\r\n\t\t\t\tawait this.placeToCf(\r\n\t\t\t\t\tdtParams,\r\n\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t),\r\n\t\t];\r\n\t\tlet cf = \"\";\r\n\t\tfor (const cfPartGenerator of generator) {\r\n\t\t\tconst cfValue = await cfPartGenerator();\r\n\t\t\tif (!cfValue) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcf += cfValue;\r\n\t\t}\r\n\r\n\t\treturn this.cfOmocode(cf, omocodeId);\r\n\t}\r\n\r\n\tprivate JOLLY_CHAR: string = \"*\";\r\n\r\n\tprivate checkBitmap(offset: number): boolean {\r\n\t\t// tslint:disable-next-line: no-bitwise\r\n\t\treturn !!((2 ** offset) & this.OMOCODE_BITMAP);\r\n\t}\r\n\r\n\tprivate charOmocode(char: string, offset: number): string {\r\n\t\tif (/^[A-Z]$/giu.test(char) && this.checkBitmap(offset)) {\r\n\t\t\treturn Omocodes[char.toUpperCase() as any];\r\n\t\t}\r\n\r\n\t\treturn char;\r\n\t}\r\n\r\n\tprivate charExtractor(text: string, CHAR_LIST: string): string {\r\n\t\tconst charMatcher = new RegExp(`[${CHAR_LIST}]{1,24}`, \"ig\");\r\n\t\tconst diacriticFreeText = diacriticRemover.replace(text).trim();\r\n\t\tconst matchingChars = diacriticFreeText.match(charMatcher);\r\n\t\treturn (matchingChars || []).join(\"\");\r\n\t}\r\n\r\n\t/**\r\n\t * Convert omocode full or chunk CF into plain one\r\n\t * @param partialCodiceFiscale Partial or complete Omocode/Regular CF to parse\r\n\t * @param offset starting point of the given chunk in the 16 char CF\r\n\t * @returns Regular version w/o omocodes chars of the given chunk\r\n\t */\r\n\tprivate partialCfDeomocode(\r\n\t\tpartialCodiceFiscale: string,\r\n\t\toffset: number = 0\r\n\t): string {\r\n\t\tconst charReplacer = (char: string, position: number) =>\r\n\t\t\tthis.charOmocode(char, position + offset);\r\n\t\treturn partialCodiceFiscale.replace(/[\\dA-Z]/giu, charReplacer);\r\n\t}\r\n\r\n\tprivate appyCaseToChar(targetChar: string, counterCaseChar: string): string {\r\n\t\tif (targetChar && counterCaseChar) {\r\n\t\t\tconst isUpperCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toUpperCase();\r\n\t\t\tconst isLowerCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toLowerCase();\r\n\r\n\t\t\tif (isUpperCase && !isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toUpperCase();\r\n\t\t\t} else if (!isUpperCase && isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toLowerCase();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn targetChar[0];\r\n\t}\r\n}\r\n","const INVALID_SURNAME: string =\r\n\t\"Provided lastName is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_NAME: string =\r\n\t\"Provided name is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_DAY: string = \"Provided day is not valid\";\r\nconst INVALID_GENDER: string = \"Provided gender is not valid\";\r\nconst INVALID_DAY_OR_GENDER: string =\r\n\t\"Provided day and/or gender are not valid\";\r\nconst INVALID_YEAR: string =\r\n\t\"Provided year is not valid, only 2 or 4 digit numbers are allowed\";\r\nconst INVALID_DATE: string = \"Provided date is not valid\";\r\nconst INVALID_PLACE_NAME: string = \"Proviced City/Country name is not valid\";\r\n\r\nexport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_PLACE_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n};\r\n","import * as ErrorMessages from \"../const/error-messages.const\";\r\n\r\nclass CfuError extends Error {\r\n constructor(errorMessage: string)\r\n constructor(errorCode: string) {\r\n super((Object.entries(ErrorMessages).find(([errId]) => errId === errorCode) || [])[1] || errorCode);\r\n }\r\n}\r\n\r\nexport default CfuError;\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n} from \"../const/error-messages.const\";\r\nimport {\r\n\tBELFIORE_CODE_MATCHER,\r\n\tCF_NAME_MATCHER,\r\n\tCF_SURNAME_MATCHER,\r\n\tCHECK_DIGIT,\r\n\tCODICE_FISCALE,\r\n\tCONSONANT_LIST,\r\n\tDAY_MATCHER,\r\n\tFEMALE_DAY_MATCHER,\r\n\tFEMALE_FULL_DATE_MATCHER,\r\n\tFULL_DATE_MATCHER,\r\n\tMALE_DAY_MATCHER,\r\n\tMALE_FULL_DATE_MATCHER,\r\n\tMONTH_MATCHER,\r\n\tVOWEL_LIST,\r\n\tYEAR_MATCHER,\r\n} from \"../const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tDateUtils,\r\n\tMultiFormatDate,\r\n} from \"../date-utils/\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CfuError from \"./cfu-error.class\";\r\nimport Gender from \"./gender.class\";\r\nimport Parser from \"./parser.class\";\r\nimport dayjs from \"dayjs\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Pattern {\r\n\tprivate parser: Parser;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given lastName or generic\r\n\t * @param lastName Optional lastName to generate validation regexp\r\n\t * @return CF Surname matcher\r\n\t * @throw INVALID_SURNAME\r\n\t */\r\n\tpublic cfLastName(lastName?: string): RegExp {\r\n\t\tlet matcher: string = CF_SURNAME_MATCHER;\r\n\t\tif (lastName) {\r\n\t\t\tif (!this.lastName().test(lastName)) {\r\n\t\t\t\tthrow new CfuError(INVALID_SURNAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.lastNameToCf(lastName) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given name or generic\r\n\t * @param name Optional name to generate validation regexp\r\n\t * @return CF name matcher\r\n\t * @throw INVALID_NAME\r\n\t */\r\n\tpublic cfFirstName(name?: string): RegExp {\r\n\t\tlet matcher: string = CF_NAME_MATCHER;\r\n\t\tif (name) {\r\n\t\t\tif (!this.lastName().test(name)) {\r\n\t\t\t\tthrow new CfuError(INVALID_NAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.firstNameToCf(name) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param year Optional year to generate validation regexp\r\n\t * @return CF year matcher\r\n\t */\r\n\tpublic cfYear(year?: number): RegExp {\r\n\t\tlet matcher: string = YEAR_MATCHER;\r\n\t\tif (year) {\r\n\t\t\tconst parsedYear = this.parser.yearToCf(year);\r\n\t\t\tif (parsedYear) {\r\n\t\t\t\tmatcher = this.deomocode(parsedYear);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_YEAR);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given month or generic\r\n\t * @param month Optional month to generate validation regexp\r\n\t * @return CF month matcher\r\n\t */\r\n\tpublic cfMonth(month?: DateMonth) {\r\n\t\tlet matcher: string = MONTH_MATCHER;\r\n\t\tif (month) {\r\n\t\t\tmatcher = this.parser.monthToCf(month) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given day or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @return CF day matcher\r\n\t */\r\n\tpublic cfDay(day?: DateDay): RegExp {\r\n\t\tlet matcher = DAY_MATCHER;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayM = this.parser.dayGenderToCf(day, \"M\");\r\n\t\t\tconst parsedDayF = this.parser.dayGenderToCf(day, \"F\");\r\n\t\t\tif (parsedDayM && parsedDayF) {\r\n\t\t\t\tconst matcherM: string = this.deomocode(parsedDayM);\r\n\t\t\t\tconst matcherF: string = this.deomocode(parsedDayF);\r\n\t\t\t\tmatcher = `(?:${matcherM})|(?:${matcherF})`;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @param gender Gender @see Genders\r\n\t * @return CF day and gender matcher\r\n\t */\r\n\tpublic cfDayGender(day?: DateDay, gender?: Genders): RegExp {\r\n\t\tif (!gender) {\r\n\t\t\treturn this.cfDay(day);\r\n\t\t}\r\n\t\tlet matcher;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayGender = this.parser.dayGenderToCf(day, gender);\r\n\t\t\tif (parsedDayGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDayGender);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY_OR_GENDER);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tswitch (gender) {\r\n\t\t\t\tcase \"M\":\r\n\t\t\t\t\tmatcher = MALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"F\":\r\n\t\t\t\t\tmatcher = FEMALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param gender @see Genders\r\n\t * @return CF date and gender matcher\r\n\t */\r\n\tpublic cfDateGender(\r\n\t\tdate?: MultiFormatDate | null,\r\n\t\tgender?: Genders | null\r\n\t): RegExp {\r\n\t\tif (date && !DateUtils.parseDate(date)) {\r\n\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t}\r\n\t\tif (gender && !Gender.toArray().includes(gender)) {\r\n\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t}\r\n\t\tlet matcher = FULL_DATE_MATCHER;\r\n\t\tif (date) {\r\n\t\t\tconst parsedDateGender =\r\n\t\t\t\tgender && this.parser.dateGenderToCf(date, gender);\r\n\t\t\tif (parsedDateGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDateGender);\r\n\t\t\t} else {\r\n\t\t\t\tconst parseDeomocode = (g: Genders): string => {\r\n\t\t\t\t\tconst parsedGender = this.parser.dateGenderToCf(date, g);\r\n\t\t\t\t\tif (!parsedGender) {\r\n\t\t\t\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn parsedGender && this.deomocode(parsedGender);\r\n\t\t\t\t};\r\n\t\t\t\tmatcher = `(?:${Gender.toArray().map(parseDeomocode).join(\"|\")})`;\r\n\t\t\t}\r\n\t\t} else if (gender === \"M\") {\r\n\t\t\tmatcher = MALE_FULL_DATE_MATCHER;\r\n\t\t} else if (gender === \"F\") {\r\n\t\t\tmatcher = FEMALE_FULL_DATE_MATCHER;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\t/**\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\tpublic async cfPlace(placeName?: string | null): Promise;\r\n\tpublic async cfPlace(\r\n\t\tbirthDate?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise;\r\n\tpublic async cfPlace(\r\n\t\tbirthDateOrName?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise {\r\n\t\tlet matcher = BELFIORE_CODE_MATCHER;\r\n\t\tif (birthDateOrName) {\r\n\t\t\tconst birthDate: Date | null = DateUtils.parseDate(birthDateOrName);\r\n\r\n\t\t\tif (birthDate && placeName) {\r\n\t\t\t\tconst place: string = placeName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(birthDate, place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t} else if (!birthDate && typeof birthDateOrName === \"string\") {\r\n\t\t\t\tconst place: string = birthDateOrName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF validator based on given optional input or generic\r\n\t * @param personalInfo Input Object\r\n\t * @return CodiceFiscale matcher\r\n\t */\r\n\tpublic async codiceFiscale(\r\n\t\tpersonalInfo?: Omit & {\r\n\t\t\tplace?: BelfiorePlace | string | undefined;\r\n\t\t}\r\n\t): Promise {\r\n\t\tlet matcher = CODICE_FISCALE;\r\n\t\tif (personalInfo) {\r\n\t\t\tconst parsedCf = await this.parser.encodeCf(personalInfo);\r\n\r\n\t\t\tif (parsedCf) {\r\n\t\t\t\tmatcher = this.deomocode(parsedCf);\r\n\t\t\t} else {\r\n\t\t\t\tconst { lastName, firstName, year, month, day, date, gender, place } =\r\n\t\t\t\t\tpersonalInfo;\r\n\t\t\t\tif (\r\n\t\t\t\t\tlastName ||\r\n\t\t\t\t\tfirstName ||\r\n\t\t\t\t\tyear ||\r\n\t\t\t\t\tmonth ||\r\n\t\t\t\t\tday ||\r\n\t\t\t\t\tdate ||\r\n\t\t\t\t\tgender ||\r\n\t\t\t\t\tplace\r\n\t\t\t\t) {\r\n\t\t\t\t\tlet dtParams: Date | null = null;\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tdtParams = DateUtils.parseDate(date);\r\n\t\t\t\t\t} else if (year) {\r\n\t\t\t\t\t\tdtParams = this.parser.yearMonthDayToDate(year, month, day);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst generator: (() => Promise)[] = [\r\n\t\t\t\t\t\tasync () => this.cfLastName(lastName),\r\n\t\t\t\t\t\tasync () => this.cfFirstName(firstName),\r\n\t\t\t\t\t\tasync () => this.cfDateGender(dtParams, gender),\r\n\t\t\t\t\t\tasync () =>\r\n\t\t\t\t\t\t\tawait this.cfPlace(\r\n\t\t\t\t\t\t\t\tdtParams,\r\n\t\t\t\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\r\n\t\t\t\t\tmatcher = \"\";\r\n\t\t\t\t\tfor (const validator of generator) {\r\n\t\t\t\t\t\tconst cfMatcher = (await validator()).toString();\r\n\t\t\t\t\t\tconst match = cfMatcher.match(/\\^(.{1,256})\\$/);\r\n\t\t\t\t\t\tconst cfValue: string | null | undefined = match && match[1];\r\n\r\n\t\t\t\t\t\tif (!cfValue) {\r\n\t\t\t\t\t\t\tthrow new Error(`Unable to handle [${cfMatcher}]`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmatcher += `(?:${cfValue})`;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Final addition of CheckDigit\r\n\t\t\t\t\tmatcher += CHECK_DIGIT;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tprivate LETTER_SET: string = `[A-Z${diacriticRemover.matcherBy(\r\n\t\t/^[A-Z]$/iu\r\n\t)}]`;\r\n\tprivate SEPARATOR_SET: string = \"(?:'?\\\\s{0,4})\";\r\n\r\n\t/**\r\n\t * Returns lastName validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic lastName(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = `${this.LETTER_SET}{1,24}`;\r\n\t\tif (codiceFiscale && /^[A-Z]{1,3}/iu.test(codiceFiscale)) {\r\n\t\t\tconst lastNameCf: string = codiceFiscale.substr(0, 3);\r\n\t\t\tconst diacriticizer = (matchingChars: string) =>\r\n\t\t\t\tmatchingChars\r\n\t\t\t\t\t.split(\"\")\r\n\t\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [cons, vow] = [\r\n\t\t\t\t`^[${CONSONANT_LIST}]{1,3}`,\r\n\t\t\t\t`[${VOWEL_LIST}]{1,3}`,\r\n\t\t\t].map((charMatcher) =>\r\n\t\t\t\tdiacriticizer(\r\n\t\t\t\t\t(lastNameCf.match(new RegExp(charMatcher, \"ig\")) || [])[0] || \"\"\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\t\tconst diacriticsVowelList: string =\r\n\t\t\t\tVOWEL_LIST +\r\n\t\t\t\tdiacriticRemover.matcherBy(new RegExp(`^[${VOWEL_LIST}]$`, \"ui\"));\r\n\t\t\tconst diacriticsVowelMatcher: string = `[${diacriticsVowelList}]`;\r\n\t\t\tconst midDiacriticVowelMatcher: string = `(?:${diacriticsVowelMatcher}${this.SEPARATOR_SET}){0,24}`;\r\n\t\t\tconst endingDiacritcVowelMatcher: string = `(?:${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${diacriticsVowelMatcher})?`;\r\n\t\t\tswitch (cons.length) {\r\n\t\t\t\tcase 3: {\r\n\t\t\t\t\tconst divider = midDiacriticVowelMatcher;\r\n\t\t\t\t\tmatcher =\r\n\t\t\t\t\t\tdivider +\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}${divider}`) +\r\n\t\t\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 2: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\t`${vow[0]}${midDiacriticVowelMatcher}${this.SEPARATOR_SET}${cons[0]}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\t`${cons[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tvow.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${vow[0]}`,\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 1: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\tvow.slice(0, 2).join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tmidDiacriticVowelMatcher +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t\t`${vow[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tvow[1],\r\n\t\t\t\t\t\t[cons[0], ...vow.slice(0, 2)].join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tmatcher = `${vow.join(\r\n\t\t\t\t\t\t`${this.SEPARATOR_SET}`\r\n\t\t\t\t\t)}${endingDiacritcVowelMatcher}`;\r\n\t\t\t}\r\n\r\n\t\t\tif (vow?.length + cons?.length < 3) {\r\n\t\t\t\treturn this.isolatedInsensitiveTailor(`\\\\s{0,4}(${matcher})\\\\s{0,4}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`\\\\s{0,4}((?:${matcher})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\\\s{0,4}`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns name validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic firstName(codiceFiscale?: string): RegExp {\r\n\t\tif (\r\n\t\t\tcodiceFiscale &&\r\n\t\t\tnew RegExp(`^[A-Z]{3}[${CONSONANT_LIST}]{3}`, \"iu\").test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst nameCf: string = codiceFiscale.substr(3, 3);\r\n\r\n\t\t\tconst cons: string[] = (\r\n\t\t\t\t(nameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) ||\r\n\t\t\t\t\t[])[0] || \"\"\r\n\t\t\t)\r\n\t\t\t\t.split(\"\")\r\n\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [diacriticsVowelList, diacriticsConsonantList]: string[] = [\r\n\t\t\t\tVOWEL_LIST,\r\n\t\t\t\tCONSONANT_LIST,\r\n\t\t\t].map(\r\n\t\t\t\t(chars) =>\r\n\t\t\t\t\tchars + diacriticRemover.matcherBy(new RegExp(`^[${chars}]$`, \"ui\"))\r\n\t\t\t);\r\n\r\n\t\t\tconst matcher: string =\r\n\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}${cons[0]}${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${diacriticsConsonantList}]${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24})?` +\r\n\t\t\t\tcons\r\n\t\t\t\t\t.slice(1, 3)\r\n\t\t\t\t\t.join(\r\n\t\t\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}`\r\n\t\t\t\t\t) +\r\n\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;\r\n\r\n\t\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t\t}\r\n\t\treturn this.lastName((codiceFiscale || \"\").substr(3, 3));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns iso8601 date validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic date(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = DATE_MATCHER.ISO8601_DATE_TIME;\r\n\t\tif (codiceFiscale) {\r\n\t\t\tconst parsedDate = this.parser.cfToBirthDate(codiceFiscale);\r\n\t\t\tif (parsedDate) {\r\n\t\t\t\tconst dateIso8601: string = parsedDate.toJSON();\r\n\t\t\t\tif (dayjs().diff(dayjs(parsedDate), \"y\") < 50) {\r\n\t\t\t\t\tconst century: number = parseInt(dateIso8601.substr(0, 2), 10);\r\n\t\t\t\t\tconst centuries: string[] = [century - 1, century].map((year) =>\r\n\t\t\t\t\t\tyear.toString().padStart(2, \"0\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\tmatcher = `(?:${centuries.join(\"|\")})` + dateIso8601.substr(2, 8);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmatcher = dateIso8601.substr(0, 10);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`${matcher}(?:T${DATE_MATCHER.TIME}(?:${DATE_MATCHER.TIMEZONE})?)?`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns gender validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic gender(codiceFiscale?: string): RegExp {\r\n\t\tconst parsedGender = codiceFiscale && this.parser.cfToGender(codiceFiscale);\r\n\t\tconst matcher: string = parsedGender || `[${Gender.toArray().join(\"\")}]`;\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns place validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic async place(codiceFiscale?: string): Promise {\r\n\t\tlet matcher: string = \".{1,32}\";\r\n\t\tconst parsedPlace =\r\n\t\t\tcodiceFiscale && (await this.parser.cfToBirthPlace(codiceFiscale));\r\n\r\n\t\tif (parsedPlace) {\r\n\t\t\tconst nameMatcher: string = parsedPlace.name.replace(/./gu, (c) =>\r\n\t\t\t\tdiacriticRemover[c] === c ? c : `[${c}${diacriticRemover[c]}]`\r\n\t\t\t);\r\n\t\t\tmatcher = `(?:(?:${nameMatcher})|${parsedPlace.belfioreCode})`;\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tpublic deomocode(omocode: string): string {\r\n\t\treturn omocode.replace(/\\d/gu, (n: any) => `[${n}${Omocodes[n]}]`);\r\n\t}\r\n\r\n\tprivate isolatedInsensitiveTailor(matcher: string): RegExp {\r\n\t\treturn new RegExp(`^(?:${matcher})$`, \"iu\");\r\n\t}\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDATE_OFFSET,\r\n\tDATE_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport type IMismatchVerboseErrors from \"../interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport default class CFMismatchValidator {\r\n\tprivate pattern: Pattern;\r\n\tprivate parser: Parser;\r\n\tconstructor(\r\n\t\tbelfioreConnector: IBelfioreConnector,\r\n\t\tprivate readonly codiceFiscale: string\r\n\t) {\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\tprivate get hasLastName() {\r\n\t\treturn this.codiceFiscale?.length >= LASTNAME_OFFSET + LASTNAME_SIZE;\r\n\t}\r\n\r\n\tprivate get hasFirstName() {\r\n\t\treturn this.codiceFiscale?.length >= FIRSTNAME_OFFSET + FIRSTNAME_SIZE;\r\n\t}\r\n\tprivate get hasBirthYear() {\r\n\t\treturn this.codiceFiscale?.length >= YEAR_OFFSET + YEAR_SIZE;\r\n\t}\r\n\tprivate get hasBirthDate() {\r\n\t\treturn this.codiceFiscale?.length >= DATE_OFFSET + DATE_SIZE;\r\n\t}\r\n\tprivate get hasGender() {\r\n\t\treturn this.codiceFiscale?.length >= GENDER_OFFSET + GENDER_SIZE;\r\n\t}\r\n\tprivate get hasBirthPlace() {\r\n\t\treturn this.codiceFiscale?.length >= PLACE_OFFSET + PLACE_SIZE;\r\n\t}\r\n\r\n\tprivate get hasCRC() {\r\n\t\treturn this.codiceFiscale?.length >= CRC_OFFSET + CRC_SIZE;\r\n\t}\r\n\r\n\tpublic async matchPersonalInfo(\r\n\t\tpersonalInfo: Omit & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise {\r\n\t\treturn (await this.pattern.codiceFiscale(personalInfo)).test(\r\n\t\t\tthis.codiceFiscale\r\n\t\t);\r\n\t}\r\n\tpublic async mismatchPersonalInfo(\r\n\t\tpersonalInfo: Omit & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise {\r\n\t\treturn !!(\r\n\t\t\tthis.codiceFiscale &&\r\n\t\t\tpersonalInfo &&\r\n\t\t\tpersonalInfo.lastName &&\r\n\t\t\tpersonalInfo.firstName &&\r\n\t\t\t(personalInfo.date ||\r\n\t\t\t\t(personalInfo.day && personalInfo.month && personalInfo.year)) &&\r\n\t\t\tpersonalInfo.gender &&\r\n\t\t\tpersonalInfo.place &&\r\n\t\t\t!(await this.matchPersonalInfo(personalInfo))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchLastName(lastName?: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasLastName &&\r\n\t\t\tthis.pattern.lastName(this.codiceFiscale).test(lastName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchLastName(lastName?: string): boolean {\r\n\t\treturn this.hasLastName && !!lastName && !this.matchLastName(lastName);\r\n\t}\r\n\r\n\tpublic matchFirstName(firstName: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasFirstName &&\r\n\t\t\tthis.pattern.firstName(this.codiceFiscale).test(firstName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchFirstName(firstName: string): boolean {\r\n\t\treturn this.hasFirstName && !!firstName && !this.matchFirstName(firstName);\r\n\t}\r\n\r\n\tpublic matchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\tif (this.hasBirthDate) {\r\n\t\t\tconst parsedCfDate = this.parser.cfToBirthDate(this.codiceFiscale);\r\n\t\t\tconst parsedDate = DateUtils.parseDate(birthDate);\r\n\t\t\tif (parsedCfDate && parsedDate) {\r\n\t\t\t\treturn dayjs(parsedCfDate).isSame(parsedDate, \"d\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic mismatchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthYear &&\r\n\t\t\t!!DateUtils.parseDate(birthDate) &&\r\n\t\t\t!this.matchBirthDate(birthDate)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchGender(gender: Genders | string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasGender &&\r\n\t\t\tthis.pattern.gender(this.codiceFiscale).test(gender || \"\")\r\n\t\t);\r\n\t}\r\n\r\n\tpublic mismatchGender(gender: Genders | string): boolean {\r\n\t\treturn this.hasGender && !!gender && !this.matchGender(gender);\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async matchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tif (this.hasBirthPlace && birthPlace) {\r\n\t\t\tconst matcher = await this.pattern.place(this.codiceFiscale);\r\n\t\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\r\n\t\t\treturn !!parsedBirthPlace && matcher.test(parsedBirthPlace?.belfioreCode);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async mismatchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthPlace &&\r\n\t\t\t!!birthPlace &&\r\n\t\t\t!(await this.matchBirthPlace(birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @param codiceFiscale Complete CF to parse\r\n\t * @return Verbose errors\r\n\t */\r\n\tpublic get errors(): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, false),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, true),\r\n\t\t])\r\n\t\t\t.then(([placeCheck, placeCreationExpirationCheck]) => ({\r\n\t\t\t\t// Checking lastName validity\r\n\t\t\t\t...(this.parser.cfToLastName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { lastName: \"MISSING_OR_INVALID_LAST_NAME\" }),\r\n\t\t\t\t// Checking firstName validity\r\n\t\t\t\t...(this.parser.cfToFirstName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { firstName: \"MISSING_OR_INVALID_FIRST_NAME\" }),\r\n\t\t\t\t// Checking Date validity\r\n\t\t\t\t...(this.parser.cfToBirthDate(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DATE\" }),\r\n\t\t\t\t// Checking Day validity\r\n\t\t\t\t...(this.parser.cfToBirthDay(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DAY\" }),\r\n\t\t\t\t// Checking Month validity\r\n\t\t\t\t...(this.parser.cfToBirthMonth(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_MONTH\" }),\r\n\t\t\t\t// Checking Year validity\r\n\t\t\t\t...(this.parser.cfToBirthYear(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_YEAR\" }),\r\n\t\t\t\t// Checking Gender validity\r\n\t\t\t\t...(this.parser.cfToGender(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { gender: \"MISSING_DAY\" }),\r\n\t\t\t\t// Checking Place validity\r\n\t\t\t\t...(placeCheck ? {} : { place: \"MISSING_OR_INVALID_PLACE\" }),\r\n\t\t\t\t// Checking Place Creation/Expiration vs Birthdate validity\r\n\t\t\t\t...(placeCreationExpirationCheck\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: {\r\n\t\t\t\t\t\t\tplace: \"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE\",\r\n\t\t\t\t\t\t\tdate: \"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE\",\r\n\t\t\t\t\t }),\r\n\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t...(this.codiceFiscale\r\n\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t?.toUpperCase() === CheckDigitizer.checkDigit(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { crc: \"INVALID_CRC_CODE\" }),\r\n\r\n\t\t\t\t// Checking length\r\n\t\t\t\t...(this.hasCRC ? {} : { crc: \"MISSING_CRC_CODE\" }),\r\n\t\t\t}))\r\n\t\t\t.then((errors) => (Object.keys(errors).length ? errors : null));\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic get valid(): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.pattern.codiceFiscale(),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale),\r\n\t\t]).then(\r\n\t\t\t([cfPattern, cfToBirthPlace]) =>\r\n\t\t\t\t!(\r\n\t\t\t\t\t// Checking length\r\n\t\t\t\t\t(\r\n\t\t\t\t\t\t!this.hasCRC ||\r\n\t\t\t\t\t\t// Checking form validity\r\n\t\t\t\t\t\t!cfPattern.test(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t\t\tthis.codiceFiscale\r\n\t\t\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t\t\t?.toUpperCase() !==\r\n\t\t\t\t\t\t\tCheckDigitizer.checkDigit(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking Birth date/place validity\r\n\t\t\t\t\t\t!cfToBirthPlace\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\tpublic get invalid(): Promise {\r\n\t\treturn this.valid.then((isValid) => !!this.codiceFiscale && !isValid);\r\n\t}\r\n}\r\n","import {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CFMismatchValidator from \"./cf-mismatch-validator.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\nimport dayjs from \"dayjs\";\r\n\r\nexport default class Validator {\r\n\tprivate parser: Parser;\r\n\tprivate pattern: Pattern;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n\r\n\tpublic codiceFiscale(codiceFiscale: string): CFMismatchValidator {\r\n\t\treturn new CFMismatchValidator(this.belfioreConnector, codiceFiscale);\r\n\t}\r\n\r\n\tpublic isLastNameValid(lastName: string): boolean {\r\n\t\treturn this.pattern.lastName().test(lastName);\r\n\t}\r\n\tpublic isLastNameInvalid(lastName: string): boolean {\r\n\t\treturn !!lastName && !this.isLastNameValid(lastName);\r\n\t}\r\n\r\n\tpublic isFirstNameValid(firstName: string): boolean {\r\n\t\treturn this.pattern.firstName().test(firstName);\r\n\t}\r\n\tpublic isFirstNameInvalid(firstName: string): boolean {\r\n\t\treturn !!firstName && !this.isFirstNameValid(firstName);\r\n\t}\r\n\r\n\tpublic isBirthDateValid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!DateUtils.parseDate(birthDate);\r\n\t}\r\n\tpublic isBirthDateInvalid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!birthDate && !this.isBirthDateValid(birthDate);\r\n\t}\r\n\r\n\tpublic isGenderValid(gender: Genders | string): boolean {\r\n\t\treturn this.pattern.gender().test(gender);\r\n\t}\r\n\tpublic isGenderInvalid(gender: Genders | string): boolean {\r\n\t\treturn !!gender && !this.isGenderValid(gender);\r\n\t}\r\n\r\n\tpublic async isBirthPlaceValid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\t!!parsedBirthPlace &&\r\n\t\t\t!!(await this.belfioreConnector.findByCode(parsedBirthPlace.belfioreCode))\r\n\t\t);\r\n\t}\r\n\tpublic async isBirthPlaceInvalid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\treturn !!birthPlace && !(await this.isBirthPlaceValid(birthPlace));\r\n\t}\r\n\r\n\tpublic async birthDatePlaceMatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t(!!(await this.belfioreConnector\r\n\t\t\t\t.from(birthDate)\r\n\t\t\t\t.findByCode(parsedPlace.belfioreCode)) ||\r\n\t\t\t\t// Ignoring control for people born before CF introduction\r\n\t\t\t\t!dayjs(DateUtils.parseDate(birthDate)).isAfter(\r\n\t\t\t\t\tCF_INTRODUCTION_DATE,\r\n\t\t\t\t\t\"day\"\r\n\t\t\t\t))\r\n\t\t);\r\n\t}\r\n\tpublic async birthDatePlaceMismatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t!(await this.birthDatePlaceMatch(birthDate, birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise {\r\n\t\treturn await this.birthDatePlaceMatch(birthDate, birthPlace);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMismatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise {\r\n\t\treturn await this.birthDatePlaceMismatch(birthDate, birthPlace);\r\n\t}\r\n}\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport CFMismatchValidator from \"./classes/cf-mismatch-validator.class\";\r\nimport CheckDigitizer from \"./classes/check-digitizer.class\";\r\nimport Gender from \"./classes/gender.class\";\r\nimport Parser from \"./classes/parser.class\";\r\nimport Pattern from \"./classes/pattern.class\";\r\nimport Validator from \"./classes/validator.class\";\r\nimport * as VALIDATOR from \"./const/matcher.const\";\r\nimport * as Matcher from \"./const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\ttype DateDay,\r\n\ttype DateMonth,\r\n\tDateUtils,\r\n\ttype MultiFormatDate,\r\n} from \"./date-utils/\";\r\nimport BirthMonth from \"./enums/birth-month.enum\";\r\nimport CRC from \"./enums/crc.enum\";\r\nimport Omocodes from \"./enums/omocodes.enum\";\r\nimport type Genders from \"./types/genders.type\";\r\nimport IMismatchVerboseErrors from \"./interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport type {\r\n\tBelfiorePlace,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tGenders,\r\n\tMultiFormatDate,\r\n\tIMismatchVerboseErrors,\r\n};\r\n\r\nexport default class CodiceFiscaleUtils {\r\n\tpublic readonly validator: Validator;\r\n\tpublic readonly parser: Parser;\r\n\tpublic readonly pattern: Pattern;\r\n\r\n\tconstructor(public readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.validator = new Validator(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n}\r\n\r\nexport {\r\n\tBirthMonth,\r\n\tCheckDigitizer,\r\n\tCRC,\r\n\tDATE_MATCHER,\r\n\tDateUtils,\r\n\tGender,\r\n\tOmocodes,\r\n\tVALIDATOR,\r\n\tMatcher,\r\n\tCFMismatchValidator,\r\n\tParser,\r\n\tPattern,\r\n\tValidator,\r\n\tCodiceFiscaleUtils,\r\n};\r\n"],"names":["CRC_OFFSET","YEAR","MONTH","DAYS_30_MONTHS","DAYS_31_MONTHS","MONTH_DAY","HOURS","MINUTES","SECONDS","MILLISECONDS","TIMEZONE","TIME","ISO8601_SHORT_DATE","ISO8601_DATE_TIME","DateUtils","parseDate","date","Date","RegExp","test","Array","isArray","length","some","value","isNaN","parsedDate","year","month","day","dayjs","UTC","isValid","toDate","err","ymdToDate","this","CONSONANT_LIST","VOWEL_LIST","OMOCODE_NUMBER_LIST","OMOCODE_NON_ZERO_NUMBER_LIST","OMOCODE_ZERO_LIST","MONTH_LIST","MONTH_30DAYS_LIST","MONTH_31DAYS_LIST","CITY_CODE_LIST","COUNTRY_CODE_LIST","CF_NAME_MATCHER","CF_SURNAME_MATCHER","CF_FULL_NAME_MATCHER","YEAR_MATCHER","LEAP_YEAR_MATCHER","MONTH_MATCHER","DAY_2X_MATCHER","DAY_3X_MATCHER","DAY_29_MATCHER","DAY_30_MATCHER","DAY_31_MATCHER","DAY_MATCHER","MALE_DAY_MATCHER","FEMALE_DAY_MATCHER","MONTH_DAY_MATCHER","FULL_DATE_MATCHER","MALE_FULL_DATE_MATCHER","FEMALE_FULL_DATE_MATCHER","CITY_CODE_MATCHER","COUNTRY_CODE_MATCHER","BELFIORE_CODE_MATCHER","CHECK_DIGIT","CODICE_FISCALE","PARTIAL_CF_NAME_MATCHER","PARTIAL_CF_FULL_NAME","PARTIAL_YEAR","PARTIAL_MONTH_DAY","PARTIAL_FULL_DATE","PARTIAL_BELFIORE_CODE_MATCHER","PARTIAL_CF","CRC","BirthMonth","CRC$1","CheckDigitizer","checkDigit","codiceFiscale","partialCF","substr","partialCfValue","charValue","evaluateChar","String","fromCharCode","CRC_MOD","CHAR_OFFSET","generator","evaluateCharGenerator","Symbol","iterator","index","char","toUpperCase","parseInt","charCodeAt","GenderWeight","BirthMonth$1","Omocodes","GenderWeight$1","Omocodes$1","Gender","getDay","genderDay","plainDay","F","MAX_MONTH_DAY","getGender","toArray","find","gender","genderizeDay","CF_INTRODUCTION_DATE","diacriticRemover","DiacriticRemover","Parser","constructor","belfioreConnector","OMOCODE_BITMAP","JOLLY_CHAR","cfDeomocode","deomocodedCf","partialCfDeomocode","substring","appyCaseToChar","cfOmocode","omocodeId","omocodedCf","split","i","o","Math","pow","crc","partialCf","slice","join","cfOmocodeId","cfOmocodeBitmap","filter","map","cfToLastName","cfLastNamePart","LASTNAME_OFFSET","lastNameCf","cons","match","vow","matchingLength","cfToFirstName","cfFirstNamePart","FIRSTNAME_OFFSET","cfToGender","GENDER_OFFSET","cfGenderPart","genderInt","cfToBirthYear","YEAR_OFFSET","cfBirthYearPart","birthYear","current2DigitsYear","format","century","subtract","cfToBirthMonth","MONTH_OFFSET","cfBirthMonthPart","birthMonth","cfToBirthDay","DAY_OFFSET","cfBirthDayPart","birthDay","cfToBirthDate","cfToBirthPlace","codiceFiscale_1","checkBirthDateConsistency","PLACE_OFFSET","cfBirthPlacePart","belfioreCode","birthPlace","findByCode","creationDate","expirationDate","birthDate","isBirthDateAfterCfIntroduction","add","isBefore","isAfter","cfDecode","fiscalCode","undefined","_a","place","personalInfo","firstName","lastName","lastNameToCf","trim","replace","charExtractor","padEnd","firstNameToCf","consonants","yearToCf","parsedYear","monthToCf","dayGenderToCf","genderValue","yearMonthDayToDate","param","parsePlace","verifiedBirthPlace","findByName","dateGenderToCf","getFullYear","getMonth","getDate","placeToCf","dateOrName","nameOrProvince","provinceId","name","province","placeFinder","byProvince","from","foundPlace","encodeCf","__awaiter","arguments","dtParams","cf","cfPartGenerator","cfValue","checkBitmap","offset","charOmocode","text","CHAR_LIST","charMatcher","partialCodiceFiscale","position","targetChar","counterCaseChar","isUpperCase","isLowerCase","toLowerCase","INVALID_SURNAME","INVALID_NAME","INVALID_DAY","INVALID_GENDER","INVALID_DAY_OR_GENDER","INVALID_YEAR","INVALID_DATE","CfuError","Error","errorCode","super","Object","entries","ErrorMessages","errId","Pattern","LETTER_SET","matcherBy","SEPARATOR_SET","parser","cfLastName","matcher","isolatedInsensitiveTailor","cfFirstName","cfYear","deomocode","cfMonth","cfDay","parsedDayM","parsedDayF","cfDayGender","parsedDayGender","cfDateGender","includes","parsedDateGender","parseDeomocode","g","parsedGender","cfPlace","birthDateOrName","placeName","parsedPlace","parsedCf","validator","cfMatcher","toString","diacriticizer","matchingChars","insensitiveMatcher","diacriticsVowelMatcher","midDiacriticVowelMatcher","endingDiacritcVowelMatcher","divider","diacriticsVowelList","diacriticsConsonantList","chars","DATE_MATCHER.ISO8601_DATE_TIME","dateIso8601","toJSON","diff","padStart","DATE_MATCHER.TIME","DATE_MATCHER.TIMEZONE","c","omocode","n","CFMismatchValidator","pattern","hasLastName","hasFirstName","hasBirthYear","hasBirthDate","DATE_OFFSET","hasGender","hasBirthPlace","hasCRC","matchPersonalInfo","mismatchPersonalInfo","matchLastName","mismatchLastName","matchFirstName","mismatchFirstName","matchBirthDate","parsedCfDate","isSame","mismatchBirthDate","matchGender","mismatchGender","matchBirthPlace","parsedBirthPlace","mismatchBirthPlace","errors","Promise","all","then","placeCheck","placeCreationExpirationCheck","assign","_b","keys","valid","cfPattern","invalid","Validator","isLastNameValid","isLastNameInvalid","isFirstNameValid","isFirstNameInvalid","isBirthDateValid","isBirthDateInvalid","isGenderValid","isGenderInvalid","isBirthPlaceValid","isBirthPlaceInvalid","birthDatePlaceMatch","birthDatePlaceMismatch","birthPlaceDateMatch","birthPlaceDateMismatch","CodiceFiscaleUtils"],"mappings":"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AAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,EAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,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AAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACKC,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtBC,CAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzBC,GACL,CACKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACL,CACKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA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"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js index 1a279a9..8f59214 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1,5 +1,5 @@ /** - * @marketto/codice-fiscale-utils 3.1.0 + * @marketto/codice-fiscale-utils 3.1.1 * Copyright (c) 2019-2024, Marco Ricupero * License: MIT */ @@ -1341,7 +1341,9 @@ class CFMismatchValidator { personalInfo.lastName && personalInfo.firstName && (personalInfo.date || - (personalInfo.day && personalInfo.month && personalInfo.year)) && + (personalInfo.day && + typeof personalInfo.month === "number" && + personalInfo.year)) && personalInfo.gender && personalInfo.place && !(yield this.matchPersonalInfo(personalInfo))); @@ -1426,7 +1428,7 @@ class CFMismatchValidator { ? {} : { date: "MISSING_OR_INVALID_DATE" })), (this.parser.cfToBirthDay(this.codiceFiscale) ? {} - : { date: "MISSING_OR_INVALID_DAY" })), (this.parser.cfToBirthMonth(this.codiceFiscale) + : { date: "MISSING_OR_INVALID_DAY" })), (typeof this.parser.cfToBirthMonth(this.codiceFiscale) === "number" ? {} : { date: "MISSING_OR_INVALID_MONTH" })), (this.parser.cfToBirthYear(this.codiceFiscale) ? {} diff --git a/dist/index.mjs b/dist/index.mjs index fc09c00..745f2de 100644 --- a/dist/index.mjs +++ b/dist/index.mjs @@ -1,8 +1,8 @@ /** - * @marketto/codice-fiscale-utils 3.1.0 + * @marketto/codice-fiscale-utils 3.1.1 * Copyright (c) 2019-2024, Marco Ricupero * License: MIT */ -import t from"dayjs";import e from"@marketto/diacritic-remover";const i=15,r="[12][0-9]{3}",s="0[1-9]|1[0-2]",a="0[469]|11",n="0[13578]|1[02]",o=`(?:${s})-(?:0[1-9]|[12]\\d)|(?:${a})-30|(?:${n})-3[01]`,c="[01]\\d|2[0-3]",h="[0-5]\\d",l=h,d="\\d{3}",T=`Z|[-+](?:${c})(?::?${h})?`,f=`(?:${c})(?::${h}(?::${l}(\\.${d})?)?(?:${T})?)?`,$=`${r}-(?:${o})(?:T${f})?`,u=`${r}(?:-(?:(?:${s})|(?:${o})(?:T${f})?))?`;var A=Object.freeze({__proto__:null,DAY:"0[1-9]|[12][0-9]|3[01]",DAYS_30_MONTHS:a,DAYS_31_MONTHS:n,HOURS:c,ISO8601_DATE_TIME:u,ISO8601_SHORT_DATE:$,LEAP_MONTH:"02",MILLISECONDS:d,MINUTES:h,MONTH:s,MONTH_DAY:o,SECONDS:l,TIME:f,TIMEZONE:T,YEAR:r});class E{static parseDate(e){if(!(e instanceof Date||"string"==typeof e&&new RegExp(`^(?:${u})$`).test(e)||Array.isArray(e)&&e.length&&!e.some((t=>"number"!=typeof t||isNaN(t)))))return null;try{let i;if(Array.isArray(e)){const[r,s=0,a=1]=e;if(!(s>=0&&s<=11&&a>0&&a<=31))return null;i=t(Date.UTC(r,s||0,a||1))}else i=t(e);return i.isValid()?i.toDate():null}catch(t){return null}}static ymdToDate(t,e,i){return this.parseDate([t,e,i])}}const _="B-DF-HJ-NP-TV-Z",p="AEIOU",C="\\dLMNP-V",m="1-9MNP-V",R="0L",D="A-EHLMPR-T",N="DHPS",M="ACELMRT",I="A-M",S="Z",O=`[A-Z][${p}][${p}X]|[${p}]X{2}|[${_}]{2}[A-Z]`,y=O,g=`(?:${O}){2}`,L=`[${C}]{2}`,P="[02468LNQSU][048LQU]|[13579MPRTV][26NS]",F=`[${D}]`,w="[26NS]",b="[37PT]",B=`[${R}4Q][${m}]|[1256MNRS][${C}]`,v=`[${b}][${R}]`,H=`[${b}][${R}1M]`,Y=`(?:${B}|${b}[${R}1M])`,V=`(?:[${R}][${m}]|[12MN][${C}]|[3P][${R}1M])`,G=`(?:[4Q][${m}]|[56RS][${C}]|[7T][${R}1M])`,U=`${F}(?:${B})|[${N}]${v}|[${M}]${H}`,j=`${L}(?:${F}(?:[${R}4Q][${m}]|[15MR][${C}]|${w}[0-8LMNP-U])|[${N}]${b}[${R}]|[${M}]${b}[${R}1M]|[${N}${M}]${w}[9V])|(?:${P})B${w}[9V]`,x=`${L}(?:${F}(?:[${R}][${m}]|[1M][${C}]|[2N][0-8LMNP-U])|[${N}][3P][${R}]|[${M}][3P][${R}1M]|[${N}${M}][2N][9V])|(?:${P})B[2N][9V]`,Z=`${L}(?:${F}(?:[4Q][${m}]|[5R][${C}]|[6S][0-8LMNP-U])|[${N}][7T][${R}]|[${M}][7T][${R}1M]|[${N}${M}][6S][9V])|(?:${P})B[6S][9V]`,k=`[${I}](?:[${m}][${C}]{2}|[${R}](?:[${m}][${C}]|[${R}][${m}]))`,X=`${S}[${m}][${C}]{2}`,Q=`(?:[${I}${S}][${m}][${C}]{2})|(?:[${I}][${R}](?:[${m}][${C}]|[${R}][${m}]))`,J="[A-Z]",z=`${g}(?:${j})(?:${Q})${J}`,K=`[A-Z][${p}]?|[${_}]{1,2}`,W=`(?:${K})|(?:(?:${O})(?:${K})?)`,q=`[${C}]`,tt=`${F}[${R}12456MNQRS]?|[${N}${M}]${b}`,et=`${q}|(?:${L}(?:${tt})?)`,it=`[${I}${S}](?:[${m}][${C}]?)?|[${S}](?:[${R}][${C}]?)?`,rt=`${W}|(?:${g}(?:(?:${et})|(?:${j})(?:(?:${it})|(?:${Q})${J}?)?)?)?`;var st,at=Object.freeze({__proto__:null,BELFIORE_CODE_MATCHER:Q,CF_FULL_NAME_MATCHER:g,CF_NAME_MATCHER:O,CF_SURNAME_MATCHER:y,CHECK_DIGIT:J,CITY_CODE_LIST:I,CITY_CODE_MATCHER:k,CODICE_FISCALE:z,CONSONANT_LIST:_,COUNTRY_CODE_LIST:S,COUNTRY_CODE_MATCHER:X,DAY_29_MATCHER:B,DAY_2X_MATCHER:w,DAY_30_MATCHER:v,DAY_31_MATCHER:H,DAY_3X_MATCHER:b,DAY_MATCHER:Y,FEMALE_DAY_MATCHER:G,FEMALE_FULL_DATE_MATCHER:Z,FULL_DATE_MATCHER:j,LEAP_YEAR_MATCHER:P,MALE_DAY_MATCHER:V,MALE_FULL_DATE_MATCHER:x,MONTH_30DAYS_LIST:N,MONTH_31DAYS_LIST:M,MONTH_DAY_MATCHER:U,MONTH_LIST:D,MONTH_MATCHER:F,OMOCODE_NON_ZERO_NUMBER_LIST:m,OMOCODE_NUMBER_LIST:C,OMOCODE_ZERO_LIST:R,PARTIAL_BELFIORE_CODE_MATCHER:it,PARTIAL_CF:rt,PARTIAL_CF_FULL_NAME:W,PARTIAL_CF_NAME_MATCHER:K,PARTIAL_FULL_DATE:et,PARTIAL_MONTH_DAY:tt,PARTIAL_YEAR:q,VOWEL_LIST:p,YEAR_MATCHER:L});!function(t){t[t.B=0]="B",t[t.A=1]="A",t[t.K=2]="K",t[t.P=3]="P",t[t.L=4]="L",t[t.C=5]="C",t[t.Q=6]="Q",t[t.D=7]="D",t[t.R=8]="R",t[t.E=9]="E",t[t.V=10]="V",t[t.O=11]="O",t[t.S=12]="S",t[t.F=13]="F",t[t.T=14]="T",t[t.G=15]="G",t[t.U=16]="U",t[t.H=17]="H",t[t.M=18]="M",t[t.I=19]="I",t[t.N=20]="N",t[t.J=21]="J",t[t.W=22]="W",t[t.Z=23]="Z",t[t.Y=24]="Y",t[t.X=25]="X"}(st||(st={}));var nt,ot=st;class ct{static checkDigit(t){if("string"==typeof t&&new RegExp(rt).test(t)){const e=t.substr(0,i);let r=0;for(const t of this.evaluateChar(e))r+=t;return String.fromCharCode(r%this.CRC_MOD+this.CHAR_OFFSET)}return null}static evaluateChar(t=""){return(e=this.evaluateCharGenerator(t))[Symbol.iterator]=()=>e,e;var e}static CHAR_OFFSET=65;static CRC_MOD=26;static*evaluateCharGenerator(t=""){if("string"==typeof t&&t.length)for(let e=0;e0&&e<=this.MAX_MONTH_DAY?e:null}static getGender(t){return this.toArray().find((e=>t>=Tt[e]&&t<=Tt[e]+this.MAX_MONTH_DAY))||null}static genderizeDay(t,e){return t+Tt[e]}static toArray(){return["M","F"]}static MAX_MONTH_DAY=31}const ut=new Date("1973-09-29"),At=new e;class Et{belfioreConnector;constructor(t){this.belfioreConnector=t}OMOCODE_BITMAP=30400;cfDeomocode(t){if(t&&t.length<=6)return t;const e=this.partialCfDeomocode(t);if(e.length=0;i--)if(2**i&this.OMOCODE_BITMAP){if(!!(e&2**s)!==isNaN(parseInt(r[i],10))){const t=r[i].toUpperCase();r[i]=ft[t]}s++}const s=r[15];if(s){const t=r.slice(0,i).join("");r[15]=this.appyCaseToChar(ct.checkDigit(t)||"",s)}return r.join("")}cfOmocodeId(t){const e=t.split("").filter(((t,e)=>2**e&this.OMOCODE_BITMAP)).map((t=>/^[a-z]$/i.test(At[t])?1:0)).join("");return parseInt(e,2)}cfToLastName(t){const e=t?.substring(0,3);if("string"!=typeof t||3!==e.length||!new RegExp(`^(?:${y})`,"iu").test(e))return null;const i=t.substring(0,3),[r=""]=i.match(new RegExp(`^[${_}]{1,3}`,"ig"))||[],[s=""]=i.match(new RegExp(`[${p}]{1,3}`,"ig"))||[],a=r.length+s.length;if(a<2||a<3&&"X"!==i[2].toUpperCase())return null;switch(r.length){case 3:return(r+s).split("").join(this.JOLLY_CHAR)+this.JOLLY_CHAR;case 2:return`${r[0]}${s[0]}*${r[1]}${this.JOLLY_CHAR}`;case 1:return`${r[0]}${s}${this.JOLLY_CHAR}`;default:return`${s}${3===s.length?this.JOLLY_CHAR:""}`}}cfToFirstName(t){const e=t?.substring(3,6);return"string"==typeof t&&3===e?.length&&new RegExp(`^(${O})$`,"iu").test(e)?this.cfToLastName(e):null}cfToGender(t){if("string"!=typeof t||t.length<10)return null;const e=t.substring(9,10),i=10*parseInt(this.partialCfDeomocode(e,9),10);return $t.getGender(i)}cfToBirthYear(e){if("string"!=typeof e||e.length<8)return null;const i=e.substring(6,8),r=parseInt(this.partialCfDeomocode(i,6),10);if(isNaN(r))return null;const s=parseInt(t().format("YY"),10),a=100*(r>s?1:0);return t().subtract(s-r+a,"years").year()}cfToBirthMonth(t){if("string"!=typeof t||t.length<9)return null;const e=t.substring(8,9).toUpperCase(),i=lt[e];return"number"!=typeof i||i<0||i>11?null:i}cfToBirthDay(t){if("string"!=typeof t||t.length<11)return null;const e=t.substring(9,11),i=parseInt(this.partialCfDeomocode(e,9),10);return isNaN(i)?null:$t.getDay(i)}cfToBirthDate(t){const e=this.cfToBirthDay(t);if(!e)return null;const i=this.cfToBirthMonth(t);if("number"!=typeof i)return null;const r=this.cfToBirthYear(t);return E.ymdToDate(r,i,e)}async cfToBirthPlace(e,i=!0){if("string"!=typeof e||e.length<15)return null;const r=e.substring(11,15),s=this.partialCfDeomocode(r,11),a=await this.belfioreConnector.findByCode(s);if(!a)return null;const{creationDate:n,expirationDate:o}=a;if((n||o)&&i){const i=this.cfToBirthDate(e),r=t(ut).add(5,"years").isBefore(i,"day");if(i&&r){if(!((!o||t(i).isBefore(o,"day"))&&(!n||t(i).isAfter(n,"day"))))return null}}return a}async cfDecode(t){const e=this.cfToBirthYear(t)||void 0,i=this.cfToBirthMonth(t)??void 0,r=this.cfToBirthDay(t)||void 0,s=E.ymdToDate(e,i,r)||void 0,a=await this.cfToBirthPlace(t),n={firstName:this.cfToFirstName(t)||void 0,lastName:this.cfToLastName(t)||void 0,day:r,month:i,year:e,date:s,gender:this.cfToGender(t)||void 0,place:a||void 0,omocodeId:this.cfOmocodeId(t)};return e&&i&&r&&(n.date=new Date(Date.UTC(e,i,r))),n}lastNameToCf(t){if(!t||(t||"").trim().length<2)return null;if(!/^[A-Z ']{1,32}$/iu.test(At.replace(t)))return null;const e=(this.charExtractor(t,_)+this.charExtractor(t,p)).padEnd(3,"X").substring(0,3);return e.length<3?null:e.toUpperCase()}firstNameToCf(t){if(!t||(t||"").trim().length<2)return null;const e=this.charExtractor(t,_);return e.length>=4?(e[0]+e.substring(2,4)).toUpperCase():this.lastNameToCf(t)}yearToCf(t){let e;return e="string"==typeof t?parseInt(t,10):t,"number"!=typeof e||isNaN(e)||!(e>=1900||e<100)?null:`0${e}`.substr(-2)}monthToCf(t){return t<0||t>11?null:lt[t]||null}dayGenderToCf(t,e){if(t<1||t>31)return null;const i=Tt[e];return"number"!=typeof i?null:`0${t+i}`.substr(-2)}yearMonthDayToDate(e,i=0,r=1){if(!e||e<1861||[i,r].some((t=>"number"!=typeof t)))return null;const s=t(Date.UTC(e,i||0,r||1));return s.isValid()&&s.year()===e&&s.month()===i&&s.date()===r?s.toDate():null}async parsePlace(t){let e;return t?("object"==typeof t&&t.belfioreCode?e=await this.belfioreConnector.findByCode(t.belfioreCode):"string"==typeof t&&(e=await this.belfioreConnector.findByCode(t)||await this.belfioreConnector.findByName(t)),e||null):null}dateGenderToCf(t,e){const i=E.parseDate(t);if(!i)return null;return`${this.yearToCf(i.getFullYear())}${this.monthToCf(i.getMonth())}${this.dayGenderToCf(i.getDate(),e)}`}async placeToCf(t,e,i){const r=E.parseDate(t);let s,a;if(r||"string"!=typeof t){if(!e)return null;s=e,a=i}else s=t,a=e;let n=this.belfioreConnector;if(a&&(n=n.byProvince(a)),r&&n&&(n=n.from(r)),n){const t=await new Et(n).parsePlace(s);if(t)return t.belfioreCode}return null}async encodeCf({lastName:t,firstName:e,year:i,month:r,day:s,date:a,gender:n,place:o,omocodeId:c=0}){const h=E.parseDate(a)||this.yearMonthDayToDate(i,r,s);if(!(h&&t&&e&&n&&o))return null;const l=[async()=>this.lastNameToCf(t),async()=>this.firstNameToCf(e),async()=>this.dateGenderToCf(h,n),async()=>await this.placeToCf(h,o?.belfioreCode||o)];let d="";for(const t of l){const e=await t();if(!e)return null;d+=e}return this.cfOmocode(d,c)}JOLLY_CHAR="*";checkBitmap(t){return!!(2**t&this.OMOCODE_BITMAP)}charOmocode(t,e){return/^[A-Z]$/giu.test(t)&&this.checkBitmap(e)?ft[t.toUpperCase()]:t}charExtractor(t,e){const i=new RegExp(`[${e}]{1,24}`,"ig");return(At.replace(t).trim().match(i)||[]).join("")}partialCfDeomocode(t,e=0){return t.replace(/[\dA-Z]/giu,((t,i)=>this.charOmocode(t,i+e)))}appyCaseToChar(t,e){if(t&&e){const i=e[0]===e[0].toUpperCase(),r=e[0]===e[0].toLowerCase();if(i&&!r)return t[0].toUpperCase();if(!i&&r)return t[0].toLowerCase()}return t[0]}}const _t="Provided lastName is not valid, only letters, diacritics and apostrophe allowed",pt="Provided name is not valid, only letters, diacritics and apostrophe allowed",Ct="Provided day is not valid",mt="Provided gender is not valid",Rt="Provided day and/or gender are not valid",Dt="Provided year is not valid, only 2 or 4 digit numbers are allowed",Nt="Provided date is not valid";var Mt=Object.freeze({__proto__:null,INVALID_DATE:Nt,INVALID_DAY:Ct,INVALID_DAY_OR_GENDER:Rt,INVALID_GENDER:mt,INVALID_NAME:pt,INVALID_PLACE_NAME:"Proviced City/Country name is not valid",INVALID_SURNAME:_t,INVALID_YEAR:Dt});class It extends Error{constructor(t){super((Object.entries(Mt).find((([e])=>e===t))||[])[1]||t)}}const St=new e;class Ot{belfioreConnector;parser;constructor(t){this.belfioreConnector=t,this.parser=new Et(t)}cfLastName(t){let e=y;if(t){if(!this.lastName().test(t))throw new It(_t);e=this.parser.lastNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfFirstName(t){let e=O;if(t){if(!this.lastName().test(t))throw new It(pt);e=this.parser.firstNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfYear(t){let e=L;if(t){const i=this.parser.yearToCf(t);if(!i)throw new It(Dt);e=this.deomocode(i)}return this.isolatedInsensitiveTailor(e)}cfMonth(t){let e=F;return t&&(e=this.parser.monthToCf(t)||e),this.isolatedInsensitiveTailor(e)}cfDay(t){let e=Y;if(t){const i=this.parser.dayGenderToCf(t,"M"),r=this.parser.dayGenderToCf(t,"F");if(!i||!r)throw new It(Ct);e=`(?:${this.deomocode(i)})|(?:${this.deomocode(r)})`}return this.isolatedInsensitiveTailor(e)}cfDayGender(t,e){if(!e)return this.cfDay(t);let i;if(t){const r=this.parser.dayGenderToCf(t,e);if(!r)throw new It(Rt);i=this.deomocode(r)}else switch(e){case"M":i=V;break;case"F":i=G;break;default:throw new It(mt)}return this.isolatedInsensitiveTailor(i)}cfDateGender(t,e){if(t&&!E.parseDate(t))throw new It(Nt);if(e&&!$t.toArray().includes(e))throw new It(mt);let i=j;if(t){const r=e&&this.parser.dateGenderToCf(t,e);if(r)i=this.deomocode(r);else{const e=e=>{const i=this.parser.dateGenderToCf(t,e);if(!i)throw new It(Nt);return i&&this.deomocode(i)};i=`(?:${$t.toArray().map(e).join("|")})`}}else"M"===e?i=x:"F"===e&&(i=Z);return this.isolatedInsensitiveTailor(i)}async cfPlace(t,e){let i=Q;if(t){const r=E.parseDate(t);if(r&&e){const t=e,s=await this.parser.placeToCf(r,t);i=this.deomocode(s||"")}else if(!r&&"string"==typeof t){const e=t,r=await this.parser.placeToCf(e);i=this.deomocode(r||"")}}return this.isolatedInsensitiveTailor(i)}async codiceFiscale(t){let e=z;if(t){const i=await this.parser.encodeCf(t);if(i)e=this.deomocode(i);else{const{lastName:i,firstName:r,year:s,month:a,day:n,date:o,gender:c,place:h}=t;if(i||r||s||a||n||o||c||h){let t=null;o?t=E.parseDate(o):s&&(t=this.parser.yearMonthDayToDate(s,a,n));const l=[async()=>this.cfLastName(i),async()=>this.cfFirstName(r),async()=>this.cfDateGender(t,c),async()=>await this.cfPlace(t,h?.belfioreCode||h)];e="";for(const t of l){const i=(await t()).toString(),r=i.match(/\^(.{1,256})\$/),s=r&&r[1];if(!s)throw new Error(`Unable to handle [${i}]`);e+=`(?:${s})`}e+=J}}}return this.isolatedInsensitiveTailor(e)}LETTER_SET=`[A-Z${St.matcherBy(/^[A-Z]$/iu)}]`;SEPARATOR_SET="(?:'?\\s{0,4})";lastName(t){let e=`${this.LETTER_SET}{1,24}`;if(t&&/^[A-Z]{1,3}/iu.test(t)){const i=t.substr(0,3),r=t=>t.split("").map((t=>`[${St.insensitiveMatcher[t]}]`)),[s,a]=[`^[${_}]{1,3}`,`[${p}]{1,3}`].map((t=>r((i.match(new RegExp(t,"ig"))||[])[0]||""))),n=`[${p+St.matcherBy(new RegExp(`^[${p}]$`,"ui"))}]`,o=`(?:${n}${this.SEPARATOR_SET}){0,24}`,c=`(?:${this.SEPARATOR_SET}${o}${n})?`;switch(s.length){case 3:{const t=o;e=t+s.join(`${this.SEPARATOR_SET}${t}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;break}case 2:e=`(?:${[`${a[0]}${o}${this.SEPARATOR_SET}${s[0]}${o}${s[1]}`,`${s[0]}${this.SEPARATOR_SET}`+a.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${o}${s[1]}`,s.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${a[0]}`].join("|")})${c}`;break;case 1:e=`(?:${[a.slice(0,2).join(`${this.SEPARATOR_SET}`)+o+s.join(`${this.SEPARATOR_SET}`),`${a[0]}${this.SEPARATOR_SET}`+s.join(`${this.SEPARATOR_SET}`)+a[1],[s[0],...a.slice(0,2)].join(`${this.SEPARATOR_SET}`)].join("|")})${c}`;break;default:e=`${a.join(`${this.SEPARATOR_SET}`)}${c}`}if(a?.length+s?.length<3)return this.isolatedInsensitiveTailor(`\\s{0,4}(${e})\\s{0,4}`)}return this.isolatedInsensitiveTailor(`\\s{0,4}((?:${e})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\s{0,4}`)}firstName(t){if(t&&new RegExp(`^[A-Z]{3}[${_}]{3}`,"iu").test(t)){const e=((t.substr(3,3).match(new RegExp(`^[${_}]{1,3}`,"ig"))||[])[0]||"").split("").map((t=>`[${St.insensitiveMatcher[t]}]`)),[i,r]=[p,_].map((t=>t+St.matcherBy(new RegExp(`^[${t}]$`,"ui")))),s=`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}${e[0]}${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${r}]${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24})?`+e.slice(1,3).join(`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;return this.isolatedInsensitiveTailor(s)}return this.lastName((t||"").substr(3,3))}date(e){let i=u;if(e){const r=this.parser.cfToBirthDate(e);if(r){const e=r.toJSON();if(t().diff(t(r),"y")<50){const t=parseInt(e.substr(0,2),10);i=`(?:${[t-1,t].map((t=>t.toString().padStart(2,"0"))).join("|")})`+e.substr(2,8)}else i=e.substr(0,10)}}return this.isolatedInsensitiveTailor(`${i}(?:T${f}(?:${T})?)?`)}gender(t){const e=t&&this.parser.cfToGender(t)||`[${$t.toArray().join("")}]`;return this.isolatedInsensitiveTailor(e)}async place(t){let e=".{1,32}";const i=t&&await this.parser.cfToBirthPlace(t);if(i){e=`(?:(?:${i.name.replace(/./gu,(t=>St[t]===t?t:`[${t}${St[t]}]`))})|${i.belfioreCode})`}return this.isolatedInsensitiveTailor(e)}deomocode(t){return t.replace(/\d/gu,(t=>`[${t}${ft[t]}]`))}isolatedInsensitiveTailor(t){return new RegExp(`^(?:${t})$`,"iu")}}class yt{codiceFiscale;pattern;parser;constructor(t,e){this.codiceFiscale=e,this.pattern=new Ot(t),this.parser=new Et(t)}get hasLastName(){return this.codiceFiscale?.length>=3}get hasFirstName(){return this.codiceFiscale?.length>=6}get hasBirthYear(){return this.codiceFiscale?.length>=8}get hasBirthDate(){return this.codiceFiscale?.length>=11}get hasGender(){return this.codiceFiscale?.length>=10}get hasBirthPlace(){return this.codiceFiscale?.length>=15}get hasCRC(){return this.codiceFiscale?.length>=16}async matchPersonalInfo(t){return(await this.pattern.codiceFiscale(t)).test(this.codiceFiscale)}async mismatchPersonalInfo(t){return!(!(this.codiceFiscale&&t&&t.lastName&&t.firstName&&(t.date||t.day&&t.month&&t.year)&&t.gender&&t.place)||await this.matchPersonalInfo(t))}matchLastName(t){return this.hasLastName&&this.pattern.lastName(this.codiceFiscale).test(t||"")}mismatchLastName(t){return this.hasLastName&&!!t&&!this.matchLastName(t)}matchFirstName(t){return this.hasFirstName&&this.pattern.firstName(this.codiceFiscale).test(t||"")}mismatchFirstName(t){return this.hasFirstName&&!!t&&!this.matchFirstName(t)}matchBirthDate(e){if(this.hasBirthDate){const i=this.parser.cfToBirthDate(this.codiceFiscale),r=E.parseDate(e);if(i&&r)return t(i).isSame(r,"d")}return!1}mismatchBirthDate(t){return this.hasBirthYear&&!!E.parseDate(t)&&!this.matchBirthDate(t)}matchGender(t){return this.hasGender&&this.pattern.gender(this.codiceFiscale).test(t||"")}mismatchGender(t){return this.hasGender&&!!t&&!this.matchGender(t)}async matchBirthPlace(t){if(this.hasBirthPlace&&t){const e=await this.pattern.place(this.codiceFiscale),i=await this.parser.parsePlace(t);return!!i&&e.test(i?.belfioreCode)}return!1}async mismatchBirthPlace(t){return this.hasBirthPlace&&!!t&&!await this.matchBirthPlace(t)}get errors(){return Promise.all([this.parser.cfToBirthPlace(this.codiceFiscale,!1),this.parser.cfToBirthPlace(this.codiceFiscale,!0)]).then((([t,e])=>({...this.parser.cfToLastName(this.codiceFiscale)?{}:{lastName:"MISSING_OR_INVALID_LAST_NAME"},...this.parser.cfToFirstName(this.codiceFiscale)?{}:{firstName:"MISSING_OR_INVALID_FIRST_NAME"},...this.parser.cfToBirthDate(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DATE"},...this.parser.cfToBirthDay(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DAY"},...this.parser.cfToBirthMonth(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_MONTH"},...this.parser.cfToBirthYear(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_YEAR"},...this.parser.cfToGender(this.codiceFiscale)?{}:{gender:"MISSING_DAY"},...t?{}:{place:"MISSING_OR_INVALID_PLACE"},...e?{}:{place:"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE",date:"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE"},...this.codiceFiscale?.substring(i,16)?.toUpperCase()===ct.checkDigit(this.codiceFiscale)?{}:{crc:"INVALID_CRC_CODE"},...this.hasCRC?{}:{crc:"MISSING_CRC_CODE"}}))).then((t=>Object.keys(t).length?t:null))}get valid(){return Promise.all([this.pattern.codiceFiscale(),this.parser.cfToBirthPlace(this.codiceFiscale)]).then((([t,e])=>!(!this.hasCRC||!t.test(this.codiceFiscale)||this.codiceFiscale?.substring(i,16)?.toUpperCase()!==ct.checkDigit(this.codiceFiscale)||!e)))}get invalid(){return this.valid.then((t=>!!this.codiceFiscale&&!t))}}class gt{belfioreConnector;parser;pattern;constructor(t){this.belfioreConnector=t,this.parser=new Et(t),this.pattern=new Ot(t)}codiceFiscale(t){return new yt(this.belfioreConnector,t)}isLastNameValid(t){return this.pattern.lastName().test(t)}isLastNameInvalid(t){return!!t&&!this.isLastNameValid(t)}isFirstNameValid(t){return this.pattern.firstName().test(t)}isFirstNameInvalid(t){return!!t&&!this.isFirstNameValid(t)}isBirthDateValid(t){return!!E.parseDate(t)}isBirthDateInvalid(t){return!!t&&!this.isBirthDateValid(t)}isGenderValid(t){return this.pattern.gender().test(t)}isGenderInvalid(t){return!!t&&!this.isGenderValid(t)}async isBirthPlaceValid(t){const e=await this.parser.parsePlace(t);return!!e&&!!await this.belfioreConnector.findByCode(e.belfioreCode)}async isBirthPlaceInvalid(t){return!!t&&!await this.isBirthPlaceValid(t)}async birthDatePlaceMatch(e,i){const r=await this.parser.parsePlace(i);return this.isBirthDateValid(e)&&!!r&&(!!await this.belfioreConnector.from(e).findByCode(r.belfioreCode)||!t(E.parseDate(e)).isAfter(ut,"day"))}async birthDatePlaceMismatch(t,e){const i=await this.parser.parsePlace(e);return this.isBirthDateValid(t)&&!!i&&!await this.birthDatePlaceMatch(t,e)}async birthPlaceDateMatch(t,e){return await this.birthDatePlaceMatch(e,t)}async birthPlaceDateMismatch(t,e){return await this.birthDatePlaceMismatch(e,t)}}class Lt{belfioreConnector;validator;parser;pattern;constructor(t){this.belfioreConnector=t,this.validator=new gt(t),this.parser=new Et(t),this.pattern=new Ot(t)}}export{lt as BirthMonth,yt as CFMismatchValidator,ot as CRC,ct as CheckDigitizer,Lt as CodiceFiscaleUtils,A as DATE_MATCHER,E as DateUtils,$t as Gender,at as Matcher,ft as Omocodes,Et as Parser,Ot as Pattern,at as VALIDATOR,gt as Validator,Lt as default}; +import t from"dayjs";import e from"@marketto/diacritic-remover";const i=15,r="[12][0-9]{3}",s="0[1-9]|1[0-2]",a="0[469]|11",n="0[13578]|1[02]",o=`(?:${s})-(?:0[1-9]|[12]\\d)|(?:${a})-30|(?:${n})-3[01]`,c="[01]\\d|2[0-3]",h="[0-5]\\d",l=h,d="\\d{3}",T=`Z|[-+](?:${c})(?::?${h})?`,f=`(?:${c})(?::${h}(?::${l}(\\.${d})?)?(?:${T})?)?`,$=`${r}-(?:${o})(?:T${f})?`,u=`${r}(?:-(?:(?:${s})|(?:${o})(?:T${f})?))?`;var A=Object.freeze({__proto__:null,DAY:"0[1-9]|[12][0-9]|3[01]",DAYS_30_MONTHS:a,DAYS_31_MONTHS:n,HOURS:c,ISO8601_DATE_TIME:u,ISO8601_SHORT_DATE:$,LEAP_MONTH:"02",MILLISECONDS:d,MINUTES:h,MONTH:s,MONTH_DAY:o,SECONDS:l,TIME:f,TIMEZONE:T,YEAR:r});class E{static parseDate(e){if(!(e instanceof Date||"string"==typeof e&&new RegExp(`^(?:${u})$`).test(e)||Array.isArray(e)&&e.length&&!e.some((t=>"number"!=typeof t||isNaN(t)))))return null;try{let i;if(Array.isArray(e)){const[r,s=0,a=1]=e;if(!(s>=0&&s<=11&&a>0&&a<=31))return null;i=t(Date.UTC(r,s||0,a||1))}else i=t(e);return i.isValid()?i.toDate():null}catch(t){return null}}static ymdToDate(t,e,i){return this.parseDate([t,e,i])}}const _="B-DF-HJ-NP-TV-Z",p="AEIOU",C="\\dLMNP-V",m="1-9MNP-V",R="0L",D="A-EHLMPR-T",N="DHPS",M="ACELMRT",I="A-M",S="Z",y=`[A-Z][${p}][${p}X]|[${p}]X{2}|[${_}]{2}[A-Z]`,O=y,g=`(?:${y}){2}`,L=`[${C}]{2}`,P="[02468LNQSU][048LQU]|[13579MPRTV][26NS]",F=`[${D}]`,w="[26NS]",b="[37PT]",B=`[${R}4Q][${m}]|[1256MNRS][${C}]`,v=`[${b}][${R}]`,H=`[${b}][${R}1M]`,Y=`(?:${B}|${b}[${R}1M])`,V=`(?:[${R}][${m}]|[12MN][${C}]|[3P][${R}1M])`,G=`(?:[4Q][${m}]|[56RS][${C}]|[7T][${R}1M])`,U=`${F}(?:${B})|[${N}]${v}|[${M}]${H}`,j=`${L}(?:${F}(?:[${R}4Q][${m}]|[15MR][${C}]|${w}[0-8LMNP-U])|[${N}]${b}[${R}]|[${M}]${b}[${R}1M]|[${N}${M}]${w}[9V])|(?:${P})B${w}[9V]`,x=`${L}(?:${F}(?:[${R}][${m}]|[1M][${C}]|[2N][0-8LMNP-U])|[${N}][3P][${R}]|[${M}][3P][${R}1M]|[${N}${M}][2N][9V])|(?:${P})B[2N][9V]`,Z=`${L}(?:${F}(?:[4Q][${m}]|[5R][${C}]|[6S][0-8LMNP-U])|[${N}][7T][${R}]|[${M}][7T][${R}1M]|[${N}${M}][6S][9V])|(?:${P})B[6S][9V]`,k=`[${I}](?:[${m}][${C}]{2}|[${R}](?:[${m}][${C}]|[${R}][${m}]))`,X=`${S}[${m}][${C}]{2}`,Q=`(?:[${I}${S}][${m}][${C}]{2})|(?:[${I}][${R}](?:[${m}][${C}]|[${R}][${m}]))`,J="[A-Z]",z=`${g}(?:${j})(?:${Q})${J}`,K=`[A-Z][${p}]?|[${_}]{1,2}`,W=`(?:${K})|(?:(?:${y})(?:${K})?)`,q=`[${C}]`,tt=`${F}[${R}12456MNQRS]?|[${N}${M}]${b}`,et=`${q}|(?:${L}(?:${tt})?)`,it=`[${I}${S}](?:[${m}][${C}]?)?|[${S}](?:[${R}][${C}]?)?`,rt=`${W}|(?:${g}(?:(?:${et})|(?:${j})(?:(?:${it})|(?:${Q})${J}?)?)?)?`;var st,at=Object.freeze({__proto__:null,BELFIORE_CODE_MATCHER:Q,CF_FULL_NAME_MATCHER:g,CF_NAME_MATCHER:y,CF_SURNAME_MATCHER:O,CHECK_DIGIT:J,CITY_CODE_LIST:I,CITY_CODE_MATCHER:k,CODICE_FISCALE:z,CONSONANT_LIST:_,COUNTRY_CODE_LIST:S,COUNTRY_CODE_MATCHER:X,DAY_29_MATCHER:B,DAY_2X_MATCHER:w,DAY_30_MATCHER:v,DAY_31_MATCHER:H,DAY_3X_MATCHER:b,DAY_MATCHER:Y,FEMALE_DAY_MATCHER:G,FEMALE_FULL_DATE_MATCHER:Z,FULL_DATE_MATCHER:j,LEAP_YEAR_MATCHER:P,MALE_DAY_MATCHER:V,MALE_FULL_DATE_MATCHER:x,MONTH_30DAYS_LIST:N,MONTH_31DAYS_LIST:M,MONTH_DAY_MATCHER:U,MONTH_LIST:D,MONTH_MATCHER:F,OMOCODE_NON_ZERO_NUMBER_LIST:m,OMOCODE_NUMBER_LIST:C,OMOCODE_ZERO_LIST:R,PARTIAL_BELFIORE_CODE_MATCHER:it,PARTIAL_CF:rt,PARTIAL_CF_FULL_NAME:W,PARTIAL_CF_NAME_MATCHER:K,PARTIAL_FULL_DATE:et,PARTIAL_MONTH_DAY:tt,PARTIAL_YEAR:q,VOWEL_LIST:p,YEAR_MATCHER:L});!function(t){t[t.B=0]="B",t[t.A=1]="A",t[t.K=2]="K",t[t.P=3]="P",t[t.L=4]="L",t[t.C=5]="C",t[t.Q=6]="Q",t[t.D=7]="D",t[t.R=8]="R",t[t.E=9]="E",t[t.V=10]="V",t[t.O=11]="O",t[t.S=12]="S",t[t.F=13]="F",t[t.T=14]="T",t[t.G=15]="G",t[t.U=16]="U",t[t.H=17]="H",t[t.M=18]="M",t[t.I=19]="I",t[t.N=20]="N",t[t.J=21]="J",t[t.W=22]="W",t[t.Z=23]="Z",t[t.Y=24]="Y",t[t.X=25]="X"}(st||(st={}));var nt,ot=st;class ct{static checkDigit(t){if("string"==typeof t&&new RegExp(rt).test(t)){const e=t.substr(0,i);let r=0;for(const t of this.evaluateChar(e))r+=t;return String.fromCharCode(r%this.CRC_MOD+this.CHAR_OFFSET)}return null}static evaluateChar(t=""){return(e=this.evaluateCharGenerator(t))[Symbol.iterator]=()=>e,e;var e}static CHAR_OFFSET=65;static CRC_MOD=26;static*evaluateCharGenerator(t=""){if("string"==typeof t&&t.length)for(let e=0;e0&&e<=this.MAX_MONTH_DAY?e:null}static getGender(t){return this.toArray().find((e=>t>=Tt[e]&&t<=Tt[e]+this.MAX_MONTH_DAY))||null}static genderizeDay(t,e){return t+Tt[e]}static toArray(){return["M","F"]}static MAX_MONTH_DAY=31}const ut=new Date("1973-09-29"),At=new e;class Et{belfioreConnector;constructor(t){this.belfioreConnector=t}OMOCODE_BITMAP=30400;cfDeomocode(t){if(t&&t.length<=6)return t;const e=this.partialCfDeomocode(t);if(e.length=0;i--)if(2**i&this.OMOCODE_BITMAP){if(!!(e&2**s)!==isNaN(parseInt(r[i],10))){const t=r[i].toUpperCase();r[i]=ft[t]}s++}const s=r[15];if(s){const t=r.slice(0,i).join("");r[15]=this.appyCaseToChar(ct.checkDigit(t)||"",s)}return r.join("")}cfOmocodeId(t){const e=t.split("").filter(((t,e)=>2**e&this.OMOCODE_BITMAP)).map((t=>/^[a-z]$/i.test(At[t])?1:0)).join("");return parseInt(e,2)}cfToLastName(t){const e=t?.substring(0,3);if("string"!=typeof t||3!==e.length||!new RegExp(`^(?:${O})`,"iu").test(e))return null;const i=t.substring(0,3),[r=""]=i.match(new RegExp(`^[${_}]{1,3}`,"ig"))||[],[s=""]=i.match(new RegExp(`[${p}]{1,3}`,"ig"))||[],a=r.length+s.length;if(a<2||a<3&&"X"!==i[2].toUpperCase())return null;switch(r.length){case 3:return(r+s).split("").join(this.JOLLY_CHAR)+this.JOLLY_CHAR;case 2:return`${r[0]}${s[0]}*${r[1]}${this.JOLLY_CHAR}`;case 1:return`${r[0]}${s}${this.JOLLY_CHAR}`;default:return`${s}${3===s.length?this.JOLLY_CHAR:""}`}}cfToFirstName(t){const e=t?.substring(3,6);return"string"==typeof t&&3===e?.length&&new RegExp(`^(${y})$`,"iu").test(e)?this.cfToLastName(e):null}cfToGender(t){if("string"!=typeof t||t.length<10)return null;const e=t.substring(9,10),i=10*parseInt(this.partialCfDeomocode(e,9),10);return $t.getGender(i)}cfToBirthYear(e){if("string"!=typeof e||e.length<8)return null;const i=e.substring(6,8),r=parseInt(this.partialCfDeomocode(i,6),10);if(isNaN(r))return null;const s=parseInt(t().format("YY"),10),a=100*(r>s?1:0);return t().subtract(s-r+a,"years").year()}cfToBirthMonth(t){if("string"!=typeof t||t.length<9)return null;const e=t.substring(8,9).toUpperCase(),i=lt[e];return"number"!=typeof i||i<0||i>11?null:i}cfToBirthDay(t){if("string"!=typeof t||t.length<11)return null;const e=t.substring(9,11),i=parseInt(this.partialCfDeomocode(e,9),10);return isNaN(i)?null:$t.getDay(i)}cfToBirthDate(t){const e=this.cfToBirthDay(t);if(!e)return null;const i=this.cfToBirthMonth(t);if("number"!=typeof i)return null;const r=this.cfToBirthYear(t);return E.ymdToDate(r,i,e)}async cfToBirthPlace(e,i=!0){if("string"!=typeof e||e.length<15)return null;const r=e.substring(11,15),s=this.partialCfDeomocode(r,11),a=await this.belfioreConnector.findByCode(s);if(!a)return null;const{creationDate:n,expirationDate:o}=a;if((n||o)&&i){const i=this.cfToBirthDate(e),r=t(ut).add(5,"years").isBefore(i,"day");if(i&&r){if(!((!o||t(i).isBefore(o,"day"))&&(!n||t(i).isAfter(n,"day"))))return null}}return a}async cfDecode(t){const e=this.cfToBirthYear(t)||void 0,i=this.cfToBirthMonth(t)??void 0,r=this.cfToBirthDay(t)||void 0,s=E.ymdToDate(e,i,r)||void 0,a=await this.cfToBirthPlace(t),n={firstName:this.cfToFirstName(t)||void 0,lastName:this.cfToLastName(t)||void 0,day:r,month:i,year:e,date:s,gender:this.cfToGender(t)||void 0,place:a||void 0,omocodeId:this.cfOmocodeId(t)};return e&&i&&r&&(n.date=new Date(Date.UTC(e,i,r))),n}lastNameToCf(t){if(!t||(t||"").trim().length<2)return null;if(!/^[A-Z ']{1,32}$/iu.test(At.replace(t)))return null;const e=(this.charExtractor(t,_)+this.charExtractor(t,p)).padEnd(3,"X").substring(0,3);return e.length<3?null:e.toUpperCase()}firstNameToCf(t){if(!t||(t||"").trim().length<2)return null;const e=this.charExtractor(t,_);return e.length>=4?(e[0]+e.substring(2,4)).toUpperCase():this.lastNameToCf(t)}yearToCf(t){let e;return e="string"==typeof t?parseInt(t,10):t,"number"!=typeof e||isNaN(e)||!(e>=1900||e<100)?null:`0${e}`.substr(-2)}monthToCf(t){return t<0||t>11?null:lt[t]||null}dayGenderToCf(t,e){if(t<1||t>31)return null;const i=Tt[e];return"number"!=typeof i?null:`0${t+i}`.substr(-2)}yearMonthDayToDate(e,i=0,r=1){if(!e||e<1861||[i,r].some((t=>"number"!=typeof t)))return null;const s=t(Date.UTC(e,i||0,r||1));return s.isValid()&&s.year()===e&&s.month()===i&&s.date()===r?s.toDate():null}async parsePlace(t){let e;return t?("object"==typeof t&&t.belfioreCode?e=await this.belfioreConnector.findByCode(t.belfioreCode):"string"==typeof t&&(e=await this.belfioreConnector.findByCode(t)||await this.belfioreConnector.findByName(t)),e||null):null}dateGenderToCf(t,e){const i=E.parseDate(t);if(!i)return null;return`${this.yearToCf(i.getFullYear())}${this.monthToCf(i.getMonth())}${this.dayGenderToCf(i.getDate(),e)}`}async placeToCf(t,e,i){const r=E.parseDate(t);let s,a;if(r||"string"!=typeof t){if(!e)return null;s=e,a=i}else s=t,a=e;let n=this.belfioreConnector;if(a&&(n=n.byProvince(a)),r&&n&&(n=n.from(r)),n){const t=await new Et(n).parsePlace(s);if(t)return t.belfioreCode}return null}async encodeCf({lastName:t,firstName:e,year:i,month:r,day:s,date:a,gender:n,place:o,omocodeId:c=0}){const h=E.parseDate(a)||this.yearMonthDayToDate(i,r,s);if(!(h&&t&&e&&n&&o))return null;const l=[async()=>this.lastNameToCf(t),async()=>this.firstNameToCf(e),async()=>this.dateGenderToCf(h,n),async()=>await this.placeToCf(h,o?.belfioreCode||o)];let d="";for(const t of l){const e=await t();if(!e)return null;d+=e}return this.cfOmocode(d,c)}JOLLY_CHAR="*";checkBitmap(t){return!!(2**t&this.OMOCODE_BITMAP)}charOmocode(t,e){return/^[A-Z]$/giu.test(t)&&this.checkBitmap(e)?ft[t.toUpperCase()]:t}charExtractor(t,e){const i=new RegExp(`[${e}]{1,24}`,"ig");return(At.replace(t).trim().match(i)||[]).join("")}partialCfDeomocode(t,e=0){return t.replace(/[\dA-Z]/giu,((t,i)=>this.charOmocode(t,i+e)))}appyCaseToChar(t,e){if(t&&e){const i=e[0]===e[0].toUpperCase(),r=e[0]===e[0].toLowerCase();if(i&&!r)return t[0].toUpperCase();if(!i&&r)return t[0].toLowerCase()}return t[0]}}const _t="Provided lastName is not valid, only letters, diacritics and apostrophe allowed",pt="Provided name is not valid, only letters, diacritics and apostrophe allowed",Ct="Provided day is not valid",mt="Provided gender is not valid",Rt="Provided day and/or gender are not valid",Dt="Provided year is not valid, only 2 or 4 digit numbers are allowed",Nt="Provided date is not valid";var Mt=Object.freeze({__proto__:null,INVALID_DATE:Nt,INVALID_DAY:Ct,INVALID_DAY_OR_GENDER:Rt,INVALID_GENDER:mt,INVALID_NAME:pt,INVALID_PLACE_NAME:"Proviced City/Country name is not valid",INVALID_SURNAME:_t,INVALID_YEAR:Dt});class It extends Error{constructor(t){super((Object.entries(Mt).find((([e])=>e===t))||[])[1]||t)}}const St=new e;class yt{belfioreConnector;parser;constructor(t){this.belfioreConnector=t,this.parser=new Et(t)}cfLastName(t){let e=O;if(t){if(!this.lastName().test(t))throw new It(_t);e=this.parser.lastNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfFirstName(t){let e=y;if(t){if(!this.lastName().test(t))throw new It(pt);e=this.parser.firstNameToCf(t)||e}return this.isolatedInsensitiveTailor(e)}cfYear(t){let e=L;if(t){const i=this.parser.yearToCf(t);if(!i)throw new It(Dt);e=this.deomocode(i)}return this.isolatedInsensitiveTailor(e)}cfMonth(t){let e=F;return t&&(e=this.parser.monthToCf(t)||e),this.isolatedInsensitiveTailor(e)}cfDay(t){let e=Y;if(t){const i=this.parser.dayGenderToCf(t,"M"),r=this.parser.dayGenderToCf(t,"F");if(!i||!r)throw new It(Ct);e=`(?:${this.deomocode(i)})|(?:${this.deomocode(r)})`}return this.isolatedInsensitiveTailor(e)}cfDayGender(t,e){if(!e)return this.cfDay(t);let i;if(t){const r=this.parser.dayGenderToCf(t,e);if(!r)throw new It(Rt);i=this.deomocode(r)}else switch(e){case"M":i=V;break;case"F":i=G;break;default:throw new It(mt)}return this.isolatedInsensitiveTailor(i)}cfDateGender(t,e){if(t&&!E.parseDate(t))throw new It(Nt);if(e&&!$t.toArray().includes(e))throw new It(mt);let i=j;if(t){const r=e&&this.parser.dateGenderToCf(t,e);if(r)i=this.deomocode(r);else{const e=e=>{const i=this.parser.dateGenderToCf(t,e);if(!i)throw new It(Nt);return i&&this.deomocode(i)};i=`(?:${$t.toArray().map(e).join("|")})`}}else"M"===e?i=x:"F"===e&&(i=Z);return this.isolatedInsensitiveTailor(i)}async cfPlace(t,e){let i=Q;if(t){const r=E.parseDate(t);if(r&&e){const t=e,s=await this.parser.placeToCf(r,t);i=this.deomocode(s||"")}else if(!r&&"string"==typeof t){const e=t,r=await this.parser.placeToCf(e);i=this.deomocode(r||"")}}return this.isolatedInsensitiveTailor(i)}async codiceFiscale(t){let e=z;if(t){const i=await this.parser.encodeCf(t);if(i)e=this.deomocode(i);else{const{lastName:i,firstName:r,year:s,month:a,day:n,date:o,gender:c,place:h}=t;if(i||r||s||a||n||o||c||h){let t=null;o?t=E.parseDate(o):s&&(t=this.parser.yearMonthDayToDate(s,a,n));const l=[async()=>this.cfLastName(i),async()=>this.cfFirstName(r),async()=>this.cfDateGender(t,c),async()=>await this.cfPlace(t,h?.belfioreCode||h)];e="";for(const t of l){const i=(await t()).toString(),r=i.match(/\^(.{1,256})\$/),s=r&&r[1];if(!s)throw new Error(`Unable to handle [${i}]`);e+=`(?:${s})`}e+=J}}}return this.isolatedInsensitiveTailor(e)}LETTER_SET=`[A-Z${St.matcherBy(/^[A-Z]$/iu)}]`;SEPARATOR_SET="(?:'?\\s{0,4})";lastName(t){let e=`${this.LETTER_SET}{1,24}`;if(t&&/^[A-Z]{1,3}/iu.test(t)){const i=t.substr(0,3),r=t=>t.split("").map((t=>`[${St.insensitiveMatcher[t]}]`)),[s,a]=[`^[${_}]{1,3}`,`[${p}]{1,3}`].map((t=>r((i.match(new RegExp(t,"ig"))||[])[0]||""))),n=`[${p+St.matcherBy(new RegExp(`^[${p}]$`,"ui"))}]`,o=`(?:${n}${this.SEPARATOR_SET}){0,24}`,c=`(?:${this.SEPARATOR_SET}${o}${n})?`;switch(s.length){case 3:{const t=o;e=t+s.join(`${this.SEPARATOR_SET}${t}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;break}case 2:e=`(?:${[`${a[0]}${o}${this.SEPARATOR_SET}${s[0]}${o}${s[1]}`,`${s[0]}${this.SEPARATOR_SET}`+a.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${o}${s[1]}`,s.join(`${this.SEPARATOR_SET}`)+`${this.SEPARATOR_SET}${a[0]}`].join("|")})${c}`;break;case 1:e=`(?:${[a.slice(0,2).join(`${this.SEPARATOR_SET}`)+o+s.join(`${this.SEPARATOR_SET}`),`${a[0]}${this.SEPARATOR_SET}`+s.join(`${this.SEPARATOR_SET}`)+a[1],[s[0],...a.slice(0,2)].join(`${this.SEPARATOR_SET}`)].join("|")})${c}`;break;default:e=`${a.join(`${this.SEPARATOR_SET}`)}${c}`}if(a?.length+s?.length<3)return this.isolatedInsensitiveTailor(`\\s{0,4}(${e})\\s{0,4}`)}return this.isolatedInsensitiveTailor(`\\s{0,4}((?:${e})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\s{0,4}`)}firstName(t){if(t&&new RegExp(`^[A-Z]{3}[${_}]{3}`,"iu").test(t)){const e=((t.substr(3,3).match(new RegExp(`^[${_}]{1,3}`,"ig"))||[])[0]||"").split("").map((t=>`[${St.insensitiveMatcher[t]}]`)),[i,r]=[p,_].map((t=>t+St.matcherBy(new RegExp(`^[${t}]$`,"ui")))),s=`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}${e[0]}${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${r}]${this.SEPARATOR_SET}(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24})?`+e.slice(1,3).join(`(?:[${i}]{1,24}${this.SEPARATOR_SET}){0,24}`)+`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;return this.isolatedInsensitiveTailor(s)}return this.lastName((t||"").substr(3,3))}date(e){let i=u;if(e){const r=this.parser.cfToBirthDate(e);if(r){const e=r.toJSON();if(t().diff(t(r),"y")<50){const t=parseInt(e.substr(0,2),10);i=`(?:${[t-1,t].map((t=>t.toString().padStart(2,"0"))).join("|")})`+e.substr(2,8)}else i=e.substr(0,10)}}return this.isolatedInsensitiveTailor(`${i}(?:T${f}(?:${T})?)?`)}gender(t){const e=t&&this.parser.cfToGender(t)||`[${$t.toArray().join("")}]`;return this.isolatedInsensitiveTailor(e)}async place(t){let e=".{1,32}";const i=t&&await this.parser.cfToBirthPlace(t);if(i){e=`(?:(?:${i.name.replace(/./gu,(t=>St[t]===t?t:`[${t}${St[t]}]`))})|${i.belfioreCode})`}return this.isolatedInsensitiveTailor(e)}deomocode(t){return t.replace(/\d/gu,(t=>`[${t}${ft[t]}]`))}isolatedInsensitiveTailor(t){return new RegExp(`^(?:${t})$`,"iu")}}class Ot{codiceFiscale;pattern;parser;constructor(t,e){this.codiceFiscale=e,this.pattern=new yt(t),this.parser=new Et(t)}get hasLastName(){return this.codiceFiscale?.length>=3}get hasFirstName(){return this.codiceFiscale?.length>=6}get hasBirthYear(){return this.codiceFiscale?.length>=8}get hasBirthDate(){return this.codiceFiscale?.length>=11}get hasGender(){return this.codiceFiscale?.length>=10}get hasBirthPlace(){return this.codiceFiscale?.length>=15}get hasCRC(){return this.codiceFiscale?.length>=16}async matchPersonalInfo(t){return(await this.pattern.codiceFiscale(t)).test(this.codiceFiscale)}async mismatchPersonalInfo(t){return!(!(this.codiceFiscale&&t&&t.lastName&&t.firstName&&(t.date||t.day&&"number"==typeof t.month&&t.year)&&t.gender&&t.place)||await this.matchPersonalInfo(t))}matchLastName(t){return this.hasLastName&&this.pattern.lastName(this.codiceFiscale).test(t||"")}mismatchLastName(t){return this.hasLastName&&!!t&&!this.matchLastName(t)}matchFirstName(t){return this.hasFirstName&&this.pattern.firstName(this.codiceFiscale).test(t||"")}mismatchFirstName(t){return this.hasFirstName&&!!t&&!this.matchFirstName(t)}matchBirthDate(e){if(this.hasBirthDate){const i=this.parser.cfToBirthDate(this.codiceFiscale),r=E.parseDate(e);if(i&&r)return t(i).isSame(r,"d")}return!1}mismatchBirthDate(t){return this.hasBirthYear&&!!E.parseDate(t)&&!this.matchBirthDate(t)}matchGender(t){return this.hasGender&&this.pattern.gender(this.codiceFiscale).test(t||"")}mismatchGender(t){return this.hasGender&&!!t&&!this.matchGender(t)}async matchBirthPlace(t){if(this.hasBirthPlace&&t){const e=await this.pattern.place(this.codiceFiscale),i=await this.parser.parsePlace(t);return!!i&&e.test(i?.belfioreCode)}return!1}async mismatchBirthPlace(t){return this.hasBirthPlace&&!!t&&!await this.matchBirthPlace(t)}get errors(){return Promise.all([this.parser.cfToBirthPlace(this.codiceFiscale,!1),this.parser.cfToBirthPlace(this.codiceFiscale,!0)]).then((([t,e])=>({...this.parser.cfToLastName(this.codiceFiscale)?{}:{lastName:"MISSING_OR_INVALID_LAST_NAME"},...this.parser.cfToFirstName(this.codiceFiscale)?{}:{firstName:"MISSING_OR_INVALID_FIRST_NAME"},...this.parser.cfToBirthDate(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DATE"},...this.parser.cfToBirthDay(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_DAY"},..."number"==typeof this.parser.cfToBirthMonth(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_MONTH"},...this.parser.cfToBirthYear(this.codiceFiscale)?{}:{date:"MISSING_OR_INVALID_YEAR"},...this.parser.cfToGender(this.codiceFiscale)?{}:{gender:"MISSING_DAY"},...t?{}:{place:"MISSING_OR_INVALID_PLACE"},...e?{}:{place:"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE",date:"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE"},...this.codiceFiscale?.substring(i,16)?.toUpperCase()===ct.checkDigit(this.codiceFiscale)?{}:{crc:"INVALID_CRC_CODE"},...this.hasCRC?{}:{crc:"MISSING_CRC_CODE"}}))).then((t=>Object.keys(t).length?t:null))}get valid(){return Promise.all([this.pattern.codiceFiscale(),this.parser.cfToBirthPlace(this.codiceFiscale)]).then((([t,e])=>!(!this.hasCRC||!t.test(this.codiceFiscale)||this.codiceFiscale?.substring(i,16)?.toUpperCase()!==ct.checkDigit(this.codiceFiscale)||!e)))}get invalid(){return this.valid.then((t=>!!this.codiceFiscale&&!t))}}class gt{belfioreConnector;parser;pattern;constructor(t){this.belfioreConnector=t,this.parser=new Et(t),this.pattern=new yt(t)}codiceFiscale(t){return new Ot(this.belfioreConnector,t)}isLastNameValid(t){return this.pattern.lastName().test(t)}isLastNameInvalid(t){return!!t&&!this.isLastNameValid(t)}isFirstNameValid(t){return this.pattern.firstName().test(t)}isFirstNameInvalid(t){return!!t&&!this.isFirstNameValid(t)}isBirthDateValid(t){return!!E.parseDate(t)}isBirthDateInvalid(t){return!!t&&!this.isBirthDateValid(t)}isGenderValid(t){return this.pattern.gender().test(t)}isGenderInvalid(t){return!!t&&!this.isGenderValid(t)}async isBirthPlaceValid(t){const e=await this.parser.parsePlace(t);return!!e&&!!await this.belfioreConnector.findByCode(e.belfioreCode)}async isBirthPlaceInvalid(t){return!!t&&!await this.isBirthPlaceValid(t)}async birthDatePlaceMatch(e,i){const r=await this.parser.parsePlace(i);return this.isBirthDateValid(e)&&!!r&&(!!await this.belfioreConnector.from(e).findByCode(r.belfioreCode)||!t(E.parseDate(e)).isAfter(ut,"day"))}async birthDatePlaceMismatch(t,e){const i=await this.parser.parsePlace(e);return this.isBirthDateValid(t)&&!!i&&!await this.birthDatePlaceMatch(t,e)}async birthPlaceDateMatch(t,e){return await this.birthDatePlaceMatch(e,t)}async birthPlaceDateMismatch(t,e){return await this.birthDatePlaceMismatch(e,t)}}class Lt{belfioreConnector;validator;parser;pattern;constructor(t){this.belfioreConnector=t,this.validator=new gt(t),this.parser=new Et(t),this.pattern=new yt(t)}}export{lt as BirthMonth,Ot as CFMismatchValidator,ot as CRC,ct as CheckDigitizer,Lt as CodiceFiscaleUtils,A as DATE_MATCHER,E as DateUtils,$t as Gender,at as Matcher,ft as Omocodes,Et as Parser,yt as Pattern,at as VALIDATOR,gt as Validator,Lt as default}; //# sourceMappingURL=index.mjs.map diff --git a/dist/index.mjs.map b/dist/index.mjs.map index 82ee25d..007c6da 100644 --- a/dist/index.mjs.map +++ b/dist/index.mjs.map @@ -1 +1 @@ -{"version":3,"file":"index.mjs","sources":["../src/const/cf-offsets.const.ts","../src/date-utils/date-matcher.const.ts","../src/date-utils/date-utils.class.ts","../src/const/matcher.const.ts","../src/enums/crc.enum.ts","../src/enums/birth-month.enum.ts","../src/classes/check-digitizer.class.ts","../src/functions/generator-wrapper.function.ts","../src/enums/gender-weight.enum.ts","../src/enums/omocodes.enum.ts","../src/classes/gender.class.ts","../src/const/logic.const.ts","../src/classes/parser.class.ts","../src/const/error-messages.const.ts","../src/classes/cfu-error.class.ts","../src/classes/pattern.class.ts","../src/classes/cf-mismatch-validator.class.ts","../src/classes/validator.class.ts","../src/index.ts"],"sourcesContent":["export const LASTNAME_OFFSET = 0;\r\nexport const LASTNAME_SIZE = 3;\r\nexport const FIRSTNAME_OFFSET = 3;\r\nexport const FIRSTNAME_SIZE = 3;\r\nexport const YEAR_OFFSET = 6;\r\nexport const YEAR_SIZE = 2;\r\nexport const MONTH_OFFSET = 8;\r\nexport const MONTH_SIZE = 1;\r\nexport const DAY_OFFSET = 9;\r\nexport const DAY_SIZE = 2;\r\nexport const DATE_OFFSET = YEAR_OFFSET;\r\nexport const DATE_SIZE = YEAR_SIZE + MONTH_SIZE + DAY_SIZE;\r\nexport const GENDER_OFFSET = DAY_OFFSET;\r\nexport const GENDER_SIZE = 1;\r\nexport const PLACE_OFFSET = 11;\r\nexport const PLACE_SIZE = 4;\r\nexport const CRC_OFFSET = 15;\r\nexport const CRC_SIZE = 1;\r\nexport const CF_SIZE =\r\n\tLASTNAME_SIZE + FIRSTNAME_SIZE + DATE_SIZE + PLACE_SIZE + CRC_SIZE;\r\n","const YEAR: string = \"[12][0-9]{3}\";\r\nconst MONTH: string = \"0[1-9]|1[0-2]\";\r\nconst DAY: string = \"0[1-9]|[12][0-9]|3[01]\";\r\nconst LEAP_MONTH: string = \"02\";\r\nconst DAYS_30_MONTHS: string = \"0[469]|11\";\r\nconst DAYS_31_MONTHS: string = \"0[13578]|1[02]\";\r\nconst MONTH_DAY: string = `(?:${MONTH})-(?:0[1-9]|[12]\\\\d)|(?:${DAYS_30_MONTHS})-30|(?:${DAYS_31_MONTHS})-3[01]`;\r\nconst HOURS: string = \"[01]\\\\d|2[0-3]\";\r\nconst MINUTES: string = \"[0-5]\\\\d\";\r\nconst SECONDS: string = MINUTES;\r\nconst MILLISECONDS: string = \"\\\\d{3}\";\r\nconst TIMEZONE: string = `Z|[-+](?:${HOURS})(?::?${MINUTES})?`;\r\nconst TIME: string = `(?:${HOURS})(?::${MINUTES}(?::${SECONDS}(\\\\.${MILLISECONDS})?)?(?:${TIMEZONE})?)?`;\r\nconst ISO8601_SHORT_DATE: string = `${YEAR}-(?:${MONTH_DAY})(?:T${TIME})?`;\r\nconst ISO8601_DATE_TIME: string = `${YEAR}(?:-(?:(?:${MONTH})|(?:${MONTH_DAY})(?:T${TIME})?))?`;\r\n\r\n/**\r\n * Date Matcher consts\r\n * @property {Object} DATE_VALIDATOR\r\n * @property {string} DATE_VALIDATOR.YEAR Matcher for ISO8601 4 digits year (limited to 1000-2999)\r\n * @property {string} DATE_VALIDATOR.MONTH Matcher for ISO8601 2 digits month (01-12)\r\n * @property {string} DATE_VALIDATOR.DAY Matcher for ISO8601 2 digits day (01-31)\r\n * @property {string} DATE_VALIDATOR.LEAP_MONTH Matcher for ISO8601 2 digits leap month\r\n * @property {string} DATE_VALIDATOR.DAYS_30_MONTHS Matcher for ISO8601 2 digits 30 days month\r\n * @property {string} DATE_VALIDATOR.DAYS_31_MONTHS Matcher for ISO8601 2 digits 31 days month\r\n * @property {string} DATE_VALIDATOR.MONTH_DAY Matcher for ISO8601 2 + 2 digits (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.ISO8601_SHORT_DATE Matcher for ISO8601 date: 4+2+2 digits year + (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.HOURS Matcher for ISO8601 2 digits hours (00-23)\r\n * @property {string} DATE_VALIDATOR.MINUTES Matcher for ISO8601 2 digits minutes (00-59)\r\n * @property {string} DATE_VALIDATOR.SECONDS Matcher for ISO8601 2 digits seconds (00-59)\r\n * @property {string} DATE_VALIDATOR.MILLISECONDS Matcher for ISO8601 3 digits milliseconds (000-999)\r\n * @property {string} DATE_VALIDATOR.TIMEZONE Matcher for ISO8601 timezone (Z or ±## or ±##:## or ±####)\r\n * @property {string} DATE_VALIDATOR.TIME Matcher for ISO8601 for time (T## , T##:## , T##:##:## , T##:##:##.###)\r\n * @property {string} DATE_VALIDATOR.ISO8601_DATE_TIME Matcher for ISO8601 date/time format\r\n */\r\nexport {\r\n\tDAY,\r\n\tDAYS_30_MONTHS,\r\n\tDAYS_31_MONTHS,\r\n\tHOURS,\r\n\tISO8601_DATE_TIME,\r\n\tISO8601_SHORT_DATE,\r\n\tLEAP_MONTH,\r\n\tMILLISECONDS,\r\n\tMINUTES,\r\n\tMONTH,\r\n\tMONTH_DAY,\r\n\tSECONDS,\r\n\tTIME,\r\n\tTIMEZONE,\r\n\tYEAR,\r\n};\r\n","import dayjs, { Dayjs } from \"dayjs\";\r\nimport type DateDay from \"./date-day.type\";\r\nimport { ISO8601_DATE_TIME } from \"./date-matcher.const\";\r\nimport type DateMonth from \"./date-month.type\";\r\nimport type MultiFormatDate from \"./multi-format-date.type\";\r\nexport default class DateUtils {\r\n\t/**\r\n\t * Parse a Dated and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @returns Parsed Date or null if not valid\r\n\t */\r\n\tpublic static parseDate(date?: MultiFormatDate | null): Date | null {\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\tdate instanceof Date ||\r\n\t\t\t\t(typeof date === \"string\" &&\r\n\t\t\t\t\tnew RegExp(`^(?:${ISO8601_DATE_TIME})$`).test(date)) ||\r\n\t\t\t\t(Array.isArray(date) &&\r\n\t\t\t\t\tdate.length &&\r\n\t\t\t\t\t!date.some((value) => typeof value !== \"number\" || isNaN(value)))\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tlet parsedDate: Dayjs;\r\n\t\t\tif (Array.isArray(date)) {\r\n\t\t\t\tconst [year, month = 0, day = 1] = date;\r\n\t\t\t\tif (month >= 0 && month <= 11 && day > 0 && day <= 31) {\r\n\t\t\t\t\tparsedDate = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tparsedDate = dayjs(date);\r\n\t\t\t}\r\n\t\t\treturn parsedDate.isValid() ? parsedDate.toDate() : null;\r\n\t\t} catch (err) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static ymdToDate(\r\n\t\tyear?: number | null,\r\n\t\tmonth?: DateMonth | null,\r\n\t\tday?: DateDay | null\r\n\t): Date | null {\r\n\t\treturn this.parseDate([year, month, day] as number[]);\r\n\t}\r\n}\r\n","export const CONSONANT_LIST: string = \"B-DF-HJ-NP-TV-Z\";\r\nexport const VOWEL_LIST: string = \"AEIOU\";\r\nexport const OMOCODE_NUMBER_LIST: string = \"\\\\dLMNP-V\";\r\nexport const OMOCODE_NON_ZERO_NUMBER_LIST: string = \"1-9MNP-V\";\r\nexport const OMOCODE_ZERO_LIST: string = \"0L\";\r\nexport const MONTH_LIST: string = \"A-EHLMPR-T\";\r\nexport const MONTH_30DAYS_LIST: string = \"DHPS\";\r\nexport const MONTH_31DAYS_LIST: string = \"ACELMRT\";\r\nexport const CITY_CODE_LIST: string = \"A-M\";\r\nexport const COUNTRY_CODE_LIST: string = \"Z\";\r\n\r\nexport const CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}][${VOWEL_LIST}X]|[${VOWEL_LIST}]X{2}|[${CONSONANT_LIST}]{2}[A-Z]`;\r\nexport const CF_SURNAME_MATCHER: string = CF_NAME_MATCHER;\r\nexport const CF_FULL_NAME_MATCHER: string = `(?:${CF_NAME_MATCHER}){2}`;\r\n\r\nexport const YEAR_MATCHER: string = `[${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const LEAP_YEAR_MATCHER: string =\r\n\t\"[02468LNQSU][048LQU]|[13579MPRTV][26NS]\";\r\nexport const MONTH_MATCHER: string = `[${MONTH_LIST}]`;\r\nexport const DAY_2X_MATCHER: string = \"[26NS]\";\r\nexport const DAY_3X_MATCHER: string = \"[37PT]\";\r\nexport const DAY_29_MATCHER: string = `[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1256MNRS][${OMOCODE_NUMBER_LIST}]`;\r\nexport const DAY_30_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}]`;\r\nexport const DAY_31_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}1M]`;\r\n\r\nexport const DAY_MATCHER: string = `(?:${DAY_29_MATCHER}|${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MALE_DAY_MATCHER: string = `(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[12MN][${OMOCODE_NUMBER_LIST}]|[3P][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const FEMALE_DAY_MATCHER: string = `(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[56RS][${OMOCODE_NUMBER_LIST}]|[7T][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MONTH_DAY_MATCHER: string = `${MONTH_MATCHER}(?:${DAY_29_MATCHER})|[${MONTH_30DAYS_LIST}]${DAY_30_MATCHER}|[${MONTH_31DAYS_LIST}]${DAY_31_MATCHER}`;\r\nexport const FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[15MR][${OMOCODE_NUMBER_LIST}]|${DAY_2X_MATCHER}[0-8LMNP-U])|[${MONTH_30DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_2X_MATCHER}[9V])|(?:${LEAP_YEAR_MATCHER})B${DAY_2X_MATCHER}[9V]`;\r\nexport const MALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1M][${OMOCODE_NUMBER_LIST}]|[2N][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][2N][9V])|(?:${LEAP_YEAR_MATCHER})B[2N][9V]`;\r\nexport const FEMALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[5R][${OMOCODE_NUMBER_LIST}]|[6S][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][6S][9V])|(?:${LEAP_YEAR_MATCHER})B[6S][9V]`;\r\n\r\nexport const CITY_CODE_MATCHER: string = `[${CITY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}|[${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\nexport const COUNTRY_CODE_MATCHER: string = `${COUNTRY_CODE_LIST}[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const BELFIORE_CODE_MATCHER: string = `(?:[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2})|(?:[${CITY_CODE_LIST}][${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\n\r\nexport const CHECK_DIGIT: string = \"[A-Z]\";\r\n\r\nexport const CODICE_FISCALE: string = `${CF_FULL_NAME_MATCHER}(?:${FULL_DATE_MATCHER})(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}`;\r\n\r\nexport const PARTIAL_CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}]?|[${CONSONANT_LIST}]{1,2}`;\r\nexport const PARTIAL_CF_FULL_NAME: string = `(?:${PARTIAL_CF_NAME_MATCHER})|(?:(?:${CF_NAME_MATCHER})(?:${PARTIAL_CF_NAME_MATCHER})?)`;\r\nexport const PARTIAL_YEAR: string = `[${OMOCODE_NUMBER_LIST}]`;\r\nexport const PARTIAL_MONTH_DAY: string = `${MONTH_MATCHER}[${OMOCODE_ZERO_LIST}12456MNQRS]?|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}`;\r\nexport const PARTIAL_FULL_DATE: string = `${PARTIAL_YEAR}|(?:${YEAR_MATCHER}(?:${PARTIAL_MONTH_DAY})?)`;\r\nexport const PARTIAL_BELFIORE_CODE_MATCHER: string = `[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]?)?|[${COUNTRY_CODE_LIST}](?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NUMBER_LIST}]?)?`;\r\n\r\nexport const PARTIAL_CF: string = `${PARTIAL_CF_FULL_NAME}|(?:${CF_FULL_NAME_MATCHER}(?:(?:${PARTIAL_FULL_DATE})|(?:${FULL_DATE_MATCHER})(?:(?:${PARTIAL_BELFIORE_CODE_MATCHER})|(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}?)?)?)?`;\r\n","enum CRC {\r\n \"B\",\r\n \"A\",\r\n \"K\",\r\n \"P\",\r\n \"L\",\r\n \"C\",\r\n \"Q\",\r\n \"D\",\r\n \"R\",\r\n \"E\",\r\n \"V\",\r\n \"O\",\r\n \"S\",\r\n \"F\",\r\n \"T\",\r\n \"G\",\r\n \"U\",\r\n \"H\",\r\n \"M\",\r\n \"I\",\r\n \"N\",\r\n \"J\",\r\n \"W\",\r\n \"Z\",\r\n \"Y\",\r\n \"X\",\r\n}\r\n\r\nexport default CRC;\r\n","enum BirthMonth {\r\n\t\"A\",\r\n\t\"B\",\r\n\t\"C\",\r\n\t\"D\",\r\n\t\"E\",\r\n\t\"H\",\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"P\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n}\r\n\r\nexport default BirthMonth;\r\n","import { CRC_OFFSET, LASTNAME_OFFSET } from \"../const/cf-offsets.const\";\r\nimport { PARTIAL_CF } from \"../const/matcher.const\";\r\nimport CRC from \"../enums/crc.enum\";\r\nimport generatorWrapper from \"../functions/generator-wrapper.function\";\r\nimport type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nimport type CodiceFiscaleCRC from \"../types/codice-fiscale-crc.type\";\r\nclass CheckDigitizer {\r\n\t/**\r\n\t * Evaluate given partial CF to produce last check digit character\r\n\t * @param codiceFiscale Partial or complete Fiscal Code to evaluate to produce last character\r\n\t * @returns 16th CF char\r\n\t */\r\n\tpublic static checkDigit(codiceFiscale: string): CodiceFiscaleCRC | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale === \"string\" &&\r\n\t\t\tnew RegExp(PARTIAL_CF).test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst partialCF = codiceFiscale.substr(LASTNAME_OFFSET, CRC_OFFSET);\r\n\t\t\tlet partialCfValue = 0;\r\n\t\t\tfor (const charValue of this.evaluateChar(partialCF)) {\r\n\t\t\t\tpartialCfValue += charValue as number;\r\n\t\t\t}\r\n\t\t\treturn String.fromCharCode(\r\n\t\t\t\t(partialCfValue % this.CRC_MOD) + this.CHAR_OFFSET\r\n\t\t\t) as CodiceFiscaleCRC;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic static evaluateChar(\r\n\t\tpartialCF: string = \"\"\r\n\t): IGeneratorWrapper {\r\n\t\treturn generatorWrapper(this.evaluateCharGenerator(partialCF));\r\n\t}\r\n\r\n\tprivate static CHAR_OFFSET: number = 65;\r\n\tprivate static CRC_MOD: number = 26;\r\n\r\n\t/**\r\n\t * Partial FiscalCode Evaluator\r\n\t * @param Partial Fiscal Code to evaluate\r\n\t * @yields character value odd/even\r\n\t */\r\n\tprivate static *evaluateCharGenerator(partialCF: string = \"\"): Generator {\r\n\t\tif (typeof partialCF === \"string\" && partialCF.length) {\r\n\t\t\tfor (let index = 0; index < partialCF.length; index++) {\r\n\t\t\t\tlet char: string = partialCF[index].toUpperCase();\r\n\t\t\t\tconst isNumber: boolean = /^\\d$/u.test(char);\r\n\t\t\t\tif (isNumber) {\r\n\t\t\t\t\t// Numbers have always (odd/even) the same values of corresponding letters (0-9 => A-J)\r\n\t\t\t\t\tchar = String.fromCharCode(parseInt(char, 10) + this.CHAR_OFFSET);\r\n\t\t\t\t}\r\n\t\t\t\t// Odd/Even are shifted/swapped\r\n\t\t\t\t// array starts from 0, \"Agenzia delle Entrate\" documentation counts the string from 1\r\n\t\t\t\tconst isOdd: boolean = !(index % 2); // Odd according to documentation\r\n\t\t\t\tif (isOdd) {\r\n\t\t\t\t\t// Odd positions\r\n\t\t\t\t\tyield parseInt(CRC[char as any], 10);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Even positions\r\n\t\t\t\t\tyield char.charCodeAt(0) - this.CHAR_OFFSET;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\nexport default CheckDigitizer;\r\n","import type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nexport default function generatorWrapper<\r\n\tT = unknown,\r\n\tTReturn = any,\r\n\tTNext = unknown\r\n>(generator: Generator): IGeneratorWrapper {\r\n\tgenerator[Symbol.iterator] = () => generator;\r\n\treturn generator as IGeneratorWrapper;\r\n}\r\n","enum GenderWeight {\r\n\t\"M\" = 0,\r\n\t\"F\" = 40,\r\n}\r\n\r\nexport default GenderWeight;\r\n","enum Omocodes {\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"N\",\r\n\t\"P\",\r\n\t\"Q\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n\t\"U\",\r\n\t\"V\",\r\n}\r\n\r\nexport default Omocodes;\r\n","import { DateDay } from \"../date-utils/\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport type Genders from \"../types/genders.type\";\r\n\r\nclass Gender {\r\n\tpublic static getDay(genderDay: number): DateDay | null {\r\n\t\tconst plainDay = genderDay % GenderWeight.F;\r\n\t\treturn plainDay > 0 && plainDay <= this.MAX_MONTH_DAY\r\n\t\t\t? (plainDay as DateDay)\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tpublic static getGender(genderDay: number): Genders | null {\r\n\t\treturn (\r\n\t\t\tthis.toArray().find(\r\n\t\t\t\t(gender) =>\r\n\t\t\t\t\tgenderDay >= GenderWeight[gender] &&\r\n\t\t\t\t\tgenderDay <= GenderWeight[gender] + this.MAX_MONTH_DAY\r\n\t\t\t) || null\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static genderizeDay(day: number, gender: Genders): number {\r\n\t\treturn day + GenderWeight[gender];\r\n\t}\r\n\r\n\tpublic static toArray(): Genders[] {\r\n\t\treturn [\"M\", \"F\"];\r\n\t}\r\n\r\n\tprivate static MAX_MONTH_DAY: number = 31;\r\n}\r\n\r\nexport default Gender;\r\n","export const CF_INTRODUCTION_DATE = new Date(\"1973-09-29\");\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDAY_OFFSET,\r\n\tDAY_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tMONTH_OFFSET,\r\n\tMONTH_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { CF_NAME_MATCHER, CF_SURNAME_MATCHER } from \"../const/matcher.const\";\r\nimport { CONSONANT_LIST, VOWEL_LIST } from \"../const/matcher.const\";\r\nimport { DateDay, DateMonth, DateUtils, MultiFormatDate } from \"../date-utils\";\r\nimport BirthMonth from \"../enums/birth-month.enum\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Gender from \"./gender.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Parser {\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {}\r\n\r\n\t/**\r\n\t * Default omocode bitmap\r\n\t */\r\n\tpublic OMOCODE_BITMAP: number = 0b0111011011000000;\r\n\r\n\t/**\r\n\t * Convert omocode CF into plain one\r\n\t * @param codiceFiscale Partial or complete Omocode/Regular CF to parse, starting from LastName\r\n\t * @returns Regular CF w/o omocodes chars\r\n\t */\r\n\tpublic cfDeomocode(codiceFiscale: string): string {\r\n\t\tif (codiceFiscale && codiceFiscale.length <= YEAR_OFFSET) {\r\n\t\t\treturn codiceFiscale;\r\n\t\t}\r\n\t\tconst deomocodedCf = this.partialCfDeomocode(codiceFiscale);\r\n\t\tif (deomocodedCf.length < CRC_OFFSET) {\r\n\t\t\treturn deomocodedCf;\r\n\t\t}\r\n\t\tconst partialDeomocodedCf = deomocodedCf.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tCRC_OFFSET\r\n\t\t);\r\n\t\treturn (\r\n\t\t\tpartialDeomocodedCf +\r\n\t\t\tthis.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(deomocodedCf) || \"\",\r\n\t\t\t\tdeomocodedCf.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic cfOmocode(codiceFiscale: string, omocodeId: number): string {\r\n\t\tif (!omocodeId) {\r\n\t\t\treturn this.cfDeomocode(codiceFiscale);\r\n\t\t}\r\n\t\tconst omocodedCf = codiceFiscale.split(\"\");\r\n\t\t// tslint:disable-next-line: prefer-for-of\r\n\t\tfor (let i = codiceFiscale.length - 1, o = 0; i >= 0; i--) {\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\tif ((2 ** i) & this.OMOCODE_BITMAP) {\r\n\t\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t\tconst charToEncode: boolean = !!(omocodeId & (2 ** o));\r\n\t\t\t\tconst isOmocode: boolean = isNaN(parseInt(omocodedCf[i], 10));\r\n\t\t\t\tif (charToEncode !== isOmocode) {\r\n\t\t\t\t\tconst char: any = omocodedCf[i].toUpperCase();\r\n\t\t\t\t\tomocodedCf[i] = Omocodes[char];\r\n\t\t\t\t}\r\n\t\t\t\to++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst crc = omocodedCf[CRC_OFFSET];\r\n\t\tif (crc) {\r\n\t\t\tconst partialCf = omocodedCf.slice(LASTNAME_OFFSET, CRC_OFFSET).join(\"\");\r\n\t\t\tomocodedCf[CRC_OFFSET] = this.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(partialCf) || \"\",\r\n\t\t\t\tcrc\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn omocodedCf.join(\"\");\r\n\t}\r\n\r\n\tpublic cfOmocodeId(codiceFiscale: string): number {\r\n\t\tconst cfOmocodeBitmap = codiceFiscale\r\n\t\t\t.split(\"\")\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t.filter((char, index) => (2 ** index) & this.OMOCODE_BITMAP)\r\n\t\t\t.map((char) => (/^[a-z]$/i.test(diacriticRemover[char]) ? 1 : 0))\r\n\t\t\t.join(\"\");\r\n\t\treturn parseInt(cfOmocodeBitmap, 2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible lastName\r\n\t */\r\n\tpublic cfToLastName(codiceFiscale: string): string | null {\r\n\t\tconst cfLastNamePart = codiceFiscale?.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfLastNamePart.length !== LASTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(?:${CF_SURNAME_MATCHER})`, \"iu\").test(cfLastNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst lastNameCf = codiceFiscale.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\r\n\t\tconst [cons = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) || [];\r\n\t\tconst [vow = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`[${VOWEL_LIST}]{1,3}`, \"ig\")) || [];\r\n\r\n\t\tconst matchingLength = cons.length + vow.length;\r\n\r\n\t\tif (\r\n\t\t\tmatchingLength < 2 ||\r\n\t\t\t(matchingLength < 3 && lastNameCf[2].toUpperCase() !== \"X\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (cons.length) {\r\n\t\t\tcase 3:\r\n\t\t\t\treturn (cons + vow).split(\"\").join(this.JOLLY_CHAR) + this.JOLLY_CHAR;\r\n\t\t\tcase 2:\r\n\t\t\t\treturn `${cons[0]}${vow[0]}*${cons[1]}${this.JOLLY_CHAR}`;\r\n\t\t\tcase 1:\r\n\t\t\t\treturn `${cons[0]}${vow}${this.JOLLY_CHAR}`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn `${vow}${vow.length === 3 ? this.JOLLY_CHAR : \"\"}`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible firstName\r\n\t */\r\n\tpublic cfToFirstName(codiceFiscale: string): string | null {\r\n\t\tconst cfFirstNamePart = codiceFiscale?.substring(\r\n\t\t\tFIRSTNAME_OFFSET,\r\n\t\t\tFIRSTNAME_OFFSET + FIRSTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfFirstNamePart?.length !== FIRSTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(${CF_NAME_MATCHER})$`, \"iu\").test(cfFirstNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.cfToLastName(cfFirstNamePart);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse gender information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Male or female\r\n\t */\r\n\tpublic cfToGender(codiceFiscale: string): Genders | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < GENDER_OFFSET + GENDER_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfGenderPart = codiceFiscale.substring(\r\n\t\t\tGENDER_OFFSET,\r\n\t\t\tGENDER_OFFSET + GENDER_SIZE\r\n\t\t);\r\n\t\tconst genderInt =\r\n\t\t\tparseInt(this.partialCfDeomocode(cfGenderPart, GENDER_OFFSET), 10) * 10;\r\n\t\treturn Gender.getGender(genderInt);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth year information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Year (4 digits)\r\n\t */\r\n\tpublic cfToBirthYear(codiceFiscale: string): number | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < YEAR_OFFSET + YEAR_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfBirthYearPart = codiceFiscale.substring(\r\n\t\t\tYEAR_OFFSET,\r\n\t\t\tYEAR_OFFSET + YEAR_SIZE\r\n\t\t);\r\n\t\tconst birthYear: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthYearPart, YEAR_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthYear)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst current2DigitsYear: number = parseInt(dayjs().format(\"YY\"), 10);\r\n\r\n\t\tconst century: number = (birthYear > current2DigitsYear ? 1 : 0) * 100;\r\n\t\treturn dayjs()\r\n\t\t\t.subtract(current2DigitsYear - birthYear + century, \"years\")\r\n\t\t\t.year();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth month information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Month (0...11 - Date notation)\r\n\t */\r\n\tpublic cfToBirthMonth(codiceFiscale: string): DateMonth | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < MONTH_OFFSET + MONTH_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthMonthPart: any = codiceFiscale\r\n\t\t\t.substring(MONTH_OFFSET, MONTH_OFFSET + MONTH_SIZE)\r\n\t\t\t.toUpperCase();\r\n\t\tconst birthMonth = BirthMonth[cfBirthMonthPart];\r\n\t\tif (typeof birthMonth !== \"number\" || birthMonth < 0 || birthMonth > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn birthMonth as DateMonth;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth day information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth day (1..31)\r\n\t */\r\n\tpublic cfToBirthDay(codiceFiscale: string): DateDay | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < DAY_OFFSET + DAY_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthDayPart = codiceFiscale.substring(\r\n\t\t\tDAY_OFFSET,\r\n\t\t\tDAY_OFFSET + DAY_SIZE\r\n\t\t);\r\n\t\tconst birthDay: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthDayPart, DAY_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthDay)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn Gender.getDay(birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth date information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Date\r\n\t */\r\n\tpublic cfToBirthDate(codiceFiscale: string): Date | null {\r\n\t\tconst birthDay = this.cfToBirthDay(codiceFiscale);\r\n\t\tif (!birthDay) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthMonth = this.cfToBirthMonth(codiceFiscale);\r\n\t\tif (typeof birthMonth !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthYear = this.cfToBirthYear(codiceFiscale);\r\n\r\n\t\treturn DateUtils.ymdToDate(birthYear, birthMonth, birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth place information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @param checkBirthDateConsistency Ensure birthday is between creation and expiran date of the cf city or country, default value: true\r\n\t * @returns Birth place\r\n\t */\r\n\tpublic async cfToBirthPlace(\r\n\t\tcodiceFiscale: string,\r\n\t\tcheckBirthDateConsistency: boolean = true\r\n\t): Promise {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < PLACE_OFFSET + PLACE_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthPlacePart = codiceFiscale.substring(\r\n\t\t\tPLACE_OFFSET,\r\n\t\t\tPLACE_OFFSET + PLACE_SIZE\r\n\t\t);\r\n\t\tconst belfioreCode: string = this.partialCfDeomocode(\r\n\t\t\tcfBirthPlacePart,\r\n\t\t\tPLACE_OFFSET\r\n\t\t);\r\n\r\n\t\tconst birthPlace: BelfiorePlace | undefined | null =\r\n\t\t\tawait this.belfioreConnector.findByCode(belfioreCode);\r\n\t\tif (!birthPlace) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst { creationDate, expirationDate } = birthPlace;\r\n\t\tif ((creationDate || expirationDate) && checkBirthDateConsistency) {\r\n\t\t\tconst birthDate = this.cfToBirthDate(codiceFiscale);\r\n\t\t\tconst isBirthDateAfterCfIntroduction = dayjs(CF_INTRODUCTION_DATE)\r\n\t\t\t\t// Adding some tolerance\r\n\t\t\t\t.add(5, \"years\")\r\n\t\t\t\t.isBefore(birthDate, \"day\");\r\n\r\n\t\t\t// Skipping birthDate vs Creation/Expiration check for people born up to 5y after cf introduction\r\n\t\t\tif (birthDate && isBirthDateAfterCfIntroduction) {\r\n\t\t\t\tconst datePlaceConsistency =\r\n\t\t\t\t\t// BirthDay is before expiration date\r\n\t\t\t\t\t(!expirationDate ||\r\n\t\t\t\t\t\tdayjs(birthDate).isBefore(expirationDate, \"day\")) &&\r\n\t\t\t\t\t// BirthDay is after creation date\r\n\t\t\t\t\t(!creationDate || dayjs(birthDate).isAfter(creationDate, \"day\"));\r\n\t\t\t\tif (!datePlaceConsistency) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn birthPlace;\r\n\t}\r\n\r\n\t/**\r\n\t * @param fiscalCode 16 character Codice Fiscale to decode\r\n\t * @returns Decoded CF Info\r\n\t */\r\n\tpublic async cfDecode(fiscalCode: string): Promise {\r\n\t\tconst year = this.cfToBirthYear(fiscalCode) || undefined;\r\n\t\t// 0 is a month\r\n\t\tconst month = this.cfToBirthMonth(fiscalCode) ?? undefined;\r\n\t\tconst day = this.cfToBirthDay(fiscalCode) || undefined;\r\n\t\tconst date = DateUtils.ymdToDate(year, month, day) || undefined;\r\n\t\tconst place = await this.cfToBirthPlace(fiscalCode);\r\n\t\tconst personalInfo: IPersonalInfo = {\r\n\t\t\tfirstName: this.cfToFirstName(fiscalCode) || undefined,\r\n\t\t\tlastName: this.cfToLastName(fiscalCode) || undefined,\r\n\r\n\t\t\tday,\r\n\t\t\tmonth,\r\n\t\t\tyear,\r\n\r\n\t\t\tdate,\r\n\r\n\t\t\tgender: this.cfToGender(fiscalCode) || undefined,\r\n\t\t\tplace: place || undefined,\r\n\r\n\t\t\tomocodeId: this.cfOmocodeId(fiscalCode),\r\n\t\t};\r\n\r\n\t\tif (year && month && day) {\r\n\t\t\tpersonalInfo.date = new Date(Date.UTC(year, month, day));\r\n\t\t}\r\n\r\n\t\treturn personalInfo;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName to cf part\r\n\t * @param lastName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic lastNameToCf(lastName?: string | null): string | null {\r\n\t\tif (!lastName || (lastName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!/^[A-Z ']{1,32}$/iu.test(diacriticRemover.replace(lastName))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst consonants = this.charExtractor(lastName, CONSONANT_LIST);\r\n\t\tconst vowels = this.charExtractor(lastName, VOWEL_LIST);\r\n\r\n\t\tconst partialCf = (consonants + vowels).padEnd(3, \"X\").substring(0, 3);\r\n\r\n\t\tif (partialCf.length < 3) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn partialCf.toUpperCase();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName to cf part\r\n\t * @param firstName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic firstNameToCf(firstName?: string | null): string | null {\r\n\t\tif (!firstName || (firstName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst consonants = this.charExtractor(firstName, CONSONANT_LIST);\r\n\t\tif (consonants.length >= 4) {\r\n\t\t\treturn (consonants[0] + consonants.substring(2, 4)).toUpperCase();\r\n\t\t}\r\n\t\treturn this.lastNameToCf(firstName);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse year to cf part\r\n\t * @param year Birth year 2 or 4 digit string, number above 19XX or below 100\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic yearToCf(year: string | number): string | null {\r\n\t\tlet parsedYear: number;\r\n\t\tif (typeof year === \"string\") {\r\n\t\t\tparsedYear = parseInt(year, 10);\r\n\t\t} else {\r\n\t\t\tparsedYear = year;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\ttypeof parsedYear === \"number\" &&\r\n\t\t\t\t!isNaN(parsedYear) &&\r\n\t\t\t\t(parsedYear >= 1900 || parsedYear < 100)\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${parsedYear}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse month information\r\n\t * @param month Month number 0..11\r\n\t * @returns Birth Month CF code\r\n\t */\r\n\tpublic monthToCf(month: DateMonth | number): string | null {\r\n\t\tif (month < 0 || month > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn BirthMonth[month] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse day information\r\n\t * @param day Day number 1..31\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth Day CF code\r\n\t */\r\n\tpublic dayGenderToCf(day: DateDay | number, gender: Genders): string | null {\r\n\t\tif (day < 1 || day > 31) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst genderValue = GenderWeight[gender as any];\r\n\t\tif (typeof genderValue !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${day + genderValue}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Year, Month, Day to Dated\r\n\t * @param year 4 digits Year\r\n\t * @param month 1 or 2 digits Month 0..11\r\n\t * @param day 1,2 digits Day 1..31\r\n\t * @returns Date or null if provided year/month/day are not valid\r\n\t */\r\n\tpublic yearMonthDayToDate(\r\n\t\tyear: number | null | undefined,\r\n\t\tmonth: DateMonth | null | undefined = 0,\r\n\t\tday: DateDay | null | undefined = 1\r\n\t): Date | null {\r\n\t\tif (\r\n\t\t\t!year ||\r\n\t\t\tyear < 1861 ||\r\n\t\t\t[month, day].some((param) => typeof param !== \"number\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst date = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\tif (\r\n\t\t\t!date.isValid() ||\r\n\t\t\tdate.year() !== year ||\r\n\t\t\tdate.month() !== month ||\r\n\t\t\tdate.date() !== day\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn date.toDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Place information to return city or country details\r\n\t * @param place Belfiore place instance, belfiore code or city/country name\r\n\t * @returns BelfiorePlace instance with the target city or country details\r\n\t */\r\n\tpublic async parsePlace(\r\n\t\tplace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tlet verifiedBirthPlace: BelfiorePlace | null | undefined;\r\n\t\tif (!place) {\r\n\t\t\treturn null;\r\n\t\t} else if (typeof place === \"object\" && place.belfioreCode) {\r\n\t\t\tverifiedBirthPlace = await this.belfioreConnector.findByCode(\r\n\t\t\t\tplace.belfioreCode\r\n\t\t\t);\r\n\t\t} else if (typeof place === \"string\") {\r\n\t\t\tverifiedBirthPlace =\r\n\t\t\t\t(await this.belfioreConnector.findByCode(place)) ||\r\n\t\t\t\t(await this.belfioreConnector.findByName(place));\r\n\t\t}\r\n\t\treturn verifiedBirthPlace || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Date and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth date and Gender CF code\r\n\t */\r\n\tpublic dateGenderToCf(date: MultiFormatDate, gender: Genders): string | null {\r\n\t\tconst parsedDate = DateUtils.parseDate(date);\r\n\t\tif (!parsedDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfYear = this.yearToCf(parsedDate.getFullYear());\r\n\t\tconst cfMonth = this.monthToCf(parsedDate.getMonth());\r\n\t\tconst cfDayGender = this.dayGenderToCf(parsedDate.getDate(), gender);\r\n\r\n\t\treturn `${cfYear}${cfMonth}${cfDayGender}`;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse place name and province to Belfiore code\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\t/**\r\n\t * Parse a Date and Gender information to create Date/Gender CF part\r\n\t * @param birthDate Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\tpublic async placeToCf(\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise;\r\n\tpublic async placeToCf(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise;\r\n\tpublic async placeToCf(\r\n\t\tdateOrName: MultiFormatDate,\r\n\t\tnameOrProvince?: string,\r\n\t\tprovinceId?: string\r\n\t): Promise {\r\n\t\tconst birthDate: Date | null = DateUtils.parseDate(dateOrName);\r\n\t\tlet name: string;\r\n\t\tlet province: string | undefined;\r\n\t\tif (!birthDate && typeof dateOrName === \"string\") {\r\n\t\t\tname = dateOrName;\r\n\t\t\tprovince = nameOrProvince;\r\n\t\t} else if (nameOrProvince) {\r\n\t\t\tname = nameOrProvince;\r\n\t\t\tprovince = provinceId;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet placeFinder: IBelfioreConnector | undefined = this.belfioreConnector;\r\n\t\tif (province) {\r\n\t\t\tplaceFinder = placeFinder.byProvince(province);\r\n\t\t}\r\n\t\tif (birthDate && placeFinder) {\r\n\t\t\tplaceFinder = placeFinder.from(birthDate);\r\n\t\t}\r\n\t\tif (placeFinder) {\r\n\t\t\tconst foundPlace: BelfiorePlace | null = await new Parser(\r\n\t\t\t\tplaceFinder\r\n\t\t\t).parsePlace(name);\r\n\t\t\tif (foundPlace) {\r\n\t\t\t\treturn foundPlace.belfioreCode;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF\r\n\t * @returns Complete CF\r\n\t */\r\n\tpublic async encodeCf({\r\n\t\tlastName,\r\n\t\tfirstName,\r\n\r\n\t\tyear,\r\n\t\tmonth,\r\n\t\tday,\r\n\t\tdate,\r\n\r\n\t\tgender,\r\n\t\tplace,\r\n\r\n\t\tomocodeId = 0,\r\n\t}: Omit & {\r\n\t\tplace?: BelfiorePlace | string | undefined;\r\n\t}): Promise {\r\n\t\tconst dtParams =\r\n\t\t\tDateUtils.parseDate(date) || this.yearMonthDayToDate(year, month, day);\r\n\t\tif (!(dtParams && lastName && firstName && gender && place)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst generator = [\r\n\t\t\tasync () => this.lastNameToCf(lastName),\r\n\t\t\tasync () => this.firstNameToCf(firstName),\r\n\t\t\tasync () => this.dateGenderToCf(dtParams, gender),\r\n\t\t\tasync () =>\r\n\t\t\t\tawait this.placeToCf(\r\n\t\t\t\t\tdtParams,\r\n\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t),\r\n\t\t];\r\n\t\tlet cf = \"\";\r\n\t\tfor (const cfPartGenerator of generator) {\r\n\t\t\tconst cfValue = await cfPartGenerator();\r\n\t\t\tif (!cfValue) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcf += cfValue;\r\n\t\t}\r\n\r\n\t\treturn this.cfOmocode(cf, omocodeId);\r\n\t}\r\n\r\n\tprivate JOLLY_CHAR: string = \"*\";\r\n\r\n\tprivate checkBitmap(offset: number): boolean {\r\n\t\t// tslint:disable-next-line: no-bitwise\r\n\t\treturn !!((2 ** offset) & this.OMOCODE_BITMAP);\r\n\t}\r\n\r\n\tprivate charOmocode(char: string, offset: number): string {\r\n\t\tif (/^[A-Z]$/giu.test(char) && this.checkBitmap(offset)) {\r\n\t\t\treturn Omocodes[char.toUpperCase() as any];\r\n\t\t}\r\n\r\n\t\treturn char;\r\n\t}\r\n\r\n\tprivate charExtractor(text: string, CHAR_LIST: string): string {\r\n\t\tconst charMatcher = new RegExp(`[${CHAR_LIST}]{1,24}`, \"ig\");\r\n\t\tconst diacriticFreeText = diacriticRemover.replace(text).trim();\r\n\t\tconst matchingChars = diacriticFreeText.match(charMatcher);\r\n\t\treturn (matchingChars || []).join(\"\");\r\n\t}\r\n\r\n\t/**\r\n\t * Convert omocode full or chunk CF into plain one\r\n\t * @param partialCodiceFiscale Partial or complete Omocode/Regular CF to parse\r\n\t * @param offset starting point of the given chunk in the 16 char CF\r\n\t * @returns Regular version w/o omocodes chars of the given chunk\r\n\t */\r\n\tprivate partialCfDeomocode(\r\n\t\tpartialCodiceFiscale: string,\r\n\t\toffset: number = 0\r\n\t): string {\r\n\t\tconst charReplacer = (char: string, position: number) =>\r\n\t\t\tthis.charOmocode(char, position + offset);\r\n\t\treturn partialCodiceFiscale.replace(/[\\dA-Z]/giu, charReplacer);\r\n\t}\r\n\r\n\tprivate appyCaseToChar(targetChar: string, counterCaseChar: string): string {\r\n\t\tif (targetChar && counterCaseChar) {\r\n\t\t\tconst isUpperCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toUpperCase();\r\n\t\t\tconst isLowerCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toLowerCase();\r\n\r\n\t\t\tif (isUpperCase && !isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toUpperCase();\r\n\t\t\t} else if (!isUpperCase && isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toLowerCase();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn targetChar[0];\r\n\t}\r\n}\r\n","const INVALID_SURNAME: string =\r\n\t\"Provided lastName is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_NAME: string =\r\n\t\"Provided name is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_DAY: string = \"Provided day is not valid\";\r\nconst INVALID_GENDER: string = \"Provided gender is not valid\";\r\nconst INVALID_DAY_OR_GENDER: string =\r\n\t\"Provided day and/or gender are not valid\";\r\nconst INVALID_YEAR: string =\r\n\t\"Provided year is not valid, only 2 or 4 digit numbers are allowed\";\r\nconst INVALID_DATE: string = \"Provided date is not valid\";\r\nconst INVALID_PLACE_NAME: string = \"Proviced City/Country name is not valid\";\r\n\r\nexport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_PLACE_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n};\r\n","import * as ErrorMessages from \"../const/error-messages.const\";\r\n\r\nclass CfuError extends Error {\r\n constructor(errorMessage: string)\r\n constructor(errorCode: string) {\r\n super((Object.entries(ErrorMessages).find(([errId]) => errId === errorCode) || [])[1] || errorCode);\r\n }\r\n}\r\n\r\nexport default CfuError;\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n} from \"../const/error-messages.const\";\r\nimport {\r\n\tBELFIORE_CODE_MATCHER,\r\n\tCF_NAME_MATCHER,\r\n\tCF_SURNAME_MATCHER,\r\n\tCHECK_DIGIT,\r\n\tCODICE_FISCALE,\r\n\tCONSONANT_LIST,\r\n\tDAY_MATCHER,\r\n\tFEMALE_DAY_MATCHER,\r\n\tFEMALE_FULL_DATE_MATCHER,\r\n\tFULL_DATE_MATCHER,\r\n\tMALE_DAY_MATCHER,\r\n\tMALE_FULL_DATE_MATCHER,\r\n\tMONTH_MATCHER,\r\n\tVOWEL_LIST,\r\n\tYEAR_MATCHER,\r\n} from \"../const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tDateUtils,\r\n\tMultiFormatDate,\r\n} from \"../date-utils/\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CfuError from \"./cfu-error.class\";\r\nimport Gender from \"./gender.class\";\r\nimport Parser from \"./parser.class\";\r\nimport dayjs from \"dayjs\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Pattern {\r\n\tprivate parser: Parser;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given lastName or generic\r\n\t * @param lastName Optional lastName to generate validation regexp\r\n\t * @return CF Surname matcher\r\n\t * @throw INVALID_SURNAME\r\n\t */\r\n\tpublic cfLastName(lastName?: string): RegExp {\r\n\t\tlet matcher: string = CF_SURNAME_MATCHER;\r\n\t\tif (lastName) {\r\n\t\t\tif (!this.lastName().test(lastName)) {\r\n\t\t\t\tthrow new CfuError(INVALID_SURNAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.lastNameToCf(lastName) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given name or generic\r\n\t * @param name Optional name to generate validation regexp\r\n\t * @return CF name matcher\r\n\t * @throw INVALID_NAME\r\n\t */\r\n\tpublic cfFirstName(name?: string): RegExp {\r\n\t\tlet matcher: string = CF_NAME_MATCHER;\r\n\t\tif (name) {\r\n\t\t\tif (!this.lastName().test(name)) {\r\n\t\t\t\tthrow new CfuError(INVALID_NAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.firstNameToCf(name) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param year Optional year to generate validation regexp\r\n\t * @return CF year matcher\r\n\t */\r\n\tpublic cfYear(year?: number): RegExp {\r\n\t\tlet matcher: string = YEAR_MATCHER;\r\n\t\tif (year) {\r\n\t\t\tconst parsedYear = this.parser.yearToCf(year);\r\n\t\t\tif (parsedYear) {\r\n\t\t\t\tmatcher = this.deomocode(parsedYear);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_YEAR);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given month or generic\r\n\t * @param month Optional month to generate validation regexp\r\n\t * @return CF month matcher\r\n\t */\r\n\tpublic cfMonth(month?: DateMonth) {\r\n\t\tlet matcher: string = MONTH_MATCHER;\r\n\t\tif (month) {\r\n\t\t\tmatcher = this.parser.monthToCf(month) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given day or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @return CF day matcher\r\n\t */\r\n\tpublic cfDay(day?: DateDay): RegExp {\r\n\t\tlet matcher = DAY_MATCHER;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayM = this.parser.dayGenderToCf(day, \"M\");\r\n\t\t\tconst parsedDayF = this.parser.dayGenderToCf(day, \"F\");\r\n\t\t\tif (parsedDayM && parsedDayF) {\r\n\t\t\t\tconst matcherM: string = this.deomocode(parsedDayM);\r\n\t\t\t\tconst matcherF: string = this.deomocode(parsedDayF);\r\n\t\t\t\tmatcher = `(?:${matcherM})|(?:${matcherF})`;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @param gender Gender @see Genders\r\n\t * @return CF day and gender matcher\r\n\t */\r\n\tpublic cfDayGender(day?: DateDay, gender?: Genders): RegExp {\r\n\t\tif (!gender) {\r\n\t\t\treturn this.cfDay(day);\r\n\t\t}\r\n\t\tlet matcher;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayGender = this.parser.dayGenderToCf(day, gender);\r\n\t\t\tif (parsedDayGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDayGender);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY_OR_GENDER);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tswitch (gender) {\r\n\t\t\t\tcase \"M\":\r\n\t\t\t\t\tmatcher = MALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"F\":\r\n\t\t\t\t\tmatcher = FEMALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param gender @see Genders\r\n\t * @return CF date and gender matcher\r\n\t */\r\n\tpublic cfDateGender(\r\n\t\tdate?: MultiFormatDate | null,\r\n\t\tgender?: Genders | null\r\n\t): RegExp {\r\n\t\tif (date && !DateUtils.parseDate(date)) {\r\n\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t}\r\n\t\tif (gender && !Gender.toArray().includes(gender)) {\r\n\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t}\r\n\t\tlet matcher = FULL_DATE_MATCHER;\r\n\t\tif (date) {\r\n\t\t\tconst parsedDateGender =\r\n\t\t\t\tgender && this.parser.dateGenderToCf(date, gender);\r\n\t\t\tif (parsedDateGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDateGender);\r\n\t\t\t} else {\r\n\t\t\t\tconst parseDeomocode = (g: Genders): string => {\r\n\t\t\t\t\tconst parsedGender = this.parser.dateGenderToCf(date, g);\r\n\t\t\t\t\tif (!parsedGender) {\r\n\t\t\t\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn parsedGender && this.deomocode(parsedGender);\r\n\t\t\t\t};\r\n\t\t\t\tmatcher = `(?:${Gender.toArray().map(parseDeomocode).join(\"|\")})`;\r\n\t\t\t}\r\n\t\t} else if (gender === \"M\") {\r\n\t\t\tmatcher = MALE_FULL_DATE_MATCHER;\r\n\t\t} else if (gender === \"F\") {\r\n\t\t\tmatcher = FEMALE_FULL_DATE_MATCHER;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\t/**\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\tpublic async cfPlace(placeName?: string | null): Promise;\r\n\tpublic async cfPlace(\r\n\t\tbirthDate?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise;\r\n\tpublic async cfPlace(\r\n\t\tbirthDateOrName?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise {\r\n\t\tlet matcher = BELFIORE_CODE_MATCHER;\r\n\t\tif (birthDateOrName) {\r\n\t\t\tconst birthDate: Date | null = DateUtils.parseDate(birthDateOrName);\r\n\r\n\t\t\tif (birthDate && placeName) {\r\n\t\t\t\tconst place: string = placeName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(birthDate, place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t} else if (!birthDate && typeof birthDateOrName === \"string\") {\r\n\t\t\t\tconst place: string = birthDateOrName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF validator based on given optional input or generic\r\n\t * @param personalInfo Input Object\r\n\t * @return CodiceFiscale matcher\r\n\t */\r\n\tpublic async codiceFiscale(\r\n\t\tpersonalInfo?: Omit & {\r\n\t\t\tplace?: BelfiorePlace | string | undefined;\r\n\t\t}\r\n\t): Promise {\r\n\t\tlet matcher = CODICE_FISCALE;\r\n\t\tif (personalInfo) {\r\n\t\t\tconst parsedCf = await this.parser.encodeCf(personalInfo);\r\n\r\n\t\t\tif (parsedCf) {\r\n\t\t\t\tmatcher = this.deomocode(parsedCf);\r\n\t\t\t} else {\r\n\t\t\t\tconst { lastName, firstName, year, month, day, date, gender, place } =\r\n\t\t\t\t\tpersonalInfo;\r\n\t\t\t\tif (\r\n\t\t\t\t\tlastName ||\r\n\t\t\t\t\tfirstName ||\r\n\t\t\t\t\tyear ||\r\n\t\t\t\t\tmonth ||\r\n\t\t\t\t\tday ||\r\n\t\t\t\t\tdate ||\r\n\t\t\t\t\tgender ||\r\n\t\t\t\t\tplace\r\n\t\t\t\t) {\r\n\t\t\t\t\tlet dtParams: Date | null = null;\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tdtParams = DateUtils.parseDate(date);\r\n\t\t\t\t\t} else if (year) {\r\n\t\t\t\t\t\tdtParams = this.parser.yearMonthDayToDate(year, month, day);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst generator: (() => Promise)[] = [\r\n\t\t\t\t\t\tasync () => this.cfLastName(lastName),\r\n\t\t\t\t\t\tasync () => this.cfFirstName(firstName),\r\n\t\t\t\t\t\tasync () => this.cfDateGender(dtParams, gender),\r\n\t\t\t\t\t\tasync () =>\r\n\t\t\t\t\t\t\tawait this.cfPlace(\r\n\t\t\t\t\t\t\t\tdtParams,\r\n\t\t\t\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\r\n\t\t\t\t\tmatcher = \"\";\r\n\t\t\t\t\tfor (const validator of generator) {\r\n\t\t\t\t\t\tconst cfMatcher = (await validator()).toString();\r\n\t\t\t\t\t\tconst match = cfMatcher.match(/\\^(.{1,256})\\$/);\r\n\t\t\t\t\t\tconst cfValue: string | null | undefined = match && match[1];\r\n\r\n\t\t\t\t\t\tif (!cfValue) {\r\n\t\t\t\t\t\t\tthrow new Error(`Unable to handle [${cfMatcher}]`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmatcher += `(?:${cfValue})`;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Final addition of CheckDigit\r\n\t\t\t\t\tmatcher += CHECK_DIGIT;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tprivate LETTER_SET: string = `[A-Z${diacriticRemover.matcherBy(\r\n\t\t/^[A-Z]$/iu\r\n\t)}]`;\r\n\tprivate SEPARATOR_SET: string = \"(?:'?\\\\s{0,4})\";\r\n\r\n\t/**\r\n\t * Returns lastName validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic lastName(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = `${this.LETTER_SET}{1,24}`;\r\n\t\tif (codiceFiscale && /^[A-Z]{1,3}/iu.test(codiceFiscale)) {\r\n\t\t\tconst lastNameCf: string = codiceFiscale.substr(0, 3);\r\n\t\t\tconst diacriticizer = (matchingChars: string) =>\r\n\t\t\t\tmatchingChars\r\n\t\t\t\t\t.split(\"\")\r\n\t\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [cons, vow] = [\r\n\t\t\t\t`^[${CONSONANT_LIST}]{1,3}`,\r\n\t\t\t\t`[${VOWEL_LIST}]{1,3}`,\r\n\t\t\t].map((charMatcher) =>\r\n\t\t\t\tdiacriticizer(\r\n\t\t\t\t\t(lastNameCf.match(new RegExp(charMatcher, \"ig\")) || [])[0] || \"\"\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\t\tconst diacriticsVowelList: string =\r\n\t\t\t\tVOWEL_LIST +\r\n\t\t\t\tdiacriticRemover.matcherBy(new RegExp(`^[${VOWEL_LIST}]$`, \"ui\"));\r\n\t\t\tconst diacriticsVowelMatcher: string = `[${diacriticsVowelList}]`;\r\n\t\t\tconst midDiacriticVowelMatcher: string = `(?:${diacriticsVowelMatcher}${this.SEPARATOR_SET}){0,24}`;\r\n\t\t\tconst endingDiacritcVowelMatcher: string = `(?:${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${diacriticsVowelMatcher})?`;\r\n\t\t\tswitch (cons.length) {\r\n\t\t\t\tcase 3: {\r\n\t\t\t\t\tconst divider = midDiacriticVowelMatcher;\r\n\t\t\t\t\tmatcher =\r\n\t\t\t\t\t\tdivider +\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}${divider}`) +\r\n\t\t\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 2: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\t`${vow[0]}${midDiacriticVowelMatcher}${this.SEPARATOR_SET}${cons[0]}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\t`${cons[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tvow.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${vow[0]}`,\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 1: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\tvow.slice(0, 2).join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tmidDiacriticVowelMatcher +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t\t`${vow[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tvow[1],\r\n\t\t\t\t\t\t[cons[0], ...vow.slice(0, 2)].join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tmatcher = `${vow.join(\r\n\t\t\t\t\t\t`${this.SEPARATOR_SET}`\r\n\t\t\t\t\t)}${endingDiacritcVowelMatcher}`;\r\n\t\t\t}\r\n\r\n\t\t\tif (vow?.length + cons?.length < 3) {\r\n\t\t\t\treturn this.isolatedInsensitiveTailor(`\\\\s{0,4}(${matcher})\\\\s{0,4}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`\\\\s{0,4}((?:${matcher})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\\\s{0,4}`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns name validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic firstName(codiceFiscale?: string): RegExp {\r\n\t\tif (\r\n\t\t\tcodiceFiscale &&\r\n\t\t\tnew RegExp(`^[A-Z]{3}[${CONSONANT_LIST}]{3}`, \"iu\").test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst nameCf: string = codiceFiscale.substr(3, 3);\r\n\r\n\t\t\tconst cons: string[] = (\r\n\t\t\t\t(nameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) ||\r\n\t\t\t\t\t[])[0] || \"\"\r\n\t\t\t)\r\n\t\t\t\t.split(\"\")\r\n\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [diacriticsVowelList, diacriticsConsonantList]: string[] = [\r\n\t\t\t\tVOWEL_LIST,\r\n\t\t\t\tCONSONANT_LIST,\r\n\t\t\t].map(\r\n\t\t\t\t(chars) =>\r\n\t\t\t\t\tchars + diacriticRemover.matcherBy(new RegExp(`^[${chars}]$`, \"ui\"))\r\n\t\t\t);\r\n\r\n\t\t\tconst matcher: string =\r\n\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}${cons[0]}${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${diacriticsConsonantList}]${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24})?` +\r\n\t\t\t\tcons\r\n\t\t\t\t\t.slice(1, 3)\r\n\t\t\t\t\t.join(\r\n\t\t\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}`\r\n\t\t\t\t\t) +\r\n\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;\r\n\r\n\t\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t\t}\r\n\t\treturn this.lastName((codiceFiscale || \"\").substr(3, 3));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns iso8601 date validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic date(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = DATE_MATCHER.ISO8601_DATE_TIME;\r\n\t\tif (codiceFiscale) {\r\n\t\t\tconst parsedDate = this.parser.cfToBirthDate(codiceFiscale);\r\n\t\t\tif (parsedDate) {\r\n\t\t\t\tconst dateIso8601: string = parsedDate.toJSON();\r\n\t\t\t\tif (dayjs().diff(dayjs(parsedDate), \"y\") < 50) {\r\n\t\t\t\t\tconst century: number = parseInt(dateIso8601.substr(0, 2), 10);\r\n\t\t\t\t\tconst centuries: string[] = [century - 1, century].map((year) =>\r\n\t\t\t\t\t\tyear.toString().padStart(2, \"0\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\tmatcher = `(?:${centuries.join(\"|\")})` + dateIso8601.substr(2, 8);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmatcher = dateIso8601.substr(0, 10);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`${matcher}(?:T${DATE_MATCHER.TIME}(?:${DATE_MATCHER.TIMEZONE})?)?`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns gender validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic gender(codiceFiscale?: string): RegExp {\r\n\t\tconst parsedGender = codiceFiscale && this.parser.cfToGender(codiceFiscale);\r\n\t\tconst matcher: string = parsedGender || `[${Gender.toArray().join(\"\")}]`;\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns place validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic async place(codiceFiscale?: string): Promise {\r\n\t\tlet matcher: string = \".{1,32}\";\r\n\t\tconst parsedPlace =\r\n\t\t\tcodiceFiscale && (await this.parser.cfToBirthPlace(codiceFiscale));\r\n\r\n\t\tif (parsedPlace) {\r\n\t\t\tconst nameMatcher: string = parsedPlace.name.replace(/./gu, (c) =>\r\n\t\t\t\tdiacriticRemover[c] === c ? c : `[${c}${diacriticRemover[c]}]`\r\n\t\t\t);\r\n\t\t\tmatcher = `(?:(?:${nameMatcher})|${parsedPlace.belfioreCode})`;\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tpublic deomocode(omocode: string): string {\r\n\t\treturn omocode.replace(/\\d/gu, (n: any) => `[${n}${Omocodes[n]}]`);\r\n\t}\r\n\r\n\tprivate isolatedInsensitiveTailor(matcher: string): RegExp {\r\n\t\treturn new RegExp(`^(?:${matcher})$`, \"iu\");\r\n\t}\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDATE_OFFSET,\r\n\tDATE_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport type IMismatchVerboseErrors from \"../interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport default class CFMismatchValidator {\r\n\tprivate pattern: Pattern;\r\n\tprivate parser: Parser;\r\n\tconstructor(\r\n\t\tbelfioreConnector: IBelfioreConnector,\r\n\t\tprivate readonly codiceFiscale: string\r\n\t) {\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\tprivate get hasLastName() {\r\n\t\treturn this.codiceFiscale?.length >= LASTNAME_OFFSET + LASTNAME_SIZE;\r\n\t}\r\n\r\n\tprivate get hasFirstName() {\r\n\t\treturn this.codiceFiscale?.length >= FIRSTNAME_OFFSET + FIRSTNAME_SIZE;\r\n\t}\r\n\tprivate get hasBirthYear() {\r\n\t\treturn this.codiceFiscale?.length >= YEAR_OFFSET + YEAR_SIZE;\r\n\t}\r\n\tprivate get hasBirthDate() {\r\n\t\treturn this.codiceFiscale?.length >= DATE_OFFSET + DATE_SIZE;\r\n\t}\r\n\tprivate get hasGender() {\r\n\t\treturn this.codiceFiscale?.length >= GENDER_OFFSET + GENDER_SIZE;\r\n\t}\r\n\tprivate get hasBirthPlace() {\r\n\t\treturn this.codiceFiscale?.length >= PLACE_OFFSET + PLACE_SIZE;\r\n\t}\r\n\r\n\tprivate get hasCRC() {\r\n\t\treturn this.codiceFiscale?.length >= CRC_OFFSET + CRC_SIZE;\r\n\t}\r\n\r\n\tpublic async matchPersonalInfo(\r\n\t\tpersonalInfo: Omit & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise {\r\n\t\treturn (await this.pattern.codiceFiscale(personalInfo)).test(\r\n\t\t\tthis.codiceFiscale\r\n\t\t);\r\n\t}\r\n\tpublic async mismatchPersonalInfo(\r\n\t\tpersonalInfo: Omit & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise {\r\n\t\treturn !!(\r\n\t\t\tthis.codiceFiscale &&\r\n\t\t\tpersonalInfo &&\r\n\t\t\tpersonalInfo.lastName &&\r\n\t\t\tpersonalInfo.firstName &&\r\n\t\t\t(personalInfo.date ||\r\n\t\t\t\t(personalInfo.day && personalInfo.month && personalInfo.year)) &&\r\n\t\t\tpersonalInfo.gender &&\r\n\t\t\tpersonalInfo.place &&\r\n\t\t\t!(await this.matchPersonalInfo(personalInfo))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchLastName(lastName?: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasLastName &&\r\n\t\t\tthis.pattern.lastName(this.codiceFiscale).test(lastName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchLastName(lastName?: string): boolean {\r\n\t\treturn this.hasLastName && !!lastName && !this.matchLastName(lastName);\r\n\t}\r\n\r\n\tpublic matchFirstName(firstName: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasFirstName &&\r\n\t\t\tthis.pattern.firstName(this.codiceFiscale).test(firstName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchFirstName(firstName: string): boolean {\r\n\t\treturn this.hasFirstName && !!firstName && !this.matchFirstName(firstName);\r\n\t}\r\n\r\n\tpublic matchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\tif (this.hasBirthDate) {\r\n\t\t\tconst parsedCfDate = this.parser.cfToBirthDate(this.codiceFiscale);\r\n\t\t\tconst parsedDate = DateUtils.parseDate(birthDate);\r\n\t\t\tif (parsedCfDate && parsedDate) {\r\n\t\t\t\treturn dayjs(parsedCfDate).isSame(parsedDate, \"d\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic mismatchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthYear &&\r\n\t\t\t!!DateUtils.parseDate(birthDate) &&\r\n\t\t\t!this.matchBirthDate(birthDate)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchGender(gender: Genders | string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasGender &&\r\n\t\t\tthis.pattern.gender(this.codiceFiscale).test(gender || \"\")\r\n\t\t);\r\n\t}\r\n\r\n\tpublic mismatchGender(gender: Genders | string): boolean {\r\n\t\treturn this.hasGender && !!gender && !this.matchGender(gender);\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async matchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tif (this.hasBirthPlace && birthPlace) {\r\n\t\t\tconst matcher = await this.pattern.place(this.codiceFiscale);\r\n\t\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\r\n\t\t\treturn !!parsedBirthPlace && matcher.test(parsedBirthPlace?.belfioreCode);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async mismatchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthPlace &&\r\n\t\t\t!!birthPlace &&\r\n\t\t\t!(await this.matchBirthPlace(birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @param codiceFiscale Complete CF to parse\r\n\t * @return Verbose errors\r\n\t */\r\n\tpublic get errors(): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, false),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, true),\r\n\t\t])\r\n\t\t\t.then(([placeCheck, placeCreationExpirationCheck]) => ({\r\n\t\t\t\t// Checking lastName validity\r\n\t\t\t\t...(this.parser.cfToLastName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { lastName: \"MISSING_OR_INVALID_LAST_NAME\" }),\r\n\t\t\t\t// Checking firstName validity\r\n\t\t\t\t...(this.parser.cfToFirstName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { firstName: \"MISSING_OR_INVALID_FIRST_NAME\" }),\r\n\t\t\t\t// Checking Date validity\r\n\t\t\t\t...(this.parser.cfToBirthDate(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DATE\" }),\r\n\t\t\t\t// Checking Day validity\r\n\t\t\t\t...(this.parser.cfToBirthDay(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DAY\" }),\r\n\t\t\t\t// Checking Month validity\r\n\t\t\t\t...(this.parser.cfToBirthMonth(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_MONTH\" }),\r\n\t\t\t\t// Checking Year validity\r\n\t\t\t\t...(this.parser.cfToBirthYear(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_YEAR\" }),\r\n\t\t\t\t// Checking Gender validity\r\n\t\t\t\t...(this.parser.cfToGender(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { gender: \"MISSING_DAY\" }),\r\n\t\t\t\t// Checking Place validity\r\n\t\t\t\t...(placeCheck ? {} : { place: \"MISSING_OR_INVALID_PLACE\" }),\r\n\t\t\t\t// Checking Place Creation/Expiration vs Birthdate validity\r\n\t\t\t\t...(placeCreationExpirationCheck\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: {\r\n\t\t\t\t\t\t\tplace: \"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE\",\r\n\t\t\t\t\t\t\tdate: \"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE\",\r\n\t\t\t\t\t }),\r\n\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t...(this.codiceFiscale\r\n\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t?.toUpperCase() === CheckDigitizer.checkDigit(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { crc: \"INVALID_CRC_CODE\" }),\r\n\r\n\t\t\t\t// Checking length\r\n\t\t\t\t...(this.hasCRC ? {} : { crc: \"MISSING_CRC_CODE\" }),\r\n\t\t\t}))\r\n\t\t\t.then((errors) => (Object.keys(errors).length ? errors : null));\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic get valid(): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.pattern.codiceFiscale(),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale),\r\n\t\t]).then(\r\n\t\t\t([cfPattern, cfToBirthPlace]) =>\r\n\t\t\t\t!(\r\n\t\t\t\t\t// Checking length\r\n\t\t\t\t\t(\r\n\t\t\t\t\t\t!this.hasCRC ||\r\n\t\t\t\t\t\t// Checking form validity\r\n\t\t\t\t\t\t!cfPattern.test(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t\t\tthis.codiceFiscale\r\n\t\t\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t\t\t?.toUpperCase() !==\r\n\t\t\t\t\t\t\tCheckDigitizer.checkDigit(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking Birth date/place validity\r\n\t\t\t\t\t\t!cfToBirthPlace\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\tpublic get invalid(): Promise {\r\n\t\treturn this.valid.then((isValid) => !!this.codiceFiscale && !isValid);\r\n\t}\r\n}\r\n","import {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CFMismatchValidator from \"./cf-mismatch-validator.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\nimport dayjs from \"dayjs\";\r\n\r\nexport default class Validator {\r\n\tprivate parser: Parser;\r\n\tprivate pattern: Pattern;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n\r\n\tpublic codiceFiscale(codiceFiscale: string): CFMismatchValidator {\r\n\t\treturn new CFMismatchValidator(this.belfioreConnector, codiceFiscale);\r\n\t}\r\n\r\n\tpublic isLastNameValid(lastName: string): boolean {\r\n\t\treturn this.pattern.lastName().test(lastName);\r\n\t}\r\n\tpublic isLastNameInvalid(lastName: string): boolean {\r\n\t\treturn !!lastName && !this.isLastNameValid(lastName);\r\n\t}\r\n\r\n\tpublic isFirstNameValid(firstName: string): boolean {\r\n\t\treturn this.pattern.firstName().test(firstName);\r\n\t}\r\n\tpublic isFirstNameInvalid(firstName: string): boolean {\r\n\t\treturn !!firstName && !this.isFirstNameValid(firstName);\r\n\t}\r\n\r\n\tpublic isBirthDateValid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!DateUtils.parseDate(birthDate);\r\n\t}\r\n\tpublic isBirthDateInvalid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!birthDate && !this.isBirthDateValid(birthDate);\r\n\t}\r\n\r\n\tpublic isGenderValid(gender: Genders | string): boolean {\r\n\t\treturn this.pattern.gender().test(gender);\r\n\t}\r\n\tpublic isGenderInvalid(gender: Genders | string): boolean {\r\n\t\treturn !!gender && !this.isGenderValid(gender);\r\n\t}\r\n\r\n\tpublic async isBirthPlaceValid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\t!!parsedBirthPlace &&\r\n\t\t\t!!(await this.belfioreConnector.findByCode(parsedBirthPlace.belfioreCode))\r\n\t\t);\r\n\t}\r\n\tpublic async isBirthPlaceInvalid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\treturn !!birthPlace && !(await this.isBirthPlaceValid(birthPlace));\r\n\t}\r\n\r\n\tpublic async birthDatePlaceMatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t(!!(await this.belfioreConnector\r\n\t\t\t\t.from(birthDate)\r\n\t\t\t\t.findByCode(parsedPlace.belfioreCode)) ||\r\n\t\t\t\t// Ignoring control for people born before CF introduction\r\n\t\t\t\t!dayjs(DateUtils.parseDate(birthDate)).isAfter(\r\n\t\t\t\t\tCF_INTRODUCTION_DATE,\r\n\t\t\t\t\t\"day\"\r\n\t\t\t\t))\r\n\t\t);\r\n\t}\r\n\tpublic async birthDatePlaceMismatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t!(await this.birthDatePlaceMatch(birthDate, birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise {\r\n\t\treturn await this.birthDatePlaceMatch(birthDate, birthPlace);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMismatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise {\r\n\t\treturn await this.birthDatePlaceMismatch(birthDate, birthPlace);\r\n\t}\r\n}\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport CFMismatchValidator from \"./classes/cf-mismatch-validator.class\";\r\nimport CheckDigitizer from \"./classes/check-digitizer.class\";\r\nimport Gender from \"./classes/gender.class\";\r\nimport Parser from \"./classes/parser.class\";\r\nimport Pattern from \"./classes/pattern.class\";\r\nimport Validator from \"./classes/validator.class\";\r\nimport * as VALIDATOR from \"./const/matcher.const\";\r\nimport * as Matcher from \"./const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\ttype DateDay,\r\n\ttype DateMonth,\r\n\tDateUtils,\r\n\ttype MultiFormatDate,\r\n} from \"./date-utils/\";\r\nimport BirthMonth from \"./enums/birth-month.enum\";\r\nimport CRC from \"./enums/crc.enum\";\r\nimport Omocodes from \"./enums/omocodes.enum\";\r\nimport type Genders from \"./types/genders.type\";\r\nimport IMismatchVerboseErrors from \"./interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport type {\r\n\tBelfiorePlace,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tGenders,\r\n\tMultiFormatDate,\r\n\tIMismatchVerboseErrors,\r\n};\r\n\r\nexport default class CodiceFiscaleUtils {\r\n\tpublic readonly validator: Validator;\r\n\tpublic readonly parser: Parser;\r\n\tpublic readonly pattern: Pattern;\r\n\r\n\tconstructor(public readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.validator = new Validator(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n}\r\n\r\nexport {\r\n\tBirthMonth,\r\n\tCheckDigitizer,\r\n\tCRC,\r\n\tDATE_MATCHER,\r\n\tDateUtils,\r\n\tGender,\r\n\tOmocodes,\r\n\tVALIDATOR,\r\n\tMatcher,\r\n\tCFMismatchValidator,\r\n\tParser,\r\n\tPattern,\r\n\tValidator,\r\n\tCodiceFiscaleUtils,\r\n};\r\n"],"names":["CRC_OFFSET","YEAR","MONTH","DAYS_30_MONTHS","DAYS_31_MONTHS","MONTH_DAY","HOURS","MINUTES","SECONDS","MILLISECONDS","TIMEZONE","TIME","ISO8601_SHORT_DATE","ISO8601_DATE_TIME","DateUtils","parseDate","date","Date","RegExp","test","Array","isArray","length","some","value","isNaN","parsedDate","year","month","day","dayjs","UTC","isValid","toDate","err","ymdToDate","this","CONSONANT_LIST","VOWEL_LIST","OMOCODE_NUMBER_LIST","OMOCODE_NON_ZERO_NUMBER_LIST","OMOCODE_ZERO_LIST","MONTH_LIST","MONTH_30DAYS_LIST","MONTH_31DAYS_LIST","CITY_CODE_LIST","COUNTRY_CODE_LIST","CF_NAME_MATCHER","CF_SURNAME_MATCHER","CF_FULL_NAME_MATCHER","YEAR_MATCHER","LEAP_YEAR_MATCHER","MONTH_MATCHER","DAY_2X_MATCHER","DAY_3X_MATCHER","DAY_29_MATCHER","DAY_30_MATCHER","DAY_31_MATCHER","DAY_MATCHER","MALE_DAY_MATCHER","FEMALE_DAY_MATCHER","MONTH_DAY_MATCHER","FULL_DATE_MATCHER","MALE_FULL_DATE_MATCHER","FEMALE_FULL_DATE_MATCHER","CITY_CODE_MATCHER","COUNTRY_CODE_MATCHER","BELFIORE_CODE_MATCHER","CHECK_DIGIT","CODICE_FISCALE","PARTIAL_CF_NAME_MATCHER","PARTIAL_CF_FULL_NAME","PARTIAL_YEAR","PARTIAL_MONTH_DAY","PARTIAL_FULL_DATE","PARTIAL_BELFIORE_CODE_MATCHER","PARTIAL_CF","CRC","BirthMonth","CRC$1","CheckDigitizer","checkDigit","codiceFiscale","partialCF","substr","partialCfValue","charValue","evaluateChar","String","fromCharCode","CRC_MOD","CHAR_OFFSET","generator","evaluateCharGenerator","Symbol","iterator","static","index","char","toUpperCase","parseInt","charCodeAt","GenderWeight","BirthMonth$1","Omocodes","GenderWeight$1","Omocodes$1","Gender","getDay","genderDay","plainDay","F","MAX_MONTH_DAY","getGender","toArray","find","gender","genderizeDay","CF_INTRODUCTION_DATE","diacriticRemover","DiacriticRemover","Parser","belfioreConnector","constructor","OMOCODE_BITMAP","cfDeomocode","deomocodedCf","partialCfDeomocode","substring","appyCaseToChar","cfOmocode","omocodeId","omocodedCf","split","i","o","crc","partialCf","slice","join","cfOmocodeId","cfOmocodeBitmap","filter","map","cfToLastName","cfLastNamePart","LASTNAME_OFFSET","lastNameCf","cons","match","vow","matchingLength","JOLLY_CHAR","cfToFirstName","cfFirstNamePart","FIRSTNAME_OFFSET","cfToGender","GENDER_OFFSET","cfGenderPart","genderInt","cfToBirthYear","YEAR_OFFSET","cfBirthYearPart","birthYear","current2DigitsYear","format","century","subtract","cfToBirthMonth","MONTH_OFFSET","cfBirthMonthPart","birthMonth","cfToBirthDay","DAY_OFFSET","cfBirthDayPart","birthDay","cfToBirthDate","cfToBirthPlace","checkBirthDateConsistency","PLACE_OFFSET","cfBirthPlacePart","belfioreCode","birthPlace","findByCode","creationDate","expirationDate","birthDate","isBirthDateAfterCfIntroduction","add","isBefore","isAfter","cfDecode","fiscalCode","undefined","place","personalInfo","firstName","lastName","lastNameToCf","trim","replace","charExtractor","padEnd","firstNameToCf","consonants","yearToCf","parsedYear","monthToCf","dayGenderToCf","genderValue","yearMonthDayToDate","param","parsePlace","verifiedBirthPlace","findByName","dateGenderToCf","getFullYear","getMonth","getDate","placeToCf","dateOrName","nameOrProvince","provinceId","name","province","placeFinder","byProvince","from","foundPlace","encodeCf","dtParams","async","cf","cfPartGenerator","cfValue","checkBitmap","offset","charOmocode","text","CHAR_LIST","charMatcher","partialCodiceFiscale","position","targetChar","counterCaseChar","isUpperCase","isLowerCase","toLowerCase","INVALID_SURNAME","INVALID_NAME","INVALID_DAY","INVALID_GENDER","INVALID_DAY_OR_GENDER","INVALID_YEAR","INVALID_DATE","CfuError","Error","errorCode","super","Object","entries","ErrorMessages","errId","Pattern","parser","cfLastName","matcher","isolatedInsensitiveTailor","cfFirstName","cfYear","deomocode","cfMonth","cfDay","parsedDayM","parsedDayF","cfDayGender","parsedDayGender","cfDateGender","includes","parsedDateGender","parseDeomocode","g","parsedGender","cfPlace","birthDateOrName","placeName","parsedPlace","parsedCf","validator","cfMatcher","toString","LETTER_SET","matcherBy","SEPARATOR_SET","diacriticizer","matchingChars","insensitiveMatcher","diacriticsVowelMatcher","midDiacriticVowelMatcher","endingDiacritcVowelMatcher","divider","diacriticsVowelList","diacriticsConsonantList","chars","DATE_MATCHER.ISO8601_DATE_TIME","dateIso8601","toJSON","diff","padStart","DATE_MATCHER.TIME","DATE_MATCHER.TIMEZONE","c","omocode","n","CFMismatchValidator","pattern","hasLastName","hasFirstName","hasBirthYear","hasBirthDate","DATE_OFFSET","hasGender","hasBirthPlace","hasCRC","matchPersonalInfo","mismatchPersonalInfo","matchLastName","mismatchLastName","matchFirstName","mismatchFirstName","matchBirthDate","parsedCfDate","isSame","mismatchBirthDate","matchGender","mismatchGender","matchBirthPlace","parsedBirthPlace","mismatchBirthPlace","errors","Promise","all","then","placeCheck","placeCreationExpirationCheck","keys","valid","cfPattern","invalid","Validator","isLastNameValid","isLastNameInvalid","isFirstNameValid","isFirstNameInvalid","isBirthDateValid","isBirthDateInvalid","isGenderValid","isGenderInvalid","isBirthPlaceValid","isBirthPlaceInvalid","birthDatePlaceMatch","birthDatePlaceMismatch","birthPlaceDateMatch","birthPlaceDateMismatch","CodiceFiscaleUtils"],"mappings":"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AA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACL,CACKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAsB,CACtBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAyB,CACzBC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CACL,2CACKC,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA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"} \ No newline at end of file +{"version":3,"file":"index.mjs","sources":["../src/const/cf-offsets.const.ts","../src/date-utils/date-matcher.const.ts","../src/date-utils/date-utils.class.ts","../src/const/matcher.const.ts","../src/enums/crc.enum.ts","../src/enums/birth-month.enum.ts","../src/classes/check-digitizer.class.ts","../src/functions/generator-wrapper.function.ts","../src/enums/gender-weight.enum.ts","../src/enums/omocodes.enum.ts","../src/classes/gender.class.ts","../src/const/logic.const.ts","../src/classes/parser.class.ts","../src/const/error-messages.const.ts","../src/classes/cfu-error.class.ts","../src/classes/pattern.class.ts","../src/classes/cf-mismatch-validator.class.ts","../src/classes/validator.class.ts","../src/index.ts"],"sourcesContent":["export const LASTNAME_OFFSET = 0;\r\nexport const LASTNAME_SIZE = 3;\r\nexport const FIRSTNAME_OFFSET = 3;\r\nexport const FIRSTNAME_SIZE = 3;\r\nexport const YEAR_OFFSET = 6;\r\nexport const YEAR_SIZE = 2;\r\nexport const MONTH_OFFSET = 8;\r\nexport const MONTH_SIZE = 1;\r\nexport const DAY_OFFSET = 9;\r\nexport const DAY_SIZE = 2;\r\nexport const DATE_OFFSET = YEAR_OFFSET;\r\nexport const DATE_SIZE = YEAR_SIZE + MONTH_SIZE + DAY_SIZE;\r\nexport const GENDER_OFFSET = DAY_OFFSET;\r\nexport const GENDER_SIZE = 1;\r\nexport const PLACE_OFFSET = 11;\r\nexport const PLACE_SIZE = 4;\r\nexport const CRC_OFFSET = 15;\r\nexport const CRC_SIZE = 1;\r\nexport const CF_SIZE =\r\n\tLASTNAME_SIZE + FIRSTNAME_SIZE + DATE_SIZE + PLACE_SIZE + CRC_SIZE;\r\n","const YEAR: string = \"[12][0-9]{3}\";\r\nconst MONTH: string = \"0[1-9]|1[0-2]\";\r\nconst DAY: string = \"0[1-9]|[12][0-9]|3[01]\";\r\nconst LEAP_MONTH: string = \"02\";\r\nconst DAYS_30_MONTHS: string = \"0[469]|11\";\r\nconst DAYS_31_MONTHS: string = \"0[13578]|1[02]\";\r\nconst MONTH_DAY: string = `(?:${MONTH})-(?:0[1-9]|[12]\\\\d)|(?:${DAYS_30_MONTHS})-30|(?:${DAYS_31_MONTHS})-3[01]`;\r\nconst HOURS: string = \"[01]\\\\d|2[0-3]\";\r\nconst MINUTES: string = \"[0-5]\\\\d\";\r\nconst SECONDS: string = MINUTES;\r\nconst MILLISECONDS: string = \"\\\\d{3}\";\r\nconst TIMEZONE: string = `Z|[-+](?:${HOURS})(?::?${MINUTES})?`;\r\nconst TIME: string = `(?:${HOURS})(?::${MINUTES}(?::${SECONDS}(\\\\.${MILLISECONDS})?)?(?:${TIMEZONE})?)?`;\r\nconst ISO8601_SHORT_DATE: string = `${YEAR}-(?:${MONTH_DAY})(?:T${TIME})?`;\r\nconst ISO8601_DATE_TIME: string = `${YEAR}(?:-(?:(?:${MONTH})|(?:${MONTH_DAY})(?:T${TIME})?))?`;\r\n\r\n/**\r\n * Date Matcher consts\r\n * @property {Object} DATE_VALIDATOR\r\n * @property {string} DATE_VALIDATOR.YEAR Matcher for ISO8601 4 digits year (limited to 1000-2999)\r\n * @property {string} DATE_VALIDATOR.MONTH Matcher for ISO8601 2 digits month (01-12)\r\n * @property {string} DATE_VALIDATOR.DAY Matcher for ISO8601 2 digits day (01-31)\r\n * @property {string} DATE_VALIDATOR.LEAP_MONTH Matcher for ISO8601 2 digits leap month\r\n * @property {string} DATE_VALIDATOR.DAYS_30_MONTHS Matcher for ISO8601 2 digits 30 days month\r\n * @property {string} DATE_VALIDATOR.DAYS_31_MONTHS Matcher for ISO8601 2 digits 31 days month\r\n * @property {string} DATE_VALIDATOR.MONTH_DAY Matcher for ISO8601 2 + 2 digits (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.ISO8601_SHORT_DATE Matcher for ISO8601 date: 4+2+2 digits year + (28~31)month + day\r\n * @property {string} DATE_VALIDATOR.HOURS Matcher for ISO8601 2 digits hours (00-23)\r\n * @property {string} DATE_VALIDATOR.MINUTES Matcher for ISO8601 2 digits minutes (00-59)\r\n * @property {string} DATE_VALIDATOR.SECONDS Matcher for ISO8601 2 digits seconds (00-59)\r\n * @property {string} DATE_VALIDATOR.MILLISECONDS Matcher for ISO8601 3 digits milliseconds (000-999)\r\n * @property {string} DATE_VALIDATOR.TIMEZONE Matcher for ISO8601 timezone (Z or ±## or ±##:## or ±####)\r\n * @property {string} DATE_VALIDATOR.TIME Matcher for ISO8601 for time (T## , T##:## , T##:##:## , T##:##:##.###)\r\n * @property {string} DATE_VALIDATOR.ISO8601_DATE_TIME Matcher for ISO8601 date/time format\r\n */\r\nexport {\r\n\tDAY,\r\n\tDAYS_30_MONTHS,\r\n\tDAYS_31_MONTHS,\r\n\tHOURS,\r\n\tISO8601_DATE_TIME,\r\n\tISO8601_SHORT_DATE,\r\n\tLEAP_MONTH,\r\n\tMILLISECONDS,\r\n\tMINUTES,\r\n\tMONTH,\r\n\tMONTH_DAY,\r\n\tSECONDS,\r\n\tTIME,\r\n\tTIMEZONE,\r\n\tYEAR,\r\n};\r\n","import dayjs, { Dayjs } from \"dayjs\";\r\nimport type DateDay from \"./date-day.type\";\r\nimport { ISO8601_DATE_TIME } from \"./date-matcher.const\";\r\nimport type DateMonth from \"./date-month.type\";\r\nimport type MultiFormatDate from \"./multi-format-date.type\";\r\nexport default class DateUtils {\r\n\t/**\r\n\t * Parse a Dated and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @returns Parsed Date or null if not valid\r\n\t */\r\n\tpublic static parseDate(date?: MultiFormatDate | null): Date | null {\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\tdate instanceof Date ||\r\n\t\t\t\t(typeof date === \"string\" &&\r\n\t\t\t\t\tnew RegExp(`^(?:${ISO8601_DATE_TIME})$`).test(date)) ||\r\n\t\t\t\t(Array.isArray(date) &&\r\n\t\t\t\t\tdate.length &&\r\n\t\t\t\t\t!date.some((value) => typeof value !== \"number\" || isNaN(value)))\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\ttry {\r\n\t\t\tlet parsedDate: Dayjs;\r\n\t\t\tif (Array.isArray(date)) {\r\n\t\t\t\tconst [year, month = 0, day = 1] = date;\r\n\t\t\t\tif (month >= 0 && month <= 11 && day > 0 && day <= 31) {\r\n\t\t\t\t\tparsedDate = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tparsedDate = dayjs(date);\r\n\t\t\t}\r\n\t\t\treturn parsedDate.isValid() ? parsedDate.toDate() : null;\r\n\t\t} catch (err) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\tpublic static ymdToDate(\r\n\t\tyear?: number | null,\r\n\t\tmonth?: DateMonth | null,\r\n\t\tday?: DateDay | null\r\n\t): Date | null {\r\n\t\treturn this.parseDate([year, month, day] as number[]);\r\n\t}\r\n}\r\n","export const CONSONANT_LIST: string = \"B-DF-HJ-NP-TV-Z\";\r\nexport const VOWEL_LIST: string = \"AEIOU\";\r\nexport const OMOCODE_NUMBER_LIST: string = \"\\\\dLMNP-V\";\r\nexport const OMOCODE_NON_ZERO_NUMBER_LIST: string = \"1-9MNP-V\";\r\nexport const OMOCODE_ZERO_LIST: string = \"0L\";\r\nexport const MONTH_LIST: string = \"A-EHLMPR-T\";\r\nexport const MONTH_30DAYS_LIST: string = \"DHPS\";\r\nexport const MONTH_31DAYS_LIST: string = \"ACELMRT\";\r\nexport const CITY_CODE_LIST: string = \"A-M\";\r\nexport const COUNTRY_CODE_LIST: string = \"Z\";\r\n\r\nexport const CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}][${VOWEL_LIST}X]|[${VOWEL_LIST}]X{2}|[${CONSONANT_LIST}]{2}[A-Z]`;\r\nexport const CF_SURNAME_MATCHER: string = CF_NAME_MATCHER;\r\nexport const CF_FULL_NAME_MATCHER: string = `(?:${CF_NAME_MATCHER}){2}`;\r\n\r\nexport const YEAR_MATCHER: string = `[${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const LEAP_YEAR_MATCHER: string =\r\n\t\"[02468LNQSU][048LQU]|[13579MPRTV][26NS]\";\r\nexport const MONTH_MATCHER: string = `[${MONTH_LIST}]`;\r\nexport const DAY_2X_MATCHER: string = \"[26NS]\";\r\nexport const DAY_3X_MATCHER: string = \"[37PT]\";\r\nexport const DAY_29_MATCHER: string = `[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1256MNRS][${OMOCODE_NUMBER_LIST}]`;\r\nexport const DAY_30_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}]`;\r\nexport const DAY_31_MATCHER: string = `[${DAY_3X_MATCHER}][${OMOCODE_ZERO_LIST}1M]`;\r\n\r\nexport const DAY_MATCHER: string = `(?:${DAY_29_MATCHER}|${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MALE_DAY_MATCHER: string = `(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[12MN][${OMOCODE_NUMBER_LIST}]|[3P][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const FEMALE_DAY_MATCHER: string = `(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[56RS][${OMOCODE_NUMBER_LIST}]|[7T][${OMOCODE_ZERO_LIST}1M])`;\r\nexport const MONTH_DAY_MATCHER: string = `${MONTH_MATCHER}(?:${DAY_29_MATCHER})|[${MONTH_30DAYS_LIST}]${DAY_30_MATCHER}|[${MONTH_31DAYS_LIST}]${DAY_31_MATCHER}`;\r\nexport const FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[15MR][${OMOCODE_NUMBER_LIST}]|${DAY_2X_MATCHER}[0-8LMNP-U])|[${MONTH_30DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}[${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_2X_MATCHER}[9V])|(?:${LEAP_YEAR_MATCHER})B${DAY_2X_MATCHER}[9V]`;\r\nexport const MALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[1M][${OMOCODE_NUMBER_LIST}]|[2N][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][3P][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][2N][9V])|(?:${LEAP_YEAR_MATCHER})B[2N][9V]`;\r\nexport const FEMALE_FULL_DATE_MATCHER: string = `${YEAR_MATCHER}(?:${MONTH_MATCHER}(?:[4Q][${OMOCODE_NON_ZERO_NUMBER_LIST}]|[5R][${OMOCODE_NUMBER_LIST}]|[6S][0-8LMNP-U])|[${MONTH_30DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}]|[${MONTH_31DAYS_LIST}][7T][${OMOCODE_ZERO_LIST}1M]|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}][6S][9V])|(?:${LEAP_YEAR_MATCHER})B[6S][9V]`;\r\n\r\nexport const CITY_CODE_MATCHER: string = `[${CITY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}|[${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\nexport const COUNTRY_CODE_MATCHER: string = `${COUNTRY_CODE_LIST}[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2}`;\r\nexport const BELFIORE_CODE_MATCHER: string = `(?:[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]{2})|(?:[${CITY_CODE_LIST}][${OMOCODE_ZERO_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]|[${OMOCODE_ZERO_LIST}][${OMOCODE_NON_ZERO_NUMBER_LIST}]))`;\r\n\r\nexport const CHECK_DIGIT: string = \"[A-Z]\";\r\n\r\nexport const CODICE_FISCALE: string = `${CF_FULL_NAME_MATCHER}(?:${FULL_DATE_MATCHER})(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}`;\r\n\r\nexport const PARTIAL_CF_NAME_MATCHER: string = `[A-Z][${VOWEL_LIST}]?|[${CONSONANT_LIST}]{1,2}`;\r\nexport const PARTIAL_CF_FULL_NAME: string = `(?:${PARTIAL_CF_NAME_MATCHER})|(?:(?:${CF_NAME_MATCHER})(?:${PARTIAL_CF_NAME_MATCHER})?)`;\r\nexport const PARTIAL_YEAR: string = `[${OMOCODE_NUMBER_LIST}]`;\r\nexport const PARTIAL_MONTH_DAY: string = `${MONTH_MATCHER}[${OMOCODE_ZERO_LIST}12456MNQRS]?|[${MONTH_30DAYS_LIST}${MONTH_31DAYS_LIST}]${DAY_3X_MATCHER}`;\r\nexport const PARTIAL_FULL_DATE: string = `${PARTIAL_YEAR}|(?:${YEAR_MATCHER}(?:${PARTIAL_MONTH_DAY})?)`;\r\nexport const PARTIAL_BELFIORE_CODE_MATCHER: string = `[${CITY_CODE_LIST}${COUNTRY_CODE_LIST}](?:[${OMOCODE_NON_ZERO_NUMBER_LIST}][${OMOCODE_NUMBER_LIST}]?)?|[${COUNTRY_CODE_LIST}](?:[${OMOCODE_ZERO_LIST}][${OMOCODE_NUMBER_LIST}]?)?`;\r\n\r\nexport const PARTIAL_CF: string = `${PARTIAL_CF_FULL_NAME}|(?:${CF_FULL_NAME_MATCHER}(?:(?:${PARTIAL_FULL_DATE})|(?:${FULL_DATE_MATCHER})(?:(?:${PARTIAL_BELFIORE_CODE_MATCHER})|(?:${BELFIORE_CODE_MATCHER})${CHECK_DIGIT}?)?)?)?`;\r\n","enum CRC {\r\n \"B\",\r\n \"A\",\r\n \"K\",\r\n \"P\",\r\n \"L\",\r\n \"C\",\r\n \"Q\",\r\n \"D\",\r\n \"R\",\r\n \"E\",\r\n \"V\",\r\n \"O\",\r\n \"S\",\r\n \"F\",\r\n \"T\",\r\n \"G\",\r\n \"U\",\r\n \"H\",\r\n \"M\",\r\n \"I\",\r\n \"N\",\r\n \"J\",\r\n \"W\",\r\n \"Z\",\r\n \"Y\",\r\n \"X\",\r\n}\r\n\r\nexport default CRC;\r\n","enum BirthMonth {\r\n\t\"A\",\r\n\t\"B\",\r\n\t\"C\",\r\n\t\"D\",\r\n\t\"E\",\r\n\t\"H\",\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"P\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n}\r\n\r\nexport default BirthMonth;\r\n","import { CRC_OFFSET, LASTNAME_OFFSET } from \"../const/cf-offsets.const\";\r\nimport { PARTIAL_CF } from \"../const/matcher.const\";\r\nimport CRC from \"../enums/crc.enum\";\r\nimport generatorWrapper from \"../functions/generator-wrapper.function\";\r\nimport type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nimport type CodiceFiscaleCRC from \"../types/codice-fiscale-crc.type\";\r\nclass CheckDigitizer {\r\n\t/**\r\n\t * Evaluate given partial CF to produce last check digit character\r\n\t * @param codiceFiscale Partial or complete Fiscal Code to evaluate to produce last character\r\n\t * @returns 16th CF char\r\n\t */\r\n\tpublic static checkDigit(codiceFiscale: string): CodiceFiscaleCRC | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale === \"string\" &&\r\n\t\t\tnew RegExp(PARTIAL_CF).test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst partialCF = codiceFiscale.substr(LASTNAME_OFFSET, CRC_OFFSET);\r\n\t\t\tlet partialCfValue = 0;\r\n\t\t\tfor (const charValue of this.evaluateChar(partialCF)) {\r\n\t\t\t\tpartialCfValue += charValue as number;\r\n\t\t\t}\r\n\t\t\treturn String.fromCharCode(\r\n\t\t\t\t(partialCfValue % this.CRC_MOD) + this.CHAR_OFFSET\r\n\t\t\t) as CodiceFiscaleCRC;\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\tpublic static evaluateChar(\r\n\t\tpartialCF: string = \"\"\r\n\t): IGeneratorWrapper {\r\n\t\treturn generatorWrapper(this.evaluateCharGenerator(partialCF));\r\n\t}\r\n\r\n\tprivate static CHAR_OFFSET: number = 65;\r\n\tprivate static CRC_MOD: number = 26;\r\n\r\n\t/**\r\n\t * Partial FiscalCode Evaluator\r\n\t * @param Partial Fiscal Code to evaluate\r\n\t * @yields character value odd/even\r\n\t */\r\n\tprivate static *evaluateCharGenerator(partialCF: string = \"\"): Generator {\r\n\t\tif (typeof partialCF === \"string\" && partialCF.length) {\r\n\t\t\tfor (let index = 0; index < partialCF.length; index++) {\r\n\t\t\t\tlet char: string = partialCF[index].toUpperCase();\r\n\t\t\t\tconst isNumber: boolean = /^\\d$/u.test(char);\r\n\t\t\t\tif (isNumber) {\r\n\t\t\t\t\t// Numbers have always (odd/even) the same values of corresponding letters (0-9 => A-J)\r\n\t\t\t\t\tchar = String.fromCharCode(parseInt(char, 10) + this.CHAR_OFFSET);\r\n\t\t\t\t}\r\n\t\t\t\t// Odd/Even are shifted/swapped\r\n\t\t\t\t// array starts from 0, \"Agenzia delle Entrate\" documentation counts the string from 1\r\n\t\t\t\tconst isOdd: boolean = !(index % 2); // Odd according to documentation\r\n\t\t\t\tif (isOdd) {\r\n\t\t\t\t\t// Odd positions\r\n\t\t\t\t\tyield parseInt(CRC[char as any], 10);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// Even positions\r\n\t\t\t\t\tyield char.charCodeAt(0) - this.CHAR_OFFSET;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n}\r\n\r\nexport default CheckDigitizer;\r\n","import type IGeneratorWrapper from \"../interfaces/generator-wrapper.interface\";\r\nexport default function generatorWrapper<\r\n\tT = unknown,\r\n\tTReturn = any,\r\n\tTNext = unknown\r\n>(generator: Generator): IGeneratorWrapper {\r\n\tgenerator[Symbol.iterator] = () => generator;\r\n\treturn generator as IGeneratorWrapper;\r\n}\r\n","enum GenderWeight {\r\n\t\"M\" = 0,\r\n\t\"F\" = 40,\r\n}\r\n\r\nexport default GenderWeight;\r\n","enum Omocodes {\r\n\t\"L\",\r\n\t\"M\",\r\n\t\"N\",\r\n\t\"P\",\r\n\t\"Q\",\r\n\t\"R\",\r\n\t\"S\",\r\n\t\"T\",\r\n\t\"U\",\r\n\t\"V\",\r\n}\r\n\r\nexport default Omocodes;\r\n","import { DateDay } from \"../date-utils/\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport type Genders from \"../types/genders.type\";\r\n\r\nclass Gender {\r\n\tpublic static getDay(genderDay: number): DateDay | null {\r\n\t\tconst plainDay = genderDay % GenderWeight.F;\r\n\t\treturn plainDay > 0 && plainDay <= this.MAX_MONTH_DAY\r\n\t\t\t? (plainDay as DateDay)\r\n\t\t\t: null;\r\n\t}\r\n\r\n\tpublic static getGender(genderDay: number): Genders | null {\r\n\t\treturn (\r\n\t\t\tthis.toArray().find(\r\n\t\t\t\t(gender) =>\r\n\t\t\t\t\tgenderDay >= GenderWeight[gender] &&\r\n\t\t\t\t\tgenderDay <= GenderWeight[gender] + this.MAX_MONTH_DAY\r\n\t\t\t) || null\r\n\t\t);\r\n\t}\r\n\r\n\tpublic static genderizeDay(day: number, gender: Genders): number {\r\n\t\treturn day + GenderWeight[gender];\r\n\t}\r\n\r\n\tpublic static toArray(): Genders[] {\r\n\t\treturn [\"M\", \"F\"];\r\n\t}\r\n\r\n\tprivate static MAX_MONTH_DAY: number = 31;\r\n}\r\n\r\nexport default Gender;\r\n","export const CF_INTRODUCTION_DATE = new Date(\"1973-09-29\");\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDAY_OFFSET,\r\n\tDAY_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tMONTH_OFFSET,\r\n\tMONTH_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { CF_NAME_MATCHER, CF_SURNAME_MATCHER } from \"../const/matcher.const\";\r\nimport { CONSONANT_LIST, VOWEL_LIST } from \"../const/matcher.const\";\r\nimport { DateDay, DateMonth, DateUtils, MultiFormatDate } from \"../date-utils\";\r\nimport BirthMonth from \"../enums/birth-month.enum\";\r\nimport GenderWeight from \"../enums/gender-weight.enum\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Gender from \"./gender.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Parser {\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {}\r\n\r\n\t/**\r\n\t * Default omocode bitmap\r\n\t */\r\n\tpublic OMOCODE_BITMAP: number = 0b0111011011000000;\r\n\r\n\t/**\r\n\t * Convert omocode CF into plain one\r\n\t * @param codiceFiscale Partial or complete Omocode/Regular CF to parse, starting from LastName\r\n\t * @returns Regular CF w/o omocodes chars\r\n\t */\r\n\tpublic cfDeomocode(codiceFiscale: string): string {\r\n\t\tif (codiceFiscale && codiceFiscale.length <= YEAR_OFFSET) {\r\n\t\t\treturn codiceFiscale;\r\n\t\t}\r\n\t\tconst deomocodedCf = this.partialCfDeomocode(codiceFiscale);\r\n\t\tif (deomocodedCf.length < CRC_OFFSET) {\r\n\t\t\treturn deomocodedCf;\r\n\t\t}\r\n\t\tconst partialDeomocodedCf = deomocodedCf.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tCRC_OFFSET\r\n\t\t);\r\n\t\treturn (\r\n\t\t\tpartialDeomocodedCf +\r\n\t\t\tthis.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(deomocodedCf) || \"\",\r\n\t\t\t\tdeomocodedCf.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic cfOmocode(codiceFiscale: string, omocodeId: number): string {\r\n\t\tif (!omocodeId) {\r\n\t\t\treturn this.cfDeomocode(codiceFiscale);\r\n\t\t}\r\n\t\tconst omocodedCf = codiceFiscale.split(\"\");\r\n\t\t// tslint:disable-next-line: prefer-for-of\r\n\t\tfor (let i = codiceFiscale.length - 1, o = 0; i >= 0; i--) {\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\tif ((2 ** i) & this.OMOCODE_BITMAP) {\r\n\t\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t\tconst charToEncode: boolean = !!(omocodeId & (2 ** o));\r\n\t\t\t\tconst isOmocode: boolean = isNaN(parseInt(omocodedCf[i], 10));\r\n\t\t\t\tif (charToEncode !== isOmocode) {\r\n\t\t\t\t\tconst char: any = omocodedCf[i].toUpperCase();\r\n\t\t\t\t\tomocodedCf[i] = Omocodes[char];\r\n\t\t\t\t}\r\n\t\t\t\to++;\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst crc = omocodedCf[CRC_OFFSET];\r\n\t\tif (crc) {\r\n\t\t\tconst partialCf = omocodedCf.slice(LASTNAME_OFFSET, CRC_OFFSET).join(\"\");\r\n\t\t\tomocodedCf[CRC_OFFSET] = this.appyCaseToChar(\r\n\t\t\t\tCheckDigitizer.checkDigit(partialCf) || \"\",\r\n\t\t\t\tcrc\r\n\t\t\t);\r\n\t\t}\r\n\t\treturn omocodedCf.join(\"\");\r\n\t}\r\n\r\n\tpublic cfOmocodeId(codiceFiscale: string): number {\r\n\t\tconst cfOmocodeBitmap = codiceFiscale\r\n\t\t\t.split(\"\")\r\n\t\t\t// tslint:disable-next-line: no-bitwise\r\n\t\t\t.filter((char, index) => (2 ** index) & this.OMOCODE_BITMAP)\r\n\t\t\t.map((char) => (/^[a-z]$/i.test(diacriticRemover[char]) ? 1 : 0))\r\n\t\t\t.join(\"\");\r\n\t\treturn parseInt(cfOmocodeBitmap, 2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible lastName\r\n\t */\r\n\tpublic cfToLastName(codiceFiscale: string): string | null {\r\n\t\tconst cfLastNamePart = codiceFiscale?.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfLastNamePart.length !== LASTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(?:${CF_SURNAME_MATCHER})`, \"iu\").test(cfLastNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst lastNameCf = codiceFiscale.substring(\r\n\t\t\tLASTNAME_OFFSET,\r\n\t\t\tLASTNAME_OFFSET + LASTNAME_SIZE\r\n\t\t);\r\n\r\n\t\tconst [cons = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) || [];\r\n\t\tconst [vow = \"\"] =\r\n\t\t\tlastNameCf.match(new RegExp(`[${VOWEL_LIST}]{1,3}`, \"ig\")) || [];\r\n\r\n\t\tconst matchingLength = cons.length + vow.length;\r\n\r\n\t\tif (\r\n\t\t\tmatchingLength < 2 ||\r\n\t\t\t(matchingLength < 3 && lastNameCf[2].toUpperCase() !== \"X\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tswitch (cons.length) {\r\n\t\t\tcase 3:\r\n\t\t\t\treturn (cons + vow).split(\"\").join(this.JOLLY_CHAR) + this.JOLLY_CHAR;\r\n\t\t\tcase 2:\r\n\t\t\t\treturn `${cons[0]}${vow[0]}*${cons[1]}${this.JOLLY_CHAR}`;\r\n\t\t\tcase 1:\r\n\t\t\t\treturn `${cons[0]}${vow}${this.JOLLY_CHAR}`;\r\n\t\t\tdefault:\r\n\t\t\t\treturn `${vow}${vow.length === 3 ? this.JOLLY_CHAR : \"\"}`;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Partial/possible firstName\r\n\t */\r\n\tpublic cfToFirstName(codiceFiscale: string): string | null {\r\n\t\tconst cfFirstNamePart = codiceFiscale?.substring(\r\n\t\t\tFIRSTNAME_OFFSET,\r\n\t\t\tFIRSTNAME_OFFSET + FIRSTNAME_SIZE\r\n\t\t);\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcfFirstNamePart?.length !== FIRSTNAME_SIZE ||\r\n\t\t\t!new RegExp(`^(${CF_NAME_MATCHER})$`, \"iu\").test(cfFirstNamePart)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn this.cfToLastName(cfFirstNamePart);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse gender information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Male or female\r\n\t */\r\n\tpublic cfToGender(codiceFiscale: string): Genders | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < GENDER_OFFSET + GENDER_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfGenderPart = codiceFiscale.substring(\r\n\t\t\tGENDER_OFFSET,\r\n\t\t\tGENDER_OFFSET + GENDER_SIZE\r\n\t\t);\r\n\t\tconst genderInt =\r\n\t\t\tparseInt(this.partialCfDeomocode(cfGenderPart, GENDER_OFFSET), 10) * 10;\r\n\t\treturn Gender.getGender(genderInt);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth year information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Year (4 digits)\r\n\t */\r\n\tpublic cfToBirthYear(codiceFiscale: string): number | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < YEAR_OFFSET + YEAR_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst cfBirthYearPart = codiceFiscale.substring(\r\n\t\t\tYEAR_OFFSET,\r\n\t\t\tYEAR_OFFSET + YEAR_SIZE\r\n\t\t);\r\n\t\tconst birthYear: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthYearPart, YEAR_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthYear)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst current2DigitsYear: number = parseInt(dayjs().format(\"YY\"), 10);\r\n\r\n\t\tconst century: number = (birthYear > current2DigitsYear ? 1 : 0) * 100;\r\n\t\treturn dayjs()\r\n\t\t\t.subtract(current2DigitsYear - birthYear + century, \"years\")\r\n\t\t\t.year();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth month information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Month (0...11 - Date notation)\r\n\t */\r\n\tpublic cfToBirthMonth(codiceFiscale: string): DateMonth | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < MONTH_OFFSET + MONTH_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthMonthPart: any = codiceFiscale\r\n\t\t\t.substring(MONTH_OFFSET, MONTH_OFFSET + MONTH_SIZE)\r\n\t\t\t.toUpperCase();\r\n\t\tconst birthMonth = BirthMonth[cfBirthMonthPart];\r\n\t\tif (typeof birthMonth !== \"number\" || birthMonth < 0 || birthMonth > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn birthMonth as DateMonth;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth day information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth day (1..31)\r\n\t */\r\n\tpublic cfToBirthDay(codiceFiscale: string): DateDay | null {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < DAY_OFFSET + DAY_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthDayPart = codiceFiscale.substring(\r\n\t\t\tDAY_OFFSET,\r\n\t\t\tDAY_OFFSET + DAY_SIZE\r\n\t\t);\r\n\t\tconst birthDay: number = parseInt(\r\n\t\t\tthis.partialCfDeomocode(cfBirthDayPart, DAY_OFFSET),\r\n\t\t\t10\r\n\t\t);\r\n\r\n\t\tif (isNaN(birthDay)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn Gender.getDay(birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth date information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @returns Birth Date\r\n\t */\r\n\tpublic cfToBirthDate(codiceFiscale: string): Date | null {\r\n\t\tconst birthDay = this.cfToBirthDay(codiceFiscale);\r\n\t\tif (!birthDay) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthMonth = this.cfToBirthMonth(codiceFiscale);\r\n\t\tif (typeof birthMonth !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst birthYear = this.cfToBirthYear(codiceFiscale);\r\n\r\n\t\treturn DateUtils.ymdToDate(birthYear, birthMonth, birthDay);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse birth place information\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @param checkBirthDateConsistency Ensure birthday is between creation and expiran date of the cf city or country, default value: true\r\n\t * @returns Birth place\r\n\t */\r\n\tpublic async cfToBirthPlace(\r\n\t\tcodiceFiscale: string,\r\n\t\tcheckBirthDateConsistency: boolean = true\r\n\t): Promise {\r\n\t\tif (\r\n\t\t\ttypeof codiceFiscale !== \"string\" ||\r\n\t\t\tcodiceFiscale.length < PLACE_OFFSET + PLACE_SIZE\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfBirthPlacePart = codiceFiscale.substring(\r\n\t\t\tPLACE_OFFSET,\r\n\t\t\tPLACE_OFFSET + PLACE_SIZE\r\n\t\t);\r\n\t\tconst belfioreCode: string = this.partialCfDeomocode(\r\n\t\t\tcfBirthPlacePart,\r\n\t\t\tPLACE_OFFSET\r\n\t\t);\r\n\r\n\t\tconst birthPlace: BelfiorePlace | undefined | null =\r\n\t\t\tawait this.belfioreConnector.findByCode(belfioreCode);\r\n\t\tif (!birthPlace) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst { creationDate, expirationDate } = birthPlace;\r\n\t\tif ((creationDate || expirationDate) && checkBirthDateConsistency) {\r\n\t\t\tconst birthDate = this.cfToBirthDate(codiceFiscale);\r\n\t\t\tconst isBirthDateAfterCfIntroduction = dayjs(CF_INTRODUCTION_DATE)\r\n\t\t\t\t// Adding some tolerance\r\n\t\t\t\t.add(5, \"years\")\r\n\t\t\t\t.isBefore(birthDate, \"day\");\r\n\r\n\t\t\t// Skipping birthDate vs Creation/Expiration check for people born up to 5y after cf introduction\r\n\t\t\tif (birthDate && isBirthDateAfterCfIntroduction) {\r\n\t\t\t\tconst datePlaceConsistency =\r\n\t\t\t\t\t// BirthDay is before expiration date\r\n\t\t\t\t\t(!expirationDate ||\r\n\t\t\t\t\t\tdayjs(birthDate).isBefore(expirationDate, \"day\")) &&\r\n\t\t\t\t\t// BirthDay is after creation date\r\n\t\t\t\t\t(!creationDate || dayjs(birthDate).isAfter(creationDate, \"day\"));\r\n\t\t\t\tif (!datePlaceConsistency) {\r\n\t\t\t\t\treturn null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn birthPlace;\r\n\t}\r\n\r\n\t/**\r\n\t * @param fiscalCode 16 character Codice Fiscale to decode\r\n\t * @returns Decoded CF Info\r\n\t */\r\n\tpublic async cfDecode(fiscalCode: string): Promise {\r\n\t\tconst year = this.cfToBirthYear(fiscalCode) || undefined;\r\n\t\t// 0 is a month\r\n\t\tconst month = this.cfToBirthMonth(fiscalCode) ?? undefined;\r\n\t\tconst day = this.cfToBirthDay(fiscalCode) || undefined;\r\n\t\tconst date = DateUtils.ymdToDate(year, month, day) || undefined;\r\n\t\tconst place = await this.cfToBirthPlace(fiscalCode);\r\n\t\tconst personalInfo: IPersonalInfo = {\r\n\t\t\tfirstName: this.cfToFirstName(fiscalCode) || undefined,\r\n\t\t\tlastName: this.cfToLastName(fiscalCode) || undefined,\r\n\r\n\t\t\tday,\r\n\t\t\tmonth,\r\n\t\t\tyear,\r\n\r\n\t\t\tdate,\r\n\r\n\t\t\tgender: this.cfToGender(fiscalCode) || undefined,\r\n\t\t\tplace: place || undefined,\r\n\r\n\t\t\tomocodeId: this.cfOmocodeId(fiscalCode),\r\n\t\t};\r\n\r\n\t\tif (year && month && day) {\r\n\t\t\tpersonalInfo.date = new Date(Date.UTC(year, month, day));\r\n\t\t}\r\n\r\n\t\treturn personalInfo;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse lastName to cf part\r\n\t * @param lastName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic lastNameToCf(lastName?: string | null): string | null {\r\n\t\tif (!lastName || (lastName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (!/^[A-Z ']{1,32}$/iu.test(diacriticRemover.replace(lastName))) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst consonants = this.charExtractor(lastName, CONSONANT_LIST);\r\n\t\tconst vowels = this.charExtractor(lastName, VOWEL_LIST);\r\n\r\n\t\tconst partialCf = (consonants + vowels).padEnd(3, \"X\").substring(0, 3);\r\n\r\n\t\tif (partialCf.length < 3) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn partialCf.toUpperCase();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse firstName to cf part\r\n\t * @param firstName Partial or complete CF to parse\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic firstNameToCf(firstName?: string | null): string | null {\r\n\t\tif (!firstName || (firstName || \"\").trim().length < 2) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst consonants = this.charExtractor(firstName, CONSONANT_LIST);\r\n\t\tif (consonants.length >= 4) {\r\n\t\t\treturn (consonants[0] + consonants.substring(2, 4)).toUpperCase();\r\n\t\t}\r\n\t\treturn this.lastNameToCf(firstName);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse year to cf part\r\n\t * @param year Birth year 2 or 4 digit string, number above 19XX or below 100\r\n\t * @returns partial cf\r\n\t */\r\n\tpublic yearToCf(year: string | number): string | null {\r\n\t\tlet parsedYear: number;\r\n\t\tif (typeof year === \"string\") {\r\n\t\t\tparsedYear = parseInt(year, 10);\r\n\t\t} else {\r\n\t\t\tparsedYear = year;\r\n\t\t}\r\n\r\n\t\tif (\r\n\t\t\t!(\r\n\t\t\t\ttypeof parsedYear === \"number\" &&\r\n\t\t\t\t!isNaN(parsedYear) &&\r\n\t\t\t\t(parsedYear >= 1900 || parsedYear < 100)\r\n\t\t\t)\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${parsedYear}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse month information\r\n\t * @param month Month number 0..11\r\n\t * @returns Birth Month CF code\r\n\t */\r\n\tpublic monthToCf(month: DateMonth | number): string | null {\r\n\t\tif (month < 0 || month > 11) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\treturn BirthMonth[month] || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse day information\r\n\t * @param day Day number 1..31\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth Day CF code\r\n\t */\r\n\tpublic dayGenderToCf(day: DateDay | number, gender: Genders): string | null {\r\n\t\tif (day < 1 || day > 31) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst genderValue = GenderWeight[gender as any];\r\n\t\tif (typeof genderValue !== \"number\") {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn `0${day + genderValue}`.substr(-2);\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Year, Month, Day to Dated\r\n\t * @param year 4 digits Year\r\n\t * @param month 1 or 2 digits Month 0..11\r\n\t * @param day 1,2 digits Day 1..31\r\n\t * @returns Date or null if provided year/month/day are not valid\r\n\t */\r\n\tpublic yearMonthDayToDate(\r\n\t\tyear: number | null | undefined,\r\n\t\tmonth: DateMonth | null | undefined = 0,\r\n\t\tday: DateDay | null | undefined = 1\r\n\t): Date | null {\r\n\t\tif (\r\n\t\t\t!year ||\r\n\t\t\tyear < 1861 ||\r\n\t\t\t[month, day].some((param) => typeof param !== \"number\")\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst date = dayjs(Date.UTC(year, month || 0, day || 1));\r\n\t\tif (\r\n\t\t\t!date.isValid() ||\r\n\t\t\tdate.year() !== year ||\r\n\t\t\tdate.month() !== month ||\r\n\t\t\tdate.date() !== day\r\n\t\t) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\treturn date.toDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Place information to return city or country details\r\n\t * @param place Belfiore place instance, belfiore code or city/country name\r\n\t * @returns BelfiorePlace instance with the target city or country details\r\n\t */\r\n\tpublic async parsePlace(\r\n\t\tplace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tlet verifiedBirthPlace: BelfiorePlace | null | undefined;\r\n\t\tif (!place) {\r\n\t\t\treturn null;\r\n\t\t} else if (typeof place === \"object\" && place.belfioreCode) {\r\n\t\t\tverifiedBirthPlace = await this.belfioreConnector.findByCode(\r\n\t\t\t\tplace.belfioreCode\r\n\t\t\t);\r\n\t\t} else if (typeof place === \"string\") {\r\n\t\t\tverifiedBirthPlace =\r\n\t\t\t\t(await this.belfioreConnector.findByCode(place)) ||\r\n\t\t\t\t(await this.belfioreConnector.findByName(place));\r\n\t\t}\r\n\t\treturn verifiedBirthPlace || null;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse Date and Gender information to create Date/Gender CF part\r\n\t * @param date Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param gender Gender enum value\r\n\t * @returns Birth date and Gender CF code\r\n\t */\r\n\tpublic dateGenderToCf(date: MultiFormatDate, gender: Genders): string | null {\r\n\t\tconst parsedDate = DateUtils.parseDate(date);\r\n\t\tif (!parsedDate) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tconst cfYear = this.yearToCf(parsedDate.getFullYear());\r\n\t\tconst cfMonth = this.monthToCf(parsedDate.getMonth());\r\n\t\tconst cfDayGender = this.dayGenderToCf(parsedDate.getDate(), gender);\r\n\r\n\t\treturn `${cfYear}${cfMonth}${cfDayGender}`;\r\n\t}\r\n\r\n\t/**\r\n\t * Parse place name and province to Belfiore code\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\t/**\r\n\t * Parse a Date and Gender information to create Date/Gender CF part\r\n\t * @param birthDate Date instance, ISO8601 date string or array of numbers [year, month, day]\r\n\t * @param cityOrCountryName City or Country name\r\n\t * @param provinceId Province code for cities\r\n\t * @returns Matching place belfiore code, if only once is matching criteria\r\n\t */\r\n\tpublic async placeToCf(\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise;\r\n\tpublic async placeToCf(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tcityOrCountryName: string,\r\n\t\tprovinceId?: string\r\n\t): Promise;\r\n\tpublic async placeToCf(\r\n\t\tdateOrName: MultiFormatDate,\r\n\t\tnameOrProvince?: string,\r\n\t\tprovinceId?: string\r\n\t): Promise {\r\n\t\tconst birthDate: Date | null = DateUtils.parseDate(dateOrName);\r\n\t\tlet name: string;\r\n\t\tlet province: string | undefined;\r\n\t\tif (!birthDate && typeof dateOrName === \"string\") {\r\n\t\t\tname = dateOrName;\r\n\t\t\tprovince = nameOrProvince;\r\n\t\t} else if (nameOrProvince) {\r\n\t\t\tname = nameOrProvince;\r\n\t\t\tprovince = provinceId;\r\n\t\t} else {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tlet placeFinder: IBelfioreConnector | undefined = this.belfioreConnector;\r\n\t\tif (province) {\r\n\t\t\tplaceFinder = placeFinder.byProvince(province);\r\n\t\t}\r\n\t\tif (birthDate && placeFinder) {\r\n\t\t\tplaceFinder = placeFinder.from(birthDate);\r\n\t\t}\r\n\t\tif (placeFinder) {\r\n\t\t\tconst foundPlace: BelfiorePlace | null = await new Parser(\r\n\t\t\t\tplaceFinder\r\n\t\t\t).parsePlace(name);\r\n\t\t\tif (foundPlace) {\r\n\t\t\t\treturn foundPlace.belfioreCode;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn null;\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF\r\n\t * @returns Complete CF\r\n\t */\r\n\tpublic async encodeCf({\r\n\t\tlastName,\r\n\t\tfirstName,\r\n\r\n\t\tyear,\r\n\t\tmonth,\r\n\t\tday,\r\n\t\tdate,\r\n\r\n\t\tgender,\r\n\t\tplace,\r\n\r\n\t\tomocodeId = 0,\r\n\t}: Omit & {\r\n\t\tplace?: BelfiorePlace | string | undefined;\r\n\t}): Promise {\r\n\t\tconst dtParams =\r\n\t\t\tDateUtils.parseDate(date) || this.yearMonthDayToDate(year, month, day);\r\n\t\tif (!(dtParams && lastName && firstName && gender && place)) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst generator = [\r\n\t\t\tasync () => this.lastNameToCf(lastName),\r\n\t\t\tasync () => this.firstNameToCf(firstName),\r\n\t\t\tasync () => this.dateGenderToCf(dtParams, gender),\r\n\t\t\tasync () =>\r\n\t\t\t\tawait this.placeToCf(\r\n\t\t\t\t\tdtParams,\r\n\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t),\r\n\t\t];\r\n\t\tlet cf = \"\";\r\n\t\tfor (const cfPartGenerator of generator) {\r\n\t\t\tconst cfValue = await cfPartGenerator();\r\n\t\t\tif (!cfValue) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tcf += cfValue;\r\n\t\t}\r\n\r\n\t\treturn this.cfOmocode(cf, omocodeId);\r\n\t}\r\n\r\n\tprivate JOLLY_CHAR: string = \"*\";\r\n\r\n\tprivate checkBitmap(offset: number): boolean {\r\n\t\t// tslint:disable-next-line: no-bitwise\r\n\t\treturn !!((2 ** offset) & this.OMOCODE_BITMAP);\r\n\t}\r\n\r\n\tprivate charOmocode(char: string, offset: number): string {\r\n\t\tif (/^[A-Z]$/giu.test(char) && this.checkBitmap(offset)) {\r\n\t\t\treturn Omocodes[char.toUpperCase() as any];\r\n\t\t}\r\n\r\n\t\treturn char;\r\n\t}\r\n\r\n\tprivate charExtractor(text: string, CHAR_LIST: string): string {\r\n\t\tconst charMatcher = new RegExp(`[${CHAR_LIST}]{1,24}`, \"ig\");\r\n\t\tconst diacriticFreeText = diacriticRemover.replace(text).trim();\r\n\t\tconst matchingChars = diacriticFreeText.match(charMatcher);\r\n\t\treturn (matchingChars || []).join(\"\");\r\n\t}\r\n\r\n\t/**\r\n\t * Convert omocode full or chunk CF into plain one\r\n\t * @param partialCodiceFiscale Partial or complete Omocode/Regular CF to parse\r\n\t * @param offset starting point of the given chunk in the 16 char CF\r\n\t * @returns Regular version w/o omocodes chars of the given chunk\r\n\t */\r\n\tprivate partialCfDeomocode(\r\n\t\tpartialCodiceFiscale: string,\r\n\t\toffset: number = 0\r\n\t): string {\r\n\t\tconst charReplacer = (char: string, position: number) =>\r\n\t\t\tthis.charOmocode(char, position + offset);\r\n\t\treturn partialCodiceFiscale.replace(/[\\dA-Z]/giu, charReplacer);\r\n\t}\r\n\r\n\tprivate appyCaseToChar(targetChar: string, counterCaseChar: string): string {\r\n\t\tif (targetChar && counterCaseChar) {\r\n\t\t\tconst isUpperCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toUpperCase();\r\n\t\t\tconst isLowerCase =\r\n\t\t\t\tcounterCaseChar[0] === counterCaseChar[0].toLowerCase();\r\n\r\n\t\t\tif (isUpperCase && !isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toUpperCase();\r\n\t\t\t} else if (!isUpperCase && isLowerCase) {\r\n\t\t\t\treturn targetChar[0].toLowerCase();\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn targetChar[0];\r\n\t}\r\n}\r\n","const INVALID_SURNAME: string =\r\n\t\"Provided lastName is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_NAME: string =\r\n\t\"Provided name is not valid, only letters, diacritics and apostrophe allowed\";\r\nconst INVALID_DAY: string = \"Provided day is not valid\";\r\nconst INVALID_GENDER: string = \"Provided gender is not valid\";\r\nconst INVALID_DAY_OR_GENDER: string =\r\n\t\"Provided day and/or gender are not valid\";\r\nconst INVALID_YEAR: string =\r\n\t\"Provided year is not valid, only 2 or 4 digit numbers are allowed\";\r\nconst INVALID_DATE: string = \"Provided date is not valid\";\r\nconst INVALID_PLACE_NAME: string = \"Proviced City/Country name is not valid\";\r\n\r\nexport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_PLACE_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n};\r\n","import * as ErrorMessages from \"../const/error-messages.const\";\r\n\r\nclass CfuError extends Error {\r\n constructor(errorMessage: string)\r\n constructor(errorCode: string) {\r\n super((Object.entries(ErrorMessages).find(([errId]) => errId === errorCode) || [])[1] || errorCode);\r\n }\r\n}\r\n\r\nexport default CfuError;\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport DiacriticRemover from \"@marketto/diacritic-remover\";\r\nimport {\r\n\tINVALID_DATE,\r\n\tINVALID_DAY,\r\n\tINVALID_DAY_OR_GENDER,\r\n\tINVALID_GENDER,\r\n\tINVALID_NAME,\r\n\tINVALID_SURNAME,\r\n\tINVALID_YEAR,\r\n} from \"../const/error-messages.const\";\r\nimport {\r\n\tBELFIORE_CODE_MATCHER,\r\n\tCF_NAME_MATCHER,\r\n\tCF_SURNAME_MATCHER,\r\n\tCHECK_DIGIT,\r\n\tCODICE_FISCALE,\r\n\tCONSONANT_LIST,\r\n\tDAY_MATCHER,\r\n\tFEMALE_DAY_MATCHER,\r\n\tFEMALE_FULL_DATE_MATCHER,\r\n\tFULL_DATE_MATCHER,\r\n\tMALE_DAY_MATCHER,\r\n\tMALE_FULL_DATE_MATCHER,\r\n\tMONTH_MATCHER,\r\n\tVOWEL_LIST,\r\n\tYEAR_MATCHER,\r\n} from \"../const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tDateUtils,\r\n\tMultiFormatDate,\r\n} from \"../date-utils/\";\r\nimport Omocodes from \"../enums/omocodes.enum\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CfuError from \"./cfu-error.class\";\r\nimport Gender from \"./gender.class\";\r\nimport Parser from \"./parser.class\";\r\nimport dayjs from \"dayjs\";\r\n\r\nconst diacriticRemover = new DiacriticRemover();\r\n\r\nexport default class Pattern {\r\n\tprivate parser: Parser;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given lastName or generic\r\n\t * @param lastName Optional lastName to generate validation regexp\r\n\t * @return CF Surname matcher\r\n\t * @throw INVALID_SURNAME\r\n\t */\r\n\tpublic cfLastName(lastName?: string): RegExp {\r\n\t\tlet matcher: string = CF_SURNAME_MATCHER;\r\n\t\tif (lastName) {\r\n\t\t\tif (!this.lastName().test(lastName)) {\r\n\t\t\t\tthrow new CfuError(INVALID_SURNAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.lastNameToCf(lastName) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given name or generic\r\n\t * @param name Optional name to generate validation regexp\r\n\t * @return CF name matcher\r\n\t * @throw INVALID_NAME\r\n\t */\r\n\tpublic cfFirstName(name?: string): RegExp {\r\n\t\tlet matcher: string = CF_NAME_MATCHER;\r\n\t\tif (name) {\r\n\t\t\tif (!this.lastName().test(name)) {\r\n\t\t\t\tthrow new CfuError(INVALID_NAME);\r\n\t\t\t}\r\n\t\t\tmatcher = this.parser.firstNameToCf(name) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param year Optional year to generate validation regexp\r\n\t * @return CF year matcher\r\n\t */\r\n\tpublic cfYear(year?: number): RegExp {\r\n\t\tlet matcher: string = YEAR_MATCHER;\r\n\t\tif (year) {\r\n\t\t\tconst parsedYear = this.parser.yearToCf(year);\r\n\t\t\tif (parsedYear) {\r\n\t\t\t\tmatcher = this.deomocode(parsedYear);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_YEAR);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given month or generic\r\n\t * @param month Optional month to generate validation regexp\r\n\t * @return CF month matcher\r\n\t */\r\n\tpublic cfMonth(month?: DateMonth) {\r\n\t\tlet matcher: string = MONTH_MATCHER;\r\n\t\tif (month) {\r\n\t\t\tmatcher = this.parser.monthToCf(month) || matcher;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given day or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @return CF day matcher\r\n\t */\r\n\tpublic cfDay(day?: DateDay): RegExp {\r\n\t\tlet matcher = DAY_MATCHER;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayM = this.parser.dayGenderToCf(day, \"M\");\r\n\t\t\tconst parsedDayF = this.parser.dayGenderToCf(day, \"F\");\r\n\t\t\tif (parsedDayM && parsedDayF) {\r\n\t\t\t\tconst matcherM: string = this.deomocode(parsedDayM);\r\n\t\t\t\tconst matcherF: string = this.deomocode(parsedDayF);\r\n\t\t\t\tmatcher = `(?:${matcherM})|(?:${matcherF})`;\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param day Optional day to generate validation regexp\r\n\t * @param gender Gender @see Genders\r\n\t * @return CF day and gender matcher\r\n\t */\r\n\tpublic cfDayGender(day?: DateDay, gender?: Genders): RegExp {\r\n\t\tif (!gender) {\r\n\t\t\treturn this.cfDay(day);\r\n\t\t}\r\n\t\tlet matcher;\r\n\t\tif (day) {\r\n\t\t\tconst parsedDayGender = this.parser.dayGenderToCf(day, gender);\r\n\t\t\tif (parsedDayGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDayGender);\r\n\t\t\t} else {\r\n\t\t\t\tthrow new CfuError(INVALID_DAY_OR_GENDER);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tswitch (gender) {\r\n\t\t\t\tcase \"M\":\r\n\t\t\t\t\tmatcher = MALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase \"F\":\r\n\t\t\t\t\tmatcher = FEMALE_DAY_MATCHER;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Validation regexp for the given year or generic\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param gender @see Genders\r\n\t * @return CF date and gender matcher\r\n\t */\r\n\tpublic cfDateGender(\r\n\t\tdate?: MultiFormatDate | null,\r\n\t\tgender?: Genders | null\r\n\t): RegExp {\r\n\t\tif (date && !DateUtils.parseDate(date)) {\r\n\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t}\r\n\t\tif (gender && !Gender.toArray().includes(gender)) {\r\n\t\t\tthrow new CfuError(INVALID_GENDER);\r\n\t\t}\r\n\t\tlet matcher = FULL_DATE_MATCHER;\r\n\t\tif (date) {\r\n\t\t\tconst parsedDateGender =\r\n\t\t\t\tgender && this.parser.dateGenderToCf(date, gender);\r\n\t\t\tif (parsedDateGender) {\r\n\t\t\t\tmatcher = this.deomocode(parsedDateGender);\r\n\t\t\t} else {\r\n\t\t\t\tconst parseDeomocode = (g: Genders): string => {\r\n\t\t\t\t\tconst parsedGender = this.parser.dateGenderToCf(date, g);\r\n\t\t\t\t\tif (!parsedGender) {\r\n\t\t\t\t\t\tthrow new CfuError(INVALID_DATE);\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn parsedGender && this.deomocode(parsedGender);\r\n\t\t\t\t};\r\n\t\t\t\tmatcher = `(?:${Gender.toArray().map(parseDeomocode).join(\"|\")})`;\r\n\t\t\t}\r\n\t\t} else if (gender === \"M\") {\r\n\t\t\tmatcher = MALE_FULL_DATE_MATCHER;\r\n\t\t} else if (gender === \"F\") {\r\n\t\t\tmatcher = FEMALE_FULL_DATE_MATCHER;\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\t/**\r\n\t * @param date Optional date to generate validation regexp\r\n\t * @param placeName Optional place name to generate validation regexp\r\n\t * @return CF place matcher\r\n\t */\r\n\tpublic async cfPlace(placeName?: string | null): Promise;\r\n\tpublic async cfPlace(\r\n\t\tbirthDate?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise;\r\n\tpublic async cfPlace(\r\n\t\tbirthDateOrName?: MultiFormatDate | null,\r\n\t\tplaceName?: string | null\r\n\t): Promise {\r\n\t\tlet matcher = BELFIORE_CODE_MATCHER;\r\n\t\tif (birthDateOrName) {\r\n\t\t\tconst birthDate: Date | null = DateUtils.parseDate(birthDateOrName);\r\n\r\n\t\t\tif (birthDate && placeName) {\r\n\t\t\t\tconst place: string = placeName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(birthDate, place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t} else if (!birthDate && typeof birthDateOrName === \"string\") {\r\n\t\t\t\tconst place: string = birthDateOrName;\r\n\t\t\t\tconst parsedPlace = await this.parser.placeToCf(place);\r\n\t\t\t\tmatcher = this.deomocode(parsedPlace || \"\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Generates full CF validator based on given optional input or generic\r\n\t * @param personalInfo Input Object\r\n\t * @return CodiceFiscale matcher\r\n\t */\r\n\tpublic async codiceFiscale(\r\n\t\tpersonalInfo?: Omit & {\r\n\t\t\tplace?: BelfiorePlace | string | undefined;\r\n\t\t}\r\n\t): Promise {\r\n\t\tlet matcher = CODICE_FISCALE;\r\n\t\tif (personalInfo) {\r\n\t\t\tconst parsedCf = await this.parser.encodeCf(personalInfo);\r\n\r\n\t\t\tif (parsedCf) {\r\n\t\t\t\tmatcher = this.deomocode(parsedCf);\r\n\t\t\t} else {\r\n\t\t\t\tconst { lastName, firstName, year, month, day, date, gender, place } =\r\n\t\t\t\t\tpersonalInfo;\r\n\t\t\t\tif (\r\n\t\t\t\t\tlastName ||\r\n\t\t\t\t\tfirstName ||\r\n\t\t\t\t\tyear ||\r\n\t\t\t\t\tmonth ||\r\n\t\t\t\t\tday ||\r\n\t\t\t\t\tdate ||\r\n\t\t\t\t\tgender ||\r\n\t\t\t\t\tplace\r\n\t\t\t\t) {\r\n\t\t\t\t\tlet dtParams: Date | null = null;\r\n\t\t\t\t\tif (date) {\r\n\t\t\t\t\t\tdtParams = DateUtils.parseDate(date);\r\n\t\t\t\t\t} else if (year) {\r\n\t\t\t\t\t\tdtParams = this.parser.yearMonthDayToDate(year, month, day);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tconst generator: (() => Promise)[] = [\r\n\t\t\t\t\t\tasync () => this.cfLastName(lastName),\r\n\t\t\t\t\t\tasync () => this.cfFirstName(firstName),\r\n\t\t\t\t\t\tasync () => this.cfDateGender(dtParams, gender),\r\n\t\t\t\t\t\tasync () =>\r\n\t\t\t\t\t\t\tawait this.cfPlace(\r\n\t\t\t\t\t\t\t\tdtParams,\r\n\t\t\t\t\t\t\t\t(place as BelfiorePlace)?.belfioreCode || (place as string)\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t\t];\r\n\r\n\t\t\t\t\tmatcher = \"\";\r\n\t\t\t\t\tfor (const validator of generator) {\r\n\t\t\t\t\t\tconst cfMatcher = (await validator()).toString();\r\n\t\t\t\t\t\tconst match = cfMatcher.match(/\\^(.{1,256})\\$/);\r\n\t\t\t\t\t\tconst cfValue: string | null | undefined = match && match[1];\r\n\r\n\t\t\t\t\t\tif (!cfValue) {\r\n\t\t\t\t\t\t\tthrow new Error(`Unable to handle [${cfMatcher}]`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tmatcher += `(?:${cfValue})`;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// Final addition of CheckDigit\r\n\t\t\t\t\tmatcher += CHECK_DIGIT;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tprivate LETTER_SET: string = `[A-Z${diacriticRemover.matcherBy(\r\n\t\t/^[A-Z]$/iu\r\n\t)}]`;\r\n\tprivate SEPARATOR_SET: string = \"(?:'?\\\\s{0,4})\";\r\n\r\n\t/**\r\n\t * Returns lastName validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic lastName(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = `${this.LETTER_SET}{1,24}`;\r\n\t\tif (codiceFiscale && /^[A-Z]{1,3}/iu.test(codiceFiscale)) {\r\n\t\t\tconst lastNameCf: string = codiceFiscale.substr(0, 3);\r\n\t\t\tconst diacriticizer = (matchingChars: string) =>\r\n\t\t\t\tmatchingChars\r\n\t\t\t\t\t.split(\"\")\r\n\t\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [cons, vow] = [\r\n\t\t\t\t`^[${CONSONANT_LIST}]{1,3}`,\r\n\t\t\t\t`[${VOWEL_LIST}]{1,3}`,\r\n\t\t\t].map((charMatcher) =>\r\n\t\t\t\tdiacriticizer(\r\n\t\t\t\t\t(lastNameCf.match(new RegExp(charMatcher, \"ig\")) || [])[0] || \"\"\r\n\t\t\t\t)\r\n\t\t\t);\r\n\r\n\t\t\tconst diacriticsVowelList: string =\r\n\t\t\t\tVOWEL_LIST +\r\n\t\t\t\tdiacriticRemover.matcherBy(new RegExp(`^[${VOWEL_LIST}]$`, \"ui\"));\r\n\t\t\tconst diacriticsVowelMatcher: string = `[${diacriticsVowelList}]`;\r\n\t\t\tconst midDiacriticVowelMatcher: string = `(?:${diacriticsVowelMatcher}${this.SEPARATOR_SET}){0,24}`;\r\n\t\t\tconst endingDiacritcVowelMatcher: string = `(?:${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${diacriticsVowelMatcher})?`;\r\n\t\t\tswitch (cons.length) {\r\n\t\t\t\tcase 3: {\r\n\t\t\t\t\tconst divider = midDiacriticVowelMatcher;\r\n\t\t\t\t\tmatcher =\r\n\t\t\t\t\t\tdivider +\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}${divider}`) +\r\n\t\t\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{0,24}${this.LETTER_SET})?`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 2: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\t`${vow[0]}${midDiacriticVowelMatcher}${this.SEPARATOR_SET}${cons[0]}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\t`${cons[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tvow.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${midDiacriticVowelMatcher}${cons[1]}`,\r\n\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\t`${this.SEPARATOR_SET}${vow[0]}`,\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tcase 1: {\r\n\t\t\t\t\tconst possibilities = [\r\n\t\t\t\t\t\tvow.slice(0, 2).join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tmidDiacriticVowelMatcher +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t\t`${vow[0]}${this.SEPARATOR_SET}` +\r\n\t\t\t\t\t\t\tcons.join(`${this.SEPARATOR_SET}`) +\r\n\t\t\t\t\t\t\tvow[1],\r\n\t\t\t\t\t\t[cons[0], ...vow.slice(0, 2)].join(`${this.SEPARATOR_SET}`),\r\n\t\t\t\t\t];\r\n\t\t\t\t\tmatcher = `(?:${possibilities.join(\r\n\t\t\t\t\t\t\"|\"\r\n\t\t\t\t\t)})${endingDiacritcVowelMatcher}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tmatcher = `${vow.join(\r\n\t\t\t\t\t\t`${this.SEPARATOR_SET}`\r\n\t\t\t\t\t)}${endingDiacritcVowelMatcher}`;\r\n\t\t\t}\r\n\r\n\t\t\tif (vow?.length + cons?.length < 3) {\r\n\t\t\t\treturn this.isolatedInsensitiveTailor(`\\\\s{0,4}(${matcher})\\\\s{0,4}`);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`\\\\s{0,4}((?:${matcher})(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24})\\\\s{0,4}`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns name validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic firstName(codiceFiscale?: string): RegExp {\r\n\t\tif (\r\n\t\t\tcodiceFiscale &&\r\n\t\t\tnew RegExp(`^[A-Z]{3}[${CONSONANT_LIST}]{3}`, \"iu\").test(codiceFiscale)\r\n\t\t) {\r\n\t\t\tconst nameCf: string = codiceFiscale.substr(3, 3);\r\n\r\n\t\t\tconst cons: string[] = (\r\n\t\t\t\t(nameCf.match(new RegExp(`^[${CONSONANT_LIST}]{1,3}`, \"ig\")) ||\r\n\t\t\t\t\t[])[0] || \"\"\r\n\t\t\t)\r\n\t\t\t\t.split(\"\")\r\n\t\t\t\t.map((char) => `[${diacriticRemover.insensitiveMatcher[char]}]`);\r\n\r\n\t\t\tconst [diacriticsVowelList, diacriticsConsonantList]: string[] = [\r\n\t\t\t\tVOWEL_LIST,\r\n\t\t\t\tCONSONANT_LIST,\r\n\t\t\t].map(\r\n\t\t\t\t(chars) =>\r\n\t\t\t\t\tchars + diacriticRemover.matcherBy(new RegExp(`^[${chars}]$`, \"ui\"))\r\n\t\t\t);\r\n\r\n\t\t\tconst matcher: string =\r\n\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}${cons[0]}${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}(?:[${diacriticsConsonantList}]${this.SEPARATOR_SET}(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24})?` +\r\n\t\t\t\tcons\r\n\t\t\t\t\t.slice(1, 3)\r\n\t\t\t\t\t.join(\r\n\t\t\t\t\t\t`(?:[${diacriticsVowelList}]{1,24}${this.SEPARATOR_SET}){0,24}`\r\n\t\t\t\t\t) +\r\n\t\t\t\t`(?:${this.SEPARATOR_SET}${this.LETTER_SET}{1,24}){0,24}`;\r\n\r\n\t\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t\t}\r\n\t\treturn this.lastName((codiceFiscale || \"\").substr(3, 3));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns iso8601 date validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic date(codiceFiscale?: string): RegExp {\r\n\t\tlet matcher: string = DATE_MATCHER.ISO8601_DATE_TIME;\r\n\t\tif (codiceFiscale) {\r\n\t\t\tconst parsedDate = this.parser.cfToBirthDate(codiceFiscale);\r\n\t\t\tif (parsedDate) {\r\n\t\t\t\tconst dateIso8601: string = parsedDate.toJSON();\r\n\t\t\t\tif (dayjs().diff(dayjs(parsedDate), \"y\") < 50) {\r\n\t\t\t\t\tconst century: number = parseInt(dateIso8601.substr(0, 2), 10);\r\n\t\t\t\t\tconst centuries: string[] = [century - 1, century].map((year) =>\r\n\t\t\t\t\t\tyear.toString().padStart(2, \"0\")\r\n\t\t\t\t\t);\r\n\t\t\t\t\tmatcher = `(?:${centuries.join(\"|\")})` + dateIso8601.substr(2, 8);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tmatcher = dateIso8601.substr(0, 10);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this.isolatedInsensitiveTailor(\r\n\t\t\t`${matcher}(?:T${DATE_MATCHER.TIME}(?:${DATE_MATCHER.TIMEZONE})?)?`\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns gender validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic gender(codiceFiscale?: string): RegExp {\r\n\t\tconst parsedGender = codiceFiscale && this.parser.cfToGender(codiceFiscale);\r\n\t\tconst matcher: string = parsedGender || `[${Gender.toArray().join(\"\")}]`;\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns place validator based on given cf or generic\r\n\t * @param codiceFiscale Partial or complete CF to parse\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic async place(codiceFiscale?: string): Promise {\r\n\t\tlet matcher: string = \".{1,32}\";\r\n\t\tconst parsedPlace =\r\n\t\t\tcodiceFiscale && (await this.parser.cfToBirthPlace(codiceFiscale));\r\n\r\n\t\tif (parsedPlace) {\r\n\t\t\tconst nameMatcher: string = parsedPlace.name.replace(/./gu, (c) =>\r\n\t\t\t\tdiacriticRemover[c] === c ? c : `[${c}${diacriticRemover[c]}]`\r\n\t\t\t);\r\n\t\t\tmatcher = `(?:(?:${nameMatcher})|${parsedPlace.belfioreCode})`;\r\n\t\t}\r\n\r\n\t\treturn this.isolatedInsensitiveTailor(matcher);\r\n\t}\r\n\r\n\tpublic deomocode(omocode: string): string {\r\n\t\treturn omocode.replace(/\\d/gu, (n: any) => `[${n}${Omocodes[n]}]`);\r\n\t}\r\n\r\n\tprivate isolatedInsensitiveTailor(matcher: string): RegExp {\r\n\t\treturn new RegExp(`^(?:${matcher})$`, \"iu\");\r\n\t}\r\n}\r\n","import dayjs from \"dayjs\";\r\nimport {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport {\r\n\tCRC_OFFSET,\r\n\tCRC_SIZE,\r\n\tDATE_OFFSET,\r\n\tDATE_SIZE,\r\n\tFIRSTNAME_OFFSET,\r\n\tFIRSTNAME_SIZE,\r\n\tGENDER_OFFSET,\r\n\tGENDER_SIZE,\r\n\tLASTNAME_OFFSET,\r\n\tLASTNAME_SIZE,\r\n\tPLACE_OFFSET,\r\n\tPLACE_SIZE,\r\n\tYEAR_OFFSET,\r\n\tYEAR_SIZE,\r\n} from \"../const/cf-offsets.const\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type IPersonalInfo from \"../interfaces/personal-info.interface\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CheckDigitizer from \"./check-digitizer.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport type IMismatchVerboseErrors from \"../interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport default class CFMismatchValidator {\r\n\tprivate pattern: Pattern;\r\n\tprivate parser: Parser;\r\n\tconstructor(\r\n\t\tbelfioreConnector: IBelfioreConnector,\r\n\t\tprivate readonly codiceFiscale: string\r\n\t) {\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t}\r\n\r\n\tprivate get hasLastName() {\r\n\t\treturn this.codiceFiscale?.length >= LASTNAME_OFFSET + LASTNAME_SIZE;\r\n\t}\r\n\r\n\tprivate get hasFirstName() {\r\n\t\treturn this.codiceFiscale?.length >= FIRSTNAME_OFFSET + FIRSTNAME_SIZE;\r\n\t}\r\n\tprivate get hasBirthYear() {\r\n\t\treturn this.codiceFiscale?.length >= YEAR_OFFSET + YEAR_SIZE;\r\n\t}\r\n\tprivate get hasBirthDate() {\r\n\t\treturn this.codiceFiscale?.length >= DATE_OFFSET + DATE_SIZE;\r\n\t}\r\n\tprivate get hasGender() {\r\n\t\treturn this.codiceFiscale?.length >= GENDER_OFFSET + GENDER_SIZE;\r\n\t}\r\n\tprivate get hasBirthPlace() {\r\n\t\treturn this.codiceFiscale?.length >= PLACE_OFFSET + PLACE_SIZE;\r\n\t}\r\n\r\n\tprivate get hasCRC() {\r\n\t\treturn this.codiceFiscale?.length >= CRC_OFFSET + CRC_SIZE;\r\n\t}\r\n\r\n\tpublic async matchPersonalInfo(\r\n\t\tpersonalInfo: Omit & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise {\r\n\t\treturn (await this.pattern.codiceFiscale(personalInfo)).test(\r\n\t\t\tthis.codiceFiscale\r\n\t\t);\r\n\t}\r\n\tpublic async mismatchPersonalInfo(\r\n\t\tpersonalInfo: Omit & {\r\n\t\t\tplace?: string | BelfiorePlace;\r\n\t\t}\r\n\t): Promise {\r\n\t\treturn !!(\r\n\t\t\tthis.codiceFiscale &&\r\n\t\t\tpersonalInfo &&\r\n\t\t\tpersonalInfo.lastName &&\r\n\t\t\tpersonalInfo.firstName &&\r\n\t\t\t(personalInfo.date ||\r\n\t\t\t\t(personalInfo.day &&\r\n\t\t\t\t\ttypeof personalInfo.month === \"number\" &&\r\n\t\t\t\t\tpersonalInfo.year)) &&\r\n\t\t\tpersonalInfo.gender &&\r\n\t\t\tpersonalInfo.place &&\r\n\t\t\t!(await this.matchPersonalInfo(personalInfo))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchLastName(lastName?: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasLastName &&\r\n\t\t\tthis.pattern.lastName(this.codiceFiscale).test(lastName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchLastName(lastName?: string): boolean {\r\n\t\treturn this.hasLastName && !!lastName && !this.matchLastName(lastName);\r\n\t}\r\n\r\n\tpublic matchFirstName(firstName: string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasFirstName &&\r\n\t\t\tthis.pattern.firstName(this.codiceFiscale).test(firstName || \"\")\r\n\t\t);\r\n\t}\r\n\tpublic mismatchFirstName(firstName: string): boolean {\r\n\t\treturn this.hasFirstName && !!firstName && !this.matchFirstName(firstName);\r\n\t}\r\n\r\n\tpublic matchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\tif (this.hasBirthDate) {\r\n\t\t\tconst parsedCfDate = this.parser.cfToBirthDate(this.codiceFiscale);\r\n\t\t\tconst parsedDate = DateUtils.parseDate(birthDate);\r\n\t\t\tif (parsedCfDate && parsedDate) {\r\n\t\t\t\treturn dayjs(parsedCfDate).isSame(parsedDate, \"d\");\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\tpublic mismatchBirthDate(birthDate: MultiFormatDate): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthYear &&\r\n\t\t\t!!DateUtils.parseDate(birthDate) &&\r\n\t\t\t!this.matchBirthDate(birthDate)\r\n\t\t);\r\n\t}\r\n\r\n\tpublic matchGender(gender: Genders | string): boolean {\r\n\t\treturn (\r\n\t\t\tthis.hasGender &&\r\n\t\t\tthis.pattern.gender(this.codiceFiscale).test(gender || \"\")\r\n\t\t);\r\n\t}\r\n\r\n\tpublic mismatchGender(gender: Genders | string): boolean {\r\n\t\treturn this.hasGender && !!gender && !this.matchGender(gender);\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async matchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tif (this.hasBirthPlace && birthPlace) {\r\n\t\t\tconst matcher = await this.pattern.place(this.codiceFiscale);\r\n\t\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\r\n\t\t\treturn !!parsedBirthPlace && matcher.test(parsedBirthPlace?.belfioreCode);\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * @param birthPlace BirthPlace, place name or BelfioreCode\r\n\t */\r\n\tpublic async mismatchBirthPlace(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\treturn (\r\n\t\t\tthis.hasBirthPlace &&\r\n\t\t\t!!birthPlace &&\r\n\t\t\t!(await this.matchBirthPlace(birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @param codiceFiscale Complete CF to parse\r\n\t * @return Verbose errors\r\n\t */\r\n\tpublic get errors(): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, false),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale, true),\r\n\t\t])\r\n\t\t\t.then(([placeCheck, placeCreationExpirationCheck]) => ({\r\n\t\t\t\t// Checking lastName validity\r\n\t\t\t\t...(this.parser.cfToLastName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { lastName: \"MISSING_OR_INVALID_LAST_NAME\" }),\r\n\t\t\t\t// Checking firstName validity\r\n\t\t\t\t...(this.parser.cfToFirstName(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { firstName: \"MISSING_OR_INVALID_FIRST_NAME\" }),\r\n\t\t\t\t// Checking Date validity\r\n\t\t\t\t...(this.parser.cfToBirthDate(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DATE\" }),\r\n\t\t\t\t// Checking Day validity\r\n\t\t\t\t...(this.parser.cfToBirthDay(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_DAY\" }),\r\n\t\t\t\t// Checking Month validity\r\n\t\t\t\t...(typeof this.parser.cfToBirthMonth(this.codiceFiscale) === \"number\"\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_MONTH\" }),\r\n\t\t\t\t// Checking Year validity\r\n\t\t\t\t...(this.parser.cfToBirthYear(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { date: \"MISSING_OR_INVALID_YEAR\" }),\r\n\t\t\t\t// Checking Gender validity\r\n\t\t\t\t...(this.parser.cfToGender(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { gender: \"MISSING_DAY\" }),\r\n\t\t\t\t// Checking Place validity\r\n\t\t\t\t...(placeCheck ? {} : { place: \"MISSING_OR_INVALID_PLACE\" }),\r\n\t\t\t\t// Checking Place Creation/Expiration vs Birthdate validity\r\n\t\t\t\t...(placeCreationExpirationCheck\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: {\r\n\t\t\t\t\t\t\tplace: \"PLACE_EXPIRED_OR_NOT_YET_CREATED_ON_BIRTDATE\",\r\n\t\t\t\t\t\t\tdate: \"BIRTHDATE_OUT_OF_BIRTH_PLACE_LIFE_RANGE\",\r\n\t\t\t\t\t }),\r\n\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t...(this.codiceFiscale\r\n\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t?.toUpperCase() === CheckDigitizer.checkDigit(this.codiceFiscale)\r\n\t\t\t\t\t? {}\r\n\t\t\t\t\t: { crc: \"INVALID_CRC_CODE\" }),\r\n\r\n\t\t\t\t// Checking length\r\n\t\t\t\t...(this.hasCRC ? {} : { crc: \"MISSING_CRC_CODE\" }),\r\n\t\t\t}))\r\n\t\t\t.then((errors) => (Object.keys(errors).length ? errors : null));\r\n\t}\r\n\r\n\t/**\r\n\t * Check the given cf validity by form, birth date/place and digit code\r\n\t * @return Generic or specific regular expression\r\n\t */\r\n\tpublic get valid(): Promise {\r\n\t\treturn Promise.all([\r\n\t\t\tthis.pattern.codiceFiscale(),\r\n\t\t\tthis.parser.cfToBirthPlace(this.codiceFiscale),\r\n\t\t]).then(\r\n\t\t\t([cfPattern, cfToBirthPlace]) =>\r\n\t\t\t\t!(\r\n\t\t\t\t\t// Checking length\r\n\t\t\t\t\t(\r\n\t\t\t\t\t\t!this.hasCRC ||\r\n\t\t\t\t\t\t// Checking form validity\r\n\t\t\t\t\t\t!cfPattern.test(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking 16th char check digit validity\r\n\t\t\t\t\t\tthis.codiceFiscale\r\n\t\t\t\t\t\t\t?.substring(CRC_OFFSET, CRC_OFFSET + CRC_SIZE)\r\n\t\t\t\t\t\t\t?.toUpperCase() !==\r\n\t\t\t\t\t\t\tCheckDigitizer.checkDigit(this.codiceFiscale) ||\r\n\t\t\t\t\t\t// Checking Birth date/place validity\r\n\t\t\t\t\t\t!cfToBirthPlace\r\n\t\t\t\t\t)\r\n\t\t\t\t)\r\n\t\t);\r\n\t}\r\n\tpublic get invalid(): Promise {\r\n\t\treturn this.valid.then((isValid) => !!this.codiceFiscale && !isValid);\r\n\t}\r\n}\r\n","import {\r\n\tIBelfioreConnector,\r\n\tBelfiorePlace,\r\n} from \"@marketto/belfiore-connector\";\r\nimport { DateUtils, MultiFormatDate } from \"../date-utils/\";\r\nimport type Genders from \"../types/genders.type\";\r\nimport CFMismatchValidator from \"./cf-mismatch-validator.class\";\r\nimport Parser from \"./parser.class\";\r\nimport Pattern from \"./pattern.class\";\r\nimport { CF_INTRODUCTION_DATE } from \"../const/logic.const\";\r\nimport dayjs from \"dayjs\";\r\n\r\nexport default class Validator {\r\n\tprivate parser: Parser;\r\n\tprivate pattern: Pattern;\r\n\r\n\tconstructor(private readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n\r\n\tpublic codiceFiscale(codiceFiscale: string): CFMismatchValidator {\r\n\t\treturn new CFMismatchValidator(this.belfioreConnector, codiceFiscale);\r\n\t}\r\n\r\n\tpublic isLastNameValid(lastName: string): boolean {\r\n\t\treturn this.pattern.lastName().test(lastName);\r\n\t}\r\n\tpublic isLastNameInvalid(lastName: string): boolean {\r\n\t\treturn !!lastName && !this.isLastNameValid(lastName);\r\n\t}\r\n\r\n\tpublic isFirstNameValid(firstName: string): boolean {\r\n\t\treturn this.pattern.firstName().test(firstName);\r\n\t}\r\n\tpublic isFirstNameInvalid(firstName: string): boolean {\r\n\t\treturn !!firstName && !this.isFirstNameValid(firstName);\r\n\t}\r\n\r\n\tpublic isBirthDateValid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!DateUtils.parseDate(birthDate);\r\n\t}\r\n\tpublic isBirthDateInvalid(birthDate: MultiFormatDate): boolean {\r\n\t\treturn !!birthDate && !this.isBirthDateValid(birthDate);\r\n\t}\r\n\r\n\tpublic isGenderValid(gender: Genders | string): boolean {\r\n\t\treturn this.pattern.gender().test(gender);\r\n\t}\r\n\tpublic isGenderInvalid(gender: Genders | string): boolean {\r\n\t\treturn !!gender && !this.isGenderValid(gender);\r\n\t}\r\n\r\n\tpublic async isBirthPlaceValid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedBirthPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\t!!parsedBirthPlace &&\r\n\t\t\t!!(await this.belfioreConnector.findByCode(parsedBirthPlace.belfioreCode))\r\n\t\t);\r\n\t}\r\n\tpublic async isBirthPlaceInvalid(\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\treturn !!birthPlace && !(await this.isBirthPlaceValid(birthPlace));\r\n\t}\r\n\r\n\tpublic async birthDatePlaceMatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t(!!(await this.belfioreConnector\r\n\t\t\t\t.from(birthDate)\r\n\t\t\t\t.findByCode(parsedPlace.belfioreCode)) ||\r\n\t\t\t\t// Ignoring control for people born before CF introduction\r\n\t\t\t\t!dayjs(DateUtils.parseDate(birthDate)).isAfter(\r\n\t\t\t\t\tCF_INTRODUCTION_DATE,\r\n\t\t\t\t\t\"day\"\r\n\t\t\t\t))\r\n\t\t);\r\n\t}\r\n\tpublic async birthDatePlaceMismatch(\r\n\t\tbirthDate: MultiFormatDate,\r\n\t\tbirthPlace: BelfiorePlace | string\r\n\t): Promise {\r\n\t\tconst parsedPlace = await this.parser.parsePlace(birthPlace);\r\n\t\treturn (\r\n\t\t\tthis.isBirthDateValid(birthDate) &&\r\n\t\t\t!!parsedPlace &&\r\n\t\t\t!(await this.birthDatePlaceMatch(birthDate, birthPlace))\r\n\t\t);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise {\r\n\t\treturn await this.birthDatePlaceMatch(birthDate, birthPlace);\r\n\t}\r\n\r\n\tpublic async birthPlaceDateMismatch(\r\n\t\tbirthPlace: BelfiorePlace | string,\r\n\t\tbirthDate: MultiFormatDate\r\n\t): Promise {\r\n\t\treturn await this.birthDatePlaceMismatch(birthDate, birthPlace);\r\n\t}\r\n}\r\n","import {\r\n\tBelfiorePlace,\r\n\tIBelfioreConnector,\r\n} from \"@marketto/belfiore-connector\";\r\nimport CFMismatchValidator from \"./classes/cf-mismatch-validator.class\";\r\nimport CheckDigitizer from \"./classes/check-digitizer.class\";\r\nimport Gender from \"./classes/gender.class\";\r\nimport Parser from \"./classes/parser.class\";\r\nimport Pattern from \"./classes/pattern.class\";\r\nimport Validator from \"./classes/validator.class\";\r\nimport * as VALIDATOR from \"./const/matcher.const\";\r\nimport * as Matcher from \"./const/matcher.const\";\r\nimport {\r\n\tDATE_MATCHER,\r\n\ttype DateDay,\r\n\ttype DateMonth,\r\n\tDateUtils,\r\n\ttype MultiFormatDate,\r\n} from \"./date-utils/\";\r\nimport BirthMonth from \"./enums/birth-month.enum\";\r\nimport CRC from \"./enums/crc.enum\";\r\nimport Omocodes from \"./enums/omocodes.enum\";\r\nimport type Genders from \"./types/genders.type\";\r\nimport IMismatchVerboseErrors from \"./interfaces/mismatch-verbose-errors.interface\";\r\n\r\nexport type {\r\n\tBelfiorePlace,\r\n\tDateDay,\r\n\tDateMonth,\r\n\tGenders,\r\n\tMultiFormatDate,\r\n\tIMismatchVerboseErrors,\r\n};\r\n\r\nexport default class CodiceFiscaleUtils {\r\n\tpublic readonly validator: Validator;\r\n\tpublic readonly parser: Parser;\r\n\tpublic readonly pattern: Pattern;\r\n\r\n\tconstructor(public readonly belfioreConnector: IBelfioreConnector) {\r\n\t\tthis.validator = new Validator(belfioreConnector);\r\n\t\tthis.parser = new Parser(belfioreConnector);\r\n\t\tthis.pattern = new Pattern(belfioreConnector);\r\n\t}\r\n}\r\n\r\nexport {\r\n\tBirthMonth,\r\n\tCheckDigitizer,\r\n\tCRC,\r\n\tDATE_MATCHER,\r\n\tDateUtils,\r\n\tGender,\r\n\tOmocodes,\r\n\tVALIDATOR,\r\n\tMatcher,\r\n\tCFMismatchValidator,\r\n\tParser,\r\n\tPattern,\r\n\tValidator,\r\n\tCodiceFiscaleUtils,\r\n};\r\n"],"names":["CRC_OFFSET","YEAR","MONTH","DAYS_30_MONTHS","DAYS_31_MONTHS","MONTH_DAY","HOURS","MINUTES","SECONDS","MILLISECONDS","TIMEZONE","TIME","ISO8601_SHORT_DATE","ISO8601_DATE_TIME","DateUtils","parseDate","date","Date","RegExp","test","Array","isArray","length","some","value","isNaN","parsedDate","year","month","day","dayjs","UTC","isValid","toDate","err","ymdToDate","this","CONSONANT_LIST","VOWEL_LIST","OMOCODE_NUMBER_LIST","OMOCODE_NON_ZERO_NUMBER_LIST","OMOCODE_ZERO_LIST","MONTH_LIST","MONTH_30DAYS_LIST","MONTH_31DAYS_LIST","CITY_CODE_LIST","COUNTRY_CODE_LIST","CF_NAME_MATCHER","CF_SURNAME_MATCHER","CF_FULL_NAME_MATCHER","YEAR_MATCHER","LEAP_YEAR_MATCHER","MONTH_MATCHER","DAY_2X_MATCHER","DAY_3X_MATCHER","DAY_29_MATCHER","DAY_30_MATCHER","DAY_31_MATCHER","DAY_MATCHER","MALE_DAY_MATCHER","FEMALE_DAY_MATCHER","MONTH_DAY_MATCHER","FULL_DATE_MATCHER","MALE_FULL_DATE_MATCHER","FEMALE_FULL_DATE_MATCHER","CITY_CODE_MATCHER","COUNTRY_CODE_MATCHER","BELFIORE_CODE_MATCHER","CHECK_DIGIT","CODICE_FISCALE","PARTIAL_CF_NAME_MATCHER","PARTIAL_CF_FULL_NAME","PARTIAL_YEAR","PARTIAL_MONTH_DAY","PARTIAL_FULL_DATE","PARTIAL_BELFIORE_CODE_MATCHER","PARTIAL_CF","CRC","BirthMonth","CRC$1","CheckDigitizer","checkDigit","codiceFiscale","partialCF","substr","partialCfValue","charValue","evaluateChar","String","fromCharCode","CRC_MOD","CHAR_OFFSET","generator","evaluateCharGenerator","Symbol","iterator","static","index","char","toUpperCase","parseInt","charCodeAt","GenderWeight","BirthMonth$1","Omocodes","GenderWeight$1","Omocodes$1","Gender","getDay","genderDay","plainDay","F","MAX_MONTH_DAY","getGender","toArray","find","gender","genderizeDay","CF_INTRODUCTION_DATE","diacriticRemover","DiacriticRemover","Parser","belfioreConnector","constructor","OMOCODE_BITMAP","cfDeomocode","deomocodedCf","partialCfDeomocode","substring","appyCaseToChar","cfOmocode","omocodeId","omocodedCf","split","i","o","crc","partialCf","slice","join","cfOmocodeId","cfOmocodeBitmap","filter","map","cfToLastName","cfLastNamePart","LASTNAME_OFFSET","lastNameCf","cons","match","vow","matchingLength","JOLLY_CHAR","cfToFirstName","cfFirstNamePart","FIRSTNAME_OFFSET","cfToGender","GENDER_OFFSET","cfGenderPart","genderInt","cfToBirthYear","YEAR_OFFSET","cfBirthYearPart","birthYear","current2DigitsYear","format","century","subtract","cfToBirthMonth","MONTH_OFFSET","cfBirthMonthPart","birthMonth","cfToBirthDay","DAY_OFFSET","cfBirthDayPart","birthDay","cfToBirthDate","cfToBirthPlace","checkBirthDateConsistency","PLACE_OFFSET","cfBirthPlacePart","belfioreCode","birthPlace","findByCode","creationDate","expirationDate","birthDate","isBirthDateAfterCfIntroduction","add","isBefore","isAfter","cfDecode","fiscalCode","undefined","place","personalInfo","firstName","lastName","lastNameToCf","trim","replace","charExtractor","padEnd","firstNameToCf","consonants","yearToCf","parsedYear","monthToCf","dayGenderToCf","genderValue","yearMonthDayToDate","param","parsePlace","verifiedBirthPlace","findByName","dateGenderToCf","getFullYear","getMonth","getDate","placeToCf","dateOrName","nameOrProvince","provinceId","name","province","placeFinder","byProvince","from","foundPlace","encodeCf","dtParams","async","cf","cfPartGenerator","cfValue","checkBitmap","offset","charOmocode","text","CHAR_LIST","charMatcher","partialCodiceFiscale","position","targetChar","counterCaseChar","isUpperCase","isLowerCase","toLowerCase","INVALID_SURNAME","INVALID_NAME","INVALID_DAY","INVALID_GENDER","INVALID_DAY_OR_GENDER","INVALID_YEAR","INVALID_DATE","CfuError","Error","errorCode","super","Object","entries","ErrorMessages","errId","Pattern","parser","cfLastName","matcher","isolatedInsensitiveTailor","cfFirstName","cfYear","deomocode","cfMonth","cfDay","parsedDayM","parsedDayF","cfDayGender","parsedDayGender","cfDateGender","includes","parsedDateGender","parseDeomocode","g","parsedGender","cfPlace","birthDateOrName","placeName","parsedPlace","parsedCf","validator","cfMatcher","toString","LETTER_SET","matcherBy","SEPARATOR_SET","diacriticizer","matchingChars","insensitiveMatcher","diacriticsVowelMatcher","midDiacriticVowelMatcher","endingDiacritcVowelMatcher","divider","diacriticsVowelList","diacriticsConsonantList","chars","DATE_MATCHER.ISO8601_DATE_TIME","dateIso8601","toJSON","diff","padStart","DATE_MATCHER.TIME","DATE_MATCHER.TIMEZONE","c","omocode","n","CFMismatchValidator","pattern","hasLastName","hasFirstName","hasBirthYear","hasBirthDate","DATE_OFFSET","hasGender","hasBirthPlace","hasCRC","matchPersonalInfo","mismatchPersonalInfo","matchLastName","mismatchLastName","matchFirstName","mismatchFirstName","matchBirthDate","parsedCfDate","isSame","mismatchBirthDate","matchGender","mismatchGender","matchBirthPlace","parsedBirthPlace","mismatchBirthPlace","errors","Promise","all","then","placeCheck","placeCreationExpirationCheck","keys","valid","cfPattern","invalid","Validator","isLastNameValid","isLastNameInvalid","isFirstNameValid","isFirstNameInvalid","isBirthDateValid","isBirthDateInvalid","isGenderValid","isGenderInvalid","isBirthPlaceValid","isBirthPlaceInvalid","birthDatePlaceMatch","birthDatePlaceMismatch","birthPlaceDateMatch","birthPlaceDateMismatch","CodiceFiscaleUtils"],"mappings":"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CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACKC,CAAsB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtBC,CAAyB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzBC,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACKC,GACL,CACKC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAA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"} \ No newline at end of file diff --git a/docs/classes/CFMismatchValidator.html b/docs/classes/CFMismatchValidator.html index 09b7331..bc5e270 100644 --- a/docs/classes/CFMismatchValidator.html +++ b/docs/classes/CFMismatchValidator.html @@ -1,4 +1,4 @@ -CFMismatchValidator | @marketto/codice-fiscale-utils

Constructors

constructor +CFMismatchValidator | @marketto/codice-fiscale-utils

Constructors

Properties

codiceFiscale: string
parser: Parser
pattern: Pattern

Accessors

  • get errors(): Promise<null | IMismatchVerboseErrors>
  • Check the given cf validity by form, birth date/place and digit code

    +

Constructors

Properties

codiceFiscale: string
parser: Parser
pattern: Pattern

Accessors

Methods

\ No newline at end of file +

Methods

\ No newline at end of file diff --git a/docs/classes/CheckDigitizer.html b/docs/classes/CheckDigitizer.html index 9716923..900b447 100644 --- a/docs/classes/CheckDigitizer.html +++ b/docs/classes/CheckDigitizer.html @@ -1,12 +1,12 @@ -CheckDigitizer | @marketto/codice-fiscale-utils

Constructors

constructor +CheckDigitizer | @marketto/codice-fiscale-utils

Constructors

Properties

CHAR_OFFSET: number = 65
CRC_MOD: number = 26

Methods

  • Evaluate given partial CF to produce last check digit character

    +

Constructors

Properties

CHAR_OFFSET: number = 65
CRC_MOD: number = 26

Methods

  • Evaluate given partial CF to produce last check digit character

    Parameters

    • codiceFiscale: string

      Partial or complete Fiscal Code to evaluate to produce last character

    Returns null | CodiceFiscaleCRC

    16th CF char

    -
  • Partial FiscalCode Evaluator

    Parameters

    • partialCF: string = ""

    Returns Generator<unknown, any, unknown>

    Yields

    character value odd/even

    -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/classes/CodiceFiscaleUtils.html b/docs/classes/CodiceFiscaleUtils.html index 5249062..1a33b8c 100644 --- a/docs/classes/CodiceFiscaleUtils.html +++ b/docs/classes/CodiceFiscaleUtils.html @@ -1,6 +1,6 @@ -CodiceFiscaleUtils | @marketto/codice-fiscale-utils

Constructors

constructor +CodiceFiscaleUtils | @marketto/codice-fiscale-utils

Constructors

Properties

belfioreConnector: IBelfioreConnector
parser: Parser
pattern: Pattern
validator: Validator
\ No newline at end of file +

Constructors

Properties

belfioreConnector: IBelfioreConnector
parser: Parser
pattern: Pattern
validator: Validator
\ No newline at end of file diff --git a/docs/classes/DateUtils.html b/docs/classes/DateUtils.html index 36e8708..47bd1cc 100644 --- a/docs/classes/DateUtils.html +++ b/docs/classes/DateUtils.html @@ -1,7 +1,7 @@ -DateUtils | @marketto/codice-fiscale-utils

Constructors

constructor +DateUtils | @marketto/codice-fiscale-utils

Constructors

Methods

Constructors

Methods

  • Parse a Dated and Gender information to create Date/Gender CF part

    Parameters

    • Optional date: null | MultiFormatDate

      Date instance, ISO8601 date string or array of numbers [year, month, day]

    Returns null | Date

    Parsed Date or null if not valid

    -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/classes/Gender.html b/docs/classes/Gender.html index b1a0ee7..f6d66cf 100644 --- a/docs/classes/Gender.html +++ b/docs/classes/Gender.html @@ -1,7 +1,7 @@ -Gender | @marketto/codice-fiscale-utils

Constructors

constructor +Gender | @marketto/codice-fiscale-utils

Constructors

Properties

MAX_MONTH_DAY: number = 31

Methods

\ No newline at end of file +

Constructors

Properties

MAX_MONTH_DAY: number = 31

Methods

\ No newline at end of file diff --git a/docs/classes/Parser.html b/docs/classes/Parser.html index d19516c..140157b 100644 --- a/docs/classes/Parser.html +++ b/docs/classes/Parser.html @@ -1,4 +1,4 @@ -Parser | @marketto/codice-fiscale-utils

Constructors

constructor +Parser | @marketto/codice-fiscale-utils

Constructors

Properties

JOLLY_CHAR: string = "*"
OMOCODE_BITMAP: number = 0b0111011011000000

Default omocode bitmap

-
belfioreConnector: IBelfioreConnector

Methods

  • Parameters

    • targetChar: string
    • counterCaseChar: string

    Returns string

  • Parameters

    • fiscalCode: string

      16 character Codice Fiscale to decode

      +

Constructors

Properties

JOLLY_CHAR: string = "*"
OMOCODE_BITMAP: number = 0b0111011011000000

Default omocode bitmap

+
belfioreConnector: IBelfioreConnector

Methods

  • Parameters

    • targetChar: string
    • counterCaseChar: string

    Returns string

  • Parameters

    • fiscalCode: string

      16 character Codice Fiscale to decode

    Returns Promise<default>

    Decoded CF Info

    -
  • Convert omocode CF into plain one

    Parameters

    • codiceFiscale: string

      Partial or complete Omocode/Regular CF to parse, starting from LastName

    Returns string

    Regular CF w/o omocodes chars

    -
  • Parse birth date information

    Parameters

    • codiceFiscale: string

      Partial or complete CF to parse

    Returns null | Date

    Birth Date

    -
  • Parse birth place information

    Parameters

    • codiceFiscale: string

      Partial or complete CF to parse

    • checkBirthDateConsistency: boolean = true

      Ensure birthday is between creation and expiran date of the cf city or country, default value: true

    Returns Promise<null | BelfiorePlace>

    Birth place

    -
  • Parse birth year information

    Parameters

    • codiceFiscale: string

      Partial or complete CF to parse

    Returns null | number

    Birth Year (4 digits)

    -
  • Parse firstName information

    Parameters

    • codiceFiscale: string

      Partial or complete CF to parse

    Returns null | string

    Partial/possible firstName

    -
  • Parse lastName information

    Parameters

    • codiceFiscale: string

      Partial or complete CF to parse

    Returns null | string

    Partial/possible lastName

    -
  • Parse Date and Gender information to create Date/Gender CF part

    Parameters

    • date: MultiFormatDate

      Date instance, ISO8601 date string or array of numbers [year, month, day]

    • gender: Genders

      Gender enum value

    Returns null | string

    Birth date and Gender CF code

    -
  • Parse day information

    Parameters

    • day: number

      Day number 1..31

    • gender: Genders

      Gender enum value

    Returns null | string

    Birth Day CF code

    -
  • Generates full CF

    Parameters

    • __namedParameters: Omit<default, "place"> & {
          place?: string | BelfiorePlace;
      }

    Returns Promise<null | string>

    Complete CF

    -
  • Parse firstName to cf part

    Parameters

    • Optional firstName: null | string

      Partial or complete CF to parse

    Returns null | string

    partial cf

    -
  • Parse lastName to cf part

    Parameters

    • Optional lastName: null | string

      Partial or complete CF to parse

    Returns null | string

    partial cf

    -
  • Parse month information

    Parameters

    • month: number

      Month number 0..11

    Returns null | string

    Birth Month CF code

    -
  • Convert omocode full or chunk CF into plain one

    Parameters

    • partialCodiceFiscale: string

      Partial or complete Omocode/Regular CF to parse

    • offset: number = 0

      starting point of the given chunk in the 16 char CF

    Returns string

    Regular version w/o omocodes chars of the given chunk

    -
  • Parse a Date and Gender information to create Date/Gender CF part

    +
  • Parse a Date and Gender information to create Date/Gender CF part

    Parameters

    • cityOrCountryName: string

      City or Country name

    • Optional provinceId: string

      Province code for cities

    Returns Promise<null | string>

    Matching place belfiore code, if only once is matching criteria

    -
  • Parameters

    • birthDate: MultiFormatDate
    • cityOrCountryName: string
    • Optional provinceId: string

    Returns Promise<null | string>

  • Parse Year, Month, Day to Dated

    Parameters

    • year: undefined | null | number

      4 digits Year

    • month: undefined | null | DateMonth = 0

      1 or 2 digits Month 0..11

    • day: undefined | null | DateDay = 1

      1,2 digits Day 1..31

    Returns null | Date

    Date or null if provided year/month/day are not valid

    -
  • Parse year to cf part

    Parameters

    • year: string | number

      Birth year 2 or 4 digit string, number above 19XX or below 100

    Returns null | string

    partial cf

    -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/classes/Pattern.html b/docs/classes/Pattern.html index cbe0fd5..2b067c1 100644 --- a/docs/classes/Pattern.html +++ b/docs/classes/Pattern.html @@ -1,4 +1,4 @@ -Pattern | @marketto/codice-fiscale-utils

Constructors

constructor +Pattern | @marketto/codice-fiscale-utils

Constructors

Properties

LETTER_SET: string = ...
SEPARATOR_SET: string = "(?:'?\\s{0,4})"
belfioreConnector: IBelfioreConnector
parser: Parser

Methods

  • Validation regexp for the given year or generic

    +

Constructors

Properties

LETTER_SET: string = ...
SEPARATOR_SET: string = "(?:'?\\s{0,4})"
belfioreConnector: IBelfioreConnector
parser: Parser

Methods

  • Validation regexp for the given year or generic

    Parameters

    • Optional date: null | MultiFormatDate

      Optional date to generate validation regexp

    • Optional gender: null | Genders

    Returns RegExp

    CF date and gender matcher

    See

    Genders

    -
  • Validation regexp for the given day or generic

    Parameters

    • Optional day: DateDay

      Optional day to generate validation regexp

    Returns RegExp

    CF day matcher

    -
  • Validation regexp for the given year or generic

    Parameters

    • Optional day: DateDay

      Optional day to generate validation regexp

    • Optional gender: Genders

      Gender

    Returns RegExp

    CF day and gender matcher

    See

    Genders

    -
  • Validation regexp for the given name or generic

    Parameters

    • Optional name: string

      Optional name to generate validation regexp

    Returns RegExp

    CF name matcher

    Throw

    INVALID_NAME

    -
  • Validation regexp for the given lastName or generic

    Parameters

    • Optional lastName: string

      Optional lastName to generate validation regexp

    Returns RegExp

    CF Surname matcher

    Throw

    INVALID_SURNAME

    -
  • Validation regexp for the given month or generic

    Parameters

    • Optional month: DateMonth

      Optional month to generate validation regexp

    Returns RegExp

    CF month matcher

    -
  • Parameters

  • Parameters

    • Optional placeName: null | string

      Optional place name to generate validation regexp

    Returns Promise<RegExp>

    CF place matcher

    -
  • Parameters

    • Optional birthDate: null | MultiFormatDate
    • Optional placeName: null | string

    Returns Promise<RegExp>

  • Validation regexp for the given year or generic

    Parameters

    • Optional year: number

      Optional year to generate validation regexp

    Returns RegExp

    CF year matcher

    -
  • Generates full CF validator based on given optional input or generic

    +
  • Generates full CF validator based on given optional input or generic

    Parameters

    • Optional personalInfo: Omit<default, "place"> & {
          place?: string | BelfiorePlace;
      }

      Input Object

    Returns Promise<RegExp>

    CodiceFiscale matcher

    -
  • Returns iso8601 date validator based on given cf or generic

    Parameters

    • Optional codiceFiscale: string

      Partial or complete CF to parse

    Returns RegExp

    Generic or specific regular expression

    -
  • Returns name validator based on given cf or generic

    Parameters

    • Optional codiceFiscale: string

      Partial or complete CF to parse

    Returns RegExp

    Generic or specific regular expression

    -
  • Returns gender validator based on given cf or generic

    Parameters

    • Optional codiceFiscale: string

      Partial or complete CF to parse

    Returns RegExp

    Generic or specific regular expression

    -
  • Returns lastName validator based on given cf or generic

    Parameters

    • Optional codiceFiscale: string

      Partial or complete CF to parse

    Returns RegExp

    Generic or specific regular expression

    -
  • Returns place validator based on given cf or generic

    Parameters

    • Optional codiceFiscale: string

      Partial or complete CF to parse

    Returns Promise<RegExp>

    Generic or specific regular expression

    -
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/classes/Validator-1.html b/docs/classes/Validator-1.html index 78d647c..00e8c80 100644 --- a/docs/classes/Validator-1.html +++ b/docs/classes/Validator-1.html @@ -1,4 +1,4 @@ -Validator | @marketto/codice-fiscale-utils

Constructors

constructor +Validator | @marketto/codice-fiscale-utils

Constructors

Properties

belfioreConnector: IBelfioreConnector
parser: Parser
pattern: Pattern

Methods

\ No newline at end of file +

Constructors

Properties

belfioreConnector: IBelfioreConnector
parser: Parser
pattern: Pattern

Methods

\ No newline at end of file diff --git a/docs/enums/BirthMonth.html b/docs/enums/BirthMonth.html index 6cb3972..d775665 100644 --- a/docs/enums/BirthMonth.html +++ b/docs/enums/BirthMonth.html @@ -1,4 +1,4 @@ -BirthMonth | @marketto/codice-fiscale-utils

Enumeration Members

A +BirthMonth | @marketto/codice-fiscale-utils
\ No newline at end of file +

Enumeration Members

A: 0
B: 1
C: 2
D: 3
E: 4
H: 5
L: 6
M: 7
P: 8
R: 9
S: 10
T: 11
\ No newline at end of file diff --git a/docs/enums/CRC.html b/docs/enums/CRC.html index a45f61e..5fa0dee 100644 --- a/docs/enums/CRC.html +++ b/docs/enums/CRC.html @@ -1,4 +1,4 @@ -CRC | @marketto/codice-fiscale-utils

Enumeration Members

A +CRC | @marketto/codice-fiscale-utils

Enumeration Members

A B C D @@ -24,4 +24,4 @@ X Y Z -

Enumeration Members

A: 1
B: 0
C: 5
D: 7
E: 9
F: 13
G: 15
H: 17
I: 19
J: 21
K: 2
L: 4
M: 18
N: 20
O: 11
P: 3
Q: 6
R: 8
S: 12
T: 14
U: 16
V: 10
W: 22
X: 25
Y: 24
Z: 23
\ No newline at end of file +

Enumeration Members

A: 1
B: 0
C: 5
D: 7
E: 9
F: 13
G: 15
H: 17
I: 19
J: 21
K: 2
L: 4
M: 18
N: 20
O: 11
P: 3
Q: 6
R: 8
S: 12
T: 14
U: 16
V: 10
W: 22
X: 25
Y: 24
Z: 23
\ No newline at end of file diff --git a/docs/enums/Omocodes.html b/docs/enums/Omocodes.html index 200c2a0..076c906 100644 --- a/docs/enums/Omocodes.html +++ b/docs/enums/Omocodes.html @@ -1,4 +1,4 @@ -Omocodes | @marketto/codice-fiscale-utils

Enumeration Members

L +Omocodes | @marketto/codice-fiscale-utils

Enumeration Members

L M N P @@ -8,4 +8,4 @@ T U V -

Enumeration Members

L: 0
M: 1
N: 2
P: 3
Q: 4
R: 5
S: 6
T: 7
U: 8
V: 9
\ No newline at end of file +

Enumeration Members

L: 0
M: 1
N: 2
P: 3
Q: 4
R: 5
S: 6
T: 7
U: 8
V: 9
\ No newline at end of file diff --git a/docs/interfaces/IMismatchVerboseErrors.html b/docs/interfaces/IMismatchVerboseErrors.html index f2550c0..d2ee375 100644 --- a/docs/interfaces/IMismatchVerboseErrors.html +++ b/docs/interfaces/IMismatchVerboseErrors.html @@ -1,7 +1,7 @@ -IMismatchVerboseErrors | @marketto/codice-fiscale-utils
interface IMismatchVerboseErrors {
    crc?: string;
    date?: string;
    firstName?: string;
    gender?: string;
    lastName?: string;
    place?: string;
}

Properties

crc? +IMismatchVerboseErrors | @marketto/codice-fiscale-utils
interface IMismatchVerboseErrors {
    crc?: string;
    date?: string;
    firstName?: string;
    gender?: string;
    lastName?: string;
    place?: string;
}

Properties

crc?: string
date?: string
firstName?: string
gender?: string
lastName?: string
place?: string
\ No newline at end of file +

Properties

crc?: string
date?: string
firstName?: string
gender?: string
lastName?: string
place?: string
\ No newline at end of file diff --git a/docs/modules/DATE_MATCHER.html b/docs/modules/DATE_MATCHER.html index fab6e7c..0c42984 100644 --- a/docs/modules/DATE_MATCHER.html +++ b/docs/modules/DATE_MATCHER.html @@ -1,4 +1,4 @@ -DATE_MATCHER | @marketto/codice-fiscale-utils

Index

Variables

DAY +DATE_MATCHER | @marketto/codice-fiscale-utils

Index

Variables

DAY DAYS_30_MONTHS DAYS_31_MONTHS HOURS diff --git a/docs/modules/VALIDATOR.html b/docs/modules/VALIDATOR.html index e5e3db5..5fa39eb 100644 --- a/docs/modules/VALIDATOR.html +++ b/docs/modules/VALIDATOR.html @@ -1,4 +1,4 @@ -VALIDATOR | @marketto/codice-fiscale-utils

Index

Variables

BELFIORE_CODE_MATCHER +VALIDATOR | @marketto/codice-fiscale-utils

Index

Variables

BELFIORE_CODE_MATCHER CF_FULL_NAME_MATCHER CF_NAME_MATCHER CF_SURNAME_MATCHER diff --git a/docs/types/DateDay.html b/docs/types/DateDay.html index 1c21265..ff8c806 100644 --- a/docs/types/DateDay.html +++ b/docs/types/DateDay.html @@ -1 +1 @@ -DateDay | @marketto/codice-fiscale-utils
DateDay: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31
\ No newline at end of file +DateDay | @marketto/codice-fiscale-utils
DateDay: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31
\ No newline at end of file diff --git a/docs/types/DateMonth.html b/docs/types/DateMonth.html index 9fd5e04..2af313a 100644 --- a/docs/types/DateMonth.html +++ b/docs/types/DateMonth.html @@ -1 +1 @@ -DateMonth | @marketto/codice-fiscale-utils
DateMonth: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
\ No newline at end of file +DateMonth | @marketto/codice-fiscale-utils
DateMonth: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11
\ No newline at end of file diff --git a/docs/types/Genders.html b/docs/types/Genders.html index 5eed811..b7f8cc9 100644 --- a/docs/types/Genders.html +++ b/docs/types/Genders.html @@ -1 +1 @@ -Genders | @marketto/codice-fiscale-utils
Genders: "M" | "F"
\ No newline at end of file +Genders | @marketto/codice-fiscale-utils
Genders: "M" | "F"
\ No newline at end of file diff --git a/docs/types/MultiFormatDate.html b/docs/types/MultiFormatDate.html index 8cef394..c882b8c 100644 --- a/docs/types/MultiFormatDate.html +++ b/docs/types/MultiFormatDate.html @@ -1 +1 @@ -MultiFormatDate | @marketto/codice-fiscale-utils
MultiFormatDate: string | Date | number[]
\ No newline at end of file +MultiFormatDate | @marketto/codice-fiscale-utils
MultiFormatDate: string | Date | number[]
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.DAY.html b/docs/variables/DATE_MATCHER.DAY.html index 3a6a255..efd2f7c 100644 --- a/docs/variables/DATE_MATCHER.DAY.html +++ b/docs/variables/DATE_MATCHER.DAY.html @@ -1 +1 @@ -DAY | @marketto/codice-fiscale-utils
DAY: string = "0[1-9]|[12][0-9]|3[01]"
\ No newline at end of file +DAY | @marketto/codice-fiscale-utils
DAY: string = "0[1-9]|[12][0-9]|3[01]"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.DAYS_30_MONTHS.html b/docs/variables/DATE_MATCHER.DAYS_30_MONTHS.html index 40c5826..dcdab4f 100644 --- a/docs/variables/DATE_MATCHER.DAYS_30_MONTHS.html +++ b/docs/variables/DATE_MATCHER.DAYS_30_MONTHS.html @@ -1 +1 @@ -DAYS_30_MONTHS | @marketto/codice-fiscale-utils
DAYS_30_MONTHS: string = "0[469]|11"
\ No newline at end of file +DAYS_30_MONTHS | @marketto/codice-fiscale-utils
DAYS_30_MONTHS: string = "0[469]|11"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.DAYS_31_MONTHS.html b/docs/variables/DATE_MATCHER.DAYS_31_MONTHS.html index e643eb0..b75b162 100644 --- a/docs/variables/DATE_MATCHER.DAYS_31_MONTHS.html +++ b/docs/variables/DATE_MATCHER.DAYS_31_MONTHS.html @@ -1 +1 @@ -DAYS_31_MONTHS | @marketto/codice-fiscale-utils
DAYS_31_MONTHS: string = "0[13578]|1[02]"
\ No newline at end of file +DAYS_31_MONTHS | @marketto/codice-fiscale-utils
DAYS_31_MONTHS: string = "0[13578]|1[02]"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.HOURS.html b/docs/variables/DATE_MATCHER.HOURS.html index f768ced..935a324 100644 --- a/docs/variables/DATE_MATCHER.HOURS.html +++ b/docs/variables/DATE_MATCHER.HOURS.html @@ -1 +1 @@ -HOURS | @marketto/codice-fiscale-utils
HOURS: string = "[01]\\d|2[0-3]"
\ No newline at end of file +HOURS | @marketto/codice-fiscale-utils
HOURS: string = "[01]\\d|2[0-3]"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.ISO8601_DATE_TIME.html b/docs/variables/DATE_MATCHER.ISO8601_DATE_TIME.html index 3136019..1d058d6 100644 --- a/docs/variables/DATE_MATCHER.ISO8601_DATE_TIME.html +++ b/docs/variables/DATE_MATCHER.ISO8601_DATE_TIME.html @@ -1 +1 @@ -ISO8601_DATE_TIME | @marketto/codice-fiscale-utils
ISO8601_DATE_TIME: string = ...
\ No newline at end of file +ISO8601_DATE_TIME | @marketto/codice-fiscale-utils
ISO8601_DATE_TIME: string = ...
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.ISO8601_SHORT_DATE.html b/docs/variables/DATE_MATCHER.ISO8601_SHORT_DATE.html index 1213b62..e11a9e3 100644 --- a/docs/variables/DATE_MATCHER.ISO8601_SHORT_DATE.html +++ b/docs/variables/DATE_MATCHER.ISO8601_SHORT_DATE.html @@ -1 +1 @@ -ISO8601_SHORT_DATE | @marketto/codice-fiscale-utils
ISO8601_SHORT_DATE: string = ...
\ No newline at end of file +ISO8601_SHORT_DATE | @marketto/codice-fiscale-utils
ISO8601_SHORT_DATE: string = ...
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.LEAP_MONTH.html b/docs/variables/DATE_MATCHER.LEAP_MONTH.html index 4335405..6a783ac 100644 --- a/docs/variables/DATE_MATCHER.LEAP_MONTH.html +++ b/docs/variables/DATE_MATCHER.LEAP_MONTH.html @@ -1 +1 @@ -LEAP_MONTH | @marketto/codice-fiscale-utils
LEAP_MONTH: string = "02"
\ No newline at end of file +LEAP_MONTH | @marketto/codice-fiscale-utils
LEAP_MONTH: string = "02"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.MILLISECONDS.html b/docs/variables/DATE_MATCHER.MILLISECONDS.html index aa6901a..b0318ac 100644 --- a/docs/variables/DATE_MATCHER.MILLISECONDS.html +++ b/docs/variables/DATE_MATCHER.MILLISECONDS.html @@ -1 +1 @@ -MILLISECONDS | @marketto/codice-fiscale-utils
MILLISECONDS: string = "\\d{3}"
\ No newline at end of file +MILLISECONDS | @marketto/codice-fiscale-utils
MILLISECONDS: string = "\\d{3}"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.MINUTES.html b/docs/variables/DATE_MATCHER.MINUTES.html index 905e286..8ee08fb 100644 --- a/docs/variables/DATE_MATCHER.MINUTES.html +++ b/docs/variables/DATE_MATCHER.MINUTES.html @@ -1 +1 @@ -MINUTES | @marketto/codice-fiscale-utils
MINUTES: string = "[0-5]\\d"
\ No newline at end of file +MINUTES | @marketto/codice-fiscale-utils
MINUTES: string = "[0-5]\\d"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.MONTH.html b/docs/variables/DATE_MATCHER.MONTH.html index caa49f3..6c97dda 100644 --- a/docs/variables/DATE_MATCHER.MONTH.html +++ b/docs/variables/DATE_MATCHER.MONTH.html @@ -1 +1 @@ -MONTH | @marketto/codice-fiscale-utils
MONTH: string = "0[1-9]|1[0-2]"
\ No newline at end of file +MONTH | @marketto/codice-fiscale-utils
MONTH: string = "0[1-9]|1[0-2]"
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.MONTH_DAY.html b/docs/variables/DATE_MATCHER.MONTH_DAY.html index eebeae1..48b577f 100644 --- a/docs/variables/DATE_MATCHER.MONTH_DAY.html +++ b/docs/variables/DATE_MATCHER.MONTH_DAY.html @@ -1 +1 @@ -MONTH_DAY | @marketto/codice-fiscale-utils
\ No newline at end of file +MONTH_DAY | @marketto/codice-fiscale-utils
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.SECONDS.html b/docs/variables/DATE_MATCHER.SECONDS.html index 794864b..2edf042 100644 --- a/docs/variables/DATE_MATCHER.SECONDS.html +++ b/docs/variables/DATE_MATCHER.SECONDS.html @@ -1 +1 @@ -SECONDS | @marketto/codice-fiscale-utils
\ No newline at end of file +SECONDS | @marketto/codice-fiscale-utils
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.TIME.html b/docs/variables/DATE_MATCHER.TIME.html index 4229375..33e59ea 100644 --- a/docs/variables/DATE_MATCHER.TIME.html +++ b/docs/variables/DATE_MATCHER.TIME.html @@ -1 +1 @@ -TIME | @marketto/codice-fiscale-utils
\ No newline at end of file +TIME | @marketto/codice-fiscale-utils
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.TIMEZONE.html b/docs/variables/DATE_MATCHER.TIMEZONE.html index 79323dd..c3e0174 100644 --- a/docs/variables/DATE_MATCHER.TIMEZONE.html +++ b/docs/variables/DATE_MATCHER.TIMEZONE.html @@ -1 +1 @@ -TIMEZONE | @marketto/codice-fiscale-utils
\ No newline at end of file +TIMEZONE | @marketto/codice-fiscale-utils
\ No newline at end of file diff --git a/docs/variables/DATE_MATCHER.YEAR.html b/docs/variables/DATE_MATCHER.YEAR.html index f90a123..5dd9ab8 100644 --- a/docs/variables/DATE_MATCHER.YEAR.html +++ b/docs/variables/DATE_MATCHER.YEAR.html @@ -1 +1 @@ -YEAR | @marketto/codice-fiscale-utils
YEAR: string = "[12][0-9]{3}"
\ No newline at end of file +YEAR | @marketto/codice-fiscale-utils
YEAR: string = "[12][0-9]{3}"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.BELFIORE_CODE_MATCHER.html b/docs/variables/VALIDATOR.BELFIORE_CODE_MATCHER.html index cb18d7d..58542db 100644 --- a/docs/variables/VALIDATOR.BELFIORE_CODE_MATCHER.html +++ b/docs/variables/VALIDATOR.BELFIORE_CODE_MATCHER.html @@ -1 +1 @@ -BELFIORE_CODE_MATCHER | @marketto/codice-fiscale-utils
BELFIORE_CODE_MATCHER: string = ...
\ No newline at end of file +BELFIORE_CODE_MATCHER | @marketto/codice-fiscale-utils
BELFIORE_CODE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CF_FULL_NAME_MATCHER.html b/docs/variables/VALIDATOR.CF_FULL_NAME_MATCHER.html index 8259038..a780137 100644 --- a/docs/variables/VALIDATOR.CF_FULL_NAME_MATCHER.html +++ b/docs/variables/VALIDATOR.CF_FULL_NAME_MATCHER.html @@ -1 +1 @@ -CF_FULL_NAME_MATCHER | @marketto/codice-fiscale-utils
CF_FULL_NAME_MATCHER: string = ...
\ No newline at end of file +CF_FULL_NAME_MATCHER | @marketto/codice-fiscale-utils
CF_FULL_NAME_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CF_NAME_MATCHER.html b/docs/variables/VALIDATOR.CF_NAME_MATCHER.html index 41d2dc2..ae2469e 100644 --- a/docs/variables/VALIDATOR.CF_NAME_MATCHER.html +++ b/docs/variables/VALIDATOR.CF_NAME_MATCHER.html @@ -1 +1 @@ -CF_NAME_MATCHER | @marketto/codice-fiscale-utils
CF_NAME_MATCHER: string = ...
\ No newline at end of file +CF_NAME_MATCHER | @marketto/codice-fiscale-utils
CF_NAME_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CF_SURNAME_MATCHER.html b/docs/variables/VALIDATOR.CF_SURNAME_MATCHER.html index e019540..0a888fa 100644 --- a/docs/variables/VALIDATOR.CF_SURNAME_MATCHER.html +++ b/docs/variables/VALIDATOR.CF_SURNAME_MATCHER.html @@ -1 +1 @@ -CF_SURNAME_MATCHER | @marketto/codice-fiscale-utils
CF_SURNAME_MATCHER: string = CF_NAME_MATCHER
\ No newline at end of file +CF_SURNAME_MATCHER | @marketto/codice-fiscale-utils
CF_SURNAME_MATCHER: string = CF_NAME_MATCHER
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CHECK_DIGIT.html b/docs/variables/VALIDATOR.CHECK_DIGIT.html index 7bf3356..1c1068a 100644 --- a/docs/variables/VALIDATOR.CHECK_DIGIT.html +++ b/docs/variables/VALIDATOR.CHECK_DIGIT.html @@ -1 +1 @@ -CHECK_DIGIT | @marketto/codice-fiscale-utils
CHECK_DIGIT: string = "[A-Z]"
\ No newline at end of file +CHECK_DIGIT | @marketto/codice-fiscale-utils
CHECK_DIGIT: string = "[A-Z]"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CITY_CODE_LIST.html b/docs/variables/VALIDATOR.CITY_CODE_LIST.html index a11aecd..c23f2b9 100644 --- a/docs/variables/VALIDATOR.CITY_CODE_LIST.html +++ b/docs/variables/VALIDATOR.CITY_CODE_LIST.html @@ -1 +1 @@ -CITY_CODE_LIST | @marketto/codice-fiscale-utils
CITY_CODE_LIST: string = "A-M"
\ No newline at end of file +CITY_CODE_LIST | @marketto/codice-fiscale-utils
CITY_CODE_LIST: string = "A-M"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CITY_CODE_MATCHER.html b/docs/variables/VALIDATOR.CITY_CODE_MATCHER.html index 8232d1a..c9ce8d6 100644 --- a/docs/variables/VALIDATOR.CITY_CODE_MATCHER.html +++ b/docs/variables/VALIDATOR.CITY_CODE_MATCHER.html @@ -1 +1 @@ -CITY_CODE_MATCHER | @marketto/codice-fiscale-utils
CITY_CODE_MATCHER: string = ...
\ No newline at end of file +CITY_CODE_MATCHER | @marketto/codice-fiscale-utils
CITY_CODE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CODICE_FISCALE.html b/docs/variables/VALIDATOR.CODICE_FISCALE.html index ec30794..6e98a4c 100644 --- a/docs/variables/VALIDATOR.CODICE_FISCALE.html +++ b/docs/variables/VALIDATOR.CODICE_FISCALE.html @@ -1 +1 @@ -CODICE_FISCALE | @marketto/codice-fiscale-utils
CODICE_FISCALE: string = ...
\ No newline at end of file +CODICE_FISCALE | @marketto/codice-fiscale-utils
CODICE_FISCALE: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.CONSONANT_LIST.html b/docs/variables/VALIDATOR.CONSONANT_LIST.html index b9adc4f..4e5e235 100644 --- a/docs/variables/VALIDATOR.CONSONANT_LIST.html +++ b/docs/variables/VALIDATOR.CONSONANT_LIST.html @@ -1 +1 @@ -CONSONANT_LIST | @marketto/codice-fiscale-utils
CONSONANT_LIST: string = "B-DF-HJ-NP-TV-Z"
\ No newline at end of file +CONSONANT_LIST | @marketto/codice-fiscale-utils
CONSONANT_LIST: string = "B-DF-HJ-NP-TV-Z"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.COUNTRY_CODE_LIST.html b/docs/variables/VALIDATOR.COUNTRY_CODE_LIST.html index 2e63a51..93b66b6 100644 --- a/docs/variables/VALIDATOR.COUNTRY_CODE_LIST.html +++ b/docs/variables/VALIDATOR.COUNTRY_CODE_LIST.html @@ -1 +1 @@ -COUNTRY_CODE_LIST | @marketto/codice-fiscale-utils
COUNTRY_CODE_LIST: string = "Z"
\ No newline at end of file +COUNTRY_CODE_LIST | @marketto/codice-fiscale-utils
COUNTRY_CODE_LIST: string = "Z"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.COUNTRY_CODE_MATCHER.html b/docs/variables/VALIDATOR.COUNTRY_CODE_MATCHER.html index 23c3353..167fa3d 100644 --- a/docs/variables/VALIDATOR.COUNTRY_CODE_MATCHER.html +++ b/docs/variables/VALIDATOR.COUNTRY_CODE_MATCHER.html @@ -1 +1 @@ -COUNTRY_CODE_MATCHER | @marketto/codice-fiscale-utils
COUNTRY_CODE_MATCHER: string = ...
\ No newline at end of file +COUNTRY_CODE_MATCHER | @marketto/codice-fiscale-utils
COUNTRY_CODE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.DAY_29_MATCHER.html b/docs/variables/VALIDATOR.DAY_29_MATCHER.html index 6935474..07cb95a 100644 --- a/docs/variables/VALIDATOR.DAY_29_MATCHER.html +++ b/docs/variables/VALIDATOR.DAY_29_MATCHER.html @@ -1 +1 @@ -DAY_29_MATCHER | @marketto/codice-fiscale-utils
DAY_29_MATCHER: string = ...
\ No newline at end of file +DAY_29_MATCHER | @marketto/codice-fiscale-utils
DAY_29_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.DAY_2X_MATCHER.html b/docs/variables/VALIDATOR.DAY_2X_MATCHER.html index 19fca5e..915f810 100644 --- a/docs/variables/VALIDATOR.DAY_2X_MATCHER.html +++ b/docs/variables/VALIDATOR.DAY_2X_MATCHER.html @@ -1 +1 @@ -DAY_2X_MATCHER | @marketto/codice-fiscale-utils
DAY_2X_MATCHER: string = "[26NS]"
\ No newline at end of file +DAY_2X_MATCHER | @marketto/codice-fiscale-utils
DAY_2X_MATCHER: string = "[26NS]"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.DAY_30_MATCHER.html b/docs/variables/VALIDATOR.DAY_30_MATCHER.html index 11dd6a3..9b9ef42 100644 --- a/docs/variables/VALIDATOR.DAY_30_MATCHER.html +++ b/docs/variables/VALIDATOR.DAY_30_MATCHER.html @@ -1 +1 @@ -DAY_30_MATCHER | @marketto/codice-fiscale-utils
DAY_30_MATCHER: string = ...
\ No newline at end of file +DAY_30_MATCHER | @marketto/codice-fiscale-utils
DAY_30_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.DAY_31_MATCHER.html b/docs/variables/VALIDATOR.DAY_31_MATCHER.html index 74b5943..498e7af 100644 --- a/docs/variables/VALIDATOR.DAY_31_MATCHER.html +++ b/docs/variables/VALIDATOR.DAY_31_MATCHER.html @@ -1 +1 @@ -DAY_31_MATCHER | @marketto/codice-fiscale-utils
DAY_31_MATCHER: string = ...
\ No newline at end of file +DAY_31_MATCHER | @marketto/codice-fiscale-utils
DAY_31_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.DAY_3X_MATCHER.html b/docs/variables/VALIDATOR.DAY_3X_MATCHER.html index b228c50..f98b72f 100644 --- a/docs/variables/VALIDATOR.DAY_3X_MATCHER.html +++ b/docs/variables/VALIDATOR.DAY_3X_MATCHER.html @@ -1 +1 @@ -DAY_3X_MATCHER | @marketto/codice-fiscale-utils
DAY_3X_MATCHER: string = "[37PT]"
\ No newline at end of file +DAY_3X_MATCHER | @marketto/codice-fiscale-utils
DAY_3X_MATCHER: string = "[37PT]"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.DAY_MATCHER.html b/docs/variables/VALIDATOR.DAY_MATCHER.html index 116e505..ae8dc6c 100644 --- a/docs/variables/VALIDATOR.DAY_MATCHER.html +++ b/docs/variables/VALIDATOR.DAY_MATCHER.html @@ -1 +1 @@ -DAY_MATCHER | @marketto/codice-fiscale-utils
DAY_MATCHER: string = ...
\ No newline at end of file +DAY_MATCHER | @marketto/codice-fiscale-utils
DAY_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.FEMALE_DAY_MATCHER.html b/docs/variables/VALIDATOR.FEMALE_DAY_MATCHER.html index b0f92e4..b1fb2a7 100644 --- a/docs/variables/VALIDATOR.FEMALE_DAY_MATCHER.html +++ b/docs/variables/VALIDATOR.FEMALE_DAY_MATCHER.html @@ -1 +1 @@ -FEMALE_DAY_MATCHER | @marketto/codice-fiscale-utils
FEMALE_DAY_MATCHER: string = ...
\ No newline at end of file +FEMALE_DAY_MATCHER | @marketto/codice-fiscale-utils
FEMALE_DAY_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.FEMALE_FULL_DATE_MATCHER.html b/docs/variables/VALIDATOR.FEMALE_FULL_DATE_MATCHER.html index ef08fc4..10bd8e1 100644 --- a/docs/variables/VALIDATOR.FEMALE_FULL_DATE_MATCHER.html +++ b/docs/variables/VALIDATOR.FEMALE_FULL_DATE_MATCHER.html @@ -1 +1 @@ -FEMALE_FULL_DATE_MATCHER | @marketto/codice-fiscale-utils
FEMALE_FULL_DATE_MATCHER: string = ...
\ No newline at end of file +FEMALE_FULL_DATE_MATCHER | @marketto/codice-fiscale-utils
FEMALE_FULL_DATE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.FULL_DATE_MATCHER.html b/docs/variables/VALIDATOR.FULL_DATE_MATCHER.html index c31265f..0a881e6 100644 --- a/docs/variables/VALIDATOR.FULL_DATE_MATCHER.html +++ b/docs/variables/VALIDATOR.FULL_DATE_MATCHER.html @@ -1 +1 @@ -FULL_DATE_MATCHER | @marketto/codice-fiscale-utils
FULL_DATE_MATCHER: string = ...
\ No newline at end of file +FULL_DATE_MATCHER | @marketto/codice-fiscale-utils
FULL_DATE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.LEAP_YEAR_MATCHER.html b/docs/variables/VALIDATOR.LEAP_YEAR_MATCHER.html index cb6a4c5..de267b3 100644 --- a/docs/variables/VALIDATOR.LEAP_YEAR_MATCHER.html +++ b/docs/variables/VALIDATOR.LEAP_YEAR_MATCHER.html @@ -1 +1 @@ -LEAP_YEAR_MATCHER | @marketto/codice-fiscale-utils
LEAP_YEAR_MATCHER: string = "[02468LNQSU][048LQU]|[13579MPRTV][26NS]"
\ No newline at end of file +LEAP_YEAR_MATCHER | @marketto/codice-fiscale-utils
LEAP_YEAR_MATCHER: string = "[02468LNQSU][048LQU]|[13579MPRTV][26NS]"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MALE_DAY_MATCHER.html b/docs/variables/VALIDATOR.MALE_DAY_MATCHER.html index 5011895..e6ea442 100644 --- a/docs/variables/VALIDATOR.MALE_DAY_MATCHER.html +++ b/docs/variables/VALIDATOR.MALE_DAY_MATCHER.html @@ -1 +1 @@ -MALE_DAY_MATCHER | @marketto/codice-fiscale-utils
MALE_DAY_MATCHER: string = ...
\ No newline at end of file +MALE_DAY_MATCHER | @marketto/codice-fiscale-utils
MALE_DAY_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MALE_FULL_DATE_MATCHER.html b/docs/variables/VALIDATOR.MALE_FULL_DATE_MATCHER.html index fdc9da1..5f38bd3 100644 --- a/docs/variables/VALIDATOR.MALE_FULL_DATE_MATCHER.html +++ b/docs/variables/VALIDATOR.MALE_FULL_DATE_MATCHER.html @@ -1 +1 @@ -MALE_FULL_DATE_MATCHER | @marketto/codice-fiscale-utils
MALE_FULL_DATE_MATCHER: string = ...
\ No newline at end of file +MALE_FULL_DATE_MATCHER | @marketto/codice-fiscale-utils
MALE_FULL_DATE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MONTH_30DAYS_LIST.html b/docs/variables/VALIDATOR.MONTH_30DAYS_LIST.html index e13bba2..4dedcba 100644 --- a/docs/variables/VALIDATOR.MONTH_30DAYS_LIST.html +++ b/docs/variables/VALIDATOR.MONTH_30DAYS_LIST.html @@ -1 +1 @@ -MONTH_30DAYS_LIST | @marketto/codice-fiscale-utils
MONTH_30DAYS_LIST: string = "DHPS"
\ No newline at end of file +MONTH_30DAYS_LIST | @marketto/codice-fiscale-utils
MONTH_30DAYS_LIST: string = "DHPS"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MONTH_31DAYS_LIST.html b/docs/variables/VALIDATOR.MONTH_31DAYS_LIST.html index 20a9330..3092154 100644 --- a/docs/variables/VALIDATOR.MONTH_31DAYS_LIST.html +++ b/docs/variables/VALIDATOR.MONTH_31DAYS_LIST.html @@ -1 +1 @@ -MONTH_31DAYS_LIST | @marketto/codice-fiscale-utils
MONTH_31DAYS_LIST: string = "ACELMRT"
\ No newline at end of file +MONTH_31DAYS_LIST | @marketto/codice-fiscale-utils
MONTH_31DAYS_LIST: string = "ACELMRT"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MONTH_DAY_MATCHER.html b/docs/variables/VALIDATOR.MONTH_DAY_MATCHER.html index 72c6c79..c4749fd 100644 --- a/docs/variables/VALIDATOR.MONTH_DAY_MATCHER.html +++ b/docs/variables/VALIDATOR.MONTH_DAY_MATCHER.html @@ -1 +1 @@ -MONTH_DAY_MATCHER | @marketto/codice-fiscale-utils
MONTH_DAY_MATCHER: string = ...
\ No newline at end of file +MONTH_DAY_MATCHER | @marketto/codice-fiscale-utils
MONTH_DAY_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MONTH_LIST.html b/docs/variables/VALIDATOR.MONTH_LIST.html index 6683c5c..cb36b1c 100644 --- a/docs/variables/VALIDATOR.MONTH_LIST.html +++ b/docs/variables/VALIDATOR.MONTH_LIST.html @@ -1 +1 @@ -MONTH_LIST | @marketto/codice-fiscale-utils
MONTH_LIST: string = "A-EHLMPR-T"
\ No newline at end of file +MONTH_LIST | @marketto/codice-fiscale-utils
MONTH_LIST: string = "A-EHLMPR-T"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.MONTH_MATCHER.html b/docs/variables/VALIDATOR.MONTH_MATCHER.html index ada14c4..5a46e22 100644 --- a/docs/variables/VALIDATOR.MONTH_MATCHER.html +++ b/docs/variables/VALIDATOR.MONTH_MATCHER.html @@ -1 +1 @@ -MONTH_MATCHER | @marketto/codice-fiscale-utils
MONTH_MATCHER: string = ...
\ No newline at end of file +MONTH_MATCHER | @marketto/codice-fiscale-utils
MONTH_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.OMOCODE_NON_ZERO_NUMBER_LIST.html b/docs/variables/VALIDATOR.OMOCODE_NON_ZERO_NUMBER_LIST.html index a5666fd..77b32f3 100644 --- a/docs/variables/VALIDATOR.OMOCODE_NON_ZERO_NUMBER_LIST.html +++ b/docs/variables/VALIDATOR.OMOCODE_NON_ZERO_NUMBER_LIST.html @@ -1 +1 @@ -OMOCODE_NON_ZERO_NUMBER_LIST | @marketto/codice-fiscale-utils
OMOCODE_NON_ZERO_NUMBER_LIST: string = "1-9MNP-V"
\ No newline at end of file +OMOCODE_NON_ZERO_NUMBER_LIST | @marketto/codice-fiscale-utils
OMOCODE_NON_ZERO_NUMBER_LIST: string = "1-9MNP-V"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.OMOCODE_NUMBER_LIST.html b/docs/variables/VALIDATOR.OMOCODE_NUMBER_LIST.html index 7a48ce7..cc682f3 100644 --- a/docs/variables/VALIDATOR.OMOCODE_NUMBER_LIST.html +++ b/docs/variables/VALIDATOR.OMOCODE_NUMBER_LIST.html @@ -1 +1 @@ -OMOCODE_NUMBER_LIST | @marketto/codice-fiscale-utils
OMOCODE_NUMBER_LIST: string = "\\dLMNP-V"
\ No newline at end of file +OMOCODE_NUMBER_LIST | @marketto/codice-fiscale-utils
OMOCODE_NUMBER_LIST: string = "\\dLMNP-V"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.OMOCODE_ZERO_LIST.html b/docs/variables/VALIDATOR.OMOCODE_ZERO_LIST.html index 6f1e772..224492c 100644 --- a/docs/variables/VALIDATOR.OMOCODE_ZERO_LIST.html +++ b/docs/variables/VALIDATOR.OMOCODE_ZERO_LIST.html @@ -1 +1 @@ -OMOCODE_ZERO_LIST | @marketto/codice-fiscale-utils
OMOCODE_ZERO_LIST: string = "0L"
\ No newline at end of file +OMOCODE_ZERO_LIST | @marketto/codice-fiscale-utils
OMOCODE_ZERO_LIST: string = "0L"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_BELFIORE_CODE_MATCHER.html b/docs/variables/VALIDATOR.PARTIAL_BELFIORE_CODE_MATCHER.html index abeb7a2..e9531eb 100644 --- a/docs/variables/VALIDATOR.PARTIAL_BELFIORE_CODE_MATCHER.html +++ b/docs/variables/VALIDATOR.PARTIAL_BELFIORE_CODE_MATCHER.html @@ -1 +1 @@ -PARTIAL_BELFIORE_CODE_MATCHER | @marketto/codice-fiscale-utils
PARTIAL_BELFIORE_CODE_MATCHER: string = ...
\ No newline at end of file +PARTIAL_BELFIORE_CODE_MATCHER | @marketto/codice-fiscale-utils
PARTIAL_BELFIORE_CODE_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_CF.html b/docs/variables/VALIDATOR.PARTIAL_CF.html index 9fcfb27..c094b1f 100644 --- a/docs/variables/VALIDATOR.PARTIAL_CF.html +++ b/docs/variables/VALIDATOR.PARTIAL_CF.html @@ -1 +1 @@ -PARTIAL_CF | @marketto/codice-fiscale-utils
PARTIAL_CF: string = ...
\ No newline at end of file +PARTIAL_CF | @marketto/codice-fiscale-utils
PARTIAL_CF: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_CF_FULL_NAME.html b/docs/variables/VALIDATOR.PARTIAL_CF_FULL_NAME.html index c73c688..a4db6fd 100644 --- a/docs/variables/VALIDATOR.PARTIAL_CF_FULL_NAME.html +++ b/docs/variables/VALIDATOR.PARTIAL_CF_FULL_NAME.html @@ -1 +1 @@ -PARTIAL_CF_FULL_NAME | @marketto/codice-fiscale-utils
PARTIAL_CF_FULL_NAME: string = ...
\ No newline at end of file +PARTIAL_CF_FULL_NAME | @marketto/codice-fiscale-utils
PARTIAL_CF_FULL_NAME: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_CF_NAME_MATCHER.html b/docs/variables/VALIDATOR.PARTIAL_CF_NAME_MATCHER.html index b57043a..e286a1c 100644 --- a/docs/variables/VALIDATOR.PARTIAL_CF_NAME_MATCHER.html +++ b/docs/variables/VALIDATOR.PARTIAL_CF_NAME_MATCHER.html @@ -1 +1 @@ -PARTIAL_CF_NAME_MATCHER | @marketto/codice-fiscale-utils
PARTIAL_CF_NAME_MATCHER: string = ...
\ No newline at end of file +PARTIAL_CF_NAME_MATCHER | @marketto/codice-fiscale-utils
PARTIAL_CF_NAME_MATCHER: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_FULL_DATE.html b/docs/variables/VALIDATOR.PARTIAL_FULL_DATE.html index c08cef2..b7c4516 100644 --- a/docs/variables/VALIDATOR.PARTIAL_FULL_DATE.html +++ b/docs/variables/VALIDATOR.PARTIAL_FULL_DATE.html @@ -1 +1 @@ -PARTIAL_FULL_DATE | @marketto/codice-fiscale-utils
PARTIAL_FULL_DATE: string = ...
\ No newline at end of file +PARTIAL_FULL_DATE | @marketto/codice-fiscale-utils
PARTIAL_FULL_DATE: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_MONTH_DAY.html b/docs/variables/VALIDATOR.PARTIAL_MONTH_DAY.html index 4192b82..b95b167 100644 --- a/docs/variables/VALIDATOR.PARTIAL_MONTH_DAY.html +++ b/docs/variables/VALIDATOR.PARTIAL_MONTH_DAY.html @@ -1 +1 @@ -PARTIAL_MONTH_DAY | @marketto/codice-fiscale-utils
PARTIAL_MONTH_DAY: string = ...
\ No newline at end of file +PARTIAL_MONTH_DAY | @marketto/codice-fiscale-utils
PARTIAL_MONTH_DAY: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.PARTIAL_YEAR.html b/docs/variables/VALIDATOR.PARTIAL_YEAR.html index edff1a5..1079294 100644 --- a/docs/variables/VALIDATOR.PARTIAL_YEAR.html +++ b/docs/variables/VALIDATOR.PARTIAL_YEAR.html @@ -1 +1 @@ -PARTIAL_YEAR | @marketto/codice-fiscale-utils
PARTIAL_YEAR: string = ...
\ No newline at end of file +PARTIAL_YEAR | @marketto/codice-fiscale-utils
PARTIAL_YEAR: string = ...
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.VOWEL_LIST.html b/docs/variables/VALIDATOR.VOWEL_LIST.html index 9c07acf..52fde0a 100644 --- a/docs/variables/VALIDATOR.VOWEL_LIST.html +++ b/docs/variables/VALIDATOR.VOWEL_LIST.html @@ -1 +1 @@ -VOWEL_LIST | @marketto/codice-fiscale-utils
VOWEL_LIST: string = "AEIOU"
\ No newline at end of file +VOWEL_LIST | @marketto/codice-fiscale-utils
VOWEL_LIST: string = "AEIOU"
\ No newline at end of file diff --git a/docs/variables/VALIDATOR.YEAR_MATCHER.html b/docs/variables/VALIDATOR.YEAR_MATCHER.html index 8842380..7c5b46e 100644 --- a/docs/variables/VALIDATOR.YEAR_MATCHER.html +++ b/docs/variables/VALIDATOR.YEAR_MATCHER.html @@ -1 +1 @@ -YEAR_MATCHER | @marketto/codice-fiscale-utils
YEAR_MATCHER: string = ...
\ No newline at end of file +YEAR_MATCHER | @marketto/codice-fiscale-utils
YEAR_MATCHER: string = ...
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json index b1c9d30..b0eb569 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@marketto/codice-fiscale-utils", - "version": "3.1.0", + "version": "3.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@marketto/codice-fiscale-utils", - "version": "3.1.0", + "version": "3.1.1", "license": "MIT", "dependencies": { "@marketto/diacritic-remover": "^1.0.7", @@ -763,9 +763,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", "cpu": [ "arm" ], @@ -776,9 +776,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", "cpu": [ "arm64" ], @@ -789,9 +789,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", "cpu": [ "arm64" ], @@ -802,9 +802,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", "cpu": [ "x64" ], @@ -815,9 +815,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", "cpu": [ "arm" ], @@ -828,9 +828,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", "cpu": [ "arm" ], @@ -841,9 +841,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", "cpu": [ "arm64" ], @@ -854,9 +854,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", "cpu": [ "arm64" ], @@ -867,9 +867,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", "cpu": [ "ppc64" ], @@ -880,9 +880,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", "cpu": [ "riscv64" ], @@ -893,9 +893,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", "cpu": [ "s390x" ], @@ -906,9 +906,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", "cpu": [ "x64" ], @@ -919,9 +919,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", "cpu": [ "x64" ], @@ -932,9 +932,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", "cpu": [ "arm64" ], @@ -945,9 +945,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", "cpu": [ "ia32" ], @@ -958,9 +958,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", "cpu": [ "x64" ], @@ -1010,9 +1010,9 @@ } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true }, "node_modules/@types/got": { @@ -5037,12 +5037,12 @@ } }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", "dev": true, "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -5052,22 +5052,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", "fsevents": "~2.3.2" } }, diff --git a/package.json b/package.json index d2beebe..8f3f6e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@marketto/codice-fiscale-utils", - "version": "3.1.0", + "version": "3.1.1", "description": "TS & JS utilities to handle Italian Codice Fiscale", "main": "dist/index.js", "module": "dist/index.mjs", diff --git a/rollup.config.mjs b/rollup.config.mjs index 926f765..2953b59 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -98,10 +98,10 @@ export default [ ...baseConf.output, file: `dist/${pkg.config.iifeFileName}.bundle.min.js`, format: "iife", + sourcemap: false, }, plugins: [ builtins({ - sourcemap: true }), rollupBrowserConf, terser({