1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports["default"] = findPhoneNumbers;
|
7 | exports.searchPhoneNumbers = searchPhoneNumbers;
|
8 | exports.PhoneNumberSearch = exports.EXTN_PATTERNS_FOR_PARSING = void 0;
|
9 |
|
10 | var _constants = require("./constants");
|
11 |
|
12 | var _parse_ = _interopRequireDefault(require("./parse_"));
|
13 |
|
14 | var _isViablePhoneNumber = require("./helpers/isViablePhoneNumber");
|
15 |
|
16 | var _createExtensionPattern = _interopRequireDefault(require("./helpers/extension/createExtensionPattern"));
|
17 |
|
18 | var _parsePreCandidate = _interopRequireDefault(require("./findNumbers/parsePreCandidate"));
|
19 |
|
20 | var _isValidPreCandidate = _interopRequireDefault(require("./findNumbers/isValidPreCandidate"));
|
21 |
|
22 | var _isValidCandidate = _interopRequireDefault(require("./findNumbers/isValidCandidate"));
|
23 |
|
24 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
25 |
|
26 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
27 |
|
28 | 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); } }
|
29 |
|
30 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
31 |
|
32 | 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; }
|
33 |
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 | var EXTN_PATTERNS_FOR_PARSING = (0, _createExtensionPattern["default"])('parsing');
|
50 | exports.EXTN_PATTERNS_FOR_PARSING = EXTN_PATTERNS_FOR_PARSING;
|
51 | var WHITESPACE_IN_THE_BEGINNING_PATTERN = new RegExp('^[' + _constants.WHITESPACE + ']+');
|
52 | var PUNCTUATION_IN_THE_END_PATTERN = new RegExp('[' + _constants.VALID_PUNCTUATION + ']+$');
|
53 |
|
54 |
|
55 |
|
56 | var VALID_PRECEDING_CHARACTER_PATTERN = /[^a-zA-Z0-9]/;
|
57 |
|
58 | function findPhoneNumbers(text, options, metadata) {
|
59 |
|
60 | if (options === undefined) {
|
61 | options = {};
|
62 | }
|
63 |
|
64 | var search = new PhoneNumberSearch(text, options, metadata);
|
65 | var phones = [];
|
66 |
|
67 | while (search.hasNext()) {
|
68 | phones.push(search.next());
|
69 | }
|
70 |
|
71 | return phones;
|
72 | }
|
73 |
|
74 |
|
75 |
|
76 |
|
77 |
|
78 | function searchPhoneNumbers(text, options, metadata) {
|
79 |
|
80 | if (options === undefined) {
|
81 | options = {};
|
82 | }
|
83 |
|
84 | var search = new PhoneNumberSearch(text, options, metadata);
|
85 | return _defineProperty({}, Symbol.iterator, function () {
|
86 | return {
|
87 | next: function next() {
|
88 | if (search.hasNext()) {
|
89 | return {
|
90 | done: false,
|
91 | value: search.next()
|
92 | };
|
93 | }
|
94 |
|
95 | return {
|
96 | done: true
|
97 | };
|
98 | }
|
99 | };
|
100 | });
|
101 | }
|
102 |
|
103 |
|
104 |
|
105 |
|
106 |
|
107 |
|
108 |
|
109 | var PhoneNumberSearch =
|
110 |
|
111 | function () {
|
112 |
|
113 | function PhoneNumberSearch(text, options, metadata) {
|
114 | _classCallCheck(this, PhoneNumberSearch);
|
115 |
|
116 | _defineProperty(this, "state", 'NOT_READY');
|
117 |
|
118 | this.text = text;
|
119 |
|
120 |
|
121 | this.options = options || {};
|
122 | this.metadata = metadata;
|
123 | this.regexp = new RegExp(_isViablePhoneNumber.VALID_PHONE_NUMBER_WITH_EXTENSION, 'ig');
|
124 | }
|
125 |
|
126 | _createClass(PhoneNumberSearch, [{
|
127 | key: "find",
|
128 | value: function find() {
|
129 | var matches = this.regexp.exec(this.text);
|
130 |
|
131 | if (!matches) {
|
132 | return;
|
133 | }
|
134 |
|
135 | var number = matches[0];
|
136 | var startsAt = matches.index;
|
137 | number = number.replace(WHITESPACE_IN_THE_BEGINNING_PATTERN, '');
|
138 | startsAt += matches[0].length - number.length;
|
139 |
|
140 |
|
141 |
|
142 | number = number.replace(PUNCTUATION_IN_THE_END_PATTERN, '');
|
143 | number = (0, _parsePreCandidate["default"])(number);
|
144 | var result = this.parseCandidate(number, startsAt);
|
145 |
|
146 | if (result) {
|
147 | return result;
|
148 | }
|
149 |
|
150 |
|
151 |
|
152 | return this.find();
|
153 | }
|
154 | }, {
|
155 | key: "parseCandidate",
|
156 | value: function parseCandidate(number, startsAt) {
|
157 | if (!(0, _isValidPreCandidate["default"])(number, startsAt, this.text)) {
|
158 | return;
|
159 | }
|
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 | if (!(0, _isValidCandidate["default"])(number, startsAt, this.text, this.options.extended ? 'POSSIBLE' : 'VALID')) {
|
166 | return;
|
167 | }
|
168 |
|
169 |
|
170 |
|
171 |
|
172 |
|
173 |
|
174 |
|
175 |
|
176 |
|
177 |
|
178 |
|
179 |
|
180 | var result = (0, _parse_["default"])(number, this.options, this.metadata);
|
181 |
|
182 | if (!result.phone) {
|
183 | return;
|
184 | }
|
185 |
|
186 | result.startsAt = startsAt;
|
187 | result.endsAt = startsAt + number.length;
|
188 | return result;
|
189 | }
|
190 | }, {
|
191 | key: "hasNext",
|
192 | value: function hasNext() {
|
193 | if (this.state === 'NOT_READY') {
|
194 | this.last_match = this.find();
|
195 |
|
196 | if (this.last_match) {
|
197 | this.state = 'READY';
|
198 | } else {
|
199 | this.state = 'DONE';
|
200 | }
|
201 | }
|
202 |
|
203 | return this.state === 'READY';
|
204 | }
|
205 | }, {
|
206 | key: "next",
|
207 | value: function next() {
|
208 |
|
209 | if (!this.hasNext()) {
|
210 | throw new Error('No next element');
|
211 | }
|
212 |
|
213 |
|
214 | var result = this.last_match;
|
215 | this.last_match = null;
|
216 | this.state = 'NOT_READY';
|
217 | return result;
|
218 | }
|
219 | }]);
|
220 |
|
221 | return PhoneNumberSearch;
|
222 | }();
|
223 |
|
224 | exports.PhoneNumberSearch = PhoneNumberSearch;
|
225 |
|
\ | No newline at end of file |