UNPKG

42.1 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../source/AsYouTypeFormatter.js"],"names":["DUMMY_DIGIT","LONGEST_NATIONAL_PHONE_NUMBER_LENGTH","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","SUPPORT_LEGACY_FORMATTING_PATTERNS","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","RegExp","VALID_PUNCTUATION","MIN_LEADING_DIGITS_LENGTH","AsYouTypeFormatter","state","metadata","format","isNANP","nationalPrefixFormattingRule","test","international","nationalPrefix","usesNationalPrefix","resetFormat","chosenFormat","undefined","template","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","numberingPlan","callingCode","matchingFormats","formats","nationalSignificantNumber","narrowDownMatchingFormats","nextDigits","formattedCompleteNumber","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","setNationalNumberTemplate","replace","DIGIT_PLACEHOLDER","lastIndexOf","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","getNationalDigits","leadingDigits","leadingDigitsPatternIndex","length","filter","formatSuits","formatMatches","indexOf","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","leadingDigitsPatterns","Math","min","leadingDigitsPattern","internationalFormat","getFormatFormat","createTemplateForFormat","_","slice","pattern","getTemplateForFormat","options","IDDPrefix","missingPlus","spacing","index","i","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","complexPrefixBeforeNationalSignificantNumber","digits","match","strictPattern","nationalNumberDummyDigits","numberFormat","nationalPrefixIncludedInTemplate","numberFormatWithNationalPrefix","FIRST_GROUP_PATTERN","result"],"mappings":";;;;;;;;;;;;;AAAA;;AAUA;;AAIA;;AAEA;;AACA;;AACA;;;;;;;;;;;;;;AAEA;AACA;AACA,IAAMA,WAAW,GAAG,GAApB,C,CACA;;AACA,IAAMC,oCAAoC,GAAG,EAA7C,C,CACA;AACA;;AACA,IAAMC,0BAA0B,GAAG,gCAAOF,WAAP,EAAoBC,oCAApB,CAAnC,C,CAEA;AACA;;AACA,IAAME,kCAAkC,GAAG,MAA3C,C,CAEA;AACA;AACA;AACA;AACA;AACA;;AACA,IAAMC,kCAAkC,GAAG,IAA3C,C,CAEA;AACA;;AACA,IAAMC,8BAA8B,GAAGD,kCAAkC,IAAK;AAAA,SAAM,iBAAN;AAAA,CAA9E,C,CAEA;AACA;AACA;AACA;AACA;;;AACA,IAAME,+BAA+B,GAAGF,kCAAkC,IAAK;AAAA,SAAM,mBAAN;AAAA,CAA/E,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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,IAAMG,2BAA2B,GAAG,IAAIC,MAAJ,CACnC,MACA,GADA,GACMC,4BADN,GAC0B,IAD1B,GAEA,UAFA,GAEaA,4BAFb,GAEiC,MAFjC,GAGA,GAJmC,CAApC,C,CAOA;AACA;AACA;;AACA,IAAMC,yBAAyB,GAAG,CAAlC;;IAEqBC,kB;;;AACpB,oCAGG;AAAA;;AAAA,QAFFC,KAEE,QAFFA,KAEE;AAAA,QADFC,QACE,QADFA,QACE;;AAAA;;AAAA,6DAyR+B,UAACC,MAAD,EAAY;AAC7C;AACA;AACA;AACA;AACA;AACA,UAAI,KAAI,CAACC,MAAT,EAAiB;AAChB,eAAO,GAAP;AACA,OAR4C,CAS7C;AACA;AACA;AACA;;;AACA,UAAID,MAAM,IACTA,MAAM,CAACE,4BAAP,EADG,IAEHb,kCAAkC,CAACc,IAAnC,CAAwCH,MAAM,CAACE,4BAAP,EAAxC,CAFD,EAEiF;AAChF,eAAO,GAAP;AACA,OAjB4C,CAkB7C;AACA;AACA;;;AACA,aAAO,EAAP;AACA,KA/SE;;AAAA,mEAkhBqC,UAACF,MAAD,SAA+C;AAAA,UAApCI,aAAoC,SAApCA,aAAoC;AAAA,UAArBC,cAAqB,SAArBA,cAAqB;;AACtF,UAAIL,MAAM,CAACE,4BAAP,EAAJ,EAA2C;AAC1C;AACA;AACA;AACA,YAAMI,kBAAkB,GAAGN,MAAM,CAACM,kBAAP,EAA3B;;AACA,YAAKA,kBAAkB,IAAID,cAAvB,IACF,CAACC,kBAAD,IAAuB,CAACF,aAD1B,EAC0C;AACzC,iBAAO,IAAP;AACA;AACD;AACD,KA7hBE;;AACF,SAAKL,QAAL,GAAgBA,QAAhB;AACA,SAAKQ,WAAL;AACA;;;;kCAEa;AACb,WAAKC,YAAL,GAAoBC,SAApB;AACA,WAAKC,QAAL,GAAgBD,SAAhB;AACA,WAAKE,sBAAL,GAA8BF,SAA9B;AACA,WAAKG,+BAAL,GAAuCH,SAAvC;AACA,WAAKI,uCAAL,GAA+C,CAAC,CAAhD;AACA;;;0BAEKC,a,EAAehB,K,EAAO;AAC3B,WAAKS,WAAL;;AACA,UAAIO,aAAJ,EAAmB;AAClB,aAAKb,MAAL,GAAca,aAAa,CAACC,WAAd,OAAgC,GAA9C;AACA,aAAKC,eAAL,GAAuBF,aAAa,CAACG,OAAd,EAAvB;;AACA,YAAInB,KAAK,CAACoB,yBAAV,EAAqC;AACpC,eAAKC,yBAAL,CAA+BrB,KAA/B;AACA;AACD,OAND,MAMO;AACN,aAAKG,MAAL,GAAcQ,SAAd;AACA,aAAKO,eAAL,GAAuB,EAAvB;AACA;AACD;;;2BAEMI,U,EAAYtB,K,EAAO;AAAA;;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAI,kDAAwBA,KAAK,CAACoB,yBAA9B,EAAyD,KAAKnB,QAA9D,CAAJ,EAA6E;AAC5E,6BAAqB,KAAKiB,eAA1B,kHAA2C;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,cAAhChB,MAAgC;AAC1C,cAAMqB,uBAAuB,GAAG,qCAC/BvB,KAD+B,EAE/BE,MAF+B,EAG/B;AACCD,YAAAA,QAAQ,EAAE,KAAKA,QADhB;AAECuB,YAAAA,qCAAqC,EAAE,+CAAAtB,MAAM;AAAA,qBAAI,MAAI,CAACsB,qCAAL,CAA2CtB,MAA3C,EAAmD;AACnGI,gBAAAA,aAAa,EAAEN,KAAK,CAACM,aAD8E;AAEnGC,gBAAAA,cAAc,EAAEP,KAAK,CAACO;AAF6E,eAAnD,CAAJ;AAAA,aAF9C;AAMCkB,YAAAA,+BAA+B,EAAE,KAAKA;AANvC,WAH+B,CAAhC;;AAYA,cAAIF,uBAAJ,EAA6B;AAC5B,iBAAKd,WAAL;AACA,iBAAKC,YAAL,GAAoBR,MAApB;AACA,iBAAKwB,yBAAL,CAA+BH,uBAAuB,CAACI,OAAxB,CAAgC,KAAhC,EAAuCC,qCAAvC,CAA/B,EAA0F5B,KAA1F;AACA,iBAAKc,+BAAL,GAAuCS,uBAAvC,CAJ4B,CAK5B;AACA;;AACA,iBAAKR,uCAAL,GAA+C,KAAKH,QAAL,CAAciB,WAAd,CAA0BD,qCAA1B,CAA/C;AACA,mBAAOL,uBAAP;AACA;AAED;AACD,OAzCwB,CA0CzB;AACA;;;AACA,aAAO,KAAKO,kCAAL,CAAwCR,UAAxC,EAAoDtB,KAApD,CAAP;AACA,K,CAED;;;;uDACmCsB,U,EAAYtB,K,EAAO;AACrD,UAAM+B,sBAAsB,GAAG,KAAKrB,YAApC,CADqD,CAErD;;AACA,UAAMsB,iBAAiB,GAAG,KAAKC,YAAL,CAAkBjC,KAAlB,CAA1B;;AACA,UAAIgC,iBAAJ,EAAuB;AACtB,YAAIA,iBAAiB,KAAKD,sBAA1B,EAAkD;AACjD;AACA;AACA;AACA,iBAAO,KAAKG,8BAAL,CAAoCZ,UAApC,CAAP;AACA,SALD,MAKO;AACN;AACA;AACA;AACA;AACA,iBAAO,KAAKY,8BAAL,CAAoClC,KAAK,CAACmC,iBAAN,EAApC,CAAP;AACA;AACD;AACD;;;qDAME;AAAA;;AAAA,UAHFf,yBAGE,SAHFA,yBAGE;AAAA,UAFFb,cAEE,SAFFA,cAEE;AAAA,UADFD,aACE,SADFA,aACE;AACF,UAAM8B,aAAa,GAAGhB,yBAAtB,CADE,CAGF;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;;AACA,UAAIiB,yBAAyB,GAAGD,aAAa,CAACE,MAAd,GAAuBxC,yBAAvD;;AACA,UAAIuC,yBAAyB,GAAG,CAAhC,EAAmC;AAClCA,QAAAA,yBAAyB,GAAG,CAA5B;AACA;;AAED,WAAKnB,eAAL,GAAuB,KAAKA,eAAL,CAAqBqB,MAArB,CACtB,UAAArC,MAAM;AAAA,eAAI,MAAI,CAACsC,WAAL,CAAiBtC,MAAjB,EAAyBI,aAAzB,EAAwCC,cAAxC,KACN,MAAI,CAACkC,aAAL,CAAmBvC,MAAnB,EAA2BkC,aAA3B,EAA0CC,yBAA1C,CADE;AAAA,OADgB,CAAvB,CApBE,CAyBF;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,UAAI,KAAK3B,YAAL,IAAqB,KAAKQ,eAAL,CAAqBwB,OAArB,CAA6B,KAAKhC,YAAlC,MAAoD,CAAC,CAA9E,EAAiF;AAChF,aAAKD,WAAL;AACA;AACD;;;gCAEWP,M,EAAQI,a,EAAeC,c,EAAgB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAIA,cAAc,IACjB,CAACL,MAAM,CAACM,kBAAP,EADE,IAEH;AACA,OAACN,MAAM,CAACyC,sDAAP,EAHF,EAGmE;AAClE,eAAO,KAAP;AACA,OAhBiD,CAiBlD;AACA;AACA;AACA;AACA;;;AACA,UAAI,CAACrC,aAAD,IACH,CAACC,cADE,IAEHL,MAAM,CAAC0C,uDAAP,EAFD,EAEmE;AAClE,eAAO,KAAP;AACA;;AACD,aAAO,IAAP;AACA;;;kCAEa1C,M,EAAQkC,a,EAAeC,yB,EAA2B;AAC/D,UAAMQ,0BAA0B,GAAG3C,MAAM,CAAC4C,qBAAP,GAA+BR,MAAlE,CAD+D,CAE/D;AACA;;AACA,UAAIO,0BAA0B,KAAK,CAAnC,EAAsC;AACrC,eAAO,IAAP;AACA,OAN8D,CAO/D;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,UAAIT,aAAa,CAACE,MAAd,GAAuBxC,yBAA3B,EAAsD;AACrD,eAAO,IAAP;AACA,OAhB8D,CAiB/D;AACA;AACA;;;AACAuC,MAAAA,yBAAyB,GAAGU,IAAI,CAACC,GAAL,CAASX,yBAAT,EAAoCQ,0BAA0B,GAAG,CAAjE,CAA5B;AACA,UAAMI,oBAAoB,GAAG/C,MAAM,CAAC4C,qBAAP,GAA+BT,yBAA/B,CAA7B,CArB+D,CAsB/D;AACA;;AACA,aAAO,IAAIzC,MAAJ,aAAgBqD,oBAAhB,QAAyC5C,IAAzC,CAA8C+B,aAA9C,CAAP;AACA;;;oCAEelC,M,EAAQI,a,EAAe;AACtC,aAAOA,aAAa,GAAGJ,MAAM,CAACgD,mBAAP,EAAH,GAAkChD,MAAM,CAACA,MAAP,EAAtD;AACA;;;iCAEYF,K,EAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA,YAGRE,MAHQ;;AAIlB;AACA;AACA,YAAI,MAAI,CAACQ,YAAL,KAAsBR,MAA1B,EAAkC;AACjC;AACA,SARiB,CASlB;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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;;AACA,YAAI,CAACP,2BAA2B,CAACU,IAA5B,CAAiC,MAAI,CAAC8C,eAAL,CAAqBjD,MAArB,EAA6BF,KAAK,CAACM,aAAnC,CAAjC,CAAL,EAA0F;AACzF;AACA;;AACD,YAAI,CAAC,MAAI,CAAC8C,uBAAL,CAA6BlD,MAA7B,EAAqCF,KAArC,CAAL,EAAkD;AACjD;AACA,UAAA,MAAI,CAACkB,eAAL,GAAuB,MAAI,CAACA,eAAL,CAAqBqB,MAArB,CAA4B,UAAAc,CAAC;AAAA,mBAAIA,CAAC,KAAKnD,MAAV;AAAA,WAA7B,CAAvB;AACA;AACA;;AACD,QAAA,MAAI,CAACQ,YAAL,GAAoBR,MAApB;AACA;AAzDkB;;AACnB;AACA;AAFmB,aAGnB,sBAAqB,KAAKgB,eAAL,CAAqBoC,KAArB,EAArB,yHAAmD;AAAA;;AAAA;;AAAA;AAAA;AAsDlD;;AAtDkD;AAmDjD;AAnDiD;AAuDlD;;AACD,UAAI,CAAC,KAAK5C,YAAV,EAAwB;AACvB;AACA,aAAKD,WAAL;AACA;;AACD,aAAO,KAAKC,YAAZ;AACA;;;4CAEuBR,M,EAAQF,K,EAAO;AACtC;AACA;AACA;;AACA;AACA,UAAIR,kCAAkC,IAAIU,MAAM,CAACqD,OAAP,GAAiBb,OAAjB,CAAyB,GAAzB,KAAiC,CAA3E,EAA8E;AAC7E;AACA,OAPqC,CAQtC;;;AACA,UAAM9B,QAAQ,GAAG,KAAK4C,oBAAL,CAA0BtD,MAA1B,EAAkCF,KAAlC,CAAjB,CATsC,CAUtC;AACA;;AACA,UAAIY,QAAJ,EAAc;AACb,aAAKc,yBAAL,CAA+Bd,QAA/B,EAAyCZ,KAAzC;AACA,eAAO,IAAP;AACA;AACD;;;0EA0B0EyD,O,EAAS;AAAA,UAAnCC,SAAmC,SAAnCA,SAAmC;AAAA,UAAxBC,WAAwB,SAAxBA,WAAwB;;AACnF,UAAID,SAAJ,EAAe;AACd,eAAOD,OAAO,IAAIA,OAAO,CAACG,OAAR,KAAoB,KAA/B,GAAuCF,SAAvC,GAAmDA,SAAS,GAAG,GAAtE;AACA;;AACD,UAAIC,WAAJ,EAAiB;AAChB,eAAO,EAAP;AACA;;AACD,aAAO,GAAP;AACA;;;gCAEW3D,K,EAAO;AAClB,UAAI,CAAC,KAAKY,QAAV,EAAoB;AACnB;AACA,OAHiB,CAIlB;AACA;AACA;;;AACA,UAAIiD,KAAK,GAAG,CAAC,CAAb;AACA,UAAIC,CAAC,GAAG,CAAR;AACA,UAAMC,mBAAmB,GAAG/D,KAAK,CAACM,aAAN,GAAsB,KAAK0D,8CAAL,CAAoDhE,KAApD,EAA2D;AAAE4D,QAAAA,OAAO,EAAE;AAAX,OAA3D,CAAtB,GAAuG,EAAnI;;AACA,aAAOE,CAAC,GAAGC,mBAAmB,CAACzB,MAApB,GAA6BtC,KAAK,CAACiE,mCAAN,GAA4C3B,MAApF,EAA4F;AAC3FuB,QAAAA,KAAK,GAAG,KAAKjD,QAAL,CAAc8B,OAAd,CAAsBd,qCAAtB,EAAyCiC,KAAK,GAAG,CAAjD,CAAR;AACAC,QAAAA,CAAC;AACD;;AACD,aAAO,oDAA2B,KAAKlD,QAAhC,EAA0CiD,KAAK,GAAG,CAAlD,CAAP;AACA;;;8CAEyBjD,Q,EAAUZ,K,EAAO;AAC1C,WAAKa,sBAAL,GAA8BD,QAA9B;AACA,WAAKE,+BAAL,GAAuCF,QAAvC,CAF0C,CAG1C;AACA;;AACA,WAAKG,uCAAL,GAA+C,CAAC,CAAhD,CAL0C,CAM1C;AACA;AACA;AACA;AACA;;AACA,UAAIf,KAAK,CAACM,aAAV,EAAyB;AACxB,aAAKM,QAAL,GACC,KAAKoD,8CAAL,CAAoDhE,KAApD,EAA2D2B,OAA3D,CAAmE,SAAnE,EAA8EC,qCAA9E,IACA,gCAAOA,qCAAP,EAA0B5B,KAAK,CAACiB,WAAN,CAAkBqB,MAA5C,CADA,GAEA,GAFA,GAGA1B,QAJD;AAKA,OAND,MAMO;AACN,aAAKA,QAAL,GAAgBA,QAAhB;AACA;AACD;AAED;;;;;;;;;;yCAOqBV,M,SAKlB;AAAA,UAJFkB,yBAIE,SAJFA,yBAIE;AAAA,UAHFd,aAGE,SAHFA,aAGE;AAAA,UAFFC,cAEE,SAFFA,cAEE;AAAA,UADF2D,4CACE,SADFA,4CACE;AACF,UAAIX,OAAO,GAAGrD,MAAM,CAACqD,OAAP,EAAd;AAEA;;AACA,UAAI/D,kCAAJ,EAAwC;AACvC+D,QAAAA,OAAO,GAAGA,OAAO,CAChB;AADgB,SAEf5B,OAFQ,CAEAlC,8BAA8B,EAF9B,EAEkC,KAFlC,EAGT;AAHS,SAIRkC,OAJQ,CAIAjC,+BAA+B,EAJ/B,EAImC,KAJnC,CAAV;AAKA,OAVC,CAYF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,UAAIyE,MAAM,GAAG7E,0BAA0B,CAAC8E,KAA3B,CAAiCb,OAAjC,EAA0C,CAA1C,CAAb,CApBE,CAsBF;AACA;;AACA,UAAInC,yBAAyB,CAACkB,MAA1B,GAAmC6B,MAAM,CAAC7B,MAA9C,EAAsD;AACrD;AACA,OA1BC,CA4BF;AACA;AAEA;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;;;AAEA,UAAM+B,aAAa,GAAG,IAAIzE,MAAJ,CAAW,MAAM2D,OAAN,GAAgB,GAA3B,CAAtB;AACA,UAAMe,yBAAyB,GAAGlD,yBAAyB,CAACO,OAA1B,CAAkC,KAAlC,EAAyCvC,WAAzC,CAAlC,CA5DE,CA8DF;AACA;AACA;;AACA,UAAIiF,aAAa,CAAChE,IAAd,CAAmBiE,yBAAnB,CAAJ,EAAmD;AAClDH,QAAAA,MAAM,GAAGG,yBAAT;AACA;;AAED,UAAIC,YAAY,GAAG,KAAKpB,eAAL,CAAqBjD,MAArB,EAA6BI,aAA7B,CAAnB;AACA,UAAIkE,gCAAJ,CAtEE,CAwEF;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,UAAI,KAAKhD,qCAAL,CAA2CtB,MAA3C,EAAmD;AAAEI,QAAAA,aAAa,EAAbA,aAAF;AAAiBC,QAAAA,cAAc,EAAdA;AAAjB,OAAnD,CAAJ,EAA2F;AAC1F,YAAMkE,8BAA8B,GAAGF,YAAY,CAAC5C,OAAb,CACtC+C,oDADsC,EAEtCxE,MAAM,CAACE,4BAAP,EAFsC,CAAvC,CAD0F,CAK1F;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA,YAAI,6BAAYF,MAAM,CAACE,4BAAP,EAAZ,MAAuD,CAACG,cAAc,IAAI,EAAnB,IAAyB,6BAAY,IAAZ,CAApF,EAAuG;AACtGgE,UAAAA,YAAY,GAAGE,8BAAf;AACAD,UAAAA,gCAAgC,GAAG,IAAnC,CAFsG,CAGtG;AACA;;AACA,cAAIjE,cAAJ,EAAoB;AACnB,gBAAIuD,CAAC,GAAGvD,cAAc,CAAC+B,MAAvB;;AACA,mBAAOwB,CAAC,GAAG,CAAX,EAAc;AACbS,cAAAA,YAAY,GAAGA,YAAY,CAAC5C,OAAb,CAAqB,IAArB,EAA2BC,qCAA3B,CAAf;AACAkC,cAAAA,CAAC;AACD;AACD;AACD;AACD,OAzGC,CA2GF;;;AACA,UAAIlD,QAAQ,GAAGuD,MAAM,CACpB;AADoB,OAEnBxC,OAFa,CAEL,IAAI/B,MAAJ,CAAW2D,OAAX,CAFK,EAEgBgB,YAFhB,EAGd;AAHc,OAIb5C,OAJa,CAIL,IAAI/B,MAAJ,CAAWR,WAAX,EAAwB,GAAxB,CAJK,EAIyBwC,qCAJzB,CAAf,CA5GE,CAkHF;AACA;AACA;AACA;;AACA,UAAI,CAAC4C,gCAAL,EAAuC;AACtC,YAAIN,4CAAJ,EAAkD;AACjD;AACAtD,UAAAA,QAAQ,GAAG,gCAAOgB,qCAAP,EAA0BsC,4CAA4C,CAAC5B,MAAvE,IACV,GADU,GAEV1B,QAFD;AAGA,SALD,MAKO,IAAIL,cAAJ,EAAoB;AAC1B;AACAK,UAAAA,QAAQ,GAAG,gCAAOgB,qCAAP,EAA0BrB,cAAc,CAAC+B,MAAzC,IACV,KAAKb,+BAAL,CAAqCvB,MAArC,CADU,GAEVU,QAFD;AAGA;AACD;;AAED,UAAIN,aAAJ,EAAmB;AAClBM,QAAAA,QAAQ,GAAG,kDAAiCA,QAAjC,CAAX;AACA;;AAED,aAAOA,QAAP;AACA;;;mDAE8BuD,M,EAAQ;AACtC,UAAMQ,MAAM,GAAG,oDACd,KAAK7D,+BADS,EAEd,KAAKC,uCAFS,EAGdoD,MAHc,CAAf;;AAMA,UAAI,CAACQ,MAAL,EAAa;AACZ;AACA,aAAKlE,WAAL;AACA;AACA;;AAED,WAAKK,+BAAL,GAAuC6D,MAAM,CAAC,CAAD,CAA7C;AACA,WAAK5D,uCAAL,GAA+C4D,MAAM,CAAC,CAAD,CAArD,CAdsC,CAgBtC;;AACA,aAAO,oDAA2B,KAAK7D,+BAAhC,EAAiE,KAAKC,uCAAL,GAA+C,CAAhH,CAAP,CAjBsC,CAmBtC;AACA;AACA;AACA;AACA","sourcesContent":["import {\r\n\tDIGIT_PLACEHOLDER,\r\n\tcountOccurences,\r\n\trepeat,\r\n\tcutAndStripNonPairedParens,\r\n\tcloseNonPairedParens,\r\n\tstripNonPairedParens,\r\n\tpopulateTemplateWithDigits\r\n} from './AsYouTypeFormatter.util'\r\n\r\nimport formatCompleteNumber, {\r\n\tcanFormatCompleteNumber\r\n} from './AsYouTypeFormatter.complete'\r\n\r\nimport parseDigits from './helpers/parseDigits'\r\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util'\r\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat'\r\nimport { VALID_PUNCTUATION } from './constants'\r\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle'\r\n\r\n// Used in phone number format template creation.\r\n// Could be any digit, I guess.\r\nconst DUMMY_DIGIT = '9'\r\n// I don't know why is it exactly `15`\r\nconst LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15\r\n// Create a phone number consisting only of the digit 9 that matches the\r\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\r\nconst LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH)\r\n\r\n// A set of characters that, if found in a national prefix formatting rules, are an indicator to\r\n// us that we should separate the national prefix from the number when formatting.\r\nconst NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/\r\n\r\n// Deprecated: Google has removed some formatting pattern related code from their repo.\r\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\r\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\r\n// Because this library supports generating custom metadata\r\n// some users may still be using old metadata so the relevant\r\n// code seems to stay until some next major version update.\r\nconst SUPPORT_LEGACY_FORMATTING_PATTERNS = true\r\n\r\n// A pattern that is used to match character classes in regular expressions.\r\n// An example of a character class is \"[1-4]\".\r\nconst CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && (() => /\\[([^\\[\\]])*\\]/g)\r\n\r\n// Any digit in a regular expression that actually denotes a digit. For\r\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\r\n// (8 and 0) are standalone digits, but the rest are not.\r\n// Two look-aheads are needed because the number following \\\\d could be a\r\n// two-digit number, since the phone number can be as long as 15 digits.\r\nconst CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && (() => /\\d(?=[^,}][^,}])/g)\r\n\r\n// A regular expression that is used to determine if a `format` is\r\n// suitable to be used in the \"as you type formatter\".\r\n// A `format` is suitable when the resulting formatted number has\r\n// the same digits as the user has entered.\r\n//\r\n// In the simplest case, that would mean that the format\r\n// doesn't add any additional digits when formatting a number.\r\n// Google says that it also shouldn't add \"star\" (`*`) characters,\r\n// like it does in some Israeli formats.\r\n// Such basic format would only contain \"valid punctuation\"\r\n// and \"captured group\" identifiers ($1, $2, etc).\r\n//\r\n// An example of a format that adds additional digits:\r\n//\r\n// Country: `AR` (Argentina).\r\n// Format:\r\n// {\r\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\r\n// \"leading_digits_patterns\": [\"91\"],\r\n// \"national_prefix_formatting_rule\": \"0$1\",\r\n// \"format\": \"$2 15-$3-$4\",\r\n// \"international_format\": \"$1 $2 $3-$4\"\r\n// }\r\n//\r\n// In the format above, the `format` adds `15` to the digits when formatting a number.\r\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\r\n// has previously removed `15` from a national number, so re-adding `15` in `format`\r\n// doesn't actually result in any extra digits added to user's input.\r\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\r\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\r\n//\r\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\r\n// `libphonenumber` code.\r\n//\r\nconst NON_ALTERING_FORMAT_REG_EXP = new RegExp(\r\n\t'^' +\r\n\t'[' + VALID_PUNCTUATION + ']*' +\r\n\t'(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)+' +\r\n\t'$'\r\n)\r\n\r\n// This is the minimum length of the leading digits of a phone number\r\n// to guarantee the first \"leading digits pattern\" for a phone number format\r\n// to be preemptive.\r\nconst MIN_LEADING_DIGITS_LENGTH = 3\r\n\r\nexport default class AsYouTypeFormatter {\r\n\tconstructor({\r\n\t\tstate,\r\n\t\tmetadata\r\n\t}) {\r\n\t\tthis.metadata = metadata\r\n\t\tthis.resetFormat()\r\n\t}\r\n\r\n\tresetFormat() {\r\n\t\tthis.chosenFormat = undefined\r\n\t\tthis.template = undefined\r\n\t\tthis.nationalNumberTemplate = undefined\r\n\t\tthis.populatedNationalNumberTemplate = undefined\r\n\t\tthis.populatedNationalNumberTemplatePosition = -1\r\n\t}\r\n\r\n\treset(numberingPlan, state) {\r\n\t\tthis.resetFormat()\r\n\t\tif (numberingPlan) {\r\n\t\t\tthis.isNANP = numberingPlan.callingCode() === '1'\r\n\t\t\tthis.matchingFormats = numberingPlan.formats()\r\n\t\t\tif (state.nationalSignificantNumber) {\r\n\t\t\t\tthis.narrowDownMatchingFormats(state)\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.isNANP = undefined\r\n\t\t\tthis.matchingFormats = []\r\n\t\t}\r\n\t}\r\n\r\n\tformat(nextDigits, state) {\r\n\t\t// See if the phone number digits can be formatted as a complete phone number.\r\n\t\t// If not, use the results from `formatNationalNumberWithNextDigits()`,\r\n\t\t// which formats based on the chosen formatting pattern.\r\n\t\t//\r\n\t\t// Attempting to format complete phone number first is how it's done\r\n\t\t// in Google's `libphonenumber`, so this library just follows it.\r\n\t\t// Google's `libphonenumber` code doesn't explain in detail why does it\r\n\t\t// attempt to format digits as a complete phone number\r\n\t\t// instead of just going with a previoulsy (or newly) chosen `format`:\r\n\t\t//\r\n\t\t// \"Checks to see if there is an exact pattern match for these digits.\r\n\t\t// If so, we should use this instead of any other formatting template\r\n\t\t// whose leadingDigitsPattern also matches the input.\"\r\n\t\t//\r\n\t\tif (canFormatCompleteNumber(state.nationalSignificantNumber, this.metadata)) {\r\n\t\t\tfor (const format of this.matchingFormats) {\r\n\t\t\t\tconst formattedCompleteNumber = formatCompleteNumber(\r\n\t\t\t\t\tstate,\r\n\t\t\t\t\tformat,\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tmetadata: this.metadata,\r\n\t\t\t\t\t\tshouldTryNationalPrefixFormattingRule: format => this.shouldTryNationalPrefixFormattingRule(format, {\r\n\t\t\t\t\t\t\tinternational: state.international,\r\n\t\t\t\t\t\t\tnationalPrefix: state.nationalPrefix\r\n\t\t\t\t\t\t}),\r\n\t\t\t\t\t\tgetSeparatorAfterNationalPrefix: this.getSeparatorAfterNationalPrefix\r\n\t\t\t\t\t}\r\n\t\t\t\t)\r\n\t\t\t\tif (formattedCompleteNumber) {\r\n\t\t\t\t\tthis.resetFormat()\r\n\t\t\t\t\tthis.chosenFormat = format\r\n\t\t\t\t\tthis.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state)\r\n\t\t\t\t\tthis.populatedNationalNumberTemplate = formattedCompleteNumber\r\n\t\t\t\t\t// With a new formatting template, the matched position\r\n\t\t\t\t\t// using the old template needs to be reset.\r\n\t\t\t\t\tthis.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER)\r\n\t\t\t\t\treturn formattedCompleteNumber\r\n\t\t\t\t}\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t\t// Format the digits as a partial (incomplete) phone number\r\n\t\t// using the previously chosen formatting pattern (or a newly chosen one).\r\n\t\treturn this.formatNationalNumberWithNextDigits(nextDigits, state)\r\n\t}\r\n\r\n\t// Formats the next phone number digits.\r\n\tformatNationalNumberWithNextDigits(nextDigits, state) {\r\n\t\tconst previouslyChosenFormat = this.chosenFormat\r\n\t\t// Choose a format from the list of matching ones.\r\n\t\tconst newlyChosenFormat = this.chooseFormat(state)\r\n\t\tif (newlyChosenFormat) {\r\n\t\t\tif (newlyChosenFormat === previouslyChosenFormat) {\r\n\t\t\t\t// If it can format the next (current) digits\r\n\t\t\t\t// using the previously chosen phone number format\r\n\t\t\t\t// then return the updated formatted number.\r\n\t\t\t\treturn this.formatNextNationalNumberDigits(nextDigits)\r\n\t\t\t} else {\r\n\t\t\t\t// If a more appropriate phone number format\r\n\t\t\t\t// has been chosen for these \"leading digits\",\r\n\t\t\t\t// then re-format the national phone number part\r\n\t\t\t\t// using the newly selected format.\r\n\t\t\t\treturn this.formatNextNationalNumberDigits(state.getNationalDigits())\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tnarrowDownMatchingFormats({\r\n\t\tnationalSignificantNumber,\r\n\t\tnationalPrefix,\r\n\t\tinternational\r\n\t}) {\r\n\t\tconst leadingDigits = nationalSignificantNumber\r\n\r\n\t\t// \"leading digits\" pattern list starts with a\r\n\t\t// \"leading digits\" pattern fitting a maximum of 3 leading digits.\r\n\t\t// So, after a user inputs 3 digits of a national (significant) phone number\r\n\t\t// this national (significant) number can already be formatted.\r\n\t\t// The next \"leading digits\" pattern is for 4 leading digits max,\r\n\t\t// and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\r\n\r\n\t\t// This implementation is different from Google's\r\n\t\t// in that it searches for a fitting format\r\n\t\t// even if the user has entered less than\r\n\t\t// `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\r\n\t\t// Because some leading digit patterns already match for a single first digit.\r\n\t\tlet leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH\r\n\t\tif (leadingDigitsPatternIndex < 0) {\r\n\t\t\tleadingDigitsPatternIndex = 0\r\n\t\t}\r\n\r\n\t\tthis.matchingFormats = this.matchingFormats.filter(\r\n\t\t\tformat => this.formatSuits(format, international, nationalPrefix)\r\n\t\t\t\t&& this.formatMatches(format, leadingDigits, leadingDigitsPatternIndex)\r\n\t\t)\r\n\r\n\t\t// If there was a phone number format chosen\r\n\t\t// and it no longer holds given the new leading digits then reset it.\r\n\t\t// The test for this `if` condition is marked as:\r\n\t\t// \"Reset a chosen format when it no longer holds given the new leading digits\".\r\n\t\t// To construct a valid test case for this one can find a country\r\n\t\t// in `PhoneNumberMetadata.xml` yielding one format for 3 `<leadingDigits>`\r\n\t\t// and yielding another format for 4 `<leadingDigits>` (Australia in this case).\r\n\t\tif (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\r\n\t\t\tthis.resetFormat()\r\n\t\t}\r\n\t}\r\n\r\n\tformatSuits(format, international, nationalPrefix) {\r\n\t\t// When a prefix before a national (significant) number is\r\n\t\t// simply a national prefix, then it's parsed as `this.nationalPrefix`.\r\n\t\t// In more complex cases, a prefix before national (significant) number\r\n\t\t// could include a national prefix as well as some \"capturing groups\",\r\n\t\t// and in that case there's no info whether a national prefix has been parsed.\r\n\t\t// If national prefix is not used when formatting a phone number\r\n\t\t// using this format, but a national prefix has been entered by the user,\r\n\t\t// and was extracted, then discard such phone number format.\r\n\t\t// In Google's \"AsYouType\" formatter code, the equivalent would be this part:\r\n\t\t// https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\r\n\t\tif (nationalPrefix &&\r\n\t\t\t!format.usesNationalPrefix() &&\r\n\t\t\t// !format.domesticCarrierCodeFormattingRule() &&\r\n\t\t\t!format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\t// If national prefix is mandatory for this phone number format\r\n\t\t// and there're no guarantees that a national prefix is present in user input\r\n\t\t// then discard this phone number format as not suitable.\r\n\t\t// In Google's \"AsYouType\" formatter code, the equivalent would be this part:\r\n\t\t// https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\r\n\t\tif (!international &&\r\n\t\t\t!nationalPrefix &&\r\n\t\t\tformat.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\r\n\t\t\treturn false\r\n\t\t}\r\n\t\treturn true\r\n\t}\r\n\r\n\tformatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\r\n\t\tconst leadingDigitsPatternsCount = format.leadingDigitsPatterns().length\r\n\t\t// If this format is not restricted to a certain\r\n\t\t// leading digits pattern then it fits.\r\n\t\tif (leadingDigitsPatternsCount === 0) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t// Start excluding any non-matching formats only when the\r\n\t\t// national number entered so far is at least 3 digits long,\r\n\t\t// otherwise format matching would give false negatives.\r\n\t\t// For example, when the digits entered so far are `2`\r\n\t\t// and the leading digits pattern is `21` –\r\n\t\t// it's quite obvious in this case that the format could be the one\r\n\t\t// but due to the absence of further digits it would give false negative.\r\n\t\tif (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\r\n\t\t\treturn true\r\n\t\t}\r\n\t\t// If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are available\r\n\t\t// then format matching starts narrowing down the list of possible formats\r\n\t\t// (only previously matched formats are considered for next digits).\r\n\t\tleadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1)\r\n\t\tconst leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex]\r\n\t\t// Brackets are required for `^` to be applied to\r\n\t\t// all or-ed (`|`) parts, not just the first one.\r\n\t\treturn new RegExp(`^(${leadingDigitsPattern})`).test(leadingDigits)\r\n\t}\r\n\r\n\tgetFormatFormat(format, international) {\r\n\t\treturn international ? format.internationalFormat() : format.format()\r\n\t}\r\n\r\n\tchooseFormat(state) {\r\n\t\t// When there are multiple available formats, the formatter uses the first\r\n\t\t// format where a formatting template could be created.\r\n\t\tfor (const format of this.matchingFormats.slice()) {\r\n\t\t\t// If this format is currently being used\r\n\t\t\t// and is still suitable, then stick to it.\r\n\t\t\tif (this.chosenFormat === format) {\r\n\t\t\t\tbreak\r\n\t\t\t}\r\n\t\t\t// Sometimes, a formatting rule inserts additional digits in a phone number,\r\n\t\t\t// and \"as you type\" formatter can't do that: it should only use the digits\r\n\t\t\t// that the user has input.\r\n\t\t\t//\r\n\t\t\t// For example, in Argentina, there's a format for mobile phone numbers:\r\n\t\t\t//\r\n\t\t\t// {\r\n\t\t\t// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\r\n\t\t\t// \"leading_digits_patterns\": [\"91\"],\r\n\t\t\t// \"national_prefix_formatting_rule\": \"0$1\",\r\n\t\t\t// \"format\": \"$2 15-$3-$4\",\r\n\t\t\t// \"international_format\": \"$1 $2 $3-$4\"\r\n\t\t\t// }\r\n\t\t\t//\r\n\t\t\t// In that format, `international_format` is used instead of `format`\r\n\t\t\t// because `format` inserts `15` in the formatted number,\r\n\t\t\t// and `AsYouType` formatter should only use the digits\r\n\t\t\t// the user has actually input, without adding any extra digits.\r\n\t\t\t// In this case, it wouldn't make a difference, because the `15`\r\n\t\t\t// is first stripped when applying `national_prefix_for_parsing`\r\n\t\t\t// and then re-added when using `format`, so in reality it doesn't\r\n\t\t\t// add any new digits to the number, but to detect that, the code\r\n\t\t\t// would have to be more complex: it would have to try formatting\r\n\t\t\t// the digits using the format and then see if any digits have\r\n\t\t\t// actually been added or removed, and then, every time a new digit\r\n\t\t\t// is input, it should re-check whether the chosen format doesn't\r\n\t\t\t// alter the digits.\r\n\t\t\t//\r\n\t\t\t// Google's code doesn't go that far, and so does this library:\r\n\t\t\t// it simply requires that a `format` doesn't add any additonal\r\n\t\t\t// digits to user's input.\r\n\t\t\t//\r\n\t\t\t// Also, people in general should move from inputting phone numbers\r\n\t\t\t// in national format (possibly with national prefixes)\r\n\t\t\t// and use international phone number format instead:\r\n\t\t\t// it's a logical thing in the modern age of mobile phones,\r\n\t\t\t// globalization and the internet.\r\n\t\t\t//\r\n\t\t\t/* istanbul ignore if */\r\n\t\t\tif (!NON_ALTERING_FORMAT_REG_EXP.test(this.getFormatFormat(format, state.international))) {\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tif (!this.createTemplateForFormat(format, state)) {\r\n\t\t\t\t// Remove the format if it can't generate a template.\r\n\t\t\t\tthis.matchingFormats = this.matchingFormats.filter(_ => _ !== format)\r\n\t\t\t\tcontinue\r\n\t\t\t}\r\n\t\t\tthis.chosenFormat = format\r\n\t\t\tbreak\r\n\t\t}\r\n\t\tif (!this.chosenFormat) {\r\n\t\t\t// No format matches the national (significant) phone number.\r\n\t\t\tthis.resetFormat()\r\n\t\t}\r\n\t\treturn this.chosenFormat\r\n\t}\r\n\r\n\tcreateTemplateForFormat(format, state) {\r\n\t\t// The formatter doesn't format numbers when numberPattern contains '|', e.g.\r\n\t\t// (20|3)\\d{4}. In those cases we quickly return.\r\n\t\t// (Though there's no such format in current metadata)\r\n\t\t/* istanbul ignore if */\r\n\t\tif (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// Get formatting template for this phone number format\r\n\t\tconst template = this.getTemplateForFormat(format, state)\r\n\t\t// If the national number entered is too long\r\n\t\t// for any phone number format, then abort.\r\n\t\tif (template) {\r\n\t\t\tthis.setNationalNumberTemplate(template, state)\r\n\t\t\treturn true\r\n\t\t}\r\n\t}\r\n\r\n\tgetSeparatorAfterNationalPrefix = (format) => {\r\n\t\t// `US` metadata doesn't have a `national_prefix_formatting_rule`,\r\n\t\t// so the `if` condition below doesn't apply to `US`,\r\n\t\t// but in reality there shoudl be a separator\r\n\t\t// between a national prefix and a national (significant) number.\r\n\t\t// So `US` national prefix separator is a \"special\" \"hardcoded\" case.\r\n\t\tif (this.isNANP) {\r\n\t\t\treturn ' '\r\n\t\t}\r\n\t\t// If a `format` has a `national_prefix_formatting_rule`\r\n\t\t// and that rule has a separator after a national prefix,\r\n\t\t// then it means that there should be a separator\r\n\t\t// between a national prefix and a national (significant) number.\r\n\t\tif (format &&\r\n\t\t\tformat.nationalPrefixFormattingRule() &&\r\n\t\t\tNATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\r\n\t\t\treturn ' '\r\n\t\t}\r\n\t\t// At this point, there seems to be no clear evidence that\r\n\t\t// there should be a separator between a national prefix\r\n\t\t// and a national (significant) number. So don't insert one.\r\n\t\treturn ''\r\n\t}\r\n\r\n\tgetInternationalPrefixBeforeCountryCallingCode({ IDDPrefix, missingPlus }, options) {\r\n\t\tif (IDDPrefix) {\r\n\t\t\treturn options && options.spacing === false ? IDDPrefix : IDDPrefix + ' '\r\n\t\t}\r\n\t\tif (missingPlus) {\r\n\t\t\treturn ''\r\n\t\t}\r\n\t\treturn '+'\r\n\t}\r\n\r\n\tgetTemplate(state) {\r\n\t\tif (!this.template) {\r\n\t\t\treturn\r\n\t\t}\r\n\t\t// `this.template` holds the template for a \"complete\" phone number.\r\n\t\t// The currently entered phone number is most likely not \"complete\",\r\n\t\t// so trim all non-populated digits.\r\n\t\tlet index = -1\r\n\t\tlet i = 0\r\n\t\tconst internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, { spacing: false }) : ''\r\n\t\twhile (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\r\n\t\t\tindex = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1)\r\n\t\t\ti++\r\n\t\t}\r\n\t\treturn cutAndStripNonPairedParens(this.template, index + 1)\r\n\t}\r\n\r\n\tsetNationalNumberTemplate(template, state) {\r\n\t\tthis.nationalNumberTemplate = template\r\n\t\tthis.populatedNationalNumberTemplate = template\r\n\t\t// With a new formatting template, the matched position\r\n\t\t// using the old template needs to be reset.\r\n\t\tthis.populatedNationalNumberTemplatePosition = -1\r\n\t\t// For convenience, the public `.template` property\r\n\t\t// contains the whole international number\r\n\t\t// if the phone number being input is international:\r\n\t\t// 'x' for the '+' sign, 'x'es for the country phone code,\r\n\t\t// a spacebar and then the template for the formatted national number.\r\n\t\tif (state.international) {\r\n\t\t\tthis.template =\r\n\t\t\t\tthis.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) +\r\n\t\t\t\trepeat(DIGIT_PLACEHOLDER, state.callingCode.length) +\r\n\t\t\t\t' ' +\r\n\t\t\t\ttemplate\r\n\t\t} else {\r\n\t\t\tthis.template = template\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Generates formatting template for a national phone number,\r\n\t * optionally containing a national prefix, for a format.\r\n\t * @param {Format} format\r\n\t * @param {string} nationalPrefix\r\n\t * @return {string}\r\n\t */\r\n\tgetTemplateForFormat(format, {\r\n\t\tnationalSignificantNumber,\r\n\t\tinternational,\r\n\t\tnationalPrefix,\r\n\t\tcomplexPrefixBeforeNationalSignificantNumber\r\n\t}) {\r\n\t\tlet pattern = format.pattern()\r\n\r\n\t\t/* istanbul ignore else */\r\n\t\tif (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\r\n\t\t\tpattern = pattern\r\n\t\t\t\t// Replace anything in the form of [..] with \\d\r\n\t\t\t\t.replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\r\n\t\t\t\t// Replace any standalone digit (not the one in `{}`) with \\d\r\n\t\t\t\t.replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d')\r\n\t\t}\r\n\r\n\t\t// Generate a dummy national number (consisting of `9`s)\r\n\t\t// that fits this format's `pattern`.\r\n\t\t//\r\n\t\t// This match will always succeed,\r\n\t\t// because the \"longest dummy phone number\"\r\n\t\t// has enough length to accomodate any possible\r\n\t\t// national phone number format pattern.\r\n\t\t//\r\n\t\tlet digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0]\r\n\r\n\t\t// If the national number entered is too long\r\n\t\t// for any phone number format, then abort.\r\n\t\tif (nationalSignificantNumber.length > digits.length) {\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\t// Get a formatting template which can be used to efficiently format\r\n\t\t// a partial number where digits are added one by one.\r\n\r\n\t\t// Below `strictPattern` is used for the\r\n\t\t// regular expression (with `^` and `$`).\r\n\t\t// This wasn't originally in Google's `libphonenumber`\r\n\t\t// and I guess they don't really need it\r\n\t\t// because they're not using \"templates\" to format phone numbers\r\n\t\t// but I added `strictPattern` after encountering\r\n\t\t// South Korean phone number formatting bug.\r\n\t\t//\r\n\t\t// Non-strict regular expression bug demonstration:\r\n\t\t//\r\n\t\t// this.nationalSignificantNumber : `111111111` (9 digits)\r\n\t\t//\r\n\t\t// pattern : (\\d{2})(\\d{3,4})(\\d{4})\r\n\t\t// format : `$1 $2 $3`\r\n\t\t// digits : `9999999999` (10 digits)\r\n\t\t//\r\n\t\t// '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\r\n\t\t//\r\n\t\t// template : xx xxxx xxxx\r\n\t\t//\r\n\t\t// But the correct template in this case is `xx xxx xxxx`.\r\n\t\t// The template was generated incorrectly because of the\r\n\t\t// `{3,4}` variability in the `pattern`.\r\n\t\t//\r\n\t\t// The fix is, if `this.nationalSignificantNumber` has already sufficient length\r\n\t\t// to satisfy the `pattern` completely then `this.nationalSignificantNumber`\r\n\t\t// is used instead of `digits`.\r\n\r\n\t\tconst strictPattern = new RegExp('^' + pattern + '$')\r\n\t\tconst nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT)\r\n\r\n\t\t// If `this.nationalSignificantNumber` has already sufficient length\r\n\t\t// to satisfy the `pattern` completely then use it\r\n\t\t// instead of `digits`.\r\n\t\tif (strictPattern.test(nationalNumberDummyDigits)) {\r\n\t\t\tdigits = nationalNumberDummyDigits\r\n\t\t}\r\n\r\n\t\tlet numberFormat = this.getFormatFormat(format, international)\r\n\t\tlet nationalPrefixIncludedInTemplate\r\n\r\n\t\t// If a user did input a national prefix (and that's guaranteed),\r\n\t\t// and if a `format` does have a national prefix formatting rule,\r\n\t\t// then see if that national prefix formatting rule\r\n\t\t// prepends exactly the same national prefix the user has input.\r\n\t\t// If that's the case, then use the `format` with the national prefix formatting rule.\r\n\t\t// Otherwise, use the `format` without the national prefix formatting rule,\r\n\t\t// and prepend a national prefix manually to it.\r\n\t\tif (this.shouldTryNationalPrefixFormattingRule(format, { international, nationalPrefix })) {\r\n\t\t\tconst numberFormatWithNationalPrefix = numberFormat.replace(\r\n\t\t\t\tFIRST_GROUP_PATTERN,\r\n\t\t\t\tformat.nationalPrefixFormattingRule()\r\n\t\t\t)\r\n\t\t\t// If `national_prefix_formatting_rule` of a `format` simply prepends\r\n\t\t\t// national prefix at the start of a national (significant) number,\r\n\t\t\t// then such formatting can be used with `AsYouType` formatter.\r\n\t\t\t// There seems to be no `else` case: everywhere in metadata,\r\n\t\t\t// national prefix formatting rule is national prefix + $1,\r\n\t\t\t// or `($1)`, in which case such format isn't even considered\r\n\t\t\t// when the user has input a national prefix.\r\n\t\t\t/* istanbul ignore else */\r\n\t\t\tif (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\r\n\t\t\t\tnumberFormat = numberFormatWithNationalPrefix\r\n\t\t\t\tnationalPrefixIncludedInTemplate = true\r\n\t\t\t\t// Replace all digits of the national prefix in the formatting template\r\n\t\t\t\t// with `DIGIT_PLACEHOLDER`s.\r\n\t\t\t\tif (nationalPrefix) {\r\n\t\t\t\t\tlet i = nationalPrefix.length\r\n\t\t\t\t\twhile (i > 0) {\r\n\t\t\t\t\t\tnumberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER)\r\n\t\t\t\t\t\ti--\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Generate formatting template for this phone number format.\r\n\t\tlet template = digits\r\n\t\t\t// Format the dummy phone number according to the format.\r\n\t\t\t.replace(new RegExp(pattern), numberFormat)\r\n\t\t\t// Replace each dummy digit with a DIGIT_PLACEHOLDER.\r\n\t\t\t.replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER)\r\n\r\n\t\t// If a prefix of a national (significant) number is not as simple\r\n\t\t// as just a basic national prefix, then just prepend such prefix\r\n\t\t// before the national (significant) number, optionally spacing\r\n\t\t// the two with a whitespace.\r\n\t\tif (!nationalPrefixIncludedInTemplate) {\r\n\t\t\tif (complexPrefixBeforeNationalSignificantNumber) {\r\n\t\t\t\t// Prepend the prefix to the template manually.\r\n\t\t\t\ttemplate = repeat(DIGIT_PLACEHOLDER, complexPrefixBeforeNationalSignificantNumber.length) +\r\n\t\t\t\t\t' ' +\r\n\t\t\t\t\ttemplate\r\n\t\t\t} else if (nationalPrefix) {\r\n\t\t\t\t// Prepend national prefix to the template manually.\r\n\t\t\t\ttemplate = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) +\r\n\t\t\t\t\tthis.getSeparatorAfterNationalPrefix(format) +\r\n\t\t\t\t\ttemplate\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (international) {\r\n\t\t\ttemplate = applyInternationalSeparatorStyle(template)\r\n\t\t}\r\n\r\n\t\treturn template\r\n\t}\r\n\r\n\tformatNextNationalNumberDigits(digits) {\r\n\t\tconst result = populateTemplateWithDigits(\r\n\t\t\tthis.populatedNationalNumberTemplate,\r\n\t\t\tthis.populatedNationalNumberTemplatePosition,\r\n\t\t\tdigits\r\n\t\t)\r\n\r\n\t\tif (!result) {\r\n\t\t\t// Reset the format.\r\n\t\t\tthis.resetFormat()\r\n\t\t\treturn\r\n\t\t}\r\n\r\n\t\tthis.populatedNationalNumberTemplate = result[0]\r\n\t\tthis.populatedNationalNumberTemplatePosition = result[1]\r\n\r\n\t\t// Return the formatted phone number so far.\r\n\t\treturn cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\r\n\r\n\t\t// The old way which was good for `input-format` but is not so good\r\n\t\t// for `react-phone-number-input`'s default input (`InputBasic`).\r\n\t\t// return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\r\n\t\t// \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\r\n\t}\r\n\r\n\tshouldTryNationalPrefixFormattingRule = (format, { international, nationalPrefix }) => {\r\n\t\tif (format.nationalPrefixFormattingRule()) {\r\n\t\t\t// In some countries, `national_prefix_formatting_rule` is `($1)`,\r\n\t\t\t// so it applies even if the user hasn't input a national prefix.\r\n\t\t\t// `format.usesNationalPrefix()` detects such cases.\r\n\t\t\tconst usesNationalPrefix = format.usesNationalPrefix()\r\n\t\t\tif ((usesNationalPrefix && nationalPrefix) ||\r\n\t\t\t\t(!usesNationalPrefix && !international)) {\r\n\t\t\t\treturn true\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}"],"file":"AsYouTypeFormatter.js"}
\No newline at end of file