123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.PhoneNumberSearch = exports.EXTN_PATTERNS_FOR_PARSING = void 0;
- exports["default"] = findPhoneNumbers;
- exports.searchPhoneNumbers = searchPhoneNumbers;
- var _constants = require("../constants.js");
- var _parse = _interopRequireDefault(require("../parse.js"));
- var _isViablePhoneNumber = require("../helpers/isViablePhoneNumber.js");
- var _createExtensionPattern = _interopRequireDefault(require("../helpers/extension/createExtensionPattern.js"));
- var _parsePreCandidate = _interopRequireDefault(require("../findNumbers/parsePreCandidate.js"));
- var _isValidPreCandidate = _interopRequireDefault(require("../findNumbers/isValidPreCandidate.js"));
- var _isValidCandidate = _interopRequireDefault(require("../findNumbers/isValidCandidate.js"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
- 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; }
- var EXTN_PATTERNS_FOR_PARSING = (0, _createExtensionPattern["default"])('parsing');
- exports.EXTN_PATTERNS_FOR_PARSING = EXTN_PATTERNS_FOR_PARSING;
- var WHITESPACE_IN_THE_BEGINNING_PATTERN = new RegExp('^[' + _constants.WHITESPACE + ']+');
- var PUNCTUATION_IN_THE_END_PATTERN = new RegExp('[' + _constants.VALID_PUNCTUATION + ']+$');
- var VALID_PRECEDING_CHARACTER_PATTERN = /[^a-zA-Z0-9]/;
- function findPhoneNumbers(text, options, metadata) {
-
- if (options === undefined) {
- options = {};
- }
- var search = new PhoneNumberSearch(text, options, metadata);
- var phones = [];
- while (search.hasNext()) {
- phones.push(search.next());
- }
- return phones;
- }
- function searchPhoneNumbers(text, options, metadata) {
-
- 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
- };
- }
- };
- });
- }
- var PhoneNumberSearch = function () {
- function PhoneNumberSearch(text, options, metadata) {
- _classCallCheck(this, PhoneNumberSearch);
- this.text = text;
-
- this.options = options || {};
- this.metadata = metadata;
- this.state = 'NOT_READY';
- this.regexp = new RegExp(_isViablePhoneNumber.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;
-
-
- number = number.replace(PUNCTUATION_IN_THE_END_PATTERN, '');
- number = (0, _parsePreCandidate["default"])(number);
- var result = this.parseCandidate(number, startsAt);
- if (result) {
- return result;
- }
-
- return this.find();
- }
- }, {
- key: "parseCandidate",
- value: function parseCandidate(number, startsAt) {
- if (!(0, _isValidPreCandidate["default"])(number, startsAt, this.text)) {
- return;
- }
-
-
-
- if (!(0, _isValidCandidate["default"])(number, startsAt, this.text, this.options.extended ? 'POSSIBLE' : 'VALID')) {
- return;
- }
-
-
-
-
-
-
-
-
-
-
- var result = (0, _parse["default"])(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() {
-
- if (!this.hasNext()) {
- throw new Error('No next element');
- }
- var result = this.last_match;
- this.last_match = null;
- this.state = 'NOT_READY';
- return result;
- }
- }]);
- return PhoneNumberSearch;
- }();
- exports.PhoneNumberSearch = PhoneNumberSearch;
|