1- import libphonenumber from 'google-libphonenumber' ;
2- const { PhoneNumberUtil, PhoneNumberFormat, AsYouTypeFormatter } = libphonenumber ;
1+ import { AsYouType , parsePhoneNumber } from 'libphonenumber-js/max' ;
32
43import type { PhoneNumberValue , RegionCode } from '../../types.js' ;
54
6- const phoneUtil = PhoneNumberUtil . getInstance ( ) ;
7-
85export function extractE164FromValue ( value : PhoneNumberValue ) {
96 return typeof value === 'object' && value !== null ? value . e164 : value || '' ;
107}
118
129export function parseE164ToNationalFormat ( e164PhoneNumber : string ) : { regionCode : RegionCode | null ; national : string } | null {
1310 try {
14- const number = phoneUtil . parse ( e164PhoneNumber ) ;
15- const regionCode = phoneUtil . getRegionCodeForNumber ( number ) || null ;
16- const national = phoneUtil . format ( number , PhoneNumberFormat . NATIONAL ) ;
11+ const phoneNumber = parsePhoneNumber ( e164PhoneNumber ) ;
12+
13+ const regionCode = phoneNumber . country || null ;
14+ const national = phoneNumber . formatNational ( ) ;
1715
1816 return { regionCode, national } ;
1917 } catch {
@@ -22,20 +20,18 @@ export function parseE164ToNationalFormat(e164PhoneNumber: string): { regionCode
2220}
2321
2422export function formatToNationalAsYouType ( input : string , regionCode : RegionCode ) {
25- const formatter = new AsYouTypeFormatter ( regionCode ) ;
26- let nationalFormat = '' ;
27- for ( const char of input . replace ( / \D / g, '' ) ) {
28- nationalFormat = formatter . inputDigit ( char ) ;
29- }
23+ const formatter = new AsYouType ( regionCode ) ;
24+ const nationalFormat = formatter . input ( input . replace ( / \D / g, '' ) ) ;
3025
3126 return nationalFormat ;
3227}
3328
3429export function convertToE164 ( nationalPhoneNumber : string , regionCode : RegionCode ) : { e164 : string ; detectedRegion : RegionCode | null } | null {
3530 try {
36- const number = phoneUtil . parseAndKeepRawInput ( nationalPhoneNumber , regionCode ) ;
37- const e164 = phoneUtil . format ( number , PhoneNumberFormat . E164 ) ;
38- const detectedRegion = phoneUtil . getRegionCodeForNumber ( number ) || null ;
31+ const phoneNumber = parsePhoneNumber ( nationalPhoneNumber , regionCode ) ;
32+
33+ const e164 = phoneNumber . number ;
34+ const detectedRegion = phoneNumber . country || null ;
3935
4036 return { e164, detectedRegion } ;
4137 } catch {
@@ -52,9 +48,10 @@ export function extractDigitsWithPlus(input: string) {
5248export function parseInternationalNumber ( input : string ) : { regionCode : RegionCode | null ; national : string } | null {
5349 try {
5450 const cleanInput = extractDigitsWithPlus ( input ) ;
55- const number = phoneUtil . parse ( cleanInput ) ;
56- const regionCode = phoneUtil . getRegionCodeForNumber ( number ) || null ;
57- const national = phoneUtil . format ( number , PhoneNumberFormat . NATIONAL ) ;
51+ const phoneNumber = parsePhoneNumber ( cleanInput ) ;
52+
53+ const regionCode = phoneNumber . country || null ;
54+ const national = phoneNumber . formatNational ( ) ;
5855
5956 return { regionCode, national } ;
6057 } catch {
0 commit comments