|  |  |  |  | "use strict"; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | Object.defineProperty(exports, "__esModule", { | 
					
						
							|  |  |  |  |   value: true | 
					
						
							|  |  |  |  | }); | 
					
						
							|  |  |  |  | exports["default"] = extractCountryCallingCode; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | var _stripIddPrefix = _interopRequireDefault(require("./stripIddPrefix.js")); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | var _extractCountryCallingCodeFromInternationalNumberWithoutPlusSign = _interopRequireDefault(require("./extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js")); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | var _metadata = _interopRequireDefault(require("../metadata.js")); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | var _constants = require("../constants.js"); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | /** | 
					
						
							|  |  |  |  |  * Converts a phone number digits (possibly with a `+`) | 
					
						
							|  |  |  |  |  * into a calling code and the rest phone number digits. | 
					
						
							|  |  |  |  |  * The "rest phone number digits" could include | 
					
						
							|  |  |  |  |  * a national prefix, carrier code, and national | 
					
						
							|  |  |  |  |  * (significant) number. | 
					
						
							|  |  |  |  |  * @param  {string} number — Phone number digits (possibly with a `+`). | 
					
						
							|  |  |  |  |  * @param  {string} [country] — Default country. | 
					
						
							|  |  |  |  |  * @param  {string} [callingCode] — Default calling code (some phone numbering plans are non-geographic). | 
					
						
							|  |  |  |  |  * @param  {object} metadata | 
					
						
							|  |  |  |  |  * @return {object} `{ countryCallingCode: string?, number: string }` | 
					
						
							|  |  |  |  |  * @example | 
					
						
							|  |  |  |  |  * // Returns `{ countryCallingCode: "1", number: "2133734253" }`.
 | 
					
						
							|  |  |  |  |  * extractCountryCallingCode('2133734253', 'US', null, metadata) | 
					
						
							|  |  |  |  |  * extractCountryCallingCode('2133734253', null, '1', metadata) | 
					
						
							|  |  |  |  |  * extractCountryCallingCode('+12133734253', null, null, metadata) | 
					
						
							|  |  |  |  |  * extractCountryCallingCode('+12133734253', 'RU', null, metadata) | 
					
						
							|  |  |  |  |  */ | 
					
						
							|  |  |  |  | function extractCountryCallingCode(number, country, callingCode, metadata) { | 
					
						
							|  |  |  |  |   if (!number) { | 
					
						
							|  |  |  |  |     return {}; | 
					
						
							|  |  |  |  |   } // If this is not an international phone number,
 | 
					
						
							|  |  |  |  |   // then either extract an "IDD" prefix, or extract a
 | 
					
						
							|  |  |  |  |   // country calling code from a number by autocorrecting it
 | 
					
						
							|  |  |  |  |   // by prepending a leading `+` in cases when it starts
 | 
					
						
							|  |  |  |  |   // with the country calling code.
 | 
					
						
							|  |  |  |  |   // https://wikitravel.org/en/International_dialling_prefix
 | 
					
						
							|  |  |  |  |   // https://github.com/catamphetamine/libphonenumber-js/issues/376
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   if (number[0] !== '+') { | 
					
						
							|  |  |  |  |     // Convert an "out-of-country" dialing phone number
 | 
					
						
							|  |  |  |  |     // to a proper international phone number.
 | 
					
						
							|  |  |  |  |     var numberWithoutIDD = (0, _stripIddPrefix["default"])(number, country, callingCode, metadata); // If an IDD prefix was stripped then
 | 
					
						
							|  |  |  |  |     // convert the number to international one
 | 
					
						
							|  |  |  |  |     // for subsequent parsing.
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     if (numberWithoutIDD && numberWithoutIDD !== number) { | 
					
						
							|  |  |  |  |       number = '+' + numberWithoutIDD; | 
					
						
							|  |  |  |  |     } else { | 
					
						
							|  |  |  |  |       // Check to see if the number starts with the country calling code
 | 
					
						
							|  |  |  |  |       // for the default country. If so, we remove the country calling code,
 | 
					
						
							|  |  |  |  |       // and do some checks on the validity of the number before and after.
 | 
					
						
							|  |  |  |  |       // https://github.com/catamphetamine/libphonenumber-js/issues/376
 | 
					
						
							|  |  |  |  |       if (country || callingCode) { | 
					
						
							|  |  |  |  |         var _extractCountryCallin = (0, _extractCountryCallingCodeFromInternationalNumberWithoutPlusSign["default"])(number, country, callingCode, metadata), | 
					
						
							|  |  |  |  |             countryCallingCode = _extractCountryCallin.countryCallingCode, | 
					
						
							|  |  |  |  |             shorterNumber = _extractCountryCallin.number; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |         if (countryCallingCode) { | 
					
						
							|  |  |  |  |           return { | 
					
						
							|  |  |  |  |             countryCallingCode: countryCallingCode, | 
					
						
							|  |  |  |  |             number: shorterNumber | 
					
						
							|  |  |  |  |           }; | 
					
						
							|  |  |  |  |         } | 
					
						
							|  |  |  |  |       } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |       return { | 
					
						
							|  |  |  |  |         number: number | 
					
						
							|  |  |  |  |       }; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  |   } // Fast abortion: country codes do not begin with a '0'
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   if (number[1] === '0') { | 
					
						
							|  |  |  |  |     return {}; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   metadata = new _metadata["default"](metadata); // The thing with country phone codes
 | 
					
						
							|  |  |  |  |   // is that they are orthogonal to each other
 | 
					
						
							|  |  |  |  |   // i.e. there's no such country phone code A
 | 
					
						
							|  |  |  |  |   // for which country phone code B exists
 | 
					
						
							|  |  |  |  |   // where B starts with A.
 | 
					
						
							|  |  |  |  |   // Therefore, while scanning digits,
 | 
					
						
							|  |  |  |  |   // if a valid country code is found,
 | 
					
						
							|  |  |  |  |   // that means that it is the country code.
 | 
					
						
							|  |  |  |  |   //
 | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   var i = 2; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   while (i - 1 <= _constants.MAX_LENGTH_COUNTRY_CODE && i <= number.length) { | 
					
						
							|  |  |  |  |     var _countryCallingCode = number.slice(1, i); | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     if (metadata.hasCallingCode(_countryCallingCode)) { | 
					
						
							|  |  |  |  |       metadata.selectNumberingPlan(_countryCallingCode); | 
					
						
							|  |  |  |  |       return { | 
					
						
							|  |  |  |  |         countryCallingCode: _countryCallingCode, | 
					
						
							|  |  |  |  |         number: number.slice(i) | 
					
						
							|  |  |  |  |       }; | 
					
						
							|  |  |  |  |     } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |     i++; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  |   return {}; | 
					
						
							|  |  |  |  | } | 
					
						
							|  |  |  |  | //# sourceMappingURL=extractCountryCallingCode.js.map
 |