123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- import stripIddPrefix from './stripIddPrefix.js'
- import extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js'
- import Metadata from '../metadata.js'
- import { MAX_LENGTH_COUNTRY_CODE } from '../constants.js'
- export default function extractCountryCallingCode(
- number,
- country,
- callingCode,
- metadata
- ) {
- if (!number) {
- return {}
- }
- let isNumberWithIddPrefix
-
-
-
-
-
-
-
- if (number[0] !== '+') {
-
-
- const numberWithoutIDD = stripIddPrefix(number, country, callingCode, metadata)
-
-
-
- if (numberWithoutIDD && numberWithoutIDD !== number) {
- isNumberWithIddPrefix = true
- number = '+' + numberWithoutIDD
- } else {
-
-
-
-
- if (country || callingCode) {
- const {
- countryCallingCode,
- number: shorterNumber
- } = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(
- number,
- country,
- callingCode,
- metadata
- )
- if (countryCallingCode) {
- return {
- countryCallingCodeSource: 'FROM_NUMBER_WITHOUT_PLUS_SIGN',
- countryCallingCode,
- number: shorterNumber
- }
- }
- }
- return {
-
-
- number
- }
- }
- }
-
- if (number[1] === '0') {
- return {}
- }
- metadata = new Metadata(metadata)
-
-
-
-
-
-
-
-
-
- let i = 2
- while (i - 1 <= MAX_LENGTH_COUNTRY_CODE && i <= number.length) {
- const countryCallingCode = number.slice(1, i)
- if (metadata.hasCallingCode(countryCallingCode)) {
- metadata.selectNumberingPlan(countryCallingCode)
- return {
- countryCallingCodeSource: isNumberWithIddPrefix ? 'FROM_NUMBER_WITH_IDD' : 'FROM_NUMBER_WITH_PLUS_SIGN',
- countryCallingCode,
- number: number.slice(i)
- }
- }
- i++
- }
- return {}
- }
|