{"version":3,"sources":["../source/parse_.js"],"names":["VALID_DIGITS","PLUS_CHARS","MIN_LENGTH_FOR_NSN","MAX_LENGTH_FOR_NSN","MAX_LENGTH_COUNTRY_CODE","matchesEntirely","ParseError","Metadata","isViablePhoneNumber","extractExtension","parseIncompletePhoneNumber","getCountryCallingCode","getNumberType","checkNumberLengthForType","isPossibleNumber","stripIDDPrefix","parseRFC3966","PhoneNumber","MAX_INPUT_STRING_LENGTH","PHONE_NUMBER_START_PATTERN","RegExp","AFTER_PHONE_NUMBER_END_PATTERN","USE_NON_GEOGRAPHIC_COUNTRY_CODE","parse","text","options","metadata","defaultCountry","hasCountry","v2","Error","parseInput","formattedPhoneNumber","number","ext","parsePhoneNumber","defaultCallingCode","country","nationalNumber","countryCallingCode","carrierCode","hasSelectedNumberingPlan","length","phoneNumber","valid","extended","nationalNumberPattern","result","possible","possibleLengths","undefined","phone","extractFormattedPhoneNumber","throwOnError","startsAt","search","slice","replace","stripNationalPrefixAndCarrierCode","nationalPrefixForParsing","prefixPattern","prefixMatch","exec","capturedGroupsCount","nationalPrefixTransformRule","nationalPrefix","findCountryCode","callingCode","nationalPhoneNumber","isNonGeographicCallingCode","possibleCountries","getCountryCodesForCallingCode","_findCountryCode","leadingDigits","indexOf","withExtensionStripped","extractCountryCallingCode","chooseCountryByCountryCallingCode","selectNumberingPlan","stripNationalPrefixAndCarrierCodeFromCompleteNumber","exactCountry","numberWithoutIDD","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","shorterNumber","i","hasCallingCode","possibleShorterNumber","possibleShorterNationalNumber"],"mappings":"AAAA;AACA;AACA;AACA;AAEA,SACCA,YADD,EAECC,UAFD,EAGCC,kBAHD,EAICC,kBAJD,EAKCC,uBALD,QAMO,aANP;AAQA,SAASC,eAAT,QAAgC,QAAhC;AACA,OAAOC,UAAP,MAAuB,cAAvB;AACA,OAAOC,QAAP,MAAqB,YAArB;AACA,OAAOC,mBAAP,MAAgC,uBAAhC;AACA,SAASC,gBAAT,QAAiC,aAAjC;AACA,OAAOC,0BAAP,MAAuC,8BAAvC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,OAAOC,aAAP,IAAwBC,wBAAxB,QAAwD,kBAAxD;AACA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,cAAT,QAA+B,OAA/B;AACA,SAASC,YAAT,QAA6B,WAA7B;AACA,OAAOC,WAAP,MAAwB,eAAxB,C,CAEA;AACA;;AACA,IAAMC,uBAAuB,GAAG,GAAhC,C,CAEA;;AACA,IAAMC,0BAA0B,GAAG,IAAIC,MAAJ,CAAW,MAAMnB,UAAN,GAAmBD,YAAnB,GAAkC,GAA7C,CAAnC,C,CAEA;;AACA,IAAMqB,8BAA8B,GAAG,IAAID,MAAJ,CAAW,OAAOpB,YAAP,GAAsB,KAAjC,CAAvC;AAEA,IAAMsB,+BAA+B,GAAG,KAAxC,C,CAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,KAAT,CAAeC,IAAf,EAAqBC,OAArB,EAA8BC,QAA9B,EAAwC;AACtD;AACA;AACAD,EAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;AAEAC,EAAAA,QAAQ,GAAG,IAAInB,QAAJ,CAAamB,QAAb,CAAX,CALsD,CAOtD;;AACA,MAAID,OAAO,CAACE,cAAR,IAA0B,CAACD,QAAQ,CAACE,UAAT,CAAoBH,OAAO,CAACE,cAA5B,CAA/B,EAA4E;AAC3E,QAAIF,OAAO,CAACI,EAAZ,EAAgB;AACf,YAAM,IAAIvB,UAAJ,CAAe,iBAAf,CAAN;AACA;;AACD,UAAM,IAAIwB,KAAJ,4BAA8BL,OAAO,CAACE,cAAtC,EAAN;AACA,GAbqD,CAetD;;;AAfsD,oBAgBRI,UAAU,CAACP,IAAD,EAAOC,OAAO,CAACI,EAAf,CAhBF;AAAA,MAgBtCG,oBAhBsC,eAgB9CC,MAhB8C;AAAA,MAgBhBC,GAhBgB,eAgBhBA,GAhBgB,EAkBtD;;;AACA,MAAI,CAACF,oBAAL,EAA2B;AAC1B,QAAIP,OAAO,CAACI,EAAZ,EAAgB;AACf,YAAM,IAAIvB,UAAJ,CAAe,cAAf,CAAN;AACA;;AACD,WAAO,EAAP;AACA;;AAxBqD,0BA+BlD6B,gBAAgB,CACnBH,oBADmB,EAEnBP,OAAO,CAACE,cAFW,EAGnBF,OAAO,CAACW,kBAHW,EAInBV,QAJmB,CA/BkC;AAAA,MA2BrDW,OA3BqD,qBA2BrDA,OA3BqD;AAAA,MA4BrDC,cA5BqD,qBA4BrDA,cA5BqD;AAAA,MA6BrDC,kBA7BqD,qBA6BrDA,kBA7BqD;AAAA,MA8BrDC,WA9BqD,qBA8BrDA,WA9BqD;;AAsCtD,MAAI,CAACd,QAAQ,CAACe,wBAAT,EAAL,EAA0C;AACzC,QAAIhB,OAAO,CAACI,EAAZ,EAAgB;AACf,YAAM,IAAIvB,UAAJ,CAAe,iBAAf,CAAN;AACA;;AACD,WAAO,EAAP;AACA,GA3CqD,CA6CtD;;;AACA,MAAI,CAACgC,cAAD,IAAmBA,cAAc,CAACI,MAAf,GAAwBxC,kBAA/C,EAAmE;AAClE;;AACA;AACA,QAAIuB,OAAO,CAACI,EAAZ,EAAgB;AACf,YAAM,IAAIvB,UAAJ,CAAe,WAAf,CAAN;AACA,KALiE,CAMlE;;;AACA,WAAO,EAAP;AACA,GAtDqD,CAwDtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAIgC,cAAc,CAACI,MAAf,GAAwBvC,kBAA5B,EAAgD;AAC/C,QAAIsB,OAAO,CAACI,EAAZ,EAAgB;AACf,YAAM,IAAIvB,UAAJ,CAAe,UAAf,CAAN;AACA,KAH8C,CAI/C;;;AACA,WAAO,EAAP;AACA;;AAED,MAAImB,OAAO,CAACI,EAAZ,EAAgB;AACf,QAAMc,WAAW,GAAG,IAAI1B,WAAJ,CACnBsB,kBADmB,EAEnBD,cAFmB,EAGnBZ,QAAQ,CAACA,QAHU,CAApB;;AAKA,QAAIW,OAAJ,EAAa;AACZM,MAAAA,WAAW,CAACN,OAAZ,GAAsBA,OAAtB;AACA;;AACD,QAAIG,WAAJ,EAAiB;AAChBG,MAAAA,WAAW,CAACH,WAAZ,GAA0BA,WAA1B;AACA;;AACD,QAAIN,GAAJ,EAAS;AACRS,MAAAA,WAAW,CAACT,GAAZ,GAAkBA,GAAlB;AACA;;AACD,WAAOS,WAAP;AACA,GAzFqD,CA2FtD;AACA;AACA;;;AACA,MAAMC,KAAK,GAAG,CAACnB,OAAO,CAACoB,QAAR,GAAmBnB,QAAQ,CAACe,wBAAT,EAAnB,GAAyDJ,OAA1D,IACbhC,eAAe,CAACiC,cAAD,EAAiBZ,QAAQ,CAACoB,qBAAT,EAAjB,CADF,GAEb,KAFD;;AAIA,MAAI,CAACrB,OAAO,CAACoB,QAAb,EAAuB;AACtB,WAAOD,KAAK,GAAGG,MAAM,CAACV,OAAD,EAAUC,cAAV,EAA0BJ,GAA1B,CAAT,GAA0C,EAAtD;AACA;;AAED,SAAO;AACNG,IAAAA,OAAO,EAAPA,OADM;AAENE,IAAAA,kBAAkB,EAAlBA,kBAFM;AAGNC,IAAAA,WAAW,EAAXA,WAHM;AAINI,IAAAA,KAAK,EAALA,KAJM;AAKNI,IAAAA,QAAQ,EAAEJ,KAAK,GAAG,IAAH,GACdnB,OAAO,CAACoB,QAAR,KAAqB,IAArB,IACAnB,QAAQ,CAACuB,eAAT,EADA,IAEAnC,gBAAgB,CAACwB,cAAD,EAAiBC,kBAAkB,KAAKW,SAAxC,EAAmDxB,QAAnD,CAFhB,GAE+E,IAF/E,GAEsF,KARjF;AAUNyB,IAAAA,KAAK,EAAEb,cAVD;AAWNJ,IAAAA,GAAG,EAAHA;AAXM,GAAP;AAaA;AAED;;;;;;;;;;;;AAWA,OAAO,SAASkB,2BAAT,CAAqC5B,IAArC,EAA2C6B,YAA3C,EAAyD;AAC/D,MAAI,CAAC7B,IAAL,EAAW;AACV;AACA;;AACD,MAAIA,IAAI,CAACkB,MAAL,GAAcxB,uBAAlB,EAA2C;AAC1C,QAAImC,YAAJ,EAAkB;AACjB,YAAM,IAAI/C,UAAJ,CAAe,UAAf,CAAN;AACA;;AACD;AACA,GAT8D,CAU/D;;;AACA,MAAMgD,QAAQ,GAAG9B,IAAI,CAAC+B,MAAL,CAAYpC,0BAAZ,CAAjB;;AACA,MAAImC,QAAQ,GAAG,CAAf,EAAkB;AACjB;AACA;;AACD,SAAO9B,IAAI,CACV;AADU,GAETgC,KAFK,CAECF,QAFD,EAGN;AAHM,GAILG,OAJK,CAIGpC,8BAJH,EAImC,EAJnC,CAAP;AAKA;AAED;;;;;;;;;;;;;;AAaA,OAAO,SAASqC,iCAAT,CAA2CzB,MAA3C,EAAmDP,QAAnD,EAA6D;AACnE,MAAIO,MAAM,IAAIP,QAAQ,CAACiC,wBAAT,EAAd,EAAmD;AAClD;AACA;AACA;AACA,QAAMC,aAAa,GAAG,IAAIxC,MAAJ,CAAW,SAASM,QAAQ,CAACiC,wBAAT,EAAT,GAA+C,GAA1D,CAAtB;AACA,QAAME,WAAW,GAAGD,aAAa,CAACE,IAAd,CAAmB7B,MAAnB,CAApB;;AACA,QAAI4B,WAAJ,EAAiB;AAChB,UAAIvB,cAAJ;AACA,UAAIE,WAAJ,CAFgB,CAGhB;AACA;;AACA,UAAMuB,mBAAmB,GAAGF,WAAW,CAACnB,MAAZ,GAAqB,CAAjD;;AACA,UAAIhB,QAAQ,CAACsC,2BAAT,MACHD,mBAAmB,GAAG,CADnB,IACwBF,WAAW,CAACE,mBAAD,CADvC,EAC8D;AAC7DzB,QAAAA,cAAc,GAAGL,MAAM,CAACwB,OAAP,CAChBG,aADgB,EAEhBlC,QAAQ,CAACsC,2BAAT,EAFgB,CAAjB,CAD6D,CAK7D;AACA;;AACA,YAAID,mBAAmB,GAAG,CAAtB,IAA2BF,WAAW,CAACE,mBAAD,CAA1C,EAAiE;AAChEvB,UAAAA,WAAW,GAAGqB,WAAW,CAAC,CAAD,CAAzB;AACA;AACD,OAXD,CAYA;AACA;AAbA,WAcK;AACJ;AACA;AACA,cAAMI,cAAc,GAAGJ,WAAW,CAAC,CAAD,CAAlC;AACAvB,UAAAA,cAAc,GAAGL,MAAM,CAACuB,KAAP,CAAaS,cAAc,CAACvB,MAA5B,CAAjB,CAJI,CAKJ;;AACA,cAAIqB,mBAAmB,GAAG,CAA1B,EAA6B;AAC5BvB,YAAAA,WAAW,GAAGqB,WAAW,CAAC,CAAD,CAAzB;AACA;AACD,SA7Be,CA8BhB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,UAAIxD,eAAe,CAAC4B,MAAD,EAASP,QAAQ,CAACoB,qBAAT,EAAT,CAAf,IACH,CAACzC,eAAe,CAACiC,cAAD,EAAiBZ,QAAQ,CAACoB,qBAAT,EAAjB,CADjB,EACqE,CACpE;AACA,OAHD,MAGO;AACN,eAAO;AACNR,UAAAA,cAAc,EAAdA,cADM;AAENE,UAAAA,WAAW,EAAXA;AAFM,SAAP;AAIA;AACD;AACD;;AACC,SAAO;AACNF,IAAAA,cAAc,EAAEL;AADV,GAAP;AAGF;AAED,OAAO,SAASiC,eAAT,CAAyBC,WAAzB,EAAsCC,mBAAtC,EAA2D1C,QAA3D,EAAqE;AAC3E;AACA,MAAIJ,+BAAJ,EAAqC;AACpC,QAAII,QAAQ,CAAC2C,0BAAT,CAAoCF,WAApC,CAAJ,EAAsD;AACrD,aAAO,KAAP;AACA;AACD,GAN0E,CAO3E;;;AACA,MAAMG,iBAAiB,GAAG5C,QAAQ,CAAC6C,6BAAT,CAAuCJ,WAAvC,CAA1B;;AACA,MAAI,CAACG,iBAAL,EAAwB;AACvB;AACA,GAX0E,CAY3E;AACA;;;AACA,MAAIA,iBAAiB,CAAC5B,MAAlB,KAA6B,CAAjC,EAAoC;AACnC,WAAO4B,iBAAiB,CAAC,CAAD,CAAxB;AACA;;AACD,SAAOE,gBAAgB,CAACF,iBAAD,EAAoBF,mBAApB,EAAyC1C,QAAQ,CAACA,QAAlD,CAAvB;AACA,C,CAED;;AACA,SAAS8C,gBAAT,CAA0BF,iBAA1B,EAA6CF,mBAA7C,EAAkE1C,QAAlE,EAA4E;AAC3EA,EAAAA,QAAQ,GAAG,IAAInB,QAAJ,CAAamB,QAAb,CAAX;;AACA,uBAAsB4C,iBAAtB,kHAAyC;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,QAA9BjC,OAA8B;AACxCX,IAAAA,QAAQ,CAACW,OAAT,CAAiBA,OAAjB,EADwC,CAExC;;AACA,QAAIX,QAAQ,CAAC+C,aAAT,EAAJ,EAA8B;AAC7B,UAAIL,mBAAmB,IACtBA,mBAAmB,CAACb,MAApB,CAA2B7B,QAAQ,CAAC+C,aAAT,EAA3B,MAAyD,CAD1D,EAC6D;AAC5D,eAAOpC,OAAP;AACA;AACD,KALD,CAMA;AACA;AAPA,SAQK,IAAIzB,aAAa,CAAC;AAAEuC,QAAAA,KAAK,EAAEiB,mBAAT;AAA8B/B,QAAAA,OAAO,EAAPA;AAA9B,OAAD,EAA0Ca,SAA1C,EAAqDxB,QAAQ,CAACA,QAA9D,CAAjB,EAA0F;AAC9F,eAAOW,OAAP;AACA;AACD;AACD;AAED;;;;;;AAIA,SAASN,UAAT,CAAoBP,IAApB,EAA0BK,EAA1B,EAA8B;AAC7B;AACA,MAAIL,IAAI,IAAIA,IAAI,CAACkD,OAAL,CAAa,MAAb,MAAyB,CAArC,EAAwC;AACvC,WAAO1D,YAAY,CAACQ,IAAD,CAAnB;AACA;;AACD,MAAIS,MAAM,GAAGmB,2BAA2B,CAAC5B,IAAD,EAAOK,EAAP,CAAxC,CAL6B,CAM7B;;AACA,MAAI,CAACI,MAAD,IAAW,CAACzB,mBAAmB,CAACyB,MAAD,CAAnC,EAA6C;AAC5C,WAAO,EAAP;AACA,GAT4B,CAU7B;AACA;;;AACA,MAAM0C,qBAAqB,GAAGlE,gBAAgB,CAACwB,MAAD,CAA9C;;AACA,MAAI0C,qBAAqB,CAACzC,GAA1B,EAA+B;AAC9B,WAAOyC,qBAAP;AACA;;AACD,SAAO;AAAE1C,IAAAA,MAAM,EAANA;AAAF,GAAP;AACA;AAED;;;;;AAGA,SAASc,MAAT,CAAgBV,OAAhB,EAAyBC,cAAzB,EAAyCJ,GAAzC,EAA8C;AAC7C,MAAMa,MAAM,GAAG;AACdV,IAAAA,OAAO,EAAPA,OADc;AAEdc,IAAAA,KAAK,EAAEb;AAFO,GAAf;;AAIA,MAAIJ,GAAJ,EAAS;AACRa,IAAAA,MAAM,CAACb,GAAP,GAAaA,GAAb;AACA;;AACD,SAAOa,MAAP;AACA;AAED;;;;;;;;;;AAQA,SAASZ,gBAAT,CACCH,oBADD,EAECL,cAFD,EAGCS,kBAHD,EAICV,QAJD,EAKE;AACD;AADC,8BAEoCkD,yBAAyB,CAC7DlE,0BAA0B,CAACsB,oBAAD,CADmC,EAE7DL,cAF6D,EAG7DS,kBAH6D,EAI7DV,QAAQ,CAACA,QAJoD,CAF7D;AAAA,MAEKa,kBAFL,yBAEKA,kBAFL;AAAA,MAEyBN,MAFzB,yBAEyBA,MAFzB,EASD;;;AACA,MAAII,OAAJ;;AACA,MAAIE,kBAAJ,EAAwB;AACvBb,IAAAA,QAAQ,CAACmD,iCAAT,CAA2CtC,kBAA3C;AACA,GAFD,CAGA;AACA;AAJA,OAKK,IAAIN,MAAM,KAAKN,cAAc,IAAIS,kBAAvB,CAAV,EAAsD;AAC1DV,MAAAA,QAAQ,CAACoD,mBAAT,CAA6BnD,cAA7B,EAA6CS,kBAA7C;;AACA,UAAIT,cAAJ,EAAoB;AACnBU,QAAAA,OAAO,GAAGV,cAAV;AACA,OAFD,MAEO;AACN;AACA,YAAIL,+BAAJ,EAAqC;AACpC,cAAII,QAAQ,CAAC2C,0BAAT,CAAoCjC,kBAApC,CAAJ,EAA6D;AAC5DC,YAAAA,OAAO,GAAG,KAAV;AACA;AACD;AACD;;AACDE,MAAAA,kBAAkB,GAAGH,kBAAkB,IAAIzB,qBAAqB,CAACgB,cAAD,EAAiBD,QAAQ,CAACA,QAA1B,CAAhE;AACA,KAbI,MAcA,OAAO,EAAP;;AAEL,MAAI,CAACO,MAAL,EAAa;AACZ,WAAO;AAAEM,MAAAA,kBAAkB,EAAlBA;AAAF,KAAP;AACA;;AAlCA,8BAuCGwC,mDAAmD,CACtDrE,0BAA0B,CAACuB,MAAD,CAD4B,EAEtDP,QAFsD,CAvCtD;AAAA,MAqCAY,cArCA,yBAqCAA,cArCA;AAAA,MAsCAE,WAtCA,yBAsCAA,WAtCA,EA4CD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAMwC,YAAY,GAAGd,eAAe,CAAC3B,kBAAD,EAAqBD,cAArB,EAAqCZ,QAArC,CAApC;;AACA,MAAIsD,YAAJ,EAAkB;AACjB3C,IAAAA,OAAO,GAAG2C,YAAV;AACA;;AACA,QAAIA,YAAY,KAAK,KAArB,EAA4B,CAC3B;AACA;AACA;AACA,KAJD,MAIO;AACNtD,MAAAA,QAAQ,CAACW,OAAT,CAAiBA,OAAjB;AACA;AACD;;AAED,SAAO;AACNA,IAAAA,OAAO,EAAPA,OADM;AAENE,IAAAA,kBAAkB,EAAlBA,kBAFM;AAGND,IAAAA,cAAc,EAAdA,cAHM;AAINE,IAAAA,WAAW,EAAXA;AAJM,GAAP;AAMA;AAED;;;;;;;;;;;AASA,OAAO,SAASuC,mDAAT,CAA6D9C,MAA7D,EAAqEP,QAArE,EAA+E;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AATqF,+BAajFgC,iCAAiC,CACpChD,0BAA0B,CAACuB,MAAD,CADU,EAEpCP,QAFoC,CAbgD;AAAA,MAWpFY,cAXoF,0BAWpFA,cAXoF;AAAA,MAYpFE,WAZoF,0BAYpFA,WAZoF,EAiBrF;AACA;;;AACA,MAAIF,cAAc,CAACI,MAAf,KAA0BT,MAAM,CAACS,MAAP,IAAiBF,WAAW,GAAGA,WAAW,CAACE,MAAf,GAAwB,CAApD,CAA9B,EAAsF;AACrF;AACA;AACA,QAAIhB,QAAQ,CAACuB,eAAT,EAAJ,EAAgC;AAC/B;AACA;AACA;AACA;AACA;AACA,cAAQpC,wBAAwB,CAACyB,cAAD,EAAiBY,SAAjB,EAA4BxB,QAA5B,CAAhC;AACC,aAAK,WAAL;AACA,aAAK,gBAAL;AACA;AACC;AACA,iBAAO;AAAEY,YAAAA,cAAc,EAAEL;AAAlB,WAAP;AALF;AAOA;AACD;;AACD,SAAO;AAAEK,IAAAA,cAAc,EAAdA,cAAF;AAAkBE,IAAAA,WAAW,EAAXA;AAAlB,GAAP;AACA;AAED;;;;;;;;;;;;;;;;;;;AAkBA,OAAO,SAASoC,yBAAT,CACN3C,MADM,EAENI,OAFM,EAGN8B,WAHM,EAINzC,QAJM,EAKL;AACD,MAAI,CAACO,MAAL,EAAa;AACZ,WAAO,EAAP;AACA,GAHA,CAKD;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,MAAIA,MAAM,CAAC,CAAD,CAAN,KAAc,GAAlB,EAAuB;AACtB;AACA;AACA,QAAMgD,gBAAgB,GAAGlE,cAAc,CAACkB,MAAD,EAASI,OAAT,EAAkB8B,WAAlB,EAA+BzC,QAA/B,CAAvC,CAHsB,CAItB;AACA;AACA;;AACA,QAAIuD,gBAAgB,IAAIA,gBAAgB,KAAKhD,MAA7C,EAAqD;AACpDA,MAAAA,MAAM,GAAG,MAAMgD,gBAAf;AACA,KAFD,MAEO;AACN;AACA;AACA;AACA;AACA,UAAI5C,OAAO,IAAI8B,WAAf,EAA4B;AAAA,qCAIvBe,+DAA+D,CAClEjD,MADkE,EAElEI,OAFkE,EAGlE8B,WAHkE,EAIlEzC,QAJkE,CAJxC;AAAA,YAE1Ba,kBAF0B,0BAE1BA,kBAF0B;AAAA,YAGlB4C,aAHkB,0BAG1BlD,MAH0B;;AAU3B,YAAIM,kBAAJ,EAAwB;AACvB,iBAAO;AACNA,YAAAA,kBAAkB,EAAlBA,kBADM;AAENN,YAAAA,MAAM,EAAEkD;AAFF,WAAP;AAIA;AACD;;AACD,aAAO;AAAElD,QAAAA,MAAM,EAANA;AAAF,OAAP;AACA;AACD,GA7CA,CA+CD;;;AACA,MAAIA,MAAM,CAAC,CAAD,CAAN,KAAc,GAAlB,EAAuB;AACtB,WAAO,EAAP;AACA;;AAEDP,EAAAA,QAAQ,GAAG,IAAInB,QAAJ,CAAamB,QAAb,CAAX,CApDC,CAsDD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAI0D,CAAC,GAAG,CAAR;;AACA,SAAOA,CAAC,GAAG,CAAJ,IAAShF,uBAAT,IAAoCgF,CAAC,IAAInD,MAAM,CAACS,MAAvD,EAA+D;AAC9D,QAAMH,mBAAkB,GAAGN,MAAM,CAACuB,KAAP,CAAa,CAAb,EAAgB4B,CAAhB,CAA3B;;AACA,QAAI1D,QAAQ,CAAC2D,cAAT,CAAwB9C,mBAAxB,CAAJ,EAAiD;AAChDb,MAAAA,QAAQ,CAACoD,mBAAT,CAA6B5B,SAA7B,EAAwCX,mBAAxC;AACA,aAAO;AACNA,QAAAA,kBAAkB,EAAlBA,mBADM;AAENN,QAAAA,MAAM,EAAEA,MAAM,CAACuB,KAAP,CAAa4B,CAAb;AAFF,OAAP;AAIA;;AACDA,IAAAA,CAAC;AACD;;AAED,SAAO,EAAP;AACA;AAED;;;;;;;;;;AASA,OAAO,SAASF,+DAAT,CACNjD,MADM,EAENI,OAFM,EAGN8B,WAHM,EAINzC,QAJM,EAKL;AACD,MAAMa,kBAAkB,GAAGF,OAAO,GAAG1B,qBAAqB,CAAC0B,OAAD,EAAUX,QAAV,CAAxB,GAA8CyC,WAAhF;;AACA,MAAIlC,MAAM,CAACyC,OAAP,CAAenC,kBAAf,MAAuC,CAA3C,EAA8C;AAC7Cb,IAAAA,QAAQ,GAAG,IAAInB,QAAJ,CAAamB,QAAb,CAAX;AACAA,IAAAA,QAAQ,CAACoD,mBAAT,CAA6BzC,OAA7B,EAAsC8B,WAAtC;AACA,QAAMmB,qBAAqB,GAAGrD,MAAM,CAACuB,KAAP,CAAajB,kBAAkB,CAACG,MAAhC,CAA9B;;AAH6C,iCAMzCgB,iCAAiC,CACpC4B,qBADoC,EAEpC5D,QAFoC,CANQ;AAAA,QAK5B6D,6BAL4B,0BAK5CjD,cAL4C;;AAAA,iCAYzCoB,iCAAiC,CACpCzB,MADoC,EAEpCP,QAFoC,CAZQ;AAAA,QAW5CY,cAX4C,0BAW5CA,cAX4C,EAgB7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,QAEE,CAACjC,eAAe,CAACiC,cAAD,EAAiBZ,QAAQ,CAACoB,qBAAT,EAAjB,CAAhB,IAEAzC,eAAe,CAACkF,6BAAD,EAAgC7D,QAAQ,CAACoB,qBAAT,EAAhC,CAHhB,IAMAjC,wBAAwB,CAACyB,cAAD,EAAiBY,SAAjB,EAA4BxB,QAA5B,CAAxB,KAAkE,UAPnE,EAQE;AACD,aAAO;AACNa,QAAAA,kBAAkB,EAAlBA,kBADM;AAENN,QAAAA,MAAM,EAAEqD;AAFF,OAAP;AAIA;AACD;;AACD,SAAO;AAAErD,IAAAA,MAAM,EAANA;AAAF,GAAP;AACA","sourcesContent":["// This is a port of Google Android `libphonenumber`'s\r\n// `phonenumberutil.js` of December 31th, 2018.\r\n//\r\n// https://github.com/googlei18n/libphonenumber/commits/master/javascript/i18n/phonenumbers/phonenumberutil.js\r\n\r\nimport {\r\n\tVALID_DIGITS,\r\n\tPLUS_CHARS,\r\n\tMIN_LENGTH_FOR_NSN,\r\n\tMAX_LENGTH_FOR_NSN,\r\n\tMAX_LENGTH_COUNTRY_CODE\r\n} from './constants'\r\n\r\nimport { matchesEntirely } from './util'\r\nimport ParseError from './ParseError'\r\nimport Metadata from './metadata'\r\nimport isViablePhoneNumber from './isViablePhoneNumber'\r\nimport { extractExtension } from './extension'\r\nimport parseIncompletePhoneNumber from './parseIncompletePhoneNumber'\r\nimport getCountryCallingCode from './getCountryCallingCode'\r\nimport getNumberType, { checkNumberLengthForType } from './getNumberType_'\r\nimport { isPossibleNumber } from './isPossibleNumber_'\r\nimport { stripIDDPrefix } from './IDD'\r\nimport { parseRFC3966 } from './RFC3966'\r\nimport PhoneNumber from './PhoneNumber'\r\n\r\n// We don't allow input strings for parsing to be longer than 250 chars.\r\n// This prevents malicious input from consuming CPU.\r\nconst MAX_INPUT_STRING_LENGTH = 250\r\n\r\n// This consists of the plus symbol, digits, and arabic-indic digits.\r\nconst PHONE_NUMBER_START_PATTERN = new RegExp('[' + PLUS_CHARS + VALID_DIGITS + ']')\r\n\r\n// Regular expression of trailing characters that we want to remove.\r\nconst AFTER_PHONE_NUMBER_END_PATTERN = new RegExp('[^' + VALID_DIGITS + ']+$')\r\n\r\nconst USE_NON_GEOGRAPHIC_COUNTRY_CODE = false\r\n\r\n// `options`:\r\n// {\r\n// country:\r\n// {\r\n// restrict - (a two-letter country code)\r\n// the phone number must be in this country\r\n//\r\n// default - (a two-letter country code)\r\n// default country to use for phone number parsing and validation\r\n// (if no country code could be derived from the phone number)\r\n// }\r\n// }\r\n//\r\n// Returns `{ country, number }`\r\n//\r\n// Example use cases:\r\n//\r\n// ```js\r\n// parse('8 (800) 555-35-35', 'RU')\r\n// parse('8 (800) 555-35-35', 'RU', metadata)\r\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } })\r\n// parse('8 (800) 555-35-35', { country: { default: 'RU' } }, metadata)\r\n// parse('+7 800 555 35 35')\r\n// parse('+7 800 555 35 35', metadata)\r\n// ```\r\n//\r\nexport default function parse(text, options, metadata) {\r\n\t// If assigning the `{}` default value is moved to the arguments above,\r\n\t// code coverage would decrease for some weird reason.\r\n\toptions = options || {}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\t// Validate `defaultCountry`.\r\n\tif (options.defaultCountry && !metadata.hasCountry(options.defaultCountry)) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('INVALID_COUNTRY')\r\n\t\t}\r\n\t\tthrow new Error(`Unknown country: ${options.defaultCountry}`)\r\n\t}\r\n\r\n\t// Parse the phone number.\r\n\tconst { number: formattedPhoneNumber, ext } = parseInput(text, options.v2)\r\n\r\n\t// If the phone number is not viable then return nothing.\r\n\tif (!formattedPhoneNumber) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('NOT_A_NUMBER')\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\r\n\tconst {\r\n\t\tcountry,\r\n\t\tnationalNumber,\r\n\t\tcountryCallingCode,\r\n\t\tcarrierCode\r\n\t} = parsePhoneNumber(\r\n\t\tformattedPhoneNumber,\r\n\t\toptions.defaultCountry,\r\n\t\toptions.defaultCallingCode,\r\n\t\tmetadata\r\n\t)\r\n\r\n\tif (!metadata.hasSelectedNumberingPlan()) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('INVALID_COUNTRY')\r\n\t\t}\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// Validate national (significant) number length.\r\n\tif (!nationalNumber || nationalNumber.length < MIN_LENGTH_FOR_NSN) {\r\n\t\t// Won't throw here because the regexp already demands length > 1.\r\n\t\t/* istanbul ignore if */\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('TOO_SHORT')\r\n\t\t}\r\n\t\t// Google's demo just throws an error in this case.\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// Validate national (significant) number length.\r\n\t//\r\n\t// A sidenote:\r\n\t//\r\n\t// They say that sometimes national (significant) numbers\r\n\t// can be longer than `MAX_LENGTH_FOR_NSN` (e.g. in Germany).\r\n\t// https://github.com/googlei18n/libphonenumber/blob/7e1748645552da39c4e1ba731e47969d97bdb539/resources/phonenumber.proto#L36\r\n\t// Such numbers will just be discarded.\r\n\t//\r\n\tif (nationalNumber.length > MAX_LENGTH_FOR_NSN) {\r\n\t\tif (options.v2) {\r\n\t\t\tthrow new ParseError('TOO_LONG')\r\n\t\t}\r\n\t\t// Google's demo just throws an error in this case.\r\n\t\treturn {}\r\n\t}\r\n\r\n\tif (options.v2) {\r\n\t\tconst phoneNumber = new PhoneNumber(\r\n\t\t\tcountryCallingCode,\r\n\t\t\tnationalNumber,\r\n\t\t\tmetadata.metadata\r\n\t\t)\r\n\t\tif (country) {\r\n\t\t\tphoneNumber.country = country\r\n\t\t}\r\n\t\tif (carrierCode) {\r\n\t\t\tphoneNumber.carrierCode = carrierCode\r\n\t\t}\r\n\t\tif (ext) {\r\n\t\t\tphoneNumber.ext = ext\r\n\t\t}\r\n\t\treturn phoneNumber\r\n\t}\r\n\r\n\t// Check if national phone number pattern matches the number.\r\n\t// National number pattern is different for each country,\r\n\t// even for those ones which are part of the \"NANPA\" group.\r\n\tconst valid = (options.extended ? metadata.hasSelectedNumberingPlan() : country) ?\r\n\t\tmatchesEntirely(nationalNumber, metadata.nationalNumberPattern()) :\r\n\t\tfalse\r\n\r\n\tif (!options.extended) {\r\n\t\treturn valid ? result(country, nationalNumber, ext) : {}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcountryCallingCode,\r\n\t\tcarrierCode,\r\n\t\tvalid,\r\n\t\tpossible: valid ? true : (\r\n\t\t\toptions.extended === true &&\r\n\t\t\tmetadata.possibleLengths() &&\r\n\t\t\tisPossibleNumber(nationalNumber, countryCallingCode !== undefined, metadata) ? true : false\r\n\t\t),\r\n\t\tphone: nationalNumber,\r\n\t\text\r\n\t}\r\n}\r\n\r\n/**\r\n * Extracts a formatted phone number from text.\r\n * Doesn't guarantee that the extracted phone number\r\n * is a valid phone number (for example, doesn't validate its length).\r\n * @param {string} text\r\n * @param {boolean} throwOnError — By default, it won't throw if the text is too long.\r\n * @return {string}\r\n * @example\r\n * // Returns \"(213) 373-4253\".\r\n * extractFormattedPhoneNumber(\"Call (213) 373-4253 for assistance.\")\r\n */\r\nexport function extractFormattedPhoneNumber(text, throwOnError) {\r\n\tif (!text) {\r\n\t\treturn\r\n\t}\r\n\tif (text.length > MAX_INPUT_STRING_LENGTH) {\r\n\t\tif (throwOnError) {\r\n\t\t\tthrow new ParseError('TOO_LONG')\r\n\t\t}\r\n\t\treturn\r\n\t}\r\n\t// Attempt to extract a possible number from the string passed in\r\n\tconst startsAt = text.search(PHONE_NUMBER_START_PATTERN)\r\n\tif (startsAt < 0) {\r\n\t\treturn\r\n\t}\r\n\treturn text\r\n\t\t// Trim everything to the left of the phone number\r\n\t\t.slice(startsAt)\r\n\t\t// Remove trailing non-numerical characters\r\n\t\t.replace(AFTER_PHONE_NUMBER_END_PATTERN, '')\r\n}\r\n\r\n/**\r\n * Strips any national prefix (such as 0, 1) present in a\r\n * (possibly incomplete) number provided.\r\n * \"Carrier codes\" are only used in Colombia and Brazil,\r\n * and only when dialing within those countries from a mobile phone to a fixed line number.\r\n * Sometimes it won't actually strip national prefix\r\n * and will instead prepend some digits to the `number`:\r\n * for example, when number `2345678` is passed with `VI` country selected,\r\n * it will return `{ number: \"3402345678\" }`, because `340` area code is prepended.\r\n * @param {string} number — National number digits.\r\n * @param {object} metadata — Metadata with country selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\r\nexport function stripNationalPrefixAndCarrierCode(number, metadata) {\r\n\tif (number && metadata.nationalPrefixForParsing()) {\r\n\t\t// See METADATA.md for the description of\r\n\t\t// `national_prefix_for_parsing` and `national_prefix_transform_rule`.\r\n\t\t// Attempt to parse the first digits as a national prefix.\r\n\t\tconst prefixPattern = new RegExp('^(?:' + metadata.nationalPrefixForParsing() + ')')\r\n\t\tconst prefixMatch = prefixPattern.exec(number)\r\n\t\tif (prefixMatch) {\r\n\t\t\tlet nationalNumber\r\n\t\t\tlet carrierCode\r\n\t\t\t// If a \"capturing group\" didn't match\r\n\t\t\t// then its element in `prefixMatch[]` array will be `undefined`.\r\n\t\t\tconst capturedGroupsCount = prefixMatch.length - 1\r\n\t\t\tif (metadata.nationalPrefixTransformRule() &&\r\n\t\t\t\tcapturedGroupsCount > 0 && prefixMatch[capturedGroupsCount]) {\r\n\t\t\t\tnationalNumber = number.replace(\r\n\t\t\t\t\tprefixPattern,\r\n\t\t\t\t\tmetadata.nationalPrefixTransformRule()\r\n\t\t\t\t)\r\n\t\t\t\t// Carrier code is the last captured group,\r\n\t\t\t\t// but only when there's more than one captured group.\r\n\t\t\t\tif (capturedGroupsCount > 1 && prefixMatch[capturedGroupsCount]) {\r\n\t\t\t\t\tcarrierCode = prefixMatch[1]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// If it's a simple-enough case then just\r\n\t\t\t// strip the national prefix from the number.\r\n\t\t\telse {\r\n\t\t\t\t// National prefix is the whole substring matched by\r\n\t\t\t\t// the `national_prefix_for_parsing` regexp.\r\n\t\t\t\tconst nationalPrefix = prefixMatch[0]\r\n\t\t\t\tnationalNumber = number.slice(nationalPrefix.length)\r\n\t\t\t\t// Carrier code is the last captured group.\r\n\t\t\t\tif (capturedGroupsCount > 0) {\r\n\t\t\t\t\tcarrierCode = prefixMatch[1]\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// We require that the national (significant) number remaining after\r\n\t\t\t// stripping the national prefix and carrier code be long enough\r\n\t\t\t// to be a possible length for the region. Otherwise, we don't do\r\n\t\t\t// the stripping, since the original number could be a valid number.\r\n\t\t\t// For example, in some countries (Russia, Belarus) the same digit\r\n\t\t\t// could be both a national prefix and a leading digit of a valid\r\n\t\t\t// national phone number, like `8` is the national prefix for Russia\r\n\t\t\t// and `800 555 35 35` is a valid national (significant) number.\r\n\t\t\tif (matchesEntirely(number, metadata.nationalNumberPattern()) &&\r\n\t\t\t\t!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())) {\r\n\t\t\t\t// Don't strip national prefix or carrier code.\r\n\t\t\t} else {\r\n\t\t\t\treturn {\r\n\t\t\t\t\tnationalNumber,\r\n\t\t\t\t\tcarrierCode\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n return {\r\n \tnationalNumber: number\r\n }\r\n}\r\n\r\nexport function findCountryCode(callingCode, nationalPhoneNumber, metadata) {\r\n\t/* istanbul ignore if */\r\n\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\tif (metadata.isNonGeographicCallingCode(callingCode)) {\r\n\t\t\treturn '001'\r\n\t\t}\r\n\t}\r\n\t// Is always non-empty, because `callingCode` is always valid\r\n\tconst possibleCountries = metadata.getCountryCodesForCallingCode(callingCode)\r\n\tif (!possibleCountries) {\r\n\t\treturn\r\n\t}\r\n\t// If there's just one country corresponding to the country code,\r\n\t// then just return it, without further phone number digits validation.\r\n\tif (possibleCountries.length === 1) {\r\n\t\treturn possibleCountries[0]\r\n\t}\r\n\treturn _findCountryCode(possibleCountries, nationalPhoneNumber, metadata.metadata)\r\n}\r\n\r\n// Changes `metadata` `country`.\r\nfunction _findCountryCode(possibleCountries, nationalPhoneNumber, metadata) {\r\n\tmetadata = new Metadata(metadata)\r\n\tfor (const country of possibleCountries) {\r\n\t\tmetadata.country(country)\r\n\t\t// Leading digits check would be the simplest one\r\n\t\tif (metadata.leadingDigits()) {\r\n\t\t\tif (nationalPhoneNumber &&\r\n\t\t\t\tnationalPhoneNumber.search(metadata.leadingDigits()) === 0) {\r\n\t\t\t\treturn country\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Else perform full validation with all of those\r\n\t\t// fixed-line/mobile/etc regular expressions.\r\n\t\telse if (getNumberType({ phone: nationalPhoneNumber, country }, undefined, metadata.metadata)) {\r\n\t\t\treturn country\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * @param {string} text - Input.\r\n * @return {object} `{ ?number, ?ext }`.\r\n */\r\nfunction parseInput(text, v2) {\r\n\t// Parse RFC 3966 phone number URI.\r\n\tif (text && text.indexOf('tel:') === 0) {\r\n\t\treturn parseRFC3966(text)\r\n\t}\r\n\tlet number = extractFormattedPhoneNumber(text, v2)\r\n\t// If the phone number is not viable, then abort.\r\n\tif (!number || !isViablePhoneNumber(number)) {\r\n\t\treturn {}\r\n\t}\r\n\t// Attempt to parse extension first, since it doesn't require region-specific\r\n\t// data and we want to have the non-normalised number here.\r\n\tconst withExtensionStripped = extractExtension(number)\r\n\tif (withExtensionStripped.ext) {\r\n\t\treturn withExtensionStripped\r\n\t}\r\n\treturn { number }\r\n}\r\n\r\n/**\r\n * Creates `parse()` result object.\r\n */\r\nfunction result(country, nationalNumber, ext) {\r\n\tconst result = {\r\n\t\tcountry,\r\n\t\tphone: nationalNumber\r\n\t}\r\n\tif (ext) {\r\n\t\tresult.ext = ext\r\n\t}\r\n\treturn result\r\n}\r\n\r\n/**\r\n * Parses a viable phone number.\r\n * @param {string} formattedPhoneNumber — Example: \"(213) 373-4253\".\r\n * @param {string} [defaultCountry]\r\n * @param {string} [defaultCallingCode]\r\n * @param {Metadata} metadata\r\n * @return {object} Returns `{ country: string?, countryCallingCode: string?, nationalNumber: string? }`.\r\n */\r\nfunction parsePhoneNumber(\r\n\tformattedPhoneNumber,\r\n\tdefaultCountry,\r\n\tdefaultCallingCode,\r\n\tmetadata\r\n) {\r\n\t// Extract calling code from phone number.\r\n\tlet { countryCallingCode, number } = extractCountryCallingCode(\r\n\t\tparseIncompletePhoneNumber(formattedPhoneNumber),\r\n\t\tdefaultCountry,\r\n\t\tdefaultCallingCode,\r\n\t\tmetadata.metadata\r\n\t)\r\n\r\n\t// Choose a country by `countryCallingCode`.\r\n\tlet country\r\n\tif (countryCallingCode) {\r\n\t\tmetadata.chooseCountryByCountryCallingCode(countryCallingCode)\r\n\t}\r\n\t// If `formattedPhoneNumber` is in \"national\" format\r\n\t// then `number` is defined and `countryCallingCode` isn't.\r\n\telse if (number && (defaultCountry || defaultCallingCode)) {\r\n\t\tmetadata.selectNumberingPlan(defaultCountry, defaultCallingCode)\r\n\t\tif (defaultCountry) {\r\n\t\t\tcountry = defaultCountry\r\n\t\t} else {\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\r\n\t\t\t\tif (metadata.isNonGeographicCallingCode(defaultCallingCode)) {\r\n\t\t\t\t\tcountry = '001'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\tcountryCallingCode = defaultCallingCode || getCountryCallingCode(defaultCountry, metadata.metadata)\r\n\t}\r\n\telse return {}\r\n\r\n\tif (!number) {\r\n\t\treturn { countryCallingCode }\r\n\t}\r\n\r\n\tconst {\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t} = stripNationalPrefixAndCarrierCodeFromCompleteNumber(\r\n\t\tparseIncompletePhoneNumber(number),\r\n\t\tmetadata\r\n\t)\r\n\r\n\t// Sometimes there are several countries\r\n\t// corresponding to the same country phone code\r\n\t// (e.g. NANPA countries all having `1` country phone code).\r\n\t// Therefore, to reliably determine the exact country,\r\n\t// national (significant) number should have been parsed first.\r\n\t//\r\n\t// When `metadata.json` is generated, all \"ambiguous\" country phone codes\r\n\t// get their countries populated with the full set of\r\n\t// \"phone number type\" regular expressions.\r\n\t//\r\n\tconst exactCountry = findCountryCode(countryCallingCode, nationalNumber, metadata)\r\n\tif (exactCountry) {\r\n\t\tcountry = exactCountry\r\n\t\t/* istanbul ignore if */\r\n\t\tif (exactCountry === '001') {\r\n\t\t\t// Can't happen with `USE_NON_GEOGRAPHIC_COUNTRY_CODE` being `false`.\r\n\t\t\t// If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` is set to `true` for some reason,\r\n\t\t\t// then remove the \"istanbul ignore if\".\r\n\t\t} else {\r\n\t\t\tmetadata.country(country)\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcountry,\r\n\t\tcountryCallingCode,\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t}\r\n}\r\n\r\n/**\r\n * Strips national prefix and carrier code from a complete phone number.\r\n * The difference from the non-\"FromCompleteNumber\" function is that\r\n * it won't extract national prefix if the resultant number is too short\r\n * to be a complete number for the selected phone numbering plan.\r\n * @param {string} number — Complete phone number digits.\r\n * @param {Metadata} metadata — Metadata with a phone numbering plan selected.\r\n * @return {object} `{ nationalNumber: string, carrierCode: string? }`.\r\n */\r\nexport function stripNationalPrefixAndCarrierCodeFromCompleteNumber(number, metadata) {\r\n\t// Parsing national prefixes and carrier codes\r\n\t// is only required for local phone numbers\r\n\t// but some people don't understand that\r\n\t// and sometimes write international phone numbers\r\n\t// with national prefixes (or maybe even carrier codes).\r\n\t// http://ucken.blogspot.ru/2016/03/trunk-prefixes-in-skype4b.html\r\n\t// Google's original library forgives such mistakes\r\n\t// and so does this library, because it has been requested:\r\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/127\r\n\tconst {\r\n\t\tnationalNumber,\r\n\t\tcarrierCode\r\n\t} = stripNationalPrefixAndCarrierCode(\r\n\t\tparseIncompletePhoneNumber(number),\r\n\t\tmetadata\r\n\t)\r\n\t// If a national prefix has been extracted, check to see\r\n\t// if the resultant number isn't too short.\r\n\tif (nationalNumber.length !== number.length + (carrierCode ? carrierCode.length : 0)) {\r\n\t\t// If not using legacy generated metadata (before version `1.0.18`)\r\n\t\t// then it has \"possible lengths\", so use those to validate the number length.\r\n\t\tif (metadata.possibleLengths()) {\r\n\t\t\t// \"We require that the NSN remaining after stripping the national prefix and\r\n\t\t\t// carrier code be long enough to be a possible length for the region.\r\n\t\t\t// Otherwise, we don't do the stripping, since the original number could be\r\n\t\t\t// a valid short number.\"\r\n\t\t\t// https://github.com/google/libphonenumber/blob/876268eb1ad6cdc1b7b5bef17fc5e43052702d57/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L3236-L3250\r\n\t\t\tswitch (checkNumberLengthForType(nationalNumber, undefined, metadata)) {\r\n\t\t\t\tcase 'TOO_SHORT':\r\n\t\t\t\tcase 'INVALID_LENGTH':\r\n\t\t\t\t// case 'IS_POSSIBLE_LOCAL_ONLY':\r\n\t\t\t\t\t// Don't strip the national prefix.\r\n\t\t\t\t\treturn { nationalNumber: number }\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn { nationalNumber, carrierCode }\r\n}\r\n\r\n/**\r\n * Converts a phone number digits (possibly with a `+`)\r\n * into a calling code and the rest phone number digits.\r\n * The \"rest phone number digits\" could include\r\n * a national prefix, carrier code, and national\r\n * (significant) number.\r\n * @param {string} number — Phone number digits (possibly with a `+`).\r\n * @param {string} [country] — Default country.\r\n * @param {string} [callingCode] — Default calling code (some phone numbering plans are non-geographic).\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`\r\n * @example\r\n * // Returns `{ countryCallingCode: \"1\", number: \"2133734253\" }`.\r\n * extractCountryCallingCode('2133734253', 'US', null, metadata)\r\n * extractCountryCallingCode('2133734253', null, '1', metadata)\r\n * extractCountryCallingCode('+12133734253', null, null, metadata)\r\n * extractCountryCallingCode('+12133734253', 'RU', null, metadata)\r\n */\r\nexport function extractCountryCallingCode(\r\n\tnumber,\r\n\tcountry,\r\n\tcallingCode,\r\n\tmetadata\r\n) {\r\n\tif (!number) {\r\n\t\treturn {}\r\n\t}\r\n\r\n\t// If this is not an international phone number,\r\n\t// then either extract an \"IDD\" prefix, or extract a\r\n\t// country calling code from a number by autocorrecting it\r\n\t// by prepending a leading `+` in cases when it starts\r\n\t// with the country calling code.\r\n\t// https://wikitravel.org/en/International_dialling_prefix\r\n\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\tif (number[0] !== '+') {\r\n\t\t// Convert an \"out-of-country\" dialing phone number\r\n\t\t// to a proper international phone number.\r\n\t\tconst numberWithoutIDD = stripIDDPrefix(number, country, callingCode, metadata)\r\n\t\t// If an IDD prefix was stripped then\r\n\t\t// convert the number to international one\r\n\t\t// for subsequent parsing.\r\n\t\tif (numberWithoutIDD && numberWithoutIDD !== number) {\r\n\t\t\tnumber = '+' + numberWithoutIDD\r\n\t\t} else {\r\n\t\t\t// Check to see if the number starts with the country calling code\r\n\t\t\t// for the default country. If so, we remove the country calling code,\r\n\t\t\t// and do some checks on the validity of the number before and after.\r\n\t\t\t// https://github.com/catamphetamine/libphonenumber-js/issues/376\r\n\t\t\tif (country || callingCode) {\r\n\t\t\t\tconst {\r\n\t\t\t\t\tcountryCallingCode,\r\n\t\t\t\t\tnumber: shorterNumber\r\n\t\t\t\t} = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\t\t\t\t\tnumber,\r\n\t\t\t\t\tcountry,\r\n\t\t\t\t\tcallingCode,\r\n\t\t\t\t\tmetadata\r\n\t\t\t\t)\r\n\t\t\t\tif (countryCallingCode) {\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tcountryCallingCode,\r\n\t\t\t\t\t\tnumber: shorterNumber\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn { number }\r\n\t\t}\r\n\t}\r\n\r\n\t// Fast abortion: country codes do not begin with a '0'\r\n\tif (number[1] === '0') {\r\n\t\treturn {}\r\n\t}\r\n\r\n\tmetadata = new Metadata(metadata)\r\n\r\n\t// The thing with country phone codes\r\n\t// is that they are orthogonal to each other\r\n\t// i.e. there's no such country phone code A\r\n\t// for which country phone code B exists\r\n\t// where B starts with A.\r\n\t// Therefore, while scanning digits,\r\n\t// if a valid country code is found,\r\n\t// that means that it is the country code.\r\n\t//\r\n\tlet i = 2\r\n\twhile (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {\r\n\t\tconst countryCallingCode = number.slice(1, i)\r\n\t\tif (metadata.hasCallingCode(countryCallingCode)) {\r\n\t\t\tmetadata.selectNumberingPlan(undefined, countryCallingCode)\r\n\t\t\treturn {\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\tnumber: number.slice(i)\r\n\t\t\t}\r\n\t\t}\r\n\t\ti++\r\n\t}\r\n\r\n\treturn {}\r\n}\r\n\r\n/**\r\n * Sometimes some people incorrectly input international phone numbers\r\n * without the leading `+`. This function corrects such input.\r\n * @param {string} number — Phone number digits.\r\n * @param {string?} country\r\n * @param {string?} callingCode\r\n * @param {object} metadata\r\n * @return {object} `{ countryCallingCode: string?, number: string }`.\r\n */\r\nexport function extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(\r\n\tnumber,\r\n\tcountry,\r\n\tcallingCode,\r\n\tmetadata\r\n) {\r\n\tconst countryCallingCode = country ? getCountryCallingCode(country, metadata) : callingCode\r\n\tif (number.indexOf(countryCallingCode) === 0) {\r\n\t\tmetadata = new Metadata(metadata)\r\n\t\tmetadata.selectNumberingPlan(country, callingCode)\r\n\t\tconst possibleShorterNumber = number.slice(countryCallingCode.length)\r\n\t\tconst {\r\n\t\t\tnationalNumber: possibleShorterNationalNumber,\r\n\t\t} = stripNationalPrefixAndCarrierCode(\r\n\t\t\tpossibleShorterNumber,\r\n\t\t\tmetadata\r\n\t\t)\r\n\t\tconst {\r\n\t\t\tnationalNumber\r\n\t\t} = stripNationalPrefixAndCarrierCode(\r\n\t\t\tnumber,\r\n\t\t\tmetadata\r\n\t\t)\r\n\t\t// If the number was not valid before but is valid now,\r\n\t\t// or if it was too long before, we consider the number\r\n\t\t// with the country calling code stripped to be a better result\r\n\t\t// and keep that instead.\r\n\t\t// For example, in Germany (+49), `49` is a valid area code,\r\n\t\t// so if a number starts with `49`, it could be both a valid\r\n\t\t// national German number or an international number without\r\n\t\t// a leading `+`.\r\n\t\tif (\r\n\t\t\t(\r\n\t\t\t\t!matchesEntirely(nationalNumber, metadata.nationalNumberPattern())\r\n\t\t\t\t&&\r\n\t\t\t\tmatchesEntirely(possibleShorterNationalNumber, metadata.nationalNumberPattern())\r\n\t\t\t)\r\n\t\t\t||\r\n\t\t\tcheckNumberLengthForType(nationalNumber, undefined, metadata) === 'TOO_LONG'\r\n\t\t) {\r\n\t\t\treturn {\r\n\t\t\t\tcountryCallingCode,\r\n\t\t\t\tnumber: possibleShorterNumber\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn { number }\r\n}"],"file":"parse_.js"}