backend v4 half
This commit is contained in:
+18
@@ -0,0 +1,18 @@
|
||||
import PhoneNumberMatcher from '../PhoneNumberMatcher.js';
|
||||
import normalizeArguments from '../normalizeArguments.js';
|
||||
export default function findNumbers() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
text = _normalizeArguments.text,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata;
|
||||
|
||||
var matcher = new PhoneNumberMatcher(text, options, metadata);
|
||||
var results = [];
|
||||
|
||||
while (matcher.hasNext()) {
|
||||
results.push(matcher.next());
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
//# sourceMappingURL=findNumbers.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"findNumbers.js","names":["PhoneNumberMatcher","normalizeArguments","findNumbers","arguments","text","options","metadata","matcher","results","hasNext","push","next"],"sources":["../../source/legacy/findNumbers.js"],"sourcesContent":["import PhoneNumberMatcher from '../PhoneNumberMatcher.js'\r\nimport normalizeArguments from '../normalizeArguments.js'\r\n\r\nexport default function findNumbers() {\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\tconst matcher = new PhoneNumberMatcher(text, options, metadata)\r\n\tconst results = []\r\n\twhile (matcher.hasNext()) {\r\n\t\tresults.push(matcher.next())\r\n\t}\r\n\treturn results\r\n}"],"mappings":"AAAA,OAAOA,kBAAP,MAA+B,0BAA/B;AACA,OAAOC,kBAAP,MAA+B,0BAA/B;AAEA,eAAe,SAASC,WAAT,GAAuB;EACrC,0BAAoCD,kBAAkB,CAACE,SAAD,CAAtD;EAAA,IAAQC,IAAR,uBAAQA,IAAR;EAAA,IAAcC,OAAd,uBAAcA,OAAd;EAAA,IAAuBC,QAAvB,uBAAuBA,QAAvB;;EACA,IAAMC,OAAO,GAAG,IAAIP,kBAAJ,CAAuBI,IAAvB,EAA6BC,OAA7B,EAAsCC,QAAtC,CAAhB;EACA,IAAME,OAAO,GAAG,EAAhB;;EACA,OAAOD,OAAO,CAACE,OAAR,EAAP,EAA0B;IACzBD,OAAO,CAACE,IAAR,CAAaH,OAAO,CAACI,IAAR,EAAb;EACA;;EACD,OAAOH,OAAP;AACA"}
|
||||
Generated
Vendored
+188
@@ -0,0 +1,188 @@
|
||||
import findNumbers from './findNumbers.js';
|
||||
import metadata from '../../metadata.max.json' assert { type: 'json' };
|
||||
describe('findNumbers', function () {
|
||||
it('should find numbers', function () {
|
||||
findNumbers('2133734253', 'US', metadata).should.deep.equal([{
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 0,
|
||||
endsAt: 10
|
||||
}]);
|
||||
findNumbers('(213) 373-4253', 'US', metadata).should.deep.equal([{
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 0,
|
||||
endsAt: 14
|
||||
}]);
|
||||
findNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', 'US', metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}, {
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
}]); // Opening parenthesis issue.
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/252
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 (that\'s not even in the same country!) as written in the document.', 'US', metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}, {
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
}]); // No default country.
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 as written in the document.', metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}]); // Passing `options` and default country.
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 as written in the document.', 'US', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}]); // Passing `options`.
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 as written in the document.', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}]); // Not a phone number and a phone number.
|
||||
|
||||
findNumbers('Digits 12 are not a number, but +7 (800) 555-35-35 is.', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 32,
|
||||
endsAt: 50
|
||||
}]); // Phone number extension.
|
||||
|
||||
findNumbers('Date 02/17/2018 is not a number, but +7 (800) 555-35-35 ext. 123 is.', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
ext: '123',
|
||||
startsAt: 37,
|
||||
endsAt: 64
|
||||
}]);
|
||||
});
|
||||
it('should find numbers (v2)', function () {
|
||||
var phoneNumbers = findNumbers('The number is +7 (800) 555-35-35 ext. 1234 and not (213) 373-4253 as written in the document.', 'US', {
|
||||
v2: true
|
||||
}, metadata);
|
||||
phoneNumbers.length.should.equal(2);
|
||||
phoneNumbers[0].startsAt.should.equal(14);
|
||||
phoneNumbers[0].endsAt.should.equal(42);
|
||||
phoneNumbers[0].number.number.should.equal('+78005553535');
|
||||
phoneNumbers[0].number.nationalNumber.should.equal('8005553535');
|
||||
phoneNumbers[0].number.country.should.equal('RU');
|
||||
phoneNumbers[0].number.countryCallingCode.should.equal('7');
|
||||
phoneNumbers[0].number.ext.should.equal('1234');
|
||||
phoneNumbers[1].startsAt.should.equal(51);
|
||||
phoneNumbers[1].endsAt.should.equal(65);
|
||||
phoneNumbers[1].number.number.should.equal('+12133734253');
|
||||
phoneNumbers[1].number.nationalNumber.should.equal('2133734253');
|
||||
phoneNumbers[1].number.country.should.equal('US');
|
||||
phoneNumbers[1].number.countryCallingCode.should.equal('1');
|
||||
});
|
||||
it('shouldn\'t find non-valid numbers', function () {
|
||||
// Not a valid phone number for US.
|
||||
findNumbers('1111111111', 'US', metadata).should.deep.equal([]);
|
||||
});
|
||||
it('should find non-European digits', function () {
|
||||
// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
|
||||
findNumbers('العَرَبِيَّة +٤٤٣٣٣٣٣٣٣٣٣٣عَرَبِيّ', metadata).should.deep.equal([{
|
||||
country: 'GB',
|
||||
phone: '3333333333',
|
||||
startsAt: 14,
|
||||
endsAt: 27
|
||||
}]);
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
var thrower; // No input
|
||||
|
||||
findNumbers('', metadata).should.deep.equal([]); // // No country metadata for this `require` country code
|
||||
// thrower = () => findNumbers('123', 'ZZ', metadata)
|
||||
// thrower.should.throw('Unknown country')
|
||||
// Numerical `value`
|
||||
|
||||
thrower = function thrower() {
|
||||
return findNumbers(2141111111, 'US');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('A text for parsing must be a string.'); // // No metadata
|
||||
// thrower = () => findNumbers('')
|
||||
// thrower.should.throw('`metadata` argument not passed')
|
||||
// No metadata, no default country, no phone numbers.
|
||||
|
||||
findNumbers('').should.deep.equal([]);
|
||||
});
|
||||
it('should find international numbers when passed a non-existent default country', function () {
|
||||
var numbers = findNumbers('Phone: +7 (800) 555 35 35. National: 8 (800) 555-55-55', {
|
||||
defaultCountry: 'XX',
|
||||
v2: true
|
||||
}, metadata);
|
||||
numbers.length.should.equal(1);
|
||||
numbers[0].number.nationalNumber.should.equal('8005553535');
|
||||
});
|
||||
it('shouldn\'t find phone numbers which are not phone numbers', function () {
|
||||
// A timestamp.
|
||||
findNumbers('2012-01-02 08:00', 'US', metadata).should.deep.equal([]); // A valid number (not a complete timestamp).
|
||||
|
||||
findNumbers('2012-01-02 08', 'US', metadata).should.deep.equal([{
|
||||
country: 'US',
|
||||
phone: '2012010208',
|
||||
startsAt: 0,
|
||||
endsAt: 13
|
||||
}]); // Invalid parens.
|
||||
|
||||
findNumbers('213(3734253', 'US', metadata).should.deep.equal([]); // Letters after phone number.
|
||||
|
||||
findNumbers('2133734253a', 'US', metadata).should.deep.equal([]); // Valid phone (same as the one found in the UUID below).
|
||||
|
||||
findNumbers('The phone number is 231354125.', 'FR', metadata).should.deep.equal([{
|
||||
country: 'FR',
|
||||
phone: '231354125',
|
||||
startsAt: 20,
|
||||
endsAt: 29
|
||||
}]); // Not a phone number (part of a UUID).
|
||||
// Should parse in `{ extended: true }` mode.
|
||||
|
||||
var possibleNumbers = findNumbers('The UUID is CA801c26f98cd16e231354125ad046e40b.', 'FR', {
|
||||
extended: true
|
||||
}, metadata);
|
||||
possibleNumbers.length.should.equal(1);
|
||||
possibleNumbers[0].country.should.equal('FR');
|
||||
possibleNumbers[0].phone.should.equal('231354125'); // Not a phone number (part of a UUID).
|
||||
// Shouldn't parse by default.
|
||||
|
||||
findNumbers('The UUID is CA801c26f98cd16e231354125ad046e40b.', 'FR', metadata).should.deep.equal([]);
|
||||
}); // https://gitlab.com/catamphetamine/libphonenumber-js/-/merge_requests/4
|
||||
|
||||
it('should return correct `startsAt` and `endsAt` when matching "inner" candidates in a could-be-a-candidate substring', function () {
|
||||
findNumbers('39945926 77200596 16533084', 'ID', metadata).should.deep.equal([{
|
||||
country: 'ID',
|
||||
phone: '77200596',
|
||||
startsAt: 9,
|
||||
endsAt: 17
|
||||
}]);
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=findNumbers.test.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
Generated
Vendored
+25
@@ -0,0 +1,25 @@
|
||||
// This is a legacy function.
|
||||
// Use `findNumbers()` instead.
|
||||
import _findPhoneNumbers, { searchPhoneNumbers as _searchPhoneNumbers } from './findPhoneNumbersInitialImplementation.js';
|
||||
import normalizeArguments from '../normalizeArguments.js';
|
||||
export default function findPhoneNumbers() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
text = _normalizeArguments.text,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata;
|
||||
|
||||
return _findPhoneNumbers(text, options, metadata);
|
||||
}
|
||||
/**
|
||||
* @return ES6 `for ... of` iterator.
|
||||
*/
|
||||
|
||||
export function searchPhoneNumbers() {
|
||||
var _normalizeArguments2 = normalizeArguments(arguments),
|
||||
text = _normalizeArguments2.text,
|
||||
options = _normalizeArguments2.options,
|
||||
metadata = _normalizeArguments2.metadata;
|
||||
|
||||
return _searchPhoneNumbers(text, options, metadata);
|
||||
}
|
||||
//# sourceMappingURL=findPhoneNumbers.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"findPhoneNumbers.js","names":["_findPhoneNumbers","searchPhoneNumbers","_searchPhoneNumbers","normalizeArguments","findPhoneNumbers","arguments","text","options","metadata"],"sources":["../../source/legacy/findPhoneNumbers.js"],"sourcesContent":["// This is a legacy function.\r\n// Use `findNumbers()` instead.\r\n\r\nimport _findPhoneNumbers, { searchPhoneNumbers as _searchPhoneNumbers } from './findPhoneNumbersInitialImplementation.js'\r\nimport normalizeArguments from '../normalizeArguments.js'\r\n\r\nexport default function findPhoneNumbers()\r\n{\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\treturn _findPhoneNumbers(text, options, metadata)\r\n}\r\n\r\n/**\r\n * @return ES6 `for ... of` iterator.\r\n */\r\nexport function searchPhoneNumbers()\r\n{\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\treturn _searchPhoneNumbers(text, options, metadata)\r\n}"],"mappings":"AAAA;AACA;AAEA,OAAOA,iBAAP,IAA4BC,kBAAkB,IAAIC,mBAAlD,QAA6E,4CAA7E;AACA,OAAOC,kBAAP,MAA+B,0BAA/B;AAEA,eAAe,SAASC,gBAAT,GACf;EACC,0BAAoCD,kBAAkB,CAACE,SAAD,CAAtD;EAAA,IAAQC,IAAR,uBAAQA,IAAR;EAAA,IAAcC,OAAd,uBAAcA,OAAd;EAAA,IAAuBC,QAAvB,uBAAuBA,QAAvB;;EACA,OAAOR,iBAAiB,CAACM,IAAD,EAAOC,OAAP,EAAgBC,QAAhB,CAAxB;AACA;AAED;AACA;AACA;;AACA,OAAO,SAASP,kBAAT,GACP;EACC,2BAAoCE,kBAAkB,CAACE,SAAD,CAAtD;EAAA,IAAQC,IAAR,wBAAQA,IAAR;EAAA,IAAcC,OAAd,wBAAcA,OAAd;EAAA,IAAuBC,QAAvB,wBAAuBA,QAAvB;;EACA,OAAON,mBAAmB,CAACI,IAAD,EAAOC,OAAP,EAAgBC,QAAhB,CAA1B;AACA"}
|
||||
Generated
Vendored
+229
@@ -0,0 +1,229 @@
|
||||
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
||||
|
||||
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
||||
|
||||
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
||||
|
||||
// This is a legacy function.
|
||||
// Use `findNumbers()` instead.
|
||||
import findNumbers, { searchPhoneNumbers } from './findPhoneNumbers.js';
|
||||
import { PhoneNumberSearch } from './findPhoneNumbersInitialImplementation.js';
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
describe('findPhoneNumbers', function () {
|
||||
it('should find numbers', function () {
|
||||
findNumbers('2133734253', 'US', metadata).should.deep.equal([{
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 0,
|
||||
endsAt: 10
|
||||
}]);
|
||||
findNumbers('(213) 373-4253', 'US', metadata).should.deep.equal([{
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 0,
|
||||
endsAt: 14
|
||||
}]);
|
||||
findNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', 'US', metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}, {
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
}]); // Opening parenthesis issue.
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/252
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 (that\'s not even in the same country!) as written in the document.', 'US', metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}, {
|
||||
phone: '2133734253',
|
||||
country: 'US',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
}]); // No default country.
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 as written in the document.', metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}]); // Passing `options` and default country.
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 as written in the document.', 'US', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}]); // Passing `options`.
|
||||
|
||||
findNumbers('The number is +7 (800) 555-35-35 as written in the document.', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}]); // Not a phone number and a phone number.
|
||||
|
||||
findNumbers('Digits 12 are not a number, but +7 (800) 555-35-35 is.', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
startsAt: 32,
|
||||
endsAt: 50
|
||||
}]); // Phone number extension.
|
||||
|
||||
findNumbers('Date 02/17/2018 is not a number, but +7 (800) 555-35-35 ext. 123 is.', {
|
||||
leniency: 'VALID'
|
||||
}, metadata).should.deep.equal([{
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
ext: '123',
|
||||
startsAt: 37,
|
||||
endsAt: 64
|
||||
}]);
|
||||
});
|
||||
it('shouldn\'t find non-valid numbers', function () {
|
||||
// Not a valid phone number for US.
|
||||
findNumbers('1111111111', 'US', metadata).should.deep.equal([]);
|
||||
});
|
||||
it('should find non-European digits', function () {
|
||||
// E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
|
||||
findNumbers('العَرَبِيَّة +٤٤٣٣٣٣٣٣٣٣٣٣عَرَبِيّ', metadata).should.deep.equal([{
|
||||
country: 'GB',
|
||||
phone: '3333333333',
|
||||
startsAt: 14,
|
||||
endsAt: 27
|
||||
}]);
|
||||
});
|
||||
it('should iterate', function () {
|
||||
var expected_numbers = [{
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
// number : '+7 (800) 555-35-35',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}, {
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
// number : '(213) 373-4253',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
}];
|
||||
|
||||
for (var _iterator = _createForOfIteratorHelperLoose(searchPhoneNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', 'US', metadata)), _step; !(_step = _iterator()).done;) {
|
||||
var number = _step.value;
|
||||
number.should.deep.equal(expected_numbers.shift());
|
||||
}
|
||||
|
||||
expected_numbers.length.should.equal(0);
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
var thrower; // No input
|
||||
|
||||
findNumbers('', metadata).should.deep.equal([]); // No country metadata for this `require` country code
|
||||
|
||||
thrower = function thrower() {
|
||||
return findNumbers('123', 'ZZ', metadata);
|
||||
};
|
||||
|
||||
thrower.should["throw"]('Unknown country'); // Numerical `value`
|
||||
|
||||
thrower = function thrower() {
|
||||
return findNumbers(2141111111, 'US');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('A text for parsing must be a string.'); // // No metadata
|
||||
// thrower = () => findNumbers('')
|
||||
// thrower.should.throw('`metadata` argument not passed')
|
||||
});
|
||||
it('shouldn\'t find phone numbers which are not phone numbers', function () {
|
||||
// A timestamp.
|
||||
findNumbers('2012-01-02 08:00', 'US', metadata).should.deep.equal([]); // A valid number (not a complete timestamp).
|
||||
|
||||
findNumbers('2012-01-02 08', 'US', metadata).should.deep.equal([{
|
||||
country: 'US',
|
||||
phone: '2012010208',
|
||||
startsAt: 0,
|
||||
endsAt: 13
|
||||
}]); // Invalid parens.
|
||||
|
||||
findNumbers('213(3734253', 'US', metadata).should.deep.equal([]); // Letters after phone number.
|
||||
|
||||
findNumbers('2133734253a', 'US', metadata).should.deep.equal([]); // Valid phone (same as the one found in the UUID below).
|
||||
|
||||
findNumbers('The phone number is 231354125.', 'FR', metadata).should.deep.equal([{
|
||||
country: 'FR',
|
||||
phone: '231354125',
|
||||
startsAt: 20,
|
||||
endsAt: 29
|
||||
}]); // Not a phone number (part of a UUID).
|
||||
// Should parse in `{ extended: true }` mode.
|
||||
|
||||
var possibleNumbers = findNumbers('The UUID is CA801c26f98cd16e231354125ad046e40b.', 'FR', {
|
||||
extended: true
|
||||
}, metadata);
|
||||
possibleNumbers.length.should.equal(3);
|
||||
possibleNumbers[1].country.should.equal('FR');
|
||||
possibleNumbers[1].phone.should.equal('231354125'); // Not a phone number (part of a UUID).
|
||||
// Shouldn't parse by default.
|
||||
|
||||
findNumbers('The UUID is CA801c26f98cd16e231354125ad046e40b.', 'FR', metadata).should.deep.equal([]);
|
||||
});
|
||||
});
|
||||
describe('PhoneNumberSearch', function () {
|
||||
it('should search for phone numbers', function () {
|
||||
var finder = new PhoneNumberSearch('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', {
|
||||
defaultCountry: 'US'
|
||||
}, metadata);
|
||||
finder.hasNext().should.equal(true);
|
||||
finder.next().should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
// number : '+7 (800) 555-35-35',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
});
|
||||
finder.hasNext().should.equal(true);
|
||||
finder.next().should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
// number : '(213) 373-4253',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
});
|
||||
finder.hasNext().should.equal(false);
|
||||
});
|
||||
it('should search for phone numbers (no options)', function () {
|
||||
var finder = new PhoneNumberSearch('The number is +7 (800) 555-35-35', undefined, metadata);
|
||||
finder.hasNext().should.equal(true);
|
||||
finder.next().should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
// number : '+7 (800) 555-35-35',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
});
|
||||
finder.hasNext().should.equal(false);
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
// No options
|
||||
var search = new PhoneNumberSearch('', undefined, metadata); // No next element
|
||||
|
||||
var thrower = function thrower() {
|
||||
return search.next();
|
||||
};
|
||||
|
||||
thrower.should["throw"]('No next element');
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=findPhoneNumbers.test.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
Generated
Vendored
+201
@@ -0,0 +1,201 @@
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
||||
|
||||
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
||||
|
||||
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
||||
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
// This is a legacy function.
|
||||
// Use `findNumbers()` instead.
|
||||
import { PLUS_CHARS, VALID_PUNCTUATION, VALID_DIGITS, WHITESPACE } from '../constants.js';
|
||||
import parse from '../parse.js';
|
||||
import { VALID_PHONE_NUMBER_WITH_EXTENSION } from '../helpers/isViablePhoneNumber.js';
|
||||
import createExtensionPattern from '../helpers/extension/createExtensionPattern.js';
|
||||
import parsePreCandidate from '../findNumbers/parsePreCandidate.js';
|
||||
import isValidPreCandidate from '../findNumbers/isValidPreCandidate.js';
|
||||
import isValidCandidate from '../findNumbers/isValidCandidate.js';
|
||||
/**
|
||||
* Regexp of all possible ways to write extensions, for use when parsing. This
|
||||
* will be run as a case-insensitive regexp match. Wide character versions are
|
||||
* also provided after each ASCII version. There are three regular expressions
|
||||
* here. The first covers RFC 3966 format, where the extension is added using
|
||||
* ';ext='. The second more generic one starts with optional white space and
|
||||
* ends with an optional full stop (.), followed by zero or more spaces/tabs
|
||||
* /commas and then the numbers themselves. The other one covers the special
|
||||
* case of American numbers where the extension is written with a hash at the
|
||||
* end, such as '- 503#'. Note that the only capturing groups should be around
|
||||
* the digits that you want to capture as part of the extension, or else parsing
|
||||
* will fail! We allow two options for representing the accented o - the
|
||||
* character itself, and one in the unicode decomposed form with the combining
|
||||
* acute accent.
|
||||
*/
|
||||
|
||||
export var EXTN_PATTERNS_FOR_PARSING = createExtensionPattern('parsing');
|
||||
var WHITESPACE_IN_THE_BEGINNING_PATTERN = new RegExp('^[' + WHITESPACE + ']+');
|
||||
var PUNCTUATION_IN_THE_END_PATTERN = new RegExp('[' + VALID_PUNCTUATION + ']+$'); // // Regular expression for getting opening brackets for a valid number
|
||||
// // found using `PHONE_NUMBER_START_PATTERN` for prepending those brackets to the number.
|
||||
// const BEFORE_NUMBER_DIGITS_PUNCTUATION = new RegExp('[' + OPENING_BRACKETS + ']+' + '[' + WHITESPACE + ']*' + '$')
|
||||
|
||||
var VALID_PRECEDING_CHARACTER_PATTERN = /[^a-zA-Z0-9]/;
|
||||
export default function findPhoneNumbers(text, options, metadata) {
|
||||
/* istanbul ignore if */
|
||||
if (options === undefined) {
|
||||
options = {};
|
||||
}
|
||||
|
||||
var search = new PhoneNumberSearch(text, options, metadata);
|
||||
var phones = [];
|
||||
|
||||
while (search.hasNext()) {
|
||||
phones.push(search.next());
|
||||
}
|
||||
|
||||
return phones;
|
||||
}
|
||||
/**
|
||||
* @return ES6 `for ... of` iterator.
|
||||
*/
|
||||
|
||||
export function searchPhoneNumbers(text, options, metadata) {
|
||||
/* istanbul ignore if */
|
||||
if (options === undefined) {
|
||||
options = {};
|
||||
}
|
||||
|
||||
var search = new PhoneNumberSearch(text, options, metadata);
|
||||
return _defineProperty({}, Symbol.iterator, function () {
|
||||
return {
|
||||
next: function next() {
|
||||
if (search.hasNext()) {
|
||||
return {
|
||||
done: false,
|
||||
value: search.next()
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
done: true
|
||||
};
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Extracts a parseable phone number including any opening brackets, etc.
|
||||
* @param {string} text - Input.
|
||||
* @return {object} `{ ?number, ?startsAt, ?endsAt }`.
|
||||
*/
|
||||
|
||||
export var PhoneNumberSearch = /*#__PURE__*/function () {
|
||||
function PhoneNumberSearch(text, options, metadata) {
|
||||
_classCallCheck(this, PhoneNumberSearch);
|
||||
|
||||
this.text = text; // If assigning the `{}` default value is moved to the arguments above,
|
||||
// code coverage would decrease for some weird reason.
|
||||
|
||||
this.options = options || {};
|
||||
this.metadata = metadata; // Iteration tristate.
|
||||
|
||||
this.state = 'NOT_READY';
|
||||
this.regexp = new RegExp(VALID_PHONE_NUMBER_WITH_EXTENSION, 'ig');
|
||||
}
|
||||
|
||||
_createClass(PhoneNumberSearch, [{
|
||||
key: "find",
|
||||
value: function find() {
|
||||
var matches = this.regexp.exec(this.text);
|
||||
|
||||
if (!matches) {
|
||||
return;
|
||||
}
|
||||
|
||||
var number = matches[0];
|
||||
var startsAt = matches.index;
|
||||
number = number.replace(WHITESPACE_IN_THE_BEGINNING_PATTERN, '');
|
||||
startsAt += matches[0].length - number.length; // Fixes not parsing numbers with whitespace in the end.
|
||||
// Also fixes not parsing numbers with opening parentheses in the end.
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/252
|
||||
|
||||
number = number.replace(PUNCTUATION_IN_THE_END_PATTERN, '');
|
||||
number = parsePreCandidate(number);
|
||||
var result = this.parseCandidate(number, startsAt);
|
||||
|
||||
if (result) {
|
||||
return result;
|
||||
} // Tail recursion.
|
||||
// Try the next one if this one is not a valid phone number.
|
||||
|
||||
|
||||
return this.find();
|
||||
}
|
||||
}, {
|
||||
key: "parseCandidate",
|
||||
value: function parseCandidate(number, startsAt) {
|
||||
if (!isValidPreCandidate(number, startsAt, this.text)) {
|
||||
return;
|
||||
} // Don't parse phone numbers which are non-phone numbers
|
||||
// due to being part of something else (e.g. a UUID).
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/213
|
||||
// Copy-pasted from Google's `PhoneNumberMatcher.js` (`.parseAndValidate()`).
|
||||
|
||||
|
||||
if (!isValidCandidate(number, startsAt, this.text, this.options.extended ? 'POSSIBLE' : 'VALID')) {
|
||||
return;
|
||||
} // // Prepend any opening brackets left behind by the
|
||||
// // `PHONE_NUMBER_START_PATTERN` regexp.
|
||||
// const text_before_number = text.slice(this.searching_from, startsAt)
|
||||
// const full_number_starts_at = text_before_number.search(BEFORE_NUMBER_DIGITS_PUNCTUATION)
|
||||
// if (full_number_starts_at >= 0)
|
||||
// {
|
||||
// number = text_before_number.slice(full_number_starts_at) + number
|
||||
// startsAt = full_number_starts_at
|
||||
// }
|
||||
//
|
||||
// this.searching_from = matches.lastIndex
|
||||
|
||||
|
||||
var result = parse(number, this.options, this.metadata);
|
||||
|
||||
if (!result.phone) {
|
||||
return;
|
||||
}
|
||||
|
||||
result.startsAt = startsAt;
|
||||
result.endsAt = startsAt + number.length;
|
||||
return result;
|
||||
}
|
||||
}, {
|
||||
key: "hasNext",
|
||||
value: function hasNext() {
|
||||
if (this.state === 'NOT_READY') {
|
||||
this.last_match = this.find();
|
||||
|
||||
if (this.last_match) {
|
||||
this.state = 'READY';
|
||||
} else {
|
||||
this.state = 'DONE';
|
||||
}
|
||||
}
|
||||
|
||||
return this.state === 'READY';
|
||||
}
|
||||
}, {
|
||||
key: "next",
|
||||
value: function next() {
|
||||
// Check the state and find the next match as a side-effect if necessary.
|
||||
if (!this.hasNext()) {
|
||||
throw new Error('No next element');
|
||||
} // Don't retain that memory any longer than necessary.
|
||||
|
||||
|
||||
var result = this.last_match;
|
||||
this.last_match = null;
|
||||
this.state = 'NOT_READY';
|
||||
return result;
|
||||
}
|
||||
}]);
|
||||
|
||||
return PhoneNumberSearch;
|
||||
}();
|
||||
//# sourceMappingURL=findPhoneNumbersInitialImplementation.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
+107
@@ -0,0 +1,107 @@
|
||||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
||||
|
||||
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
||||
|
||||
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
||||
|
||||
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
||||
|
||||
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
||||
|
||||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
||||
|
||||
import _formatNumber from '../format.js';
|
||||
import parse from '../parse.js';
|
||||
import isObject from '../helpers/isObject.js';
|
||||
export default function formatNumber() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
input = _normalizeArguments.input,
|
||||
format = _normalizeArguments.format,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata;
|
||||
|
||||
return _formatNumber(input, format, options, metadata);
|
||||
} // Sort out arguments
|
||||
|
||||
function normalizeArguments(args) {
|
||||
var _Array$prototype$slic = Array.prototype.slice.call(args),
|
||||
_Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 5),
|
||||
arg_1 = _Array$prototype$slic2[0],
|
||||
arg_2 = _Array$prototype$slic2[1],
|
||||
arg_3 = _Array$prototype$slic2[2],
|
||||
arg_4 = _Array$prototype$slic2[3],
|
||||
arg_5 = _Array$prototype$slic2[4];
|
||||
|
||||
var input;
|
||||
var format;
|
||||
var options;
|
||||
var metadata; // Sort out arguments.
|
||||
// If the phone number is passed as a string.
|
||||
// `format('8005553535', ...)`.
|
||||
|
||||
if (typeof arg_1 === 'string') {
|
||||
// If country code is supplied.
|
||||
// `format('8005553535', 'RU', 'NATIONAL', [options], metadata)`.
|
||||
if (typeof arg_3 === 'string') {
|
||||
format = arg_3;
|
||||
|
||||
if (arg_5) {
|
||||
options = arg_4;
|
||||
metadata = arg_5;
|
||||
} else {
|
||||
metadata = arg_4;
|
||||
}
|
||||
|
||||
input = parse(arg_1, {
|
||||
defaultCountry: arg_2,
|
||||
extended: true
|
||||
}, metadata);
|
||||
} // Just an international phone number is supplied
|
||||
// `format('+78005553535', 'NATIONAL', [options], metadata)`.
|
||||
else {
|
||||
if (typeof arg_2 !== 'string') {
|
||||
throw new Error('`format` argument not passed to `formatNumber(number, format)`');
|
||||
}
|
||||
|
||||
format = arg_2;
|
||||
|
||||
if (arg_4) {
|
||||
options = arg_3;
|
||||
metadata = arg_4;
|
||||
} else {
|
||||
metadata = arg_3;
|
||||
}
|
||||
|
||||
input = parse(arg_1, {
|
||||
extended: true
|
||||
}, metadata);
|
||||
}
|
||||
} // If the phone number is passed as a parsed number object.
|
||||
// `format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', [options], metadata)`.
|
||||
else if (isObject(arg_1)) {
|
||||
input = arg_1;
|
||||
format = arg_2;
|
||||
|
||||
if (arg_4) {
|
||||
options = arg_3;
|
||||
metadata = arg_4;
|
||||
} else {
|
||||
metadata = arg_3;
|
||||
}
|
||||
} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.'); // Legacy lowercase formats.
|
||||
|
||||
|
||||
if (format === 'International') {
|
||||
format = 'INTERNATIONAL';
|
||||
} else if (format === 'National') {
|
||||
format = 'NATIONAL';
|
||||
}
|
||||
|
||||
return {
|
||||
input: input,
|
||||
format: format,
|
||||
options: options,
|
||||
metadata: metadata
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=format.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"format.js","names":["_formatNumber","parse","isObject","formatNumber","normalizeArguments","arguments","input","format","options","metadata","args","Array","prototype","slice","call","arg_1","arg_2","arg_3","arg_4","arg_5","defaultCountry","extended","Error","TypeError"],"sources":["../../source/legacy/format.js"],"sourcesContent":["import _formatNumber from '../format.js'\r\nimport parse from '../parse.js'\r\nimport isObject from '../helpers/isObject.js'\r\n\r\nexport default function formatNumber() {\r\n\tconst {\r\n\t\tinput,\r\n\t\tformat,\r\n\t\toptions,\r\n\t\tmetadata\r\n\t} = normalizeArguments(arguments)\r\n\r\n\treturn _formatNumber(input, format, options, metadata)\r\n}\r\n\r\n// Sort out arguments\r\nfunction normalizeArguments(args)\r\n{\r\n\tconst [arg_1, arg_2, arg_3, arg_4, arg_5] = Array.prototype.slice.call(args)\r\n\r\n\tlet input\r\n\tlet format\r\n\tlet options\r\n\tlet metadata\r\n\r\n\t// Sort out arguments.\r\n\r\n\t// If the phone number is passed as a string.\r\n\t// `format('8005553535', ...)`.\r\n\tif (typeof arg_1 === 'string')\r\n\t{\r\n\t\t// If country code is supplied.\r\n\t\t// `format('8005553535', 'RU', 'NATIONAL', [options], metadata)`.\r\n\t\tif (typeof arg_3 === 'string')\r\n\t\t{\r\n\t\t\tformat = arg_3\r\n\r\n\t\t\tif (arg_5)\r\n\t\t\t{\r\n\t\t\t\toptions = arg_4\r\n\t\t\t\tmetadata = arg_5\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tmetadata = arg_4\r\n\t\t\t}\r\n\r\n\t\t\tinput = parse(arg_1, { defaultCountry: arg_2, extended: true }, metadata)\r\n\t\t}\r\n\t\t// Just an international phone number is supplied\r\n\t\t// `format('+78005553535', 'NATIONAL', [options], metadata)`.\r\n\t\telse\r\n\t\t{\r\n\t\t\tif (typeof arg_2 !== 'string')\r\n\t\t\t{\r\n\t\t\t\tthrow new Error('`format` argument not passed to `formatNumber(number, format)`')\r\n\t\t\t}\r\n\r\n\t\t\tformat = arg_2\r\n\r\n\t\t\tif (arg_4)\r\n\t\t\t{\r\n\t\t\t\toptions = arg_3\r\n\t\t\t\tmetadata = arg_4\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tmetadata = arg_3\r\n\t\t\t}\r\n\r\n\t\t\tinput = parse(arg_1, { extended: true }, metadata)\r\n\t\t}\r\n\t}\r\n\t// If the phone number is passed as a parsed number object.\r\n\t// `format({ phone: '8005553535', country: 'RU' }, 'NATIONAL', [options], metadata)`.\r\n\telse if (isObject(arg_1))\r\n\t{\r\n\t\tinput = arg_1\r\n\t\tformat = arg_2\r\n\r\n\t\tif (arg_4)\r\n\t\t{\r\n\t\t\toptions = arg_3\r\n\t\t\tmetadata = arg_4\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tmetadata = arg_3\r\n\t\t}\r\n\t}\r\n\telse throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.')\r\n\r\n\t// Legacy lowercase formats.\r\n\tif (format === 'International') {\r\n\t\tformat = 'INTERNATIONAL'\r\n\t} else if (format === 'National') {\r\n\t\tformat = 'NATIONAL'\r\n\t}\r\n\r\n\treturn {\r\n\t\tinput,\r\n\t\tformat,\r\n\t\toptions,\r\n\t\tmetadata\r\n\t}\r\n}"],"mappings":";;;;;;;;;;;;AAAA,OAAOA,aAAP,MAA0B,cAA1B;AACA,OAAOC,KAAP,MAAkB,aAAlB;AACA,OAAOC,QAAP,MAAqB,wBAArB;AAEA,eAAe,SAASC,YAAT,GAAwB;EACtC,0BAKIC,kBAAkB,CAACC,SAAD,CALtB;EAAA,IACCC,KADD,uBACCA,KADD;EAAA,IAECC,MAFD,uBAECA,MAFD;EAAA,IAGCC,OAHD,uBAGCA,OAHD;EAAA,IAICC,QAJD,uBAICA,QAJD;;EAOA,OAAOT,aAAa,CAACM,KAAD,EAAQC,MAAR,EAAgBC,OAAhB,EAAyBC,QAAzB,CAApB;AACA,C,CAED;;AACA,SAASL,kBAAT,CAA4BM,IAA5B,EACA;EACC,4BAA4CC,KAAK,CAACC,SAAN,CAAgBC,KAAhB,CAAsBC,IAAtB,CAA2BJ,IAA3B,CAA5C;EAAA;EAAA,IAAOK,KAAP;EAAA,IAAcC,KAAd;EAAA,IAAqBC,KAArB;EAAA,IAA4BC,KAA5B;EAAA,IAAmCC,KAAnC;;EAEA,IAAIb,KAAJ;EACA,IAAIC,MAAJ;EACA,IAAIC,OAAJ;EACA,IAAIC,QAAJ,CAND,CAQC;EAEA;EACA;;EACA,IAAI,OAAOM,KAAP,KAAiB,QAArB,EACA;IACC;IACA;IACA,IAAI,OAAOE,KAAP,KAAiB,QAArB,EACA;MACCV,MAAM,GAAGU,KAAT;;MAEA,IAAIE,KAAJ,EACA;QACCX,OAAO,GAAIU,KAAX;QACAT,QAAQ,GAAGU,KAAX;MACA,CAJD,MAMA;QACCV,QAAQ,GAAGS,KAAX;MACA;;MAEDZ,KAAK,GAAGL,KAAK,CAACc,KAAD,EAAQ;QAAEK,cAAc,EAAEJ,KAAlB;QAAyBK,QAAQ,EAAE;MAAnC,CAAR,EAAmDZ,QAAnD,CAAb;IACA,CAfD,CAgBA;IACA;IAjBA,KAmBA;MACC,IAAI,OAAOO,KAAP,KAAiB,QAArB,EACA;QACC,MAAM,IAAIM,KAAJ,CAAU,gEAAV,CAAN;MACA;;MAEDf,MAAM,GAAGS,KAAT;;MAEA,IAAIE,KAAJ,EACA;QACCV,OAAO,GAAIS,KAAX;QACAR,QAAQ,GAAGS,KAAX;MACA,CAJD,MAMA;QACCT,QAAQ,GAAGQ,KAAX;MACA;;MAEDX,KAAK,GAAGL,KAAK,CAACc,KAAD,EAAQ;QAAEM,QAAQ,EAAE;MAAZ,CAAR,EAA4BZ,QAA5B,CAAb;IACA;EACD,CA3CD,CA4CA;EACA;EA7CA,KA8CK,IAAIP,QAAQ,CAACa,KAAD,CAAZ,EACL;IACCT,KAAK,GAAIS,KAAT;IACAR,MAAM,GAAGS,KAAT;;IAEA,IAAIE,KAAJ,EACA;MACCV,OAAO,GAAIS,KAAX;MACAR,QAAQ,GAAGS,KAAX;IACA,CAJD,MAMA;MACCT,QAAQ,GAAGQ,KAAX;IACA;EACD,CAdI,MAeA,MAAM,IAAIM,SAAJ,CAAc,oFAAd,CAAN,CAzEN,CA2EC;;;EACA,IAAIhB,MAAM,KAAK,eAAf,EAAgC;IAC/BA,MAAM,GAAG,eAAT;EACA,CAFD,MAEO,IAAIA,MAAM,KAAK,UAAf,EAA2B;IACjCA,MAAM,GAAG,UAAT;EACA;;EAED,OAAO;IACND,KAAK,EAALA,KADM;IAENC,MAAM,EAANA,MAFM;IAGNC,OAAO,EAAPA,OAHM;IAINC,QAAQ,EAARA;EAJM,CAAP;AAMA"}
|
||||
+279
@@ -0,0 +1,279 @@
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
import _formatNumber from './format.js';
|
||||
|
||||
function formatNumber() {
|
||||
for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
parameters[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
parameters.push(metadata);
|
||||
return _formatNumber.apply(this, parameters);
|
||||
}
|
||||
|
||||
describe('format', function () {
|
||||
it('should work with the first argument being a E.164 number', function () {
|
||||
formatNumber('+12133734253', 'NATIONAL').should.equal('(213) 373-4253');
|
||||
formatNumber('+12133734253', 'INTERNATIONAL').should.equal('+1 213 373 4253'); // Invalid number.
|
||||
|
||||
formatNumber('+12111111111', 'NATIONAL').should.equal('(211) 111-1111'); // Formatting invalid E.164 numbers.
|
||||
|
||||
formatNumber('+11111', 'INTERNATIONAL').should.equal('+1 1111');
|
||||
formatNumber('+11111', 'NATIONAL').should.equal('1111');
|
||||
});
|
||||
it('should work with the first object argument expanded', function () {
|
||||
formatNumber('2133734253', 'US', 'NATIONAL').should.equal('(213) 373-4253');
|
||||
formatNumber('2133734253', 'US', 'INTERNATIONAL').should.equal('+1 213 373 4253');
|
||||
});
|
||||
it('should support legacy "National" / "International" formats', function () {
|
||||
formatNumber('2133734253', 'US', 'National').should.equal('(213) 373-4253');
|
||||
formatNumber('2133734253', 'US', 'International').should.equal('+1 213 373 4253');
|
||||
});
|
||||
it('should format using formats with no leading digits (`format.leadingDigitsPatterns().length === 0`)', function () {
|
||||
formatNumber({
|
||||
phone: '12345678901',
|
||||
countryCallingCode: 888
|
||||
}, 'INTERNATIONAL').should.equal('+888 123 456 78901');
|
||||
});
|
||||
it('should sort out the arguments', function () {
|
||||
var options = {
|
||||
formatExtension: function formatExtension(number, extension) {
|
||||
return "".concat(number, " \u0434\u043E\u0431. ").concat(extension);
|
||||
}
|
||||
};
|
||||
formatNumber({
|
||||
phone: '8005553535',
|
||||
country: 'RU',
|
||||
ext: '123'
|
||||
}, 'NATIONAL', options).should.equal('8 (800) 555-35-35 доб. 123'); // Parse number from string.
|
||||
|
||||
formatNumber('+78005553535', 'NATIONAL', options).should.equal('8 (800) 555-35-35');
|
||||
formatNumber('8005553535', 'RU', 'NATIONAL', options).should.equal('8 (800) 555-35-35');
|
||||
});
|
||||
it('should format with national prefix when specifically instructed', function () {
|
||||
// With national prefix.
|
||||
formatNumber('88005553535', 'RU', 'NATIONAL').should.equal('8 (800) 555-35-35'); // Without national prefix via an explicitly set option.
|
||||
|
||||
formatNumber('88005553535', 'RU', 'NATIONAL', {
|
||||
nationalPrefix: false
|
||||
}).should.equal('800 555-35-35');
|
||||
});
|
||||
it('should format valid phone numbers', function () {
|
||||
// Switzerland
|
||||
formatNumber({
|
||||
country: 'CH',
|
||||
phone: '446681800'
|
||||
}, 'INTERNATIONAL').should.equal('+41 44 668 18 00');
|
||||
formatNumber({
|
||||
country: 'CH',
|
||||
phone: '446681800'
|
||||
}, 'E.164').should.equal('+41446681800');
|
||||
formatNumber({
|
||||
country: 'CH',
|
||||
phone: '446681800'
|
||||
}, 'RFC3966').should.equal('tel:+41446681800');
|
||||
formatNumber({
|
||||
country: 'CH',
|
||||
phone: '446681800'
|
||||
}, 'NATIONAL').should.equal('044 668 18 00'); // France
|
||||
|
||||
formatNumber({
|
||||
country: 'FR',
|
||||
phone: '169454850'
|
||||
}, 'NATIONAL').should.equal('01 69 45 48 50'); // Kazakhstan
|
||||
|
||||
formatNumber('+7 702 211 1111', 'NATIONAL').should.deep.equal('8 (702) 211 1111');
|
||||
});
|
||||
it('should format national numbers with national prefix even if it\'s optional', function () {
|
||||
// Russia
|
||||
formatNumber({
|
||||
country: 'RU',
|
||||
phone: '9991234567'
|
||||
}, 'NATIONAL').should.equal('8 (999) 123-45-67');
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
var thrower; // No phone number
|
||||
|
||||
formatNumber('', 'RU', 'INTERNATIONAL').should.equal('');
|
||||
formatNumber('', 'RU', 'NATIONAL').should.equal('');
|
||||
formatNumber({
|
||||
country: 'RU',
|
||||
phone: ''
|
||||
}, 'INTERNATIONAL').should.equal('+7');
|
||||
formatNumber({
|
||||
country: 'RU',
|
||||
phone: ''
|
||||
}, 'NATIONAL').should.equal(''); // No suitable format
|
||||
|
||||
formatNumber('+121337342530', 'US', 'NATIONAL').should.equal('21337342530'); // No suitable format (leading digits mismatch)
|
||||
|
||||
formatNumber('28199999', 'AD', 'NATIONAL').should.equal('28199999'); // Numerical `value`
|
||||
|
||||
thrower = function thrower() {
|
||||
return formatNumber(89150000000, 'RU', 'NATIONAL');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('A phone number must either be a string or an object of shape { phone, [country] }.'); // No metadata for country
|
||||
|
||||
expect(function () {
|
||||
return formatNumber('+121337342530', 'USA', 'NATIONAL');
|
||||
}).to["throw"]('Unknown country');
|
||||
expect(function () {
|
||||
return formatNumber('21337342530', 'USA', 'NATIONAL');
|
||||
}).to["throw"]('Unknown country'); // No format type
|
||||
|
||||
thrower = function thrower() {
|
||||
return formatNumber('+123');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('`format` argument not passed'); // Unknown format type
|
||||
|
||||
thrower = function thrower() {
|
||||
return formatNumber('123', 'US', 'Gay');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('Unknown "format" argument'); // No metadata
|
||||
|
||||
thrower = function thrower() {
|
||||
return _formatNumber('123', 'US', 'E.164');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('`metadata`'); // No formats
|
||||
|
||||
formatNumber('012345', 'AC', 'NATIONAL').should.equal('012345'); // No `fromCountry` for `IDD` format.
|
||||
|
||||
expect(formatNumber('+78005553535', 'IDD')).to.be.undefined; // `fromCountry` has no default IDD prefix.
|
||||
|
||||
expect(formatNumber('+78005553535', 'IDD', {
|
||||
fromCountry: 'BO'
|
||||
})).to.be.undefined; // No such country.
|
||||
|
||||
expect(function () {
|
||||
return formatNumber({
|
||||
phone: '123',
|
||||
country: 'USA'
|
||||
}, 'NATIONAL');
|
||||
}).to["throw"]('Unknown country');
|
||||
});
|
||||
it('should format phone number extensions', function () {
|
||||
// National
|
||||
formatNumber({
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
ext: '123'
|
||||
}, 'NATIONAL').should.equal('(213) 373-4253 ext. 123'); // International
|
||||
|
||||
formatNumber({
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
ext: '123'
|
||||
}, 'INTERNATIONAL').should.equal('+1 213 373 4253 ext. 123'); // International
|
||||
|
||||
formatNumber({
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
ext: '123'
|
||||
}, 'INTERNATIONAL').should.equal('+1 213 373 4253 ext. 123'); // E.164
|
||||
|
||||
formatNumber({
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
ext: '123'
|
||||
}, 'E.164').should.equal('+12133734253'); // RFC3966
|
||||
|
||||
formatNumber({
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
ext: '123'
|
||||
}, 'RFC3966').should.equal('tel:+12133734253;ext=123'); // Custom ext prefix.
|
||||
|
||||
formatNumber({
|
||||
country: 'GB',
|
||||
phone: '7912345678',
|
||||
ext: '123'
|
||||
}, 'INTERNATIONAL').should.equal('+44 7912 345678 x123');
|
||||
});
|
||||
it('should work with Argentina numbers', function () {
|
||||
// The same mobile number is written differently
|
||||
// in different formats in Argentina:
|
||||
// `9` gets prepended in international format.
|
||||
formatNumber({
|
||||
country: 'AR',
|
||||
phone: '3435551212'
|
||||
}, 'INTERNATIONAL').should.equal('+54 3435 55 1212');
|
||||
formatNumber({
|
||||
country: 'AR',
|
||||
phone: '3435551212'
|
||||
}, 'NATIONAL').should.equal('03435 55-1212');
|
||||
});
|
||||
it('should work with Mexico numbers', function () {
|
||||
// Fixed line.
|
||||
formatNumber({
|
||||
country: 'MX',
|
||||
phone: '4499780001'
|
||||
}, 'INTERNATIONAL').should.equal('+52 449 978 0001');
|
||||
formatNumber({
|
||||
country: 'MX',
|
||||
phone: '4499780001'
|
||||
}, 'NATIONAL').should.equal('449 978 0001'); // or '(449)978-0001'.
|
||||
// Mobile.
|
||||
// `1` is prepended before area code to mobile numbers in international format.
|
||||
|
||||
formatNumber({
|
||||
country: 'MX',
|
||||
phone: '3312345678'
|
||||
}, 'INTERNATIONAL').should.equal('+52 33 1234 5678');
|
||||
formatNumber({
|
||||
country: 'MX',
|
||||
phone: '3312345678'
|
||||
}, 'NATIONAL').should.equal('33 1234 5678'); // or '045 33 1234-5678'.
|
||||
});
|
||||
it('should format possible numbers', function () {
|
||||
formatNumber({
|
||||
countryCallingCode: '7',
|
||||
phone: '1111111111'
|
||||
}, 'E.164').should.equal('+71111111111');
|
||||
formatNumber({
|
||||
countryCallingCode: '7',
|
||||
phone: '1111111111'
|
||||
}, 'NATIONAL').should.equal('1111111111');
|
||||
formatNumber({
|
||||
countryCallingCode: '7',
|
||||
phone: '1111111111'
|
||||
}, 'INTERNATIONAL').should.equal('+7 1111111111');
|
||||
});
|
||||
it('should format IDD-prefixed number', function () {
|
||||
// No `fromCountry`.
|
||||
expect(formatNumber('+78005553535', 'IDD')).to.be.undefined; // No default IDD prefix.
|
||||
|
||||
expect(formatNumber('+78005553535', 'IDD', {
|
||||
fromCountry: 'BO'
|
||||
})).to.be.undefined; // Same country calling code.
|
||||
|
||||
formatNumber('+12133734253', 'IDD', {
|
||||
fromCountry: 'CA',
|
||||
humanReadable: true
|
||||
}).should.equal('1 (213) 373-4253');
|
||||
formatNumber('+78005553535', 'IDD', {
|
||||
fromCountry: 'KZ',
|
||||
humanReadable: true
|
||||
}).should.equal('8 (800) 555-35-35'); // formatNumber('+78005553535', 'IDD', { fromCountry: 'US' }).should.equal('01178005553535')
|
||||
|
||||
formatNumber('+78005553535', 'IDD', {
|
||||
fromCountry: 'US',
|
||||
humanReadable: true
|
||||
}).should.equal('011 7 800 555 35 35');
|
||||
});
|
||||
it('should format non-geographic numbering plan phone numbers', function () {
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/323
|
||||
formatNumber('+870773111632', 'INTERNATIONAL').should.equal('+870 773 111 632');
|
||||
formatNumber('+870773111632', 'NATIONAL').should.equal('773 111 632');
|
||||
});
|
||||
it('should use the default IDD prefix when formatting a phone number', function () {
|
||||
// Testing preferred international prefixes with ~ are supported.
|
||||
// ("~" designates waiting on a line until proceeding with the input).
|
||||
formatNumber('+390236618300', 'IDD', {
|
||||
fromCountry: 'BY'
|
||||
}).should.equal('8~10 39 02 3661 8300');
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=format.test.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+110
@@ -0,0 +1,110 @@
|
||||
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
||||
|
||||
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
||||
|
||||
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
||||
|
||||
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
||||
|
||||
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
||||
|
||||
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
||||
|
||||
import isViablePhoneNumber from '../helpers/isViablePhoneNumber.js';
|
||||
import _getNumberType from '../helpers/getNumberType.js';
|
||||
import isObject from '../helpers/isObject.js';
|
||||
import parse from '../parse.js'; // Finds out national phone number type (fixed line, mobile, etc)
|
||||
|
||||
export default function getNumberType() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
input = _normalizeArguments.input,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata; // `parseNumber()` would return `{}` when no phone number could be parsed from the input.
|
||||
|
||||
|
||||
if (!input.phone) {
|
||||
return;
|
||||
}
|
||||
|
||||
return _getNumberType(input, options, metadata);
|
||||
} // Sort out arguments
|
||||
|
||||
export function normalizeArguments(args) {
|
||||
var _Array$prototype$slic = Array.prototype.slice.call(args),
|
||||
_Array$prototype$slic2 = _slicedToArray(_Array$prototype$slic, 4),
|
||||
arg_1 = _Array$prototype$slic2[0],
|
||||
arg_2 = _Array$prototype$slic2[1],
|
||||
arg_3 = _Array$prototype$slic2[2],
|
||||
arg_4 = _Array$prototype$slic2[3];
|
||||
|
||||
var input;
|
||||
var options = {};
|
||||
var metadata; // If the phone number is passed as a string.
|
||||
// `getNumberType('88005553535', ...)`.
|
||||
|
||||
if (typeof arg_1 === 'string') {
|
||||
// If "default country" argument is being passed
|
||||
// then convert it to an `options` object.
|
||||
// `getNumberType('88005553535', 'RU', metadata)`.
|
||||
if (!isObject(arg_2)) {
|
||||
if (arg_4) {
|
||||
options = arg_3;
|
||||
metadata = arg_4;
|
||||
} else {
|
||||
metadata = arg_3;
|
||||
} // `parse` extracts phone numbers from raw text,
|
||||
// therefore it will cut off all "garbage" characters,
|
||||
// while this `validate` function needs to verify
|
||||
// that the phone number contains no "garbage"
|
||||
// therefore the explicit `isViablePhoneNumber` check.
|
||||
|
||||
|
||||
if (isViablePhoneNumber(arg_1)) {
|
||||
input = parse(arg_1, {
|
||||
defaultCountry: arg_2
|
||||
}, metadata);
|
||||
} else {
|
||||
input = {};
|
||||
}
|
||||
} // No "resrict country" argument is being passed.
|
||||
// International phone number is passed.
|
||||
// `getNumberType('+78005553535', metadata)`.
|
||||
else {
|
||||
if (arg_3) {
|
||||
options = arg_2;
|
||||
metadata = arg_3;
|
||||
} else {
|
||||
metadata = arg_2;
|
||||
} // `parse` extracts phone numbers from raw text,
|
||||
// therefore it will cut off all "garbage" characters,
|
||||
// while this `validate` function needs to verify
|
||||
// that the phone number contains no "garbage"
|
||||
// therefore the explicit `isViablePhoneNumber` check.
|
||||
|
||||
|
||||
if (isViablePhoneNumber(arg_1)) {
|
||||
input = parse(arg_1, undefined, metadata);
|
||||
} else {
|
||||
input = {};
|
||||
}
|
||||
}
|
||||
} // If the phone number is passed as a parsed phone number.
|
||||
// `getNumberType({ phone: '88005553535', country: 'RU' }, ...)`.
|
||||
else if (isObject(arg_1)) {
|
||||
input = arg_1;
|
||||
|
||||
if (arg_3) {
|
||||
options = arg_2;
|
||||
metadata = arg_3;
|
||||
} else {
|
||||
metadata = arg_2;
|
||||
}
|
||||
} else throw new TypeError('A phone number must either be a string or an object of shape { phone, [country] }.');
|
||||
|
||||
return {
|
||||
input: input,
|
||||
options: options,
|
||||
metadata: metadata
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=getNumberType.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
Generated
Vendored
+75
@@ -0,0 +1,75 @@
|
||||
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
||||
|
||||
import metadata from '../../metadata.max.json' assert { type: 'json' };
|
||||
import Metadata from '../metadata.js';
|
||||
import _getNumberType from './getNumberType.js';
|
||||
|
||||
function getNumberType() {
|
||||
for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
parameters[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
parameters.push(metadata);
|
||||
return _getNumberType.apply(this, parameters);
|
||||
}
|
||||
|
||||
describe('getNumberType', function () {
|
||||
it('should infer phone number type MOBILE', function () {
|
||||
getNumberType('9150000000', 'RU').should.equal('MOBILE');
|
||||
getNumberType('7912345678', 'GB').should.equal('MOBILE');
|
||||
getNumberType('51234567', 'EE').should.equal('MOBILE');
|
||||
});
|
||||
it('should infer phone number types', function () {
|
||||
getNumberType('88005553535', 'RU').should.equal('TOLL_FREE');
|
||||
getNumberType('8005553535', 'RU').should.equal('TOLL_FREE');
|
||||
getNumberType('4957777777', 'RU').should.equal('FIXED_LINE');
|
||||
getNumberType('8030000000', 'RU').should.equal('PREMIUM_RATE');
|
||||
getNumberType('2133734253', 'US').should.equal('FIXED_LINE_OR_MOBILE');
|
||||
getNumberType('5002345678', 'US').should.equal('PERSONAL_NUMBER');
|
||||
});
|
||||
it('should work when no country is passed', function () {
|
||||
getNumberType('+79150000000').should.equal('MOBILE');
|
||||
});
|
||||
it('should return FIXED_LINE_OR_MOBILE when there is ambiguity', function () {// (no such country in the metadata, therefore no unit test for this `if`)
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
var thrower; // // No metadata
|
||||
// thrower = () => _getNumberType({ phone: '+78005553535' })
|
||||
// thrower.should.throw('`metadata` argument not passed')
|
||||
// Parsed phone number
|
||||
|
||||
getNumberType({
|
||||
phone: '8005553535',
|
||||
country: 'RU'
|
||||
}).should.equal('TOLL_FREE'); // Invalid phone number
|
||||
|
||||
type(getNumberType('123', 'RU')).should.equal('undefined'); // Invalid country
|
||||
|
||||
thrower = function thrower() {
|
||||
return getNumberType({
|
||||
phone: '8005553535',
|
||||
country: 'RUS'
|
||||
});
|
||||
};
|
||||
|
||||
thrower.should["throw"]('Unknown country'); // Numerical `value`
|
||||
|
||||
thrower = function thrower() {
|
||||
return getNumberType(89150000000, 'RU');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('A phone number must either be a string or an object of shape { phone, [country] }.'); // When `options` argument is passed.
|
||||
|
||||
getNumberType('8005553535', 'RU', {}).should.equal('TOLL_FREE');
|
||||
getNumberType('+78005553535', {}).should.equal('TOLL_FREE');
|
||||
getNumberType({
|
||||
phone: '8005553535',
|
||||
country: 'RU'
|
||||
}, {}).should.equal('TOLL_FREE');
|
||||
});
|
||||
});
|
||||
|
||||
function type(something) {
|
||||
return _typeof(something);
|
||||
}
|
||||
//# sourceMappingURL=getNumberType.test.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
Generated
Vendored
+31
@@ -0,0 +1,31 @@
|
||||
import { normalizeArguments } from './getNumberType.js';
|
||||
import _isPossibleNumber from '../isPossible.js';
|
||||
/**
|
||||
* Checks if a given phone number is possible.
|
||||
* Which means it only checks phone number length
|
||||
* and doesn't test any regular expressions.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* ```js
|
||||
* isPossibleNumber('+78005553535', metadata)
|
||||
* isPossibleNumber('8005553535', 'RU', metadata)
|
||||
* isPossibleNumber('88005553535', 'RU', metadata)
|
||||
* isPossibleNumber({ phone: '8005553535', country: 'RU' }, metadata)
|
||||
* ```
|
||||
*/
|
||||
|
||||
export default function isPossibleNumber() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
input = _normalizeArguments.input,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata; // `parseNumber()` would return `{}` when no phone number could be parsed from the input.
|
||||
|
||||
|
||||
if (!input.phone && !(options && options.v2)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return _isPossibleNumber(input, options, metadata);
|
||||
}
|
||||
//# sourceMappingURL=isPossibleNumber.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"isPossibleNumber.js","names":["normalizeArguments","_isPossibleNumber","isPossibleNumber","arguments","input","options","metadata","phone","v2"],"sources":["../../source/legacy/isPossibleNumber.js"],"sourcesContent":["import { normalizeArguments } from './getNumberType.js'\r\nimport _isPossibleNumber from '../isPossible.js'\r\n\r\n/**\r\n * Checks if a given phone number is possible.\r\n * Which means it only checks phone number length\r\n * and doesn't test any regular expressions.\r\n *\r\n * Examples:\r\n *\r\n * ```js\r\n * isPossibleNumber('+78005553535', metadata)\r\n * isPossibleNumber('8005553535', 'RU', metadata)\r\n * isPossibleNumber('88005553535', 'RU', metadata)\r\n * isPossibleNumber({ phone: '8005553535', country: 'RU' }, metadata)\r\n * ```\r\n */\r\nexport default function isPossibleNumber() {\r\n\tconst { input, options, metadata } = normalizeArguments(arguments)\r\n\t// `parseNumber()` would return `{}` when no phone number could be parsed from the input.\r\n\tif (!input.phone && !(options && options.v2)) {\r\n\t\treturn false\r\n\t}\r\n\treturn _isPossibleNumber(input, options, metadata)\r\n}"],"mappings":"AAAA,SAASA,kBAAT,QAAmC,oBAAnC;AACA,OAAOC,iBAAP,MAA8B,kBAA9B;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,gBAAT,GAA4B;EAC1C,0BAAqCF,kBAAkB,CAACG,SAAD,CAAvD;EAAA,IAAQC,KAAR,uBAAQA,KAAR;EAAA,IAAeC,OAAf,uBAAeA,OAAf;EAAA,IAAwBC,QAAxB,uBAAwBA,QAAxB,CAD0C,CAE1C;;;EACA,IAAI,CAACF,KAAK,CAACG,KAAP,IAAgB,EAAEF,OAAO,IAAIA,OAAO,CAACG,EAArB,CAApB,EAA8C;IAC7C,OAAO,KAAP;EACA;;EACD,OAAOP,iBAAiB,CAACG,KAAD,EAAQC,OAAR,EAAiBC,QAAjB,CAAxB;AACA"}
|
||||
Generated
Vendored
+78
@@ -0,0 +1,78 @@
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
import _isPossibleNumber from './isPossibleNumber.js';
|
||||
|
||||
function isPossibleNumber() {
|
||||
for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
parameters[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
parameters.push(metadata);
|
||||
return _isPossibleNumber.apply(this, parameters);
|
||||
}
|
||||
|
||||
describe('isPossibleNumber', function () {
|
||||
it('should work', function () {
|
||||
isPossibleNumber('+79992223344').should.equal(true);
|
||||
isPossibleNumber({
|
||||
phone: '1112223344',
|
||||
country: 'RU'
|
||||
}).should.equal(true);
|
||||
isPossibleNumber({
|
||||
phone: '111222334',
|
||||
country: 'RU'
|
||||
}).should.equal(false);
|
||||
isPossibleNumber({
|
||||
phone: '11122233445',
|
||||
country: 'RU'
|
||||
}).should.equal(false);
|
||||
isPossibleNumber({
|
||||
phone: '1112223344',
|
||||
countryCallingCode: 7
|
||||
}).should.equal(true);
|
||||
});
|
||||
it('should work v2', function () {
|
||||
isPossibleNumber({
|
||||
nationalNumber: '111222334',
|
||||
countryCallingCode: 7
|
||||
}, {
|
||||
v2: true
|
||||
}).should.equal(false);
|
||||
isPossibleNumber({
|
||||
nationalNumber: '1112223344',
|
||||
countryCallingCode: 7
|
||||
}, {
|
||||
v2: true
|
||||
}).should.equal(true);
|
||||
isPossibleNumber({
|
||||
nationalNumber: '11122233445',
|
||||
countryCallingCode: 7
|
||||
}, {
|
||||
v2: true
|
||||
}).should.equal(false);
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
// Invalid `PhoneNumber` argument.
|
||||
expect(function () {
|
||||
return isPossibleNumber({}, {
|
||||
v2: true
|
||||
});
|
||||
}).to["throw"]('Invalid phone number object passed'); // Empty input is passed.
|
||||
// This is just to support `isValidNumber({})`
|
||||
// for cases when `parseNumber()` returns `{}`.
|
||||
|
||||
isPossibleNumber({}).should.equal(false);
|
||||
expect(function () {
|
||||
return isPossibleNumber({
|
||||
phone: '1112223344'
|
||||
});
|
||||
}).to["throw"]('Invalid phone number object passed'); // Incorrect country.
|
||||
|
||||
expect(function () {
|
||||
return isPossibleNumber({
|
||||
phone: '1112223344',
|
||||
country: 'XX'
|
||||
});
|
||||
}).to["throw"]('Unknown country');
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=isPossibleNumber.test.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"isPossibleNumber.test.js","names":["metadata","type","_isPossibleNumber","isPossibleNumber","parameters","push","apply","describe","it","should","equal","phone","country","countryCallingCode","nationalNumber","v2","expect","to"],"sources":["../../source/legacy/isPossibleNumber.test.js"],"sourcesContent":["import metadata from '../../metadata.min.json' assert { type: 'json' }\r\nimport _isPossibleNumber from './isPossibleNumber.js'\r\n\r\nfunction isPossibleNumber(...parameters) {\r\n\tparameters.push(metadata)\r\n\treturn _isPossibleNumber.apply(this, parameters)\r\n}\r\n\r\ndescribe('isPossibleNumber', () => {\r\n\tit('should work', function()\r\n\t{\r\n\t\tisPossibleNumber('+79992223344').should.equal(true)\r\n\r\n\t\tisPossibleNumber({ phone: '1112223344', country: 'RU' }).should.equal(true)\r\n\t\tisPossibleNumber({ phone: '111222334', country: 'RU' }).should.equal(false)\r\n\t\tisPossibleNumber({ phone: '11122233445', country: 'RU' }).should.equal(false)\r\n\r\n\t\tisPossibleNumber({ phone: '1112223344', countryCallingCode: 7 }).should.equal(true)\r\n\t})\r\n\r\n\tit('should work v2', () => {\r\n\t\tisPossibleNumber({ nationalNumber: '111222334', countryCallingCode: 7 }, { v2: true }).should.equal(false)\r\n\t\tisPossibleNumber({ nationalNumber: '1112223344', countryCallingCode: 7 }, { v2: true }).should.equal(true)\r\n\t\tisPossibleNumber({ nationalNumber: '11122233445', countryCallingCode: 7 }, { v2: true }).should.equal(false)\r\n\t})\r\n\r\n\tit('should work in edge cases', () => {\r\n\t\t// Invalid `PhoneNumber` argument.\r\n\t\texpect(() => isPossibleNumber({}, { v2: true })).to.throw('Invalid phone number object passed')\r\n\r\n\t\t// Empty input is passed.\r\n\t\t// This is just to support `isValidNumber({})`\r\n\t\t// for cases when `parseNumber()` returns `{}`.\r\n\t\tisPossibleNumber({}).should.equal(false)\r\n\t\texpect(() => isPossibleNumber({ phone: '1112223344' })).to.throw('Invalid phone number object passed')\r\n\r\n\t\t// Incorrect country.\r\n\t\texpect(() => isPossibleNumber({ phone: '1112223344', country: 'XX' })).to.throw('Unknown country')\r\n\t})\r\n})"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,yBAArB,UAAwDC,IAAI,EAAE,MAA9D;AACA,OAAOC,iBAAP,MAA8B,uBAA9B;;AAEA,SAASC,gBAAT,GAAyC;EAAA,kCAAZC,UAAY;IAAZA,UAAY;EAAA;;EACxCA,UAAU,CAACC,IAAX,CAAgBL,QAAhB;EACA,OAAOE,iBAAiB,CAACI,KAAlB,CAAwB,IAAxB,EAA8BF,UAA9B,CAAP;AACA;;AAEDG,QAAQ,CAAC,kBAAD,EAAqB,YAAM;EAClCC,EAAE,CAAC,aAAD,EAAgB,YAClB;IACCL,gBAAgB,CAAC,cAAD,CAAhB,CAAiCM,MAAjC,CAAwCC,KAAxC,CAA8C,IAA9C;IAEAP,gBAAgB,CAAC;MAAEQ,KAAK,EAAE,YAAT;MAAuBC,OAAO,EAAE;IAAhC,CAAD,CAAhB,CAAyDH,MAAzD,CAAgEC,KAAhE,CAAsE,IAAtE;IACAP,gBAAgB,CAAC;MAAEQ,KAAK,EAAE,WAAT;MAAsBC,OAAO,EAAE;IAA/B,CAAD,CAAhB,CAAwDH,MAAxD,CAA+DC,KAA/D,CAAqE,KAArE;IACAP,gBAAgB,CAAC;MAAEQ,KAAK,EAAE,aAAT;MAAwBC,OAAO,EAAE;IAAjC,CAAD,CAAhB,CAA0DH,MAA1D,CAAiEC,KAAjE,CAAuE,KAAvE;IAEAP,gBAAgB,CAAC;MAAEQ,KAAK,EAAE,YAAT;MAAuBE,kBAAkB,EAAE;IAA3C,CAAD,CAAhB,CAAiEJ,MAAjE,CAAwEC,KAAxE,CAA8E,IAA9E;EACA,CATC,CAAF;EAWAF,EAAE,CAAC,gBAAD,EAAmB,YAAM;IAC1BL,gBAAgB,CAAC;MAAEW,cAAc,EAAE,WAAlB;MAA+BD,kBAAkB,EAAE;IAAnD,CAAD,EAAyD;MAAEE,EAAE,EAAE;IAAN,CAAzD,CAAhB,CAAuFN,MAAvF,CAA8FC,KAA9F,CAAoG,KAApG;IACAP,gBAAgB,CAAC;MAAEW,cAAc,EAAE,YAAlB;MAAgCD,kBAAkB,EAAE;IAApD,CAAD,EAA0D;MAAEE,EAAE,EAAE;IAAN,CAA1D,CAAhB,CAAwFN,MAAxF,CAA+FC,KAA/F,CAAqG,IAArG;IACAP,gBAAgB,CAAC;MAAEW,cAAc,EAAE,aAAlB;MAAiCD,kBAAkB,EAAE;IAArD,CAAD,EAA2D;MAAEE,EAAE,EAAE;IAAN,CAA3D,CAAhB,CAAyFN,MAAzF,CAAgGC,KAAhG,CAAsG,KAAtG;EACA,CAJC,CAAF;EAMAF,EAAE,CAAC,2BAAD,EAA8B,YAAM;IACrC;IACAQ,MAAM,CAAC;MAAA,OAAMb,gBAAgB,CAAC,EAAD,EAAK;QAAEY,EAAE,EAAE;MAAN,CAAL,CAAtB;IAAA,CAAD,CAAN,CAAiDE,EAAjD,UAA0D,oCAA1D,EAFqC,CAIrC;IACA;IACA;;IACAd,gBAAgB,CAAC,EAAD,CAAhB,CAAqBM,MAArB,CAA4BC,KAA5B,CAAkC,KAAlC;IACAM,MAAM,CAAC;MAAA,OAAMb,gBAAgB,CAAC;QAAEQ,KAAK,EAAE;MAAT,CAAD,CAAtB;IAAA,CAAD,CAAN,CAAwDM,EAAxD,UAAiE,oCAAjE,EARqC,CAUrC;;IACAD,MAAM,CAAC;MAAA,OAAMb,gBAAgB,CAAC;QAAEQ,KAAK,EAAE,YAAT;QAAuBC,OAAO,EAAE;MAAhC,CAAD,CAAtB;IAAA,CAAD,CAAN,CAAuEK,EAAvE,UAAgF,iBAAhF;EACA,CAZC,CAAF;AAaA,CA/BO,CAAR"}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
import _isValidNumber from '../isValid.js';
|
||||
import { normalizeArguments } from './getNumberType.js'; // Finds out national phone number type (fixed line, mobile, etc)
|
||||
|
||||
export default function isValidNumber() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
input = _normalizeArguments.input,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata; // `parseNumber()` would return `{}` when no phone number could be parsed from the input.
|
||||
|
||||
|
||||
if (!input.phone) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return _isValidNumber(input, options, metadata);
|
||||
}
|
||||
//# sourceMappingURL=isValidNumber.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"isValidNumber.js","names":["_isValidNumber","normalizeArguments","isValidNumber","arguments","input","options","metadata","phone"],"sources":["../../source/legacy/isValidNumber.js"],"sourcesContent":["import _isValidNumber from '../isValid.js'\r\nimport { normalizeArguments } from './getNumberType.js'\r\n\r\n// Finds out national phone number type (fixed line, mobile, etc)\r\nexport default function isValidNumber() {\r\n\tconst { input, options, metadata } = normalizeArguments(arguments)\r\n\t// `parseNumber()` would return `{}` when no phone number could be parsed from the input.\r\n\tif (!input.phone) {\r\n\t\treturn false\r\n\t}\r\n\treturn _isValidNumber(input, options, metadata)\r\n}"],"mappings":"AAAA,OAAOA,cAAP,MAA2B,eAA3B;AACA,SAASC,kBAAT,QAAmC,oBAAnC,C,CAEA;;AACA,eAAe,SAASC,aAAT,GAAyB;EACvC,0BAAqCD,kBAAkB,CAACE,SAAD,CAAvD;EAAA,IAAQC,KAAR,uBAAQA,KAAR;EAAA,IAAeC,OAAf,uBAAeA,OAAf;EAAA,IAAwBC,QAAxB,uBAAwBA,QAAxB,CADuC,CAEvC;;;EACA,IAAI,CAACF,KAAK,CAACG,KAAX,EAAkB;IACjB,OAAO,KAAP;EACA;;EACD,OAAOP,cAAc,CAACI,KAAD,EAAQC,OAAR,EAAiBC,QAAjB,CAArB;AACA"}
|
||||
Generated
Vendored
+94
@@ -0,0 +1,94 @@
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
import _isValidNumber from './isValidNumber.js';
|
||||
|
||||
function isValidNumber() {
|
||||
for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
parameters[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
parameters.push(metadata);
|
||||
return _isValidNumber.apply(this, parameters);
|
||||
}
|
||||
|
||||
describe('isValidNumber', function () {
|
||||
it('should validate phone numbers', function () {
|
||||
isValidNumber('+1-213-373-4253').should.equal(true);
|
||||
isValidNumber('+1-213-373').should.equal(false);
|
||||
isValidNumber('+1-213-373-4253', undefined).should.equal(true);
|
||||
isValidNumber('(213) 373-4253', 'US').should.equal(true);
|
||||
isValidNumber('(213) 37', 'US').should.equal(false);
|
||||
isValidNumber({
|
||||
country: 'US',
|
||||
phone: '2133734253'
|
||||
}).should.equal(true); // No "types" info: should return `true`.
|
||||
|
||||
isValidNumber('+380972423740').should.equal(true);
|
||||
isValidNumber('0912345678', 'TW').should.equal(true); // Moible numbers starting 07624* are Isle of Man
|
||||
// which has its own "country code" "IM"
|
||||
// which is in the "GB" "country calling code" zone.
|
||||
// So while this number is for "IM" it's still supposed to
|
||||
// be valid when passed "GB" as a default country.
|
||||
|
||||
isValidNumber('07624369230', 'GB').should.equal(true);
|
||||
});
|
||||
it('should refine phone number validation in case extended regular expressions are set for a country', function () {
|
||||
// Germany general validation must pass
|
||||
console.log('--------------------------');
|
||||
isValidNumber('961111111', 'UZ').should.equal(true);
|
||||
var phoneNumberTypePatterns = metadata.countries.UZ[11]; // Different regular expressions for precise national number validation.
|
||||
// `types` index in compressed array is `9` for v1.
|
||||
// For v2 it's 10.
|
||||
// For v3 it's 11.
|
||||
|
||||
metadata.countries.UZ[11] = [["(?:6(?:1(?:22|3[124]|4[1-4]|5[123578]|64)|2(?:22|3[0-57-9]|41)|5(?:22|3[3-7]|5[024-8])|6\\d{2}|7(?:[23]\\d|7[69])|9(?:22|4[1-8]|6[135]))|7(?:0(?:5[4-9]|6[0146]|7[12456]|9[135-8])|1[12]\\d|2(?:22|3[1345789]|4[123579]|5[14])|3(?:2\\d|3[1578]|4[1-35-7]|5[1-57]|61)|4(?:2\\d|3[1-579]|7[1-79])|5(?:22|5[1-9]|6[1457])|6(?:22|3[12457]|4[13-8])|9(?:22|5[1-9])))\\d{5}"], ["6(?:1(?:2(?:98|2[01])|35[0-4]|50\\d|61[23]|7(?:[01][017]|4\\d|55|9[5-9]))|2(?:11\\d|2(?:[12]1|9[01379])|5(?:[126]\\d|3[0-4])|7\\d{2})|5(?:19[01]|2(?:27|9[26])|30\\d|59\\d|7\\d{2})|6(?:2(?:1[5-9]|2[0367]|38|41|52|60)|3[79]\\d|4(?:56|83)|7(?:[07]\\d|1[017]|3[07]|4[047]|5[057]|67|8[0178]|9[79])|9[0-3]\\d)|7(?:2(?:24|3[237]|4[5-9]|7[15-8])|5(?:7[12]|8[0589])|7(?:0\\d|[39][07])|9(?:0\\d|7[079]))|9(?:2(?:1[1267]|5\\d|3[01]|7[0-4])|5[67]\\d|6(?:2[0-26]|8\\d)|7\\d{2}))\\d{4}|7(?:0\\d{3}|1(?:13[01]|6(?:0[47]|1[67]|66)|71[3-69]|98\\d)|2(?:2(?:2[79]|95)|3(?:2[5-9]|6[0-6])|57\\d|7(?:0\\d|1[17]|2[27]|3[37]|44|5[057]|66|88))|3(?:2(?:1[0-6]|21|3[469]|7[159])|33\\d|5(?:0[0-4]|5[579]|9\\d)|7(?:[0-3579]\\d|4[0467]|6[67]|8[078])|9[4-6]\\d)|4(?:2(?:29|5[0257]|6[0-7]|7[1-57])|5(?:1[0-4]|8\\d|9[5-9])|7(?:0\\d|1[024589]|2[0127]|3[0137]|[46][07]|5[01]|7[5-9]|9[079])|9(?:7[015-9]|[89]\\d))|5(?:112|2(?:0\\d|2[29]|[49]4)|3[1568]\\d|52[6-9]|7(?:0[01578]|1[017]|[23]7|4[047]|[5-7]\\d|8[78]|9[079]))|6(?:2(?:2[1245]|4[2-4])|39\\d|41[179]|5(?:[349]\\d|5[0-2])|7(?:0[017]|[13]\\d|22|44|55|67|88))|9(?:22[128]|3(?:2[0-4]|7\\d)|57[05629]|7(?:2[05-9]|3[37]|4\\d|60|7[2579]|87|9[07])))\\d{4}|9[0-57-9]\\d{7}"]]; // Extended validation must not pass for an invalid phone number
|
||||
|
||||
isValidNumber('961111111', 'UZ').should.equal(false); // Extended validation must pass for a valid phone number
|
||||
|
||||
isValidNumber('912345678', 'UZ').should.equal(true);
|
||||
metadata.countries.UZ[11] = phoneNumberTypePatterns;
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
// No metadata
|
||||
var thrower = function thrower() {
|
||||
return _isValidNumber('+78005553535');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('`metadata` argument not passed'); // Non-phone-number characters in a phone number
|
||||
|
||||
isValidNumber('+499821958a').should.equal(false);
|
||||
isValidNumber('88005553535x', 'RU').should.equal(false); // Doesn't have `types` regexps in default metadata.
|
||||
|
||||
isValidNumber({
|
||||
country: 'UA',
|
||||
phone: '300000000'
|
||||
}).should.equal(true);
|
||||
isValidNumber({
|
||||
country: 'UA',
|
||||
phone: '200000000'
|
||||
}).should.equal(false); // Numerical `value`
|
||||
|
||||
thrower = function thrower() {
|
||||
return isValidNumber(88005553535, 'RU');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('A phone number must either be a string or an object of shape { phone, [country] }.'); // Long country phone code
|
||||
|
||||
isValidNumber('+3725555555').should.equal(true); // Invalid country
|
||||
|
||||
thrower = function thrower() {
|
||||
return isValidNumber({
|
||||
phone: '8005553535',
|
||||
country: 'RUS'
|
||||
});
|
||||
};
|
||||
|
||||
thrower.should["throw"]('Unknown country');
|
||||
});
|
||||
it('should accept phone number extensions', function () {
|
||||
// International
|
||||
isValidNumber('+12133734253 ext. 123').should.equal(true); // National
|
||||
|
||||
isValidNumber('88005553535 x123', 'RU').should.equal(true);
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=isValidNumber.test.js.map
|
||||
Generated
Vendored
+1
File diff suppressed because one or more lines are too long
Generated
Vendored
+67
@@ -0,0 +1,67 @@
|
||||
import isViablePhoneNumber from '../helpers/isViablePhoneNumber.js';
|
||||
import parseNumber from '../parse.js';
|
||||
import _isValidNumberForRegion from './isValidNumberForRegion_.js'; // This function has been deprecated and is not exported as
|
||||
// `isValidPhoneNumberForCountry()` or `isValidPhoneNumberForRegion()`.
|
||||
//
|
||||
// The rationale is:
|
||||
//
|
||||
// * We don't use the "region" word, so "country" would be better.
|
||||
//
|
||||
// * It could be substituted with:
|
||||
//
|
||||
// ```js
|
||||
// export default function isValidPhoneNumberForCountry(phoneNumberString, country) {
|
||||
// const phoneNumber = parsePhoneNumber(phoneNumberString, {
|
||||
// defaultCountry: country,
|
||||
// // Demand that the entire input string must be a phone number.
|
||||
// // Otherwise, it would "extract" a phone number from an input string.
|
||||
// extract: false
|
||||
// })
|
||||
// if (!phoneNumber) {
|
||||
// return false
|
||||
// }
|
||||
// if (phoneNumber.country !== country) {
|
||||
// return false
|
||||
// }
|
||||
// return phoneNumber.isValid()
|
||||
// }
|
||||
// ```
|
||||
//
|
||||
// * Same function could be used for `isPossiblePhoneNumberForCountry()`
|
||||
// by replacing `isValid()` with `isPossible()`.
|
||||
//
|
||||
// * The reason why this function is not exported is because its result is ambiguous.
|
||||
// Suppose `false` is returned. It could mean any of:
|
||||
// * Not a phone number.
|
||||
// * The phone number is valid but belongs to another country or another calling code.
|
||||
// * The phone number belongs to the correct country but is not valid digit-wise.
|
||||
// All those three cases should be handled separately from a "User Experience" standpoint.
|
||||
// Simply showing "Invalid phone number" error in all of those cases would be lazy UX.
|
||||
|
||||
export default function isValidNumberForRegion(number, country, metadata) {
|
||||
if (typeof number !== 'string') {
|
||||
throw new TypeError('number must be a string');
|
||||
}
|
||||
|
||||
if (typeof country !== 'string') {
|
||||
throw new TypeError('country must be a string');
|
||||
} // `parse` extracts phone numbers from raw text,
|
||||
// therefore it will cut off all "garbage" characters,
|
||||
// while this `validate` function needs to verify
|
||||
// that the phone number contains no "garbage"
|
||||
// therefore the explicit `isViablePhoneNumber` check.
|
||||
|
||||
|
||||
var input;
|
||||
|
||||
if (isViablePhoneNumber(number)) {
|
||||
input = parseNumber(number, {
|
||||
defaultCountry: country
|
||||
}, metadata);
|
||||
} else {
|
||||
input = {};
|
||||
}
|
||||
|
||||
return _isValidNumberForRegion(input, country, undefined, metadata);
|
||||
}
|
||||
//# sourceMappingURL=isValidNumberForRegion.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"isValidNumberForRegion.js","names":["isViablePhoneNumber","parseNumber","_isValidNumberForRegion","isValidNumberForRegion","number","country","metadata","TypeError","input","defaultCountry","undefined"],"sources":["../../source/legacy/isValidNumberForRegion.js"],"sourcesContent":["import isViablePhoneNumber from '../helpers/isViablePhoneNumber.js'\r\nimport parseNumber from '../parse.js'\r\nimport _isValidNumberForRegion from './isValidNumberForRegion_.js'\r\n\r\n// This function has been deprecated and is not exported as\r\n// `isValidPhoneNumberForCountry()` or `isValidPhoneNumberForRegion()`.\r\n//\r\n// The rationale is:\r\n//\r\n// * We don't use the \"region\" word, so \"country\" would be better.\r\n//\r\n// * It could be substituted with:\r\n//\r\n// ```js\r\n// export default function isValidPhoneNumberForCountry(phoneNumberString, country) {\r\n// \tconst phoneNumber = parsePhoneNumber(phoneNumberString, {\r\n// \t\tdefaultCountry: country,\r\n// \t\t// Demand that the entire input string must be a phone number.\r\n// \t\t// Otherwise, it would \"extract\" a phone number from an input string.\r\n// \t\textract: false\r\n// \t})\r\n// \tif (!phoneNumber) {\r\n// \t\treturn false\r\n// \t}\r\n// \tif (phoneNumber.country !== country) {\r\n// \t\treturn false\r\n// \t}\r\n// \treturn phoneNumber.isValid()\r\n// }\r\n// ```\r\n//\r\n// * Same function could be used for `isPossiblePhoneNumberForCountry()`\r\n// by replacing `isValid()` with `isPossible()`.\r\n//\r\n// * The reason why this function is not exported is because its result is ambiguous.\r\n// Suppose `false` is returned. It could mean any of:\r\n// * Not a phone number.\r\n// * The phone number is valid but belongs to another country or another calling code.\r\n// * The phone number belongs to the correct country but is not valid digit-wise.\r\n// All those three cases should be handled separately from a \"User Experience\" standpoint.\r\n// Simply showing \"Invalid phone number\" error in all of those cases would be lazy UX.\r\n\r\nexport default function isValidNumberForRegion(number, country, metadata) {\r\n\tif (typeof number !== 'string') {\r\n\t\tthrow new TypeError('number must be a string')\r\n\t}\r\n\tif (typeof country !== 'string') {\r\n\t\tthrow new TypeError('country must be a string')\r\n\t}\r\n\t// `parse` extracts phone numbers from raw text,\r\n\t// therefore it will cut off all \"garbage\" characters,\r\n\t// while this `validate` function needs to verify\r\n\t// that the phone number contains no \"garbage\"\r\n\t// therefore the explicit `isViablePhoneNumber` check.\r\n\tlet input\r\n\tif (isViablePhoneNumber(number)) {\r\n\t\tinput = parseNumber(number, { defaultCountry: country }, metadata)\r\n\t} else {\r\n\t\tinput = {}\r\n\t}\r\n\treturn _isValidNumberForRegion(input, country, undefined, metadata)\r\n}"],"mappings":"AAAA,OAAOA,mBAAP,MAAgC,mCAAhC;AACA,OAAOC,WAAP,MAAwB,aAAxB;AACA,OAAOC,uBAAP,MAAoC,8BAApC,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;AACA;AACA;;AAEA,eAAe,SAASC,sBAAT,CAAgCC,MAAhC,EAAwCC,OAAxC,EAAiDC,QAAjD,EAA2D;EACzE,IAAI,OAAOF,MAAP,KAAkB,QAAtB,EAAgC;IAC/B,MAAM,IAAIG,SAAJ,CAAc,yBAAd,CAAN;EACA;;EACD,IAAI,OAAOF,OAAP,KAAmB,QAAvB,EAAiC;IAChC,MAAM,IAAIE,SAAJ,CAAc,0BAAd,CAAN;EACA,CANwE,CAOzE;EACA;EACA;EACA;EACA;;;EACA,IAAIC,KAAJ;;EACA,IAAIR,mBAAmB,CAACI,MAAD,CAAvB,EAAiC;IAChCI,KAAK,GAAGP,WAAW,CAACG,MAAD,EAAS;MAAEK,cAAc,EAAEJ;IAAlB,CAAT,EAAsCC,QAAtC,CAAnB;EACA,CAFD,MAEO;IACNE,KAAK,GAAG,EAAR;EACA;;EACD,OAAON,uBAAuB,CAACM,KAAD,EAAQH,OAAR,EAAiBK,SAAjB,EAA4BJ,QAA5B,CAA9B;AACA"}
|
||||
Generated
Vendored
+37
@@ -0,0 +1,37 @@
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
import isValidNumberForRegionCustom from './isValidNumberForRegion.js';
|
||||
import _isValidNumberForRegion from './isValidNumberForRegion_.js';
|
||||
|
||||
function isValidNumberForRegion() {
|
||||
for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
parameters[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
parameters.push(metadata);
|
||||
return isValidNumberForRegionCustom.apply(this, parameters);
|
||||
}
|
||||
|
||||
describe('isValidNumberForRegion', function () {
|
||||
it('should detect if is valid number for region', function () {
|
||||
isValidNumberForRegion('07624369230', 'GB').should.equal(false);
|
||||
isValidNumberForRegion('07624369230', 'IM').should.equal(true);
|
||||
});
|
||||
it('should validate arguments', function () {
|
||||
expect(function () {
|
||||
return isValidNumberForRegion({
|
||||
phone: '7624369230',
|
||||
country: 'GB'
|
||||
});
|
||||
}).to["throw"]('number must be a string');
|
||||
expect(function () {
|
||||
return isValidNumberForRegion('7624369230');
|
||||
}).to["throw"]('country must be a string');
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
// Not a "viable" phone number.
|
||||
isValidNumberForRegion('7', 'GB').should.equal(false); // `options` argument `if/else` coverage.
|
||||
|
||||
_isValidNumberForRegion('07624369230', 'GB', {}, metadata).should.equal(false);
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=isValidNumberForRegion.test.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"isValidNumberForRegion.test.js","names":["metadata","type","isValidNumberForRegionCustom","_isValidNumberForRegion","isValidNumberForRegion","parameters","push","apply","describe","it","should","equal","expect","phone","country","to"],"sources":["../../source/legacy/isValidNumberForRegion.test.js"],"sourcesContent":["import metadata from '../../metadata.min.json' assert { type: 'json' }\r\nimport isValidNumberForRegionCustom from './isValidNumberForRegion.js'\r\nimport _isValidNumberForRegion from './isValidNumberForRegion_.js'\r\n\r\nfunction isValidNumberForRegion(...parameters) {\r\n\tparameters.push(metadata)\r\n\treturn isValidNumberForRegionCustom.apply(this, parameters)\r\n}\r\n\r\ndescribe('isValidNumberForRegion', () => {\r\n\tit('should detect if is valid number for region', () => {\r\n\t\tisValidNumberForRegion('07624369230', 'GB').should.equal(false)\r\n\t\tisValidNumberForRegion('07624369230', 'IM').should.equal(true)\r\n\t})\r\n\r\n\tit('should validate arguments', () => {\r\n\t\texpect(() => isValidNumberForRegion({ phone: '7624369230', country: 'GB' })).to.throw('number must be a string')\r\n\t\texpect(() => isValidNumberForRegion('7624369230')).to.throw('country must be a string')\r\n\t})\r\n\r\n\tit('should work in edge cases', () => {\r\n\t\t// Not a \"viable\" phone number.\r\n\t\tisValidNumberForRegion('7', 'GB').should.equal(false)\r\n\r\n\t\t// `options` argument `if/else` coverage.\r\n\t\t_isValidNumberForRegion('07624369230', 'GB', {}, metadata).should.equal(false)\r\n\t})\r\n})"],"mappings":"AAAA,OAAOA,QAAP,MAAqB,yBAArB,UAAwDC,IAAI,EAAE,MAA9D;AACA,OAAOC,4BAAP,MAAyC,6BAAzC;AACA,OAAOC,uBAAP,MAAoC,8BAApC;;AAEA,SAASC,sBAAT,GAA+C;EAAA,kCAAZC,UAAY;IAAZA,UAAY;EAAA;;EAC9CA,UAAU,CAACC,IAAX,CAAgBN,QAAhB;EACA,OAAOE,4BAA4B,CAACK,KAA7B,CAAmC,IAAnC,EAAyCF,UAAzC,CAAP;AACA;;AAEDG,QAAQ,CAAC,wBAAD,EAA2B,YAAM;EACxCC,EAAE,CAAC,6CAAD,EAAgD,YAAM;IACvDL,sBAAsB,CAAC,aAAD,EAAgB,IAAhB,CAAtB,CAA4CM,MAA5C,CAAmDC,KAAnD,CAAyD,KAAzD;IACAP,sBAAsB,CAAC,aAAD,EAAgB,IAAhB,CAAtB,CAA4CM,MAA5C,CAAmDC,KAAnD,CAAyD,IAAzD;EACA,CAHC,CAAF;EAKAF,EAAE,CAAC,2BAAD,EAA8B,YAAM;IACrCG,MAAM,CAAC;MAAA,OAAMR,sBAAsB,CAAC;QAAES,KAAK,EAAE,YAAT;QAAuBC,OAAO,EAAE;MAAhC,CAAD,CAA5B;IAAA,CAAD,CAAN,CAA6EC,EAA7E,UAAsF,yBAAtF;IACAH,MAAM,CAAC;MAAA,OAAMR,sBAAsB,CAAC,YAAD,CAA5B;IAAA,CAAD,CAAN,CAAmDW,EAAnD,UAA4D,0BAA5D;EACA,CAHC,CAAF;EAKAN,EAAE,CAAC,2BAAD,EAA8B,YAAM;IACrC;IACAL,sBAAsB,CAAC,GAAD,EAAM,IAAN,CAAtB,CAAkCM,MAAlC,CAAyCC,KAAzC,CAA+C,KAA/C,EAFqC,CAIrC;;IACAR,uBAAuB,CAAC,aAAD,EAAgB,IAAhB,EAAsB,EAAtB,EAA0BH,QAA1B,CAAvB,CAA2DU,MAA3D,CAAkEC,KAAlE,CAAwE,KAAxE;EACA,CANC,CAAF;AAOA,CAlBO,CAAR"}
|
||||
Generated
Vendored
+14
@@ -0,0 +1,14 @@
|
||||
import isValidNumber from '../isValid.js';
|
||||
/**
|
||||
* Checks if a given phone number is valid within a given region.
|
||||
* Is just an alias for `phoneNumber.isValid() && phoneNumber.country === country`.
|
||||
* https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion
|
||||
*/
|
||||
|
||||
export default function isValidNumberForRegion(input, country, options, metadata) {
|
||||
// If assigning the `{}` default value is moved to the arguments above,
|
||||
// code coverage would decrease for some weird reason.
|
||||
options = options || {};
|
||||
return input.country === country && isValidNumber(input, options, metadata);
|
||||
}
|
||||
//# sourceMappingURL=isValidNumberForRegion_.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"isValidNumberForRegion_.js","names":["isValidNumber","isValidNumberForRegion","input","country","options","metadata"],"sources":["../../source/legacy/isValidNumberForRegion_.js"],"sourcesContent":["import isValidNumber from '../isValid.js'\r\n\r\n/**\r\n * Checks if a given phone number is valid within a given region.\r\n * Is just an alias for `phoneNumber.isValid() && phoneNumber.country === country`.\r\n * https://github.com/googlei18n/libphonenumber/blob/master/FAQ.md#when-should-i-use-isvalidnumberforregion\r\n */\r\nexport default function isValidNumberForRegion(input, country, 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\treturn input.country === country && isValidNumber(input, options, metadata)\r\n}"],"mappings":"AAAA,OAAOA,aAAP,MAA0B,eAA1B;AAEA;AACA;AACA;AACA;AACA;;AACA,eAAe,SAASC,sBAAT,CAAgCC,KAAhC,EAAuCC,OAAvC,EAAgDC,OAAhD,EAAyDC,QAAzD,EAAmE;EACjF;EACA;EACAD,OAAO,GAAGA,OAAO,IAAI,EAArB;EACA,OAAOF,KAAK,CAACC,OAAN,KAAkBA,OAAlB,IAA6BH,aAAa,CAACE,KAAD,EAAQE,OAAR,EAAiBC,QAAjB,CAAjD;AACA"}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
import _parseNumber from '../parse.js';
|
||||
import normalizeArguments from '../normalizeArguments.js';
|
||||
export default function parseNumber() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
text = _normalizeArguments.text,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata;
|
||||
|
||||
return _parseNumber(text, options, metadata);
|
||||
}
|
||||
//# sourceMappingURL=parse.js.map
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"parse.js","names":["_parseNumber","normalizeArguments","parseNumber","arguments","text","options","metadata"],"sources":["../../source/legacy/parse.js"],"sourcesContent":["import _parseNumber from '../parse.js'\r\nimport normalizeArguments from '../normalizeArguments.js'\r\n\r\nexport default function parseNumber() {\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\treturn _parseNumber(text, options, metadata)\r\n}"],"mappings":"AAAA,OAAOA,YAAP,MAAyB,aAAzB;AACA,OAAOC,kBAAP,MAA+B,0BAA/B;AAEA,eAAe,SAASC,WAAT,GAAuB;EACrC,0BAAoCD,kBAAkB,CAACE,SAAD,CAAtD;EAAA,IAAQC,IAAR,uBAAQA,IAAR;EAAA,IAAcC,OAAd,uBAAcA,OAAd;EAAA,IAAuBC,QAAvB,uBAAuBA,QAAvB;;EACA,OAAON,YAAY,CAACI,IAAD,EAAOC,OAAP,EAAgBC,QAAhB,CAAnB;AACA"}
|
||||
+570
@@ -0,0 +1,570 @@
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
import _parseNumber from './parse.js';
|
||||
import Metadata from '../metadata.js';
|
||||
|
||||
function parseNumber() {
|
||||
for (var _len = arguments.length, parameters = new Array(_len), _key = 0; _key < _len; _key++) {
|
||||
parameters[_key] = arguments[_key];
|
||||
}
|
||||
|
||||
parameters.push(metadata);
|
||||
return _parseNumber.apply(this, parameters);
|
||||
}
|
||||
|
||||
var USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;
|
||||
describe('parse', function () {
|
||||
it('should not parse invalid phone numbers', function () {
|
||||
// Too short.
|
||||
parseNumber('+7 (800) 55-35-35').should.deep.equal({}); // Too long.
|
||||
|
||||
parseNumber('+7 (800) 55-35-35-55').should.deep.equal({});
|
||||
parseNumber('+7 (800) 55-35-35', 'US').should.deep.equal({});
|
||||
parseNumber('(800) 55 35 35', {
|
||||
defaultCountry: 'RU'
|
||||
}).should.deep.equal({});
|
||||
parseNumber('+1 187 215 5230', 'US').should.deep.equal({});
|
||||
parseNumber('911231231', 'BE').should.deep.equal({});
|
||||
});
|
||||
it('should parse valid phone numbers', function () {
|
||||
// Instant loans
|
||||
// https://www.youtube.com/watch?v=6e1pMrYH5jI
|
||||
//
|
||||
// Restrict to RU
|
||||
parseNumber('Phone: 8 (800) 555 35 35.', 'RU').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535'
|
||||
}); // International format
|
||||
|
||||
parseNumber('Phone: +7 (800) 555-35-35.').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535'
|
||||
}); // // Restrict to US, but not a US country phone code supplied
|
||||
// parseNumber('+7 (800) 555-35-35', 'US').should.deep.equal({})
|
||||
// Restrict to RU
|
||||
|
||||
parseNumber('(800) 555 35 35', 'RU').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535'
|
||||
}); // Default to RU
|
||||
|
||||
parseNumber('8 (800) 555 35 35', {
|
||||
defaultCountry: 'RU'
|
||||
}).should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535'
|
||||
}); // Gangster partyline
|
||||
|
||||
parseNumber('+1-213-373-4253').should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2133734253'
|
||||
}); // Switzerland (just in case)
|
||||
|
||||
parseNumber('044 668 18 00', 'CH').should.deep.equal({
|
||||
country: 'CH',
|
||||
phone: '446681800'
|
||||
}); // China, Beijing
|
||||
|
||||
parseNumber('010-852644821', 'CN').should.deep.equal({
|
||||
country: 'CN',
|
||||
phone: '10852644821'
|
||||
}); // France
|
||||
|
||||
parseNumber('+33169454850').should.deep.equal({
|
||||
country: 'FR',
|
||||
phone: '169454850'
|
||||
}); // UK (Jersey)
|
||||
|
||||
parseNumber('+44 7700 300000').should.deep.equal({
|
||||
country: 'JE',
|
||||
phone: '7700300000'
|
||||
}); // KZ
|
||||
|
||||
parseNumber('+7 702 211 1111').should.deep.equal({
|
||||
country: 'KZ',
|
||||
phone: '7022111111'
|
||||
}); // Brazil
|
||||
|
||||
parseNumber('11987654321', 'BR').should.deep.equal({
|
||||
country: 'BR',
|
||||
phone: '11987654321'
|
||||
}); // Long country phone code.
|
||||
|
||||
parseNumber('+212659777777').should.deep.equal({
|
||||
country: 'MA',
|
||||
phone: '659777777'
|
||||
}); // No country could be derived.
|
||||
// parseNumber('+212569887076').should.deep.equal({ countryPhoneCode: '212', phone: '569887076' })
|
||||
// GB. Moible numbers starting 07624* are Isle of Man.
|
||||
|
||||
parseNumber('07624369230', 'GB').should.deep.equal({
|
||||
country: 'IM',
|
||||
phone: '7624369230'
|
||||
});
|
||||
});
|
||||
it('should parse possible numbers', function () {
|
||||
// Invalid phone number for a given country.
|
||||
parseNumber('1112223344', 'RU', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: 'RU',
|
||||
countryCallingCode: '7',
|
||||
phone: '1112223344',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
valid: false,
|
||||
possible: true
|
||||
}); // International phone number.
|
||||
// Several countries with the same country phone code.
|
||||
|
||||
parseNumber('+71112223344').should.deep.equal({});
|
||||
parseNumber('+71112223344', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: undefined,
|
||||
countryCallingCode: '7',
|
||||
phone: '1112223344',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
valid: false,
|
||||
possible: true
|
||||
}); // International phone number.
|
||||
// Single country with the given country phone code.
|
||||
|
||||
parseNumber('+33011222333', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: 'FR',
|
||||
countryCallingCode: '33',
|
||||
phone: '011222333',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
valid: false,
|
||||
possible: true
|
||||
}); // Too short.
|
||||
// Won't strip national prefix `8` because otherwise the number would be too short.
|
||||
|
||||
parseNumber('+7 (800) 55-35-35', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: undefined,
|
||||
countryCallingCode: '7',
|
||||
phone: '800553535',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
valid: false,
|
||||
possible: false
|
||||
}); // Too long.
|
||||
|
||||
parseNumber('+1 213 37342530', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: undefined,
|
||||
countryCallingCode: '1',
|
||||
phone: '21337342530',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
valid: false,
|
||||
possible: false
|
||||
}); // No national number to be parsed.
|
||||
|
||||
parseNumber('+996', {
|
||||
extended: true
|
||||
}).should.deep.equal({// countryCallingCode : '996'
|
||||
}); // Valid number.
|
||||
|
||||
parseNumber('+78005553535', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: 'RU',
|
||||
countryCallingCode: '7',
|
||||
phone: '8005553535',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
valid: true,
|
||||
possible: true
|
||||
}); // https://github.com/catamphetamine/libphonenumber-js/issues/211
|
||||
|
||||
parseNumber('+966', {
|
||||
extended: true
|
||||
}).should.deep.equal({});
|
||||
parseNumber('+9664', {
|
||||
extended: true
|
||||
}).should.deep.equal({});
|
||||
parseNumber('+96645', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
carrierCode: undefined,
|
||||
phone: '45',
|
||||
ext: undefined,
|
||||
country: 'SA',
|
||||
countryCallingCode: '966',
|
||||
possible: false,
|
||||
valid: false
|
||||
});
|
||||
});
|
||||
it('should parse non-European digits', function () {
|
||||
parseNumber('+١٢١٢٢٣٢٣٢٣٢').should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2122323232'
|
||||
});
|
||||
});
|
||||
it('should work in edge cases', function () {
|
||||
var thrower; // No input
|
||||
|
||||
parseNumber('').should.deep.equal({}); // No country phone code
|
||||
|
||||
parseNumber('+').should.deep.equal({}); // No country at all (non international number and no explicit country code)
|
||||
|
||||
parseNumber('123').should.deep.equal({}); // No country metadata for this `require` country code
|
||||
|
||||
thrower = function thrower() {
|
||||
return parseNumber('123', 'ZZ');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('Unknown country'); // No country metadata for this `default` country code
|
||||
|
||||
thrower = function thrower() {
|
||||
return parseNumber('123', {
|
||||
defaultCountry: 'ZZ'
|
||||
});
|
||||
};
|
||||
|
||||
thrower.should["throw"]('Unknown country'); // Invalid country phone code
|
||||
|
||||
parseNumber('+210').should.deep.equal({}); // Invalid country phone code (extended parsing mode)
|
||||
|
||||
parseNumber('+210', {
|
||||
extended: true
|
||||
}).should.deep.equal({}); // Too short of a number.
|
||||
|
||||
parseNumber('1', 'US', {
|
||||
extended: true
|
||||
}).should.deep.equal({}); // Too long of a number.
|
||||
|
||||
parseNumber('1111111111111111111', 'RU', {
|
||||
extended: true
|
||||
}).should.deep.equal({}); // Not a number.
|
||||
|
||||
parseNumber('abcdefg', 'US', {
|
||||
extended: true
|
||||
}).should.deep.equal({}); // Country phone code beginning with a '0'
|
||||
|
||||
parseNumber('+0123').should.deep.equal({}); // Barbados NANPA phone number
|
||||
|
||||
parseNumber('+12460000000').should.deep.equal({
|
||||
country: 'BB',
|
||||
phone: '2460000000'
|
||||
}); // // A case when country (restricted to) is not equal
|
||||
// // to the one parsed out of an international number.
|
||||
// parseNumber('+1-213-373-4253', 'RU').should.deep.equal({})
|
||||
// National (significant) number too short
|
||||
|
||||
parseNumber('2', 'US').should.deep.equal({}); // National (significant) number too long
|
||||
|
||||
parseNumber('222222222222222222', 'US').should.deep.equal({}); // No `national_prefix_for_parsing`
|
||||
|
||||
parseNumber('41111', 'AC').should.deep.equal({
|
||||
country: 'AC',
|
||||
phone: '41111'
|
||||
}); // https://github.com/catamphetamine/libphonenumber-js/issues/235
|
||||
// `matchesEntirely()` bug fix.
|
||||
|
||||
parseNumber('+4915784846111').should.deep.equal({
|
||||
country: 'DE',
|
||||
phone: '15784846111'
|
||||
}); // No metadata
|
||||
|
||||
thrower = function thrower() {
|
||||
return _parseNumber('');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('`metadata` argument not passed'); // Numerical `value`
|
||||
|
||||
thrower = function thrower() {
|
||||
return parseNumber(2141111111, 'US');
|
||||
};
|
||||
|
||||
thrower.should["throw"]('A text for parsing must be a string.'); // Input string too long.
|
||||
|
||||
parseNumber('8005553535 ', 'RU').should.deep.equal({});
|
||||
});
|
||||
it('should parse phone number extensions', function () {
|
||||
// "ext"
|
||||
parseNumber('2134567890 ext 123', 'US').should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2134567890',
|
||||
ext: '123'
|
||||
}); // "ext."
|
||||
|
||||
parseNumber('+12134567890 ext. 12345', 'US').should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2134567890',
|
||||
ext: '12345'
|
||||
}); // "доб."
|
||||
|
||||
parseNumber('+78005553535 доб. 1234', 'RU').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
ext: '1234'
|
||||
}); // "#"
|
||||
|
||||
parseNumber('+12134567890#1234').should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2134567890',
|
||||
ext: '1234'
|
||||
}); // "x"
|
||||
|
||||
parseNumber('+78005553535 x1234').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
ext: '1234'
|
||||
}); // Not a valid extension
|
||||
|
||||
parseNumber('2134567890 ext. abc', 'US').should.deep.equal({
|
||||
country: 'US',
|
||||
phone: '2134567890'
|
||||
});
|
||||
});
|
||||
it('should parse RFC 3966 phone numbers', function () {
|
||||
parseNumber('tel:+78005553535;ext=123').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
ext: '123'
|
||||
}); // Should parse "visual separators".
|
||||
|
||||
parseNumber('tel:+7(800)555-35.35;ext=123').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
ext: '123'
|
||||
}); // Invalid number.
|
||||
|
||||
parseNumber('tel:+7x8005553535;ext=123').should.deep.equal({});
|
||||
});
|
||||
it('should parse invalid international numbers even if they are invalid', function () {
|
||||
parseNumber('+7(8)8005553535', 'RU').should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535'
|
||||
});
|
||||
});
|
||||
it('should parse carrier codes', function () {
|
||||
parseNumber('0 15 21 5555-5555', 'BR', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: 'BR',
|
||||
countryCallingCode: '55',
|
||||
phone: '2155555555',
|
||||
carrierCode: '15',
|
||||
ext: undefined,
|
||||
valid: true,
|
||||
possible: true
|
||||
});
|
||||
});
|
||||
it('should parse IDD prefixes', function () {
|
||||
parseNumber('011 61 2 3456 7890', 'US').should.deep.equal({
|
||||
phone: '234567890',
|
||||
country: 'AU'
|
||||
});
|
||||
parseNumber('011 61 2 3456 7890', 'FR').should.deep.equal({});
|
||||
parseNumber('00 61 2 3456 7890', 'US').should.deep.equal({});
|
||||
parseNumber('810 61 2 3456 7890', 'RU').should.deep.equal({
|
||||
phone: '234567890',
|
||||
country: 'AU'
|
||||
});
|
||||
});
|
||||
it('should work with v2 API', function () {
|
||||
parseNumber('+99989160151539');
|
||||
});
|
||||
it('should work with Argentina numbers', function () {
|
||||
// The same mobile number is written differently
|
||||
// in different formats in Argentina:
|
||||
// `9` gets prepended in international format.
|
||||
parseNumber('+54 9 3435 55 1212').should.deep.equal({
|
||||
country: 'AR',
|
||||
phone: '93435551212'
|
||||
});
|
||||
parseNumber('0343 15-555-1212', 'AR').should.deep.equal({
|
||||
country: 'AR',
|
||||
phone: '93435551212'
|
||||
});
|
||||
});
|
||||
it('should work with Mexico numbers', function () {
|
||||
// Fixed line.
|
||||
parseNumber('+52 449 978 0001').should.deep.equal({
|
||||
country: 'MX',
|
||||
phone: '4499780001'
|
||||
}); // "Dialling tokens 01, 02, 044, 045 and 1 are removed as they are
|
||||
// no longer valid since August 2019."
|
||||
//
|
||||
// parseNumber('01 (449)978-0001', 'MX').should.deep.equal({
|
||||
// country: 'MX',
|
||||
// phone: '4499780001'
|
||||
// })
|
||||
|
||||
parseNumber('(449)978-0001', 'MX').should.deep.equal({
|
||||
country: 'MX',
|
||||
phone: '4499780001'
|
||||
}); // "Dialling tokens 01, 02, 044, 045 and 1 are removed as they are
|
||||
// no longer valid since August 2019."
|
||||
//
|
||||
// // Mobile.
|
||||
// // `1` is prepended before area code to mobile numbers in international format.
|
||||
// parseNumber('+52 1 33 1234-5678', 'MX').should.deep.equal({
|
||||
// country: 'MX',
|
||||
// phone: '3312345678'
|
||||
// })
|
||||
|
||||
parseNumber('+52 33 1234-5678', 'MX').should.deep.equal({
|
||||
country: 'MX',
|
||||
phone: '3312345678'
|
||||
}); // "Dialling tokens 01, 02, 044, 045 and 1 are removed as they are
|
||||
// no longer valid since August 2019."
|
||||
//
|
||||
// parseNumber('044 (33) 1234-5678', 'MX').should.deep.equal({
|
||||
// country: 'MX',
|
||||
// phone: '3312345678'
|
||||
// })
|
||||
// parseNumber('045 33 1234-5678', 'MX').should.deep.equal({
|
||||
// country: 'MX',
|
||||
// phone: '3312345678'
|
||||
// })
|
||||
});
|
||||
it('should parse non-geographic numbering plan phone numbers', function () {
|
||||
parseNumber('+870773111632').should.deep.equal(USE_NON_GEOGRAPHIC_COUNTRY_CODE ? {
|
||||
country: '001',
|
||||
phone: '773111632'
|
||||
} : {});
|
||||
});
|
||||
it('should parse non-geographic numbering plan phone numbers (default country code)', function () {
|
||||
parseNumber('773111632', {
|
||||
defaultCallingCode: '870'
|
||||
}).should.deep.equal(USE_NON_GEOGRAPHIC_COUNTRY_CODE ? {
|
||||
country: '001',
|
||||
phone: '773111632'
|
||||
} : {});
|
||||
});
|
||||
it('should parse non-geographic numbering plan phone numbers (extended)', function () {
|
||||
parseNumber('+870773111632', {
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: USE_NON_GEOGRAPHIC_COUNTRY_CODE ? '001' : undefined,
|
||||
countryCallingCode: '870',
|
||||
phone: '773111632',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
possible: true,
|
||||
valid: true
|
||||
});
|
||||
});
|
||||
it('should parse non-geographic numbering plan phone numbers (default country code) (extended)', function () {
|
||||
parseNumber('773111632', {
|
||||
defaultCallingCode: '870',
|
||||
extended: true
|
||||
}).should.deep.equal({
|
||||
country: USE_NON_GEOGRAPHIC_COUNTRY_CODE ? '001' : undefined,
|
||||
countryCallingCode: '870',
|
||||
phone: '773111632',
|
||||
carrierCode: undefined,
|
||||
ext: undefined,
|
||||
possible: true,
|
||||
valid: true
|
||||
});
|
||||
});
|
||||
it('shouldn\'t crash when invalid `defaultCallingCode` is passed', function () {
|
||||
expect(function () {
|
||||
return parseNumber('773111632', {
|
||||
defaultCallingCode: '999'
|
||||
});
|
||||
}).to["throw"]('Unknown calling code');
|
||||
});
|
||||
it('shouldn\'t set `country` when there\'s no `defaultCountry` and `defaultCallingCode` is not of a "non-geographic entity"', function () {
|
||||
parseNumber('88005553535', {
|
||||
defaultCallingCode: '7'
|
||||
}).should.deep.equal({
|
||||
country: 'RU',
|
||||
phone: '8005553535'
|
||||
});
|
||||
});
|
||||
it('should correctly parse numbers starting with the same digit as the national prefix', function () {
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/373
|
||||
// `BY`'s `national_prefix` is `8`.
|
||||
parseNumber('+37582004910060').should.deep.equal({
|
||||
country: 'BY',
|
||||
phone: '82004910060'
|
||||
});
|
||||
});
|
||||
it('should autocorrect numbers without a leading +', function () {
|
||||
// https://github.com/catamphetamine/libphonenumber-js/issues/376
|
||||
parseNumber('375447521111', 'BY').should.deep.equal({
|
||||
country: 'BY',
|
||||
phone: '447521111'
|
||||
}); // https://github.com/catamphetamine/libphonenumber-js/issues/316
|
||||
|
||||
parseNumber('33612902554', 'FR').should.deep.equal({
|
||||
country: 'FR',
|
||||
phone: '612902554'
|
||||
}); // https://github.com/catamphetamine/libphonenumber-js/issues/375
|
||||
|
||||
parseNumber('61438331999', 'AU').should.deep.equal({
|
||||
country: 'AU',
|
||||
phone: '438331999'
|
||||
}); // A case when `49` is a country calling code of a number without a leading `+`.
|
||||
|
||||
parseNumber('4930123456', 'DE').should.deep.equal({
|
||||
country: 'DE',
|
||||
phone: '30123456'
|
||||
}); // A case when `49` is a valid area code.
|
||||
|
||||
parseNumber('4951234567890', 'DE').should.deep.equal({
|
||||
country: 'DE',
|
||||
phone: '4951234567890'
|
||||
});
|
||||
});
|
||||
it('should parse extensions (long extensions with explicitl abels)', function () {
|
||||
// Test lower and upper limits of extension lengths for each type of label.
|
||||
// Firstly, when in RFC format: PhoneNumberUtil.extLimitAfterExplicitLabel
|
||||
parseNumber('33316005 ext 0', 'NZ').ext.should.equal('0');
|
||||
parseNumber('33316005 ext 01234567890123456789', 'NZ').ext.should.equal('01234567890123456789'); // Extension too long.
|
||||
|
||||
expect(parseNumber('33316005 ext 012345678901234567890', 'NZ').ext).to.be.undefined; // Explicit extension label.
|
||||
|
||||
parseNumber('03 3316005ext:1', 'NZ').ext.should.equal('1');
|
||||
parseNumber('03 3316005 xtn:12345678901234567890', 'NZ').ext.should.equal('12345678901234567890');
|
||||
parseNumber('03 3316005 extension\t12345678901234567890', 'NZ').ext.should.equal('12345678901234567890');
|
||||
parseNumber('03 3316005 xtensio:12345678901234567890', 'NZ').ext.should.equal('12345678901234567890');
|
||||
parseNumber('03 3316005 xtensión, 12345678901234567890#', 'NZ').ext.should.equal('12345678901234567890');
|
||||
parseNumber('03 3316005extension.12345678901234567890', 'NZ').ext.should.equal('12345678901234567890');
|
||||
parseNumber('03 3316005 доб:12345678901234567890', 'NZ').ext.should.equal('12345678901234567890'); // Extension too long.
|
||||
|
||||
expect(parseNumber('03 3316005 extension 123456789012345678901', 'NZ').ext).to.be.undefined;
|
||||
});
|
||||
it('should parse extensions (long extensions with auto dialling labels)', function () {
|
||||
parseNumber('+12679000000,,123456789012345#').ext.should.equal('123456789012345');
|
||||
parseNumber('+12679000000;123456789012345#').ext.should.equal('123456789012345');
|
||||
parseNumber('+442034000000,,123456789#').ext.should.equal('123456789'); // Extension too long.
|
||||
|
||||
expect(parseNumber('+12679000000,,1234567890123456#').ext).to.be.undefined;
|
||||
});
|
||||
it('should parse extensions (short extensions with ambiguous characters)', function () {
|
||||
parseNumber('03 3316005 x 123456789', 'NZ').ext.should.equal('123456789');
|
||||
parseNumber('03 3316005 x. 123456789', 'NZ').ext.should.equal('123456789');
|
||||
parseNumber('03 3316005 #123456789#', 'NZ').ext.should.equal('123456789');
|
||||
parseNumber('03 3316005 ~ 123456789', 'NZ').ext.should.equal('123456789'); // Extension too long.
|
||||
|
||||
expect(parseNumber('03 3316005 ~ 1234567890', 'NZ').ext).to.be.undefined;
|
||||
});
|
||||
it('should parse extensions (short extensions when not sure of label)', function () {
|
||||
parseNumber('+1123-456-7890 666666#', {
|
||||
v2: true
|
||||
}).ext.should.equal('666666');
|
||||
parseNumber('+11234567890-6#', {
|
||||
v2: true
|
||||
}).ext.should.equal('6'); // Extension too long.
|
||||
|
||||
expect(function () {
|
||||
return parseNumber('+1123-456-7890 7777777#', {
|
||||
v2: true
|
||||
});
|
||||
}).to["throw"]('NOT_A_NUMBER');
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=parse.test.js.map
|
||||
+1
File diff suppressed because one or more lines are too long
+33
@@ -0,0 +1,33 @@
|
||||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||||
|
||||
import normalizeArguments from '../normalizeArguments.js';
|
||||
import PhoneNumberMatcher from '../PhoneNumberMatcher.js';
|
||||
/**
|
||||
* @return ES6 `for ... of` iterator.
|
||||
*/
|
||||
|
||||
export default function searchNumbers() {
|
||||
var _normalizeArguments = normalizeArguments(arguments),
|
||||
text = _normalizeArguments.text,
|
||||
options = _normalizeArguments.options,
|
||||
metadata = _normalizeArguments.metadata;
|
||||
|
||||
var matcher = new PhoneNumberMatcher(text, options, metadata);
|
||||
return _defineProperty({}, Symbol.iterator, function () {
|
||||
return {
|
||||
next: function next() {
|
||||
if (matcher.hasNext()) {
|
||||
return {
|
||||
done: false,
|
||||
value: matcher.next()
|
||||
};
|
||||
}
|
||||
|
||||
return {
|
||||
done: true
|
||||
};
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
//# sourceMappingURL=searchNumbers.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"searchNumbers.js","names":["normalizeArguments","PhoneNumberMatcher","searchNumbers","arguments","text","options","metadata","matcher","Symbol","iterator","next","hasNext","done","value"],"sources":["../../source/legacy/searchNumbers.js"],"sourcesContent":["import normalizeArguments from '../normalizeArguments.js'\r\nimport PhoneNumberMatcher from '../PhoneNumberMatcher.js'\r\n\r\n/**\r\n * @return ES6 `for ... of` iterator.\r\n */\r\nexport default function searchNumbers()\r\n{\r\n\tconst { text, options, metadata } = normalizeArguments(arguments)\r\n\r\n\tconst matcher = new PhoneNumberMatcher(text, options, metadata)\r\n\r\n\treturn {\r\n\t\t[Symbol.iterator]() {\r\n\t\t\treturn {\r\n\t \t\tnext: () => {\r\n\t \t\t\tif (matcher.hasNext()) {\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tdone: false,\r\n\t\t\t\t\t\t\tvalue: matcher.next()\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn {\r\n\t\t\t\t\t\tdone: true\r\n\t\t\t\t\t}\r\n\t \t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n"],"mappings":";;AAAA,OAAOA,kBAAP,MAA+B,0BAA/B;AACA,OAAOC,kBAAP,MAA+B,0BAA/B;AAEA;AACA;AACA;;AACA,eAAe,SAASC,aAAT,GACf;EACC,0BAAoCF,kBAAkB,CAACG,SAAD,CAAtD;EAAA,IAAQC,IAAR,uBAAQA,IAAR;EAAA,IAAcC,OAAd,uBAAcA,OAAd;EAAA,IAAuBC,QAAvB,uBAAuBA,QAAvB;;EAEA,IAAMC,OAAO,GAAG,IAAIN,kBAAJ,CAAuBG,IAAvB,EAA6BC,OAA7B,EAAsCC,QAAtC,CAAhB;EAEA,2BACEE,MAAM,CAACC,QADT,cACqB;IACnB,OAAO;MACHC,IAAI,EAAE,gBAAM;QACX,IAAIH,OAAO,CAACI,OAAR,EAAJ,EAAuB;UACzB,OAAO;YACNC,IAAI,EAAE,KADA;YAENC,KAAK,EAAEN,OAAO,CAACG,IAAR;UAFD,CAAP;QAIA;;QACD,OAAO;UACNE,IAAI,EAAE;QADA,CAAP;MAGG;IAXE,CAAP;EAaA,CAfF;AAiBA"}
|
||||
Generated
Vendored
+33
@@ -0,0 +1,33 @@
|
||||
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
||||
|
||||
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
||||
|
||||
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
||||
|
||||
import searchNumbers from './searchNumbers.js';
|
||||
import metadata from '../../metadata.min.json' assert { type: 'json' };
|
||||
describe('searchNumbers', function () {
|
||||
it('should iterate', function () {
|
||||
var expectedNumbers = [{
|
||||
country: 'RU',
|
||||
phone: '8005553535',
|
||||
// number : '+7 (800) 555-35-35',
|
||||
startsAt: 14,
|
||||
endsAt: 32
|
||||
}, {
|
||||
country: 'US',
|
||||
phone: '2133734253',
|
||||
// number : '(213) 373-4253',
|
||||
startsAt: 41,
|
||||
endsAt: 55
|
||||
}];
|
||||
|
||||
for (var _iterator = _createForOfIteratorHelperLoose(searchNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', 'US', metadata)), _step; !(_step = _iterator()).done;) {
|
||||
var number = _step.value;
|
||||
number.should.deep.equal(expectedNumbers.shift());
|
||||
}
|
||||
|
||||
expectedNumbers.length.should.equal(0);
|
||||
});
|
||||
});
|
||||
//# sourceMappingURL=searchNumbers.test.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"searchNumbers.test.js","names":["searchNumbers","metadata","type","describe","it","expectedNumbers","country","phone","startsAt","endsAt","number","should","deep","equal","shift","length"],"sources":["../../source/legacy/searchNumbers.test.js"],"sourcesContent":["import searchNumbers from './searchNumbers.js'\r\nimport metadata from '../../metadata.min.json' assert { type: 'json' }\r\n\r\ndescribe('searchNumbers', () => {\r\n\tit('should iterate', () => {\r\n\t\tconst expectedNumbers =[{\r\n\t\t\tcountry : 'RU',\r\n\t\t\tphone : '8005553535',\r\n\t\t\t// number : '+7 (800) 555-35-35',\r\n\t\t\tstartsAt : 14,\r\n\t\t\tendsAt : 32\r\n\t\t}, {\r\n\t\t\tcountry : 'US',\r\n\t\t\tphone : '2133734253',\r\n\t\t\t// number : '(213) 373-4253',\r\n\t\t\tstartsAt : 41,\r\n\t\t\tendsAt : 55\r\n\t\t}]\r\n\r\n\t\tfor (const number of searchNumbers('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', 'US', metadata)) {\r\n\t\t\tnumber.should.deep.equal(expectedNumbers.shift())\r\n\t\t}\r\n\r\n\t\texpectedNumbers.length.should.equal(0)\r\n\t})\r\n})"],"mappings":";;;;;;AAAA,OAAOA,aAAP,MAA0B,oBAA1B;AACA,OAAOC,QAAP,MAAqB,yBAArB,UAAwDC,IAAI,EAAE,MAA9D;AAEAC,QAAQ,CAAC,eAAD,EAAkB,YAAM;EAC/BC,EAAE,CAAC,gBAAD,EAAmB,YAAM;IAC1B,IAAMC,eAAe,GAAE,CAAC;MACvBC,OAAO,EAAG,IADa;MAEvBC,KAAK,EAAK,YAFa;MAGvB;MACAC,QAAQ,EAAG,EAJY;MAKvBC,MAAM,EAAK;IALY,CAAD,EAMpB;MACFH,OAAO,EAAG,IADR;MAEFC,KAAK,EAAK,YAFR;MAGF;MACAC,QAAQ,EAAG,EAJT;MAKFC,MAAM,EAAK;IALT,CANoB,CAAvB;;IAcA,qDAAqBT,aAAa,CAAC,qFAAD,EAAwF,IAAxF,EAA8FC,QAA9F,CAAlC,wCAA2I;MAAA,IAAhIS,MAAgI;MAC1IA,MAAM,CAACC,MAAP,CAAcC,IAAd,CAAmBC,KAAnB,CAAyBR,eAAe,CAACS,KAAhB,EAAzB;IACA;;IAEDT,eAAe,CAACU,MAAhB,CAAuBJ,MAAvB,CAA8BE,KAA9B,CAAoC,CAApC;EACA,CApBC,CAAF;AAqBA,CAtBO,CAAR"}
|
||||
Reference in New Issue
Block a user