UNPKG

149 kBJavaScriptView Raw
1import { unparse } from 'papaparse';
2import { utils, writeFile, read, readFile } from 'xlsx';
3import Axios from 'axios';
4import * as PromiseSftp from 'promise-sftp';
5import { transform, includes } from 'lodash';
6import { getDate, getMonth, getYear, isValid, parse, format, setYear, isTuesday, differenceInYears, differenceInDays } from 'date-fns';
7
8/*! *****************************************************************************
9Copyright (c) Microsoft Corporation. All rights reserved.
10Licensed under the Apache License, Version 2.0 (the "License"); you may not use
11this file except in compliance with the License. You may obtain a copy of the
12License at http://www.apache.org/licenses/LICENSE-2.0
13
14THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
16WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
17MERCHANTABLITY OR NON-INFRINGEMENT.
18
19See the Apache Version 2.0 License for specific language governing permissions
20and limitations under the License.
21***************************************************************************** */
22
23function __awaiter(thisArg, _arguments, P, generator) {
24 return new (P || (P = Promise))(function (resolve, reject) {
25 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
26 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
28 step((generator = generator.apply(thisArg, _arguments || [])).next());
29 });
30}
31
32/**
33 * Convert data/buffer/file into different formats
34 *
35 * @export
36 * @class Convert
37 * @implements {ConvertInterface}
38 */
39class Convert {
40 constructor() {
41 this.utils = utils;
42 }
43 /**
44 * convert object array to excel file type using
45 * the fs system from node.
46 *
47 * @param {{}[]} data data to be converted
48 * @param {{ bookType: XLSX.BookType; fileName: string; path?: string }} opts
49 * @returns
50 * @memberof Convert
51 */
52 jsonToExcel(data, opts) {
53 return __awaiter(this, void 0, void 0, function* () {
54 if (opts.bookType === null) {
55 opts.bookType = 'xlsx';
56 }
57 const wb = this.toWorkbook(data);
58 const { bookType, fileName, path } = opts;
59 let output = fileName;
60 if (path) {
61 output = `${path}/${fileName}`;
62 }
63 return Promise.resolve(writeFile(wb, output, {
64 bookType,
65 }));
66 });
67 }
68 /**
69 * convert json to csv using papaparse
70 *
71 * @param {{}[]} data data to be converted
72 * @param {{
73 * header?: boolean;
74 * delimiter?: 'string';
75 * quotes?: boolean;
76 * quoteChar?: string;
77 * }} [opts] options
78 * @returns a csv file that can be written to file
79 * @memberof Convert
80 */
81 jsonToCsv(data, opts) {
82 return __awaiter(this, void 0, void 0, function* () {
83 if (opts) {
84 return Promise.resolve(unparse(data, opts));
85 }
86 return Promise.resolve(unparse(data));
87 });
88 }
89 /**
90 * convert json to TXT
91 *
92 * @param {{}[]} data data to be converted
93 * @returns return a UTF16 Formatted string that can be written to file
94 * @memberof Convert
95 */
96 jsonToTxt(data) {
97 return __awaiter(this, void 0, void 0, function* () {
98 const ws = this.utils.json_to_sheet(data);
99 return this.utils.sheet_to_txt(ws);
100 });
101 }
102 /**
103 * convert an excel file to json array of objects
104 *
105 * @param {(Buffer | string)} data if buffer it's from the browser, if string from node fs
106 * @returns {Promise<{}[]>} processed json promise
107 * @memberof Convert
108 */
109 /* tslint:disable:no-any */
110 excelToJson(data) {
111 let workbook;
112 if (Buffer.isBuffer(data)) {
113 const buffer = new Uint8Array(data);
114 workbook = read(buffer, { type: 'array' });
115 }
116 else {
117 workbook = readFile(data);
118 }
119 const worksheet = workbook.Sheets[workbook.SheetNames[0]];
120 return Promise.resolve(this.utils.sheet_to_json(worksheet));
121 }
122 /**
123 * convert data to workbook
124 *
125 * @private
126 * @param {{}[]} data
127 * @returns a workbook
128 * @memberof Convert
129 */
130 toWorkbook(data) {
131 const ws = this.utils.json_to_sheet(data);
132 const wb = this.utils.book_new();
133 this.utils.book_append_sheet(wb, ws);
134 return wb;
135 }
136}
137
138/**
139 * Handle webhook for file upload and then get the link and upload
140 * it to another ftp link.
141 *
142 * @export
143 * @class Ftp
144 */
145class Ftp {
146 /**
147 * Creates an instance of Ftp.
148 * @param {Config} config
149 * @memberof Ftp
150 */
151 constructor(config) {
152 this.config = config;
153 this.axios = Axios.create();
154 this.axiosOpts = { responseType: 'arraybuffer' };
155 this.sftp = new PromiseSftp();
156 }
157 /**
158 * upload file to an ftp server
159 *
160 * @param {string} path path of the file to be uploaded
161 * @param {string} remoteFolder remote folder to upload the file to
162 * @returns Promise<string>
163 * @memberof Ftp
164 */
165 upload(path, remoteFolder) {
166 return __awaiter(this, void 0, void 0, function* () {
167 try {
168 const { host, username, password } = this.config;
169 const opts = { host, username, password, port: 22 };
170 const { buffer, fileName } = yield this.getFileUrl(path);
171 yield this.sftp.connect(opts);
172 yield this.sftp.put(buffer, `${remoteFolder}/${fileName}`);
173 yield this.sftp.end();
174 return Promise.resolve('success');
175 }
176 catch (error) {
177 console.error('uploadToFtp error: ', error);
178 yield this.sftp.end();
179 return error;
180 }
181 });
182 }
183 /**
184 * download file from an ftp server
185 *
186 * @param {string} path path of the file to be downloaded
187 * @returns {Promise<any>} object array from processed xlsx file
188 * @memberof Ftp
189 */
190 download(path) {
191 return __awaiter(this, void 0, void 0, function* () {
192 try {
193 const { buffer, fileName } = yield this.getFileUrl(path);
194 const convert = new Convert();
195 const data = yield convert.excelToJson(buffer);
196 return { data, fileName };
197 }
198 catch (err) {
199 yield this.sftp.end();
200 return err;
201 }
202 });
203 }
204 /**
205 * list the files in the given ftp path/folder
206 *
207 * @param {string} path path to list
208 * @returns {Promise<any>}
209 * @memberof Ftp
210 */
211 list(path) {
212 return __awaiter(this, void 0, void 0, function* () {
213 try {
214 const { host, username, password } = this.config;
215 const opts = { host, username, password, port: 22 };
216 yield this.sftp.connect(opts);
217 const ls = yield this.sftp.list(path);
218 yield this.sftp.end();
219 return ls;
220 }
221 catch (err) {
222 yield this.sftp.end();
223 return err;
224 }
225 });
226 }
227 /**
228 * Move a file from one path to another
229 *
230 * @param {string} oldPath current path
231 * @param {string} newPath final path after movex
232 * @returns {Promise<any>}
233 * @memberof Ftp
234 */
235 move(oldPath, newPath) {
236 return __awaiter(this, void 0, void 0, function* () {
237 try {
238 const { host, username, password } = this.config;
239 const opts = { host, username, password, port: 22 };
240 yield this.sftp.connect(opts);
241 yield this.sftp.rename(oldPath, newPath);
242 return yield this.sftp.end();
243 }
244 catch (err) {
245 yield this.sftp.end();
246 return Promise.reject(err);
247 }
248 });
249 }
250 /**
251 * make a directory at the given path
252 *
253 * @param {string} path path with name to create directory
254 * @returns {Promise<any>}
255 * @memberof Ftp
256 */
257 mkdir(path) {
258 return __awaiter(this, void 0, void 0, function* () {
259 try {
260 const { host, username, password } = this.config;
261 const opts = { host, username, password, port: 22 };
262 yield this.sftp.connect(opts);
263 yield this.sftp.mkdir(path);
264 return yield this.sftp.end();
265 }
266 catch (err) {
267 yield this.sftp.end();
268 return Promise.reject(err);
269 }
270 });
271 }
272 /**
273 * Get the file buffer to be downloaded/uploaded and file name.
274 *
275 * @private
276 * @param {string} path path of the file
277 * @returns {Promise<GetFileUrl>} promise file with buffer & fileName
278 * @memberof Ftp
279 */
280 getFileUrl(path) {
281 return __awaiter(this, void 0, void 0, function* () {
282 const { apiKey, apiPass, apiUrl } = this.config;
283 const opts = {
284 method: 'get',
285 url: `${apiUrl}/${path}`,
286 auth: { username: apiKey, password: apiPass },
287 };
288 try {
289 const { data } = yield this.axios(opts);
290 const res = yield this.axios.get(data.download_uri, this.axiosOpts);
291 return { buffer: res.data, fileName: data.display_name };
292 }
293 catch (err) {
294 return err;
295 }
296 });
297 }
298}
299
300/**
301 * Ensure some object is a coerced to a string
302 **/
303var makeString = function makeString(object) {
304 if (object == null) return '';
305 return '' + object;
306};
307
308var isBlank = function isBlank(str) {
309 return (/^\s*$/).test(makeString(str));
310};
311
312var stripTags = function stripTags(str) {
313 return makeString(str).replace(/<\/?[^>]+>/g, '');
314};
315
316var capitalize = function capitalize(str, lowercaseRest) {
317 str = makeString(str);
318 var remainingChars = !lowercaseRest ? str.slice(1) : str.slice(1).toLowerCase();
319
320 return str.charAt(0).toUpperCase() + remainingChars;
321};
322
323var decapitalize = function decapitalize(str) {
324 str = makeString(str);
325 return str.charAt(0).toLowerCase() + str.slice(1);
326};
327
328var chop = function chop(str, step) {
329 if (str == null) return [];
330 str = String(str);
331 step = ~~step;
332 return step > 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str];
333};
334
335var escapeRegExp = function escapeRegExp(str) {
336 return makeString(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
337};
338
339var defaultToWhiteSpace = function defaultToWhiteSpace(characters) {
340 if (characters == null)
341 return '\\s';
342 else if (characters.source)
343 return characters.source;
344 else
345 return '[' + escapeRegExp(characters) + ']';
346};
347
348var nativeTrim = String.prototype.trim;
349
350var trim = function trim(str, characters) {
351 str = makeString(str);
352 if (!characters && nativeTrim) return nativeTrim.call(str);
353 characters = defaultToWhiteSpace(characters);
354 return str.replace(new RegExp('^' + characters + '+|' + characters + '+$', 'g'), '');
355};
356
357var clean = function clean(str) {
358 return trim(str).replace(/\s\s+/g, ' ');
359};
360
361var from = 'ąàáäâãåæăćčĉęèéëêĝĥìíïîĵłľńňòóöőôõðøśșşšŝťțţŭùúüűûñÿýçżźž',
362 to = 'aaaaaaaaaccceeeeeghiiiijllnnoooooooossssstttuuuuuunyyczzz';
363
364from += from.toUpperCase();
365to += to.toUpperCase();
366
367to = to.split('');
368
369// for tokens requireing multitoken output
370from += 'ß';
371to.push('ss');
372
373
374var cleanDiacritics = function cleanDiacritics(str) {
375 return makeString(str).replace(/.{1}/g, function(c){
376 var index = from.indexOf(c);
377 return index === -1 ? c : to[index];
378 });
379};
380
381var count = function(str, substr) {
382 str = makeString(str);
383 substr = makeString(substr);
384
385 if (str.length === 0 || substr.length === 0) return 0;
386
387 return str.split(substr).length - 1;
388};
389
390var chars = function chars(str) {
391 return makeString(str).split('');
392};
393
394var swapCase = function swapCase(str) {
395 return makeString(str).replace(/\S/g, function(c) {
396 return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase();
397 });
398};
399
400/* We're explicitly defining the list of entities we want to escape.
401nbsp is an HTML entity, but we don't want to escape all space characters in a string, hence its omission in this map.
402
403*/
404var escapeChars = {
405 '¢' : 'cent',
406 '£' : 'pound',
407 '¥' : 'yen',
408 '€': 'euro',
409 '©' :'copy',
410 '®' : 'reg',
411 '<' : 'lt',
412 '>' : 'gt',
413 '"' : 'quot',
414 '&' : 'amp',
415 '\'' : '#39'
416};
417
418var escapeChars_1 = escapeChars;
419
420var regexString = '[';
421for(var key in escapeChars_1) {
422 regexString += key;
423}
424regexString += ']';
425
426var regex = new RegExp( regexString, 'g');
427
428var escapeHTML = function escapeHTML(str) {
429
430 return makeString(str).replace(regex, function(m) {
431 return '&' + escapeChars_1[m] + ';';
432 });
433};
434
435/*
436We're explicitly defining the list of entities that might see in escape HTML strings
437*/
438var htmlEntities = {
439 nbsp: ' ',
440 cent: '¢',
441 pound: '£',
442 yen: '¥',
443 euro: '€',
444 copy: '©',
445 reg: '®',
446 lt: '<',
447 gt: '>',
448 quot: '"',
449 amp: '&',
450 apos: '\''
451};
452
453var htmlEntities_1 = htmlEntities;
454
455var unescapeHTML = function unescapeHTML(str) {
456 return makeString(str).replace(/\&([^;]+);/g, function(entity, entityCode) {
457 var match;
458
459 if (entityCode in htmlEntities_1) {
460 return htmlEntities_1[entityCode];
461 /*eslint no-cond-assign: 0*/
462 } else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
463 return String.fromCharCode(parseInt(match[1], 16));
464 /*eslint no-cond-assign: 0*/
465 } else if (match = entityCode.match(/^#(\d+)$/)) {
466 return String.fromCharCode(~~match[1]);
467 } else {
468 return entity;
469 }
470 });
471};
472
473var splice = function splice(str, i, howmany, substr) {
474 var arr = chars(str);
475 arr.splice(~~i, ~~howmany, substr);
476 return arr.join('');
477};
478
479var insert = function insert(str, i, substr) {
480 return splice(str, i, 0, substr);
481};
482
483var replaceAll = function replaceAll(str, find, replace, ignorecase) {
484 var flags = (ignorecase === true)?'gi':'g';
485 var reg = new RegExp(find, flags);
486
487 return makeString(str).replace(reg, replace);
488};
489
490var include = function include(str, needle) {
491 if (needle === '') return true;
492 return makeString(str).indexOf(needle) !== -1;
493};
494
495var slice = [].slice;
496
497var join = function join() {
498 var args = slice.call(arguments),
499 separator = args.shift();
500
501 return args.join(makeString(separator));
502};
503
504var lines = function lines(str) {
505 if (str == null) return [];
506 return String(str).split(/\r\n?|\n/);
507};
508
509function getIndent(str) {
510 var matches = str.match(/^[\s\\t]*/gm);
511 var indent = matches[0].length;
512
513 for (var i = 1; i < matches.length; i++) {
514 indent = Math.min(matches[i].length, indent);
515 }
516
517 return indent;
518}
519
520var dedent = function dedent(str, pattern) {
521 str = makeString(str);
522 var indent = getIndent(str);
523 var reg;
524
525 if (indent === 0) return str;
526
527 if (typeof pattern === 'string') {
528 reg = new RegExp('^' + pattern, 'gm');
529 } else {
530 reg = new RegExp('^[ \\t]{' + indent + '}', 'gm');
531 }
532
533 return str.replace(reg, '');
534};
535
536var reverse = function reverse(str) {
537 return chars(str).reverse().join('');
538};
539
540var toPositive = function toPositive(number) {
541 return number < 0 ? 0 : (+number || 0);
542};
543
544var startsWith = function startsWith(str, starts, position) {
545 str = makeString(str);
546 starts = '' + starts;
547 position = position == null ? 0 : Math.min(toPositive(position), str.length);
548 return str.lastIndexOf(starts, position) === position;
549};
550
551var endsWith = function endsWith(str, ends, position) {
552 str = makeString(str);
553 ends = '' + ends;
554 if (typeof position == 'undefined') {
555 position = str.length - ends.length;
556 } else {
557 position = Math.min(toPositive(position), str.length) - ends.length;
558 }
559 return position >= 0 && str.indexOf(ends, position) === position;
560};
561
562var adjacent = function adjacent(str, direction) {
563 str = makeString(str);
564 if (str.length === 0) {
565 return '';
566 }
567 return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length - 1) + direction);
568};
569
570var pred = function succ(str) {
571 return adjacent(str, -1);
572};
573
574var succ = function succ(str) {
575 return adjacent(str, 1);
576};
577
578var titleize = function titleize(str) {
579 return makeString(str).toLowerCase().replace(/(?:^|\s|-)\S/g, function(c) {
580 return c.toUpperCase();
581 });
582};
583
584var camelize = function camelize(str, decapitalize$$1) {
585 str = trim(str).replace(/[-_\s]+(.)?/g, function(match, c) {
586 return c ? c.toUpperCase() : '';
587 });
588
589 if (decapitalize$$1 === true) {
590 return decapitalize(str);
591 } else {
592 return str;
593 }
594};
595
596var underscored = function underscored(str) {
597 return trim(str).replace(/([a-z\d])([A-Z]+)/g, '$1_$2').replace(/[-\s]+/g, '_').toLowerCase();
598};
599
600var dasherize = function dasherize(str) {
601 return trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
602};
603
604var classify = function classify(str) {
605 str = makeString(str);
606 return capitalize(camelize(str.replace(/[\W_]/g, ' ')).replace(/\s/g, ''));
607};
608
609var humanize = function humanize(str) {
610 return capitalize(trim(underscored(str).replace(/_id$/, '').replace(/_/g, ' ')));
611};
612
613var nativeTrimLeft = String.prototype.trimLeft;
614
615var ltrim = function ltrim(str, characters) {
616 str = makeString(str);
617 if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str);
618 characters = defaultToWhiteSpace(characters);
619 return str.replace(new RegExp('^' + characters + '+'), '');
620};
621
622var nativeTrimRight = String.prototype.trimRight;
623
624var rtrim = function rtrim(str, characters) {
625 str = makeString(str);
626 if (!characters && nativeTrimRight) return nativeTrimRight.call(str);
627 characters = defaultToWhiteSpace(characters);
628 return str.replace(new RegExp(characters + '+$'), '');
629};
630
631var truncate = function truncate(str, length, truncateStr) {
632 str = makeString(str);
633 truncateStr = truncateStr || '...';
634 length = ~~length;
635 return str.length > length ? str.slice(0, length) + truncateStr : str;
636};
637
638/**
639 * _s.prune: a more elegant version of truncate
640 * prune extra chars, never leaving a half-chopped word.
641 * @author github.com/rwz
642 */
643
644
645
646var prune = function prune(str, length, pruneStr) {
647 str = makeString(str);
648 length = ~~length;
649 pruneStr = pruneStr != null ? String(pruneStr) : '...';
650
651 if (str.length <= length) return str;
652
653 var tmpl = function(c) {
654 return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' ';
655 },
656 template = str.slice(0, length + 1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA'
657
658 if (template.slice(template.length - 2).match(/\w\w/))
659 template = template.replace(/\s*\S+$/, '');
660 else
661 template = rtrim(template.slice(0, template.length - 1));
662
663 return (template + pruneStr).length > str.length ? str : str.slice(0, template.length) + pruneStr;
664};
665
666var words = function words(str, delimiter) {
667 if (isBlank(str)) return [];
668 return trim(str, delimiter).split(delimiter || /\s+/);
669};
670
671var strRepeat = function strRepeat(str, qty){
672 if (qty < 1) return '';
673 var result = '';
674 while (qty > 0) {
675 if (qty & 1) result += str;
676 qty >>= 1, str += str;
677 }
678 return result;
679};
680
681var pad = function pad(str, length, padStr, type) {
682 str = makeString(str);
683 length = ~~length;
684
685 var padlen = 0;
686
687 if (!padStr)
688 padStr = ' ';
689 else if (padStr.length > 1)
690 padStr = padStr.charAt(0);
691
692 switch (type) {
693 case 'right':
694 padlen = length - str.length;
695 return str + strRepeat(padStr, padlen);
696 case 'both':
697 padlen = length - str.length;
698 return strRepeat(padStr, Math.ceil(padlen / 2)) + str + strRepeat(padStr, Math.floor(padlen / 2));
699 default: // 'left'
700 padlen = length - str.length;
701 return strRepeat(padStr, padlen) + str;
702 }
703};
704
705var lpad = function lpad(str, length, padStr) {
706 return pad(str, length, padStr);
707};
708
709var rpad = function rpad(str, length, padStr) {
710 return pad(str, length, padStr, 'right');
711};
712
713var lrpad = function lrpad(str, length, padStr) {
714 return pad(str, length, padStr, 'both');
715};
716
717var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
718
719function unwrapExports (x) {
720 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
721}
722
723function createCommonjsModule(fn, module) {
724 return module = { exports: {} }, fn(module, module.exports), module.exports;
725}
726
727/**
728 * Module exports.
729 */
730
731var browser = deprecate;
732
733/**
734 * Mark that a method should not be used.
735 * Returns a modified function which warns once by default.
736 *
737 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
738 *
739 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
740 * will throw an Error when invoked.
741 *
742 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
743 * will invoke `console.trace()` instead of `console.error()`.
744 *
745 * @param {Function} fn - the function to deprecate
746 * @param {String} msg - the string to print to the console when `fn` is invoked
747 * @returns {Function} a new "deprecated" version of `fn`
748 * @api public
749 */
750
751function deprecate (fn, msg) {
752 if (config('noDeprecation')) {
753 return fn;
754 }
755
756 var warned = false;
757 function deprecated() {
758 if (!warned) {
759 if (config('throwDeprecation')) {
760 throw new Error(msg);
761 } else if (config('traceDeprecation')) {
762 console.trace(msg);
763 } else {
764 console.warn(msg);
765 }
766 warned = true;
767 }
768 return fn.apply(this, arguments);
769 }
770
771 return deprecated;
772}
773
774/**
775 * Checks `localStorage` for boolean values for the given `name`.
776 *
777 * @param {String} name
778 * @returns {Boolean}
779 * @api private
780 */
781
782function config (name) {
783 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
784 try {
785 if (!commonjsGlobal.localStorage) return false;
786 } catch (_) {
787 return false;
788 }
789 var val = commonjsGlobal.localStorage[name];
790 if (null == val) return false;
791 return String(val).toLowerCase() === 'true';
792}
793
794var sprintf = createCommonjsModule(function (module, exports) {
795/* global window, exports, define */
796
797!function() {
798
799 var re = {
800 not_string: /[^s]/,
801 not_bool: /[^t]/,
802 not_type: /[^T]/,
803 not_primitive: /[^v]/,
804 number: /[diefg]/,
805 numeric_arg: /[bcdiefguxX]/,
806 json: /[j]/,
807 not_json: /[^j]/,
808 text: /^[^\x25]+/,
809 modulo: /^\x25{2}/,
810 placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,
811 key: /^([a-z_][a-z_\d]*)/i,
812 key_access: /^\.([a-z_][a-z_\d]*)/i,
813 index_access: /^\[(\d+)\]/,
814 sign: /^[\+\-]/
815 };
816
817 function sprintf(key) {
818 // `arguments` is not an array, but should be fine for this call
819 return sprintf_format(sprintf_parse(key), arguments)
820 }
821
822 function vsprintf(fmt, argv) {
823 return sprintf.apply(null, [fmt].concat(argv || []))
824 }
825
826 function sprintf_format(parse_tree, argv) {
827 var cursor = 1, tree_length = parse_tree.length, arg, output = '', i, k, match, pad, pad_character, pad_length, is_positive, sign;
828 for (i = 0; i < tree_length; i++) {
829 if (typeof parse_tree[i] === 'string') {
830 output += parse_tree[i];
831 }
832 else if (Array.isArray(parse_tree[i])) {
833 match = parse_tree[i]; // convenience purposes only
834 if (match[2]) { // keyword argument
835 arg = argv[cursor];
836 for (k = 0; k < match[2].length; k++) {
837 if (!arg.hasOwnProperty(match[2][k])) {
838 throw new Error(sprintf('[sprintf] property "%s" does not exist', match[2][k]))
839 }
840 arg = arg[match[2][k]];
841 }
842 }
843 else if (match[1]) { // positional argument (explicit)
844 arg = argv[match[1]];
845 }
846 else { // positional argument (implicit)
847 arg = argv[cursor++];
848 }
849
850 if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && arg instanceof Function) {
851 arg = arg();
852 }
853
854 if (re.numeric_arg.test(match[8]) && (typeof arg !== 'number' && isNaN(arg))) {
855 throw new TypeError(sprintf('[sprintf] expecting number but found %T', arg))
856 }
857
858 if (re.number.test(match[8])) {
859 is_positive = arg >= 0;
860 }
861
862 switch (match[8]) {
863 case 'b':
864 arg = parseInt(arg, 10).toString(2);
865 break
866 case 'c':
867 arg = String.fromCharCode(parseInt(arg, 10));
868 break
869 case 'd':
870 case 'i':
871 arg = parseInt(arg, 10);
872 break
873 case 'j':
874 arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0);
875 break
876 case 'e':
877 arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential();
878 break
879 case 'f':
880 arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg);
881 break
882 case 'g':
883 arg = match[7] ? String(Number(arg.toPrecision(match[7]))) : parseFloat(arg);
884 break
885 case 'o':
886 arg = (parseInt(arg, 10) >>> 0).toString(8);
887 break
888 case 's':
889 arg = String(arg);
890 arg = (match[7] ? arg.substring(0, match[7]) : arg);
891 break
892 case 't':
893 arg = String(!!arg);
894 arg = (match[7] ? arg.substring(0, match[7]) : arg);
895 break
896 case 'T':
897 arg = Object.prototype.toString.call(arg).slice(8, -1).toLowerCase();
898 arg = (match[7] ? arg.substring(0, match[7]) : arg);
899 break
900 case 'u':
901 arg = parseInt(arg, 10) >>> 0;
902 break
903 case 'v':
904 arg = arg.valueOf();
905 arg = (match[7] ? arg.substring(0, match[7]) : arg);
906 break
907 case 'x':
908 arg = (parseInt(arg, 10) >>> 0).toString(16);
909 break
910 case 'X':
911 arg = (parseInt(arg, 10) >>> 0).toString(16).toUpperCase();
912 break
913 }
914 if (re.json.test(match[8])) {
915 output += arg;
916 }
917 else {
918 if (re.number.test(match[8]) && (!is_positive || match[3])) {
919 sign = is_positive ? '+' : '-';
920 arg = arg.toString().replace(re.sign, '');
921 }
922 else {
923 sign = '';
924 }
925 pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' ';
926 pad_length = match[6] - (sign + arg).length;
927 pad = match[6] ? (pad_length > 0 ? pad_character.repeat(pad_length) : '') : '';
928 output += match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg);
929 }
930 }
931 }
932 return output
933 }
934
935 var sprintf_cache = Object.create(null);
936
937 function sprintf_parse(fmt) {
938 if (sprintf_cache[fmt]) {
939 return sprintf_cache[fmt]
940 }
941
942 var _fmt = fmt, match, parse_tree = [], arg_names = 0;
943 while (_fmt) {
944 if ((match = re.text.exec(_fmt)) !== null) {
945 parse_tree.push(match[0]);
946 }
947 else if ((match = re.modulo.exec(_fmt)) !== null) {
948 parse_tree.push('%');
949 }
950 else if ((match = re.placeholder.exec(_fmt)) !== null) {
951 if (match[2]) {
952 arg_names |= 1;
953 var field_list = [], replacement_field = match[2], field_match = [];
954 if ((field_match = re.key.exec(replacement_field)) !== null) {
955 field_list.push(field_match[1]);
956 while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') {
957 if ((field_match = re.key_access.exec(replacement_field)) !== null) {
958 field_list.push(field_match[1]);
959 }
960 else if ((field_match = re.index_access.exec(replacement_field)) !== null) {
961 field_list.push(field_match[1]);
962 }
963 else {
964 throw new SyntaxError('[sprintf] failed to parse named argument key')
965 }
966 }
967 }
968 else {
969 throw new SyntaxError('[sprintf] failed to parse named argument key')
970 }
971 match[2] = field_list;
972 }
973 else {
974 arg_names |= 2;
975 }
976 if (arg_names === 3) {
977 throw new Error('[sprintf] mixing positional and named placeholders is not (yet) supported')
978 }
979 parse_tree.push(match);
980 }
981 else {
982 throw new SyntaxError('[sprintf] unexpected placeholder')
983 }
984 _fmt = _fmt.substring(match[0].length);
985 }
986 return sprintf_cache[fmt] = parse_tree
987 }
988
989 /**
990 * export to either browser or node.js
991 */
992 /* eslint-disable quote-props */
993 {
994 exports['sprintf'] = sprintf;
995 exports['vsprintf'] = vsprintf;
996 }
997 if (typeof window !== 'undefined') {
998 window['sprintf'] = sprintf;
999 window['vsprintf'] = vsprintf;
1000
1001 if (typeof undefined === 'function' && undefined['amd']) {
1002 undefined(function() {
1003 return {
1004 'sprintf': sprintf,
1005 'vsprintf': vsprintf
1006 }
1007 });
1008 }
1009 }
1010 /* eslint-enable quote-props */
1011}();
1012});
1013
1014var sprintf$1 = browser(sprintf.sprintf,
1015 'sprintf() will be removed in the next major release, use the sprintf-js package instead.');
1016
1017var vsprintf = browser(sprintf.vsprintf,
1018 'vsprintf() will be removed in the next major release, use the sprintf-js package instead.');
1019
1020var toNumber = function toNumber(num, precision) {
1021 if (num == null) return 0;
1022 var factor = Math.pow(10, isFinite(precision) ? precision : 0);
1023 return Math.round(num * factor) / factor;
1024};
1025
1026var numberFormat = function numberFormat(number, dec, dsep, tsep) {
1027 if (isNaN(number) || number == null) return '';
1028
1029 number = number.toFixed(~~dec);
1030 tsep = typeof tsep == 'string' ? tsep : ',';
1031
1032 var parts = number.split('.'),
1033 fnums = parts[0],
1034 decimals = parts[1] ? (dsep || '.') + parts[1] : '';
1035
1036 return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals;
1037};
1038
1039var strRight = function strRight(str, sep) {
1040 str = makeString(str);
1041 sep = makeString(sep);
1042 var pos = !sep ? -1 : str.indexOf(sep);
1043 return~ pos ? str.slice(pos + sep.length, str.length) : str;
1044};
1045
1046var strRightBack = function strRightBack(str, sep) {
1047 str = makeString(str);
1048 sep = makeString(sep);
1049 var pos = !sep ? -1 : str.lastIndexOf(sep);
1050 return~ pos ? str.slice(pos + sep.length, str.length) : str;
1051};
1052
1053var strLeft = function strLeft(str, sep) {
1054 str = makeString(str);
1055 sep = makeString(sep);
1056 var pos = !sep ? -1 : str.indexOf(sep);
1057 return~ pos ? str.slice(0, pos) : str;
1058};
1059
1060var strLeftBack = function strLeftBack(str, sep) {
1061 str = makeString(str);
1062 sep = makeString(sep);
1063 var pos = str.lastIndexOf(sep);
1064 return~ pos ? str.slice(0, pos) : str;
1065};
1066
1067var toSentence = function toSentence(array, separator, lastSeparator, serial) {
1068 separator = separator || ', ';
1069 lastSeparator = lastSeparator || ' and ';
1070 var a = array.slice(),
1071 lastMember = a.pop();
1072
1073 if (array.length > 2 && serial) lastSeparator = rtrim(separator) + lastSeparator;
1074
1075 return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember;
1076};
1077
1078var toSentenceSerial = function toSentenceSerial(array, sep, lastSep) {
1079 return toSentence(array, sep, lastSep, true);
1080};
1081
1082var slugify = function slugify(str) {
1083 return trim(dasherize(cleanDiacritics(str).replace(/[^\w\s-]/g, '-').toLowerCase()), '-');
1084};
1085
1086var surround = function surround(str, wrapper) {
1087 return [wrapper, str, wrapper].join('');
1088};
1089
1090var quote = function quote(str, quoteChar) {
1091 return surround(str, quoteChar || '"');
1092};
1093
1094var unquote = function unquote(str, quoteChar) {
1095 quoteChar = quoteChar || '"';
1096 if (str[0] === quoteChar && str[str.length - 1] === quoteChar)
1097 return str.slice(1, str.length - 1);
1098 else return str;
1099};
1100
1101var repeat = function repeat(str, qty, separator) {
1102 str = makeString(str);
1103
1104 qty = ~~qty;
1105
1106 // using faster implementation if separator is not needed;
1107 if (separator == null) return strRepeat(str, qty);
1108
1109 // this one is about 300x slower in Google Chrome
1110 /*eslint no-empty: 0*/
1111 for (var repeat = []; qty > 0; repeat[--qty] = str) {}
1112 return repeat.join(separator);
1113};
1114
1115var naturalCmp = function naturalCmp(str1, str2) {
1116 if (str1 == str2) return 0;
1117 if (!str1) return -1;
1118 if (!str2) return 1;
1119
1120 var cmpRegex = /(\.\d+|\d+|\D+)/g,
1121 tokens1 = String(str1).match(cmpRegex),
1122 tokens2 = String(str2).match(cmpRegex),
1123 count = Math.min(tokens1.length, tokens2.length);
1124
1125 for (var i = 0; i < count; i++) {
1126 var a = tokens1[i],
1127 b = tokens2[i];
1128
1129 if (a !== b) {
1130 var num1 = +a;
1131 var num2 = +b;
1132 if (num1 === num1 && num2 === num2) {
1133 return num1 > num2 ? 1 : -1;
1134 }
1135 return a < b ? -1 : 1;
1136 }
1137 }
1138
1139 if (tokens1.length != tokens2.length)
1140 return tokens1.length - tokens2.length;
1141
1142 return str1 < str2 ? -1 : 1;
1143};
1144
1145/**
1146 * Based on the implementation here: https://github.com/hiddentao/fast-levenshtein
1147 */
1148var levenshtein = function levenshtein(str1, str2) {
1149 str1 = makeString(str1);
1150 str2 = makeString(str2);
1151
1152 // Short cut cases
1153 if (str1 === str2) return 0;
1154 if (!str1 || !str2) return Math.max(str1.length, str2.length);
1155
1156 // two rows
1157 var prevRow = new Array(str2.length + 1);
1158
1159 // initialise previous row
1160 for (var i = 0; i < prevRow.length; ++i) {
1161 prevRow[i] = i;
1162 }
1163
1164 // calculate current row distance from previous row
1165 for (i = 0; i < str1.length; ++i) {
1166 var nextCol = i + 1;
1167
1168 for (var j = 0; j < str2.length; ++j) {
1169 var curCol = nextCol;
1170
1171 // substution
1172 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
1173 // insertion
1174 var tmp = curCol + 1;
1175 if (nextCol > tmp) {
1176 nextCol = tmp;
1177 }
1178 // deletion
1179 tmp = prevRow[j + 1] + 1;
1180 if (nextCol > tmp) {
1181 nextCol = tmp;
1182 }
1183
1184 // copy current col value into previous (in preparation for next iteration)
1185 prevRow[j] = curCol;
1186 }
1187
1188 // copy last col value into previous (in preparation for next iteration)
1189 prevRow[j] = nextCol;
1190 }
1191
1192 return nextCol;
1193};
1194
1195function boolMatch(s, matchers) {
1196 var i, matcher, down = s.toLowerCase();
1197 matchers = [].concat(matchers);
1198 for (i = 0; i < matchers.length; i += 1) {
1199 matcher = matchers[i];
1200 if (!matcher) continue;
1201 if (matcher.test && matcher.test(s)) return true;
1202 if (matcher.toLowerCase() === down) return true;
1203 }
1204}
1205
1206var toBoolean = function toBoolean(str, trueValues, falseValues) {
1207 if (typeof str === 'number') str = '' + str;
1208 if (typeof str !== 'string') return !!str;
1209 str = trim(str);
1210 if (boolMatch(str, trueValues || ['true', '1'])) return true;
1211 if (boolMatch(str, falseValues || ['false', '0'])) return false;
1212};
1213
1214var exports$1 = function() {
1215 var result = {};
1216
1217 for (var prop in this) {
1218 if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse|join|map|wrap)$/)) continue;
1219 result[prop] = this[prop];
1220 }
1221
1222 return result;
1223};
1224
1225// Wrap
1226// wraps a string by a certain width
1227
1228
1229
1230var wrap = function wrap(str, options){
1231 str = makeString(str);
1232
1233 options = options || {};
1234
1235 var width = options.width || 75;
1236 var seperator = options.seperator || '\n';
1237 var cut = options.cut || false;
1238 var preserveSpaces = options.preserveSpaces || false;
1239 var trailingSpaces = options.trailingSpaces || false;
1240
1241 var result;
1242
1243 if(width <= 0){
1244 return str;
1245 }
1246
1247 else if(!cut){
1248
1249 var words = str.split(' ');
1250 var current_column = 0;
1251 result = '';
1252
1253 while(words.length > 0){
1254
1255 // if adding a space and the next word would cause this line to be longer than width...
1256 if(1 + words[0].length + current_column > width){
1257 //start a new line if this line is not already empty
1258 if(current_column > 0){
1259 // add a space at the end of the line is preserveSpaces is true
1260 if (preserveSpaces){
1261 result += ' ';
1262 current_column++;
1263 }
1264 // fill the rest of the line with spaces if trailingSpaces option is true
1265 else if(trailingSpaces){
1266 while(current_column < width){
1267 result += ' ';
1268 current_column++;
1269 }
1270 }
1271 //start new line
1272 result += seperator;
1273 current_column = 0;
1274 }
1275 }
1276
1277 // if not at the begining of the line, add a space in front of the word
1278 if(current_column > 0){
1279 result += ' ';
1280 current_column++;
1281 }
1282
1283 // tack on the next word, update current column, a pop words array
1284 result += words[0];
1285 current_column += words[0].length;
1286 words.shift();
1287
1288 }
1289
1290 // fill the rest of the line with spaces if trailingSpaces option is true
1291 if(trailingSpaces){
1292 while(current_column < width){
1293 result += ' ';
1294 current_column++;
1295 }
1296 }
1297
1298 return result;
1299
1300 }
1301
1302 else {
1303
1304 var index = 0;
1305 result = '';
1306
1307 // walk through each character and add seperators where appropriate
1308 while(index < str.length){
1309 if(index % width == 0 && index > 0){
1310 result += seperator;
1311 }
1312 result += str.charAt(index);
1313 index++;
1314 }
1315
1316 // fill the rest of the line with spaces if trailingSpaces option is true
1317 if(trailingSpaces){
1318 while(index % width > 0){
1319 result += ' ';
1320 index++;
1321 }
1322 }
1323
1324 return result;
1325 }
1326};
1327
1328var map = function(str, callback) {
1329 str = makeString(str);
1330
1331 if (str.length === 0 || typeof callback !== 'function') return str;
1332
1333 return str.replace(/./g, callback);
1334};
1335
1336function s(value) {
1337 /* jshint validthis: true */
1338 if (!(this instanceof s)) return new s(value);
1339 this._wrapped = value;
1340}
1341
1342s.VERSION = '3.3.4';
1343
1344s.isBlank = isBlank;
1345s.stripTags = stripTags;
1346s.capitalize = capitalize;
1347s.decapitalize = decapitalize;
1348s.chop = chop;
1349s.trim = trim;
1350s.clean = clean;
1351s.cleanDiacritics = cleanDiacritics;
1352s.count = count;
1353s.chars = chars;
1354s.swapCase = swapCase;
1355s.escapeHTML = escapeHTML;
1356s.unescapeHTML = unescapeHTML;
1357s.splice = splice;
1358s.insert = insert;
1359s.replaceAll = replaceAll;
1360s.include = include;
1361s.join = join;
1362s.lines = lines;
1363s.dedent = dedent;
1364s.reverse = reverse;
1365s.startsWith = startsWith;
1366s.endsWith = endsWith;
1367s.pred = pred;
1368s.succ = succ;
1369s.titleize = titleize;
1370s.camelize = camelize;
1371s.underscored = underscored;
1372s.dasherize = dasherize;
1373s.classify = classify;
1374s.humanize = humanize;
1375s.ltrim = ltrim;
1376s.rtrim = rtrim;
1377s.truncate = truncate;
1378s.prune = prune;
1379s.words = words;
1380s.pad = pad;
1381s.lpad = lpad;
1382s.rpad = rpad;
1383s.lrpad = lrpad;
1384s.sprintf = sprintf$1;
1385s.vsprintf = vsprintf;
1386s.toNumber = toNumber;
1387s.numberFormat = numberFormat;
1388s.strRight = strRight;
1389s.strRightBack = strRightBack;
1390s.strLeft = strLeft;
1391s.strLeftBack = strLeftBack;
1392s.toSentence = toSentence;
1393s.toSentenceSerial = toSentenceSerial;
1394s.slugify = slugify;
1395s.surround = surround;
1396s.quote = quote;
1397s.unquote = unquote;
1398s.repeat = repeat;
1399s.naturalCmp = naturalCmp;
1400s.levenshtein = levenshtein;
1401s.toBoolean = toBoolean;
1402s.exports = exports$1;
1403s.escapeRegExp = escapeRegExp;
1404s.wrap = wrap;
1405s.map = map;
1406
1407// Aliases
1408s.strip = s.trim;
1409s.lstrip = s.ltrim;
1410s.rstrip = s.rtrim;
1411s.center = s.lrpad;
1412s.rjust = s.lpad;
1413s.ljust = s.rpad;
1414s.contains = s.include;
1415s.q = s.quote;
1416s.toBool = s.toBoolean;
1417s.camelcase = s.camelize;
1418s.mapChars = s.map;
1419
1420
1421// Implement chaining
1422s.prototype = {
1423 value: function value() {
1424 return this._wrapped;
1425 }
1426};
1427
1428function fn2method(key, fn) {
1429 if (typeof fn !== 'function') return;
1430 s.prototype[key] = function() {
1431 var args = [this._wrapped].concat(Array.prototype.slice.call(arguments));
1432 var res = fn.apply(null, args);
1433 // if the result is non-string stop the chain and return the value
1434 return typeof res === 'string' ? new s(res) : res;
1435 };
1436}
1437
1438// Copy functions to instance methods for chaining
1439for (var key$1 in s) fn2method(key$1, s[key$1]);
1440
1441fn2method('tap', function tap(string, fn) {
1442 return fn(string);
1443});
1444
1445function prototype2method(methodName) {
1446 fn2method(methodName, function(context) {
1447 var args = Array.prototype.slice.call(arguments, 1);
1448 return String.prototype[methodName].apply(context, args);
1449 });
1450}
1451
1452var prototypeMethods = [
1453 'toUpperCase',
1454 'toLowerCase',
1455 'split',
1456 'replace',
1457 'slice',
1458 'substring',
1459 'substr',
1460 'concat'
1461];
1462
1463for (var method in prototypeMethods) prototype2method(prototypeMethods[method]);
1464
1465
1466var underscore_string = s;
1467var underscore_string_1 = underscore_string.pad;
1468var underscore_string_2 = underscore_string.clean;
1469var underscore_string_3 = underscore_string.cleanDiacritics;
1470
1471/**
1472 * removes non-number values
1473 * @param phone
1474 */
1475function cleanPhone(phone) {
1476 const PHONE_REGEX = /[()-\s\D]/gi;
1477 return phone !== undefined ? phone.replace(PHONE_REGEX, '') : '';
1478}
1479/**
1480 * Remove unwanted structures from a string
1481 *
1482 * @export
1483 * @param {string} val string to be cleaned
1484 * @returns {string} clean string
1485 */
1486function cleanString(val) {
1487 return underscore_string_2(underscore_string_3(val)).replace(/[^\x20-\x7E]+/g, '');
1488}
1489/**
1490 * Clean entire object(row) and remove non-ascii characters
1491 *
1492 * @export
1493 * @param {CleanRow} row contains object to be cleaned
1494 * @returns {Object} cleaned object
1495 */
1496function cleanRow(row) {
1497 return transform(row, (result, value, key) => {
1498 const val = cleanString(value);
1499 result[key.toString()] = val;
1500 }, {});
1501}
1502
1503var DueDaysLimit;
1504(function (DueDaysLimit) {
1505 DueDaysLimit[DueDaysLimit["DUE_DAYS_LIMIT"] = 58] = "DUE_DAYS_LIMIT";
1506})(DueDaysLimit || (DueDaysLimit = {}));
1507var ColumnHeaders;
1508(function (ColumnHeaders) {
1509 ColumnHeaders["DATE_POSTED"] = "DATE_POSTED";
1510 ColumnHeaders["FIRSTNAME"] = "FIRSTNAME";
1511 ColumnHeaders["LASTNAME"] = "LASTNAME";
1512 ColumnHeaders["ADDRESS"] = "ADDRESS";
1513 ColumnHeaders["CITY"] = "CITY";
1514 ColumnHeaders["STATE"] = "STATE";
1515 ColumnHeaders["ZIP"] = "ZIP";
1516 ColumnHeaders["PHONE"] = "PHONE";
1517 ColumnHeaders["EMAIL"] = "EMAIL";
1518 ColumnHeaders["DOB"] = "DOB";
1519 ColumnHeaders["LEADID"] = "LEADID";
1520 ColumnHeaders["BIRTH_MONTH"] = "BIRTH_MONTH";
1521 ColumnHeaders["BIRTH_DAY"] = "BIRTH_DAY";
1522 ColumnHeaders["BIRTH_YEAR"] = "BIRTH_YEAR";
1523 ColumnHeaders["SOURCE_URL"] = "SOURCE_URL";
1524 ColumnHeaders["PRODUCT_OF_INTEREST"] = "PRODUCT_OF_INTEREST";
1525 ColumnHeaders["SOURCEID"] = "SOURCEID";
1526})(ColumnHeaders || (ColumnHeaders = {}));
1527var HealthAgeRange;
1528(function (HealthAgeRange) {
1529 HealthAgeRange[HealthAgeRange["MIN"] = 64] = "MIN";
1530 HealthAgeRange[HealthAgeRange["MAX"] = 75] = "MAX";
1531})(HealthAgeRange || (HealthAgeRange = {}));
1532var LifeAgeRange;
1533(function (LifeAgeRange) {
1534 LifeAgeRange[LifeAgeRange["MIN"] = 62] = "MIN";
1535 LifeAgeRange[LifeAgeRange["MAX"] = 75] = "MAX";
1536})(LifeAgeRange || (LifeAgeRange = {}));
1537var SourceIds;
1538(function (SourceIds) {
1539 SourceIds["DOUG"] = "11285";
1540 SourceIds["IR"] = "55902";
1541 SourceIds["LP_AI"] = "00007AI";
1542 SourceIds["LP_LS"] = "00007LS";
1543 SourceIds["LP_OA"] = "00007OA";
1544 SourceIds["STEVE"] = "13204";
1545 SourceIds["STEVE_IH"] = "13204-IH";
1546 SourceIds["STEVE_DS"] = "13204-DS";
1547 SourceIds["STEVE_IFA"] = "13204-IFA";
1548 SourceIds["REVI"] = "49124";
1549})(SourceIds || (SourceIds = {}));
1550var Verticals;
1551(function (Verticals) {
1552 Verticals["HEALTH"] = "HEALTH";
1553 Verticals["LIFE"] = "LIFE";
1554})(Verticals || (Verticals = {}));
1555var SourceUrl;
1556(function (SourceUrl) {
1557 SourceUrl["SOURCE_URL"] = "www.usacoverage.com";
1558})(SourceUrl || (SourceUrl = {}));
1559var Responses;
1560(function (Responses) {
1561 Responses["PAST"] = "PAST";
1562 Responses["VALID"] = "VALID";
1563 Responses["NONE"] = "NONE";
1564})(Responses || (Responses = {}));
1565var DateFormat;
1566(function (DateFormat) {
1567 DateFormat["DEFAULT_FORMAT"] = "MM/DD/YYYY";
1568 DateFormat["DOB_FORMAT"] = "YYYY-MM-DD";
1569})(DateFormat || (DateFormat = {}));
1570// Arrays not accepted form of Enums
1571const FILE_PRODUCT_TYPE = {
1572 LIFE: ['LIFE'],
1573 HEALTH: ['HLT', 'HEALTH'],
1574};
1575const IN_HOUSE_IDS = ['00007AI', '00007LS', '00007OA'];
1576const MAIN_COL_HEADERS = [
1577 'DATE_POSTED',
1578 'FIRSTNAME',
1579 'LASTNAME',
1580 'ADDRESS',
1581 'CITY',
1582 'STATE',
1583 'ZIP',
1584 'PHONE',
1585 'EMAIL',
1586 'DOB',
1587];
1588const OPTIONAL_COL_HEADERS = [
1589 'GENDER',
1590 'UNIVERSAL_LEADID',
1591 'HEIGHT_FT',
1592 'HEIGHT_IN',
1593 'WEIGHT',
1594 'PRE_EXISTING',
1595 'IP_ADDRESS',
1596];
1597
1598/**
1599 * checks the column against a list of predefined
1600 * column headers
1601 * s
1602 * @param {string} element
1603 * @returns {boolean}
1604 */
1605function correctHeader(element) {
1606 if (MAIN_COL_HEADERS.indexOf(element) === -1) {
1607 return OPTIONAL_COL_HEADERS.indexOf(element) === -1 ? false : true;
1608 }
1609 return true;
1610}
1611/**
1612 * Check if the file contains the main column headers
1613 * @param row
1614 */
1615function columnHeaders(headers) {
1616 return headers.every(correctHeader);
1617}
1618
1619function dateBreakdown(date) {
1620 if (isValid(parse(date))) {
1621 return {
1622 day: getDate(parse(date)),
1623 month: getMonth(parse(date)) + 1,
1624 year: getYear(parse(date)),
1625 };
1626 }
1627 else {
1628 return { day: 0, month: 0, year: 0 };
1629 }
1630}
1631/**
1632 * pad numbers if they are < 10 i.e. 2 => 02
1633 *
1634 * @param {number} value number to be padded
1635 * @returns {string} padded number or original if > 9
1636 */
1637function padNumber(value) {
1638 if (value < 10) {
1639 return `0${value}`;
1640 }
1641 else {
1642 return `${value}`;
1643 }
1644}
1645
1646/**
1647 * split the date of birth into month, day and year.
1648 *
1649 * @param {string} dob
1650 * @returns {object}
1651 */
1652function dobValues(dob) {
1653 const { month, day, year } = dateBreakdown(dob);
1654 return {
1655 BIRTH_MONTH: month,
1656 BIRTH_DAY: day,
1657 BIRTH_YEAR: year,
1658 };
1659}
1660/**
1661 * it ensures that the dob value is correct and not showing 1945 as
1662 * 2045
1663 *
1664 * @param {string} dob date to be checked
1665 * @returns {string} a valid date dob
1666 */
1667function correctDobFormart(dob) {
1668 const year = getYear(dob);
1669 if (year > 2000) {
1670 return setYear(new Date(dob), year - 100).toDateString();
1671 }
1672 return dob;
1673}
1674/**
1675 * convert dob to the required format
1676 *
1677 * @export
1678 * @param {string} dob date to be converted
1679 * @param {string} [outFormat=DateFormat.DEFAULT_FORMAT] format expected
1680 * @returns formated date
1681 */
1682function convertDateFormat(dob, outFormat = DateFormat.DEFAULT_FORMAT) {
1683 return format(parse(dob), outFormat);
1684}
1685
1686function testVertical(fileName, vertical) {
1687 return new RegExp(vertical.join('|'), 'i').test(fileName);
1688}
1689/**
1690 * get the product of interest from the file name.
1691 *
1692 * @param {string} fileName
1693 * @returns {(string | Error)}
1694 */
1695function productOfInterest(fileName) {
1696 const { HEALTH, LIFE } = FILE_PRODUCT_TYPE;
1697 if (testVertical(fileName, HEALTH)) {
1698 return Verticals.HEALTH;
1699 }
1700 if (testVertical(fileName, LIFE)) {
1701 return Verticals.LIFE;
1702 }
1703 else {
1704 return '';
1705 }
1706}
1707/**
1708 * Get the sourceID from the name of the file.
1709 *
1710 * @param {string} fileName
1711 * @returns {string}
1712 */
1713function getSourceId(fileName) {
1714 const { HEALTH, LIFE } = FILE_PRODUCT_TYPE;
1715 const source = fileName.split('-');
1716 if (includes(IN_HOUSE_IDS, source[0])) {
1717 return source[0];
1718 }
1719 if (source[0] === undefined || source[1] === undefined) {
1720 return '';
1721 }
1722 if (testVertical(source[1], HEALTH) || testVertical(source[1], LIFE)) {
1723 return `${source[0]}`;
1724 }
1725 if (testVertical(source[3], HEALTH) || testVertical(source[3], LIFE)) {
1726 return `${source[0]}-${source[1]}-${source[2]}`;
1727 }
1728 return `${source[0]}-${source[1]}`;
1729}
1730/**
1731 * deduce extra columns from the name of the file
1732 * and return the extra content.
1733 *
1734 * @param {string} fileName
1735 * @returns {object}
1736 */
1737function extraColumns(fileName) {
1738 return {
1739 SOURCE_URL: SourceUrl.SOURCE_URL,
1740 PRODUCT_OF_INTEREST: productOfInterest(fileName),
1741 SOURCEID: getSourceId(fileName),
1742 };
1743}
1744
1745/**
1746 * produce initial LeadID from the load date value.
1747 *
1748 * @param {string} loadDate
1749 * @returns {number}
1750 */
1751function initLeadId(loadDate) {
1752 const day = dateBreakdown(loadDate).day;
1753 const month = dateBreakdown(loadDate).month;
1754 const year = dateBreakdown(loadDate).year;
1755 return parseInt(`${year}${padNumber(month)}${padNumber(day)}00001`, 10);
1756}
1757/**
1758 * Assign LeadIds to the whole file sequentially
1759 *
1760 * @export
1761 * @param {Leads[]} file lead file to be processed
1762 * @param {number} startCount initial start to increment on
1763 * @returns {Leads[]} Array of leads with leadId append
1764 */
1765function assignLeadId(file, startCount) {
1766 let genesis = startCount;
1767 file.forEach((row) => {
1768 row.LEADID = genesis;
1769 genesis = genesis + 1;
1770 });
1771 return file;
1772}
1773
1774/**
1775 * check if the path might contain a hidden file.
1776 *
1777 * @param {string} path
1778 * @returns {boolean}
1779 */
1780function isHiddenFile(path) {
1781 const HIDDEN_FILE_REGEX = /^[~\.]/gi;
1782 return HIDDEN_FILE_REGEX.test(path);
1783}
1784
1785/**
1786 * ensure that the day falls on a Tuesday
1787 *
1788 * @param {string} loadDate
1789 * @returns {boolean}
1790 */
1791function isTuesday$1(loadDate) {
1792 return isTuesday(loadDate);
1793}
1794
1795/**
1796 * Test the file to ensure the file name is named according to the vertical it
1797 * represents
1798 *
1799 * @param {string} fileName
1800 * @param {string[]} vertical
1801 * @returns {boolean}
1802 */
1803function testFileName(fileName, vertical) {
1804 return new RegExp(vertical.join('|'), 'i').test(fileName);
1805}
1806/**
1807 * Checks to ensure that the lead is in between the required age range
1808 *
1809 * @param {array} vertical
1810 * @param {number} age
1811 * @param {string} fileName
1812 * @param {object} range
1813 * @returns
1814 */
1815function isInRange({ fileName, vertical, age, range }) {
1816 return (testFileName(fileName, vertical) && (age >= range.MIN && age <= range.MAX));
1817}
1818/**
1819 * Check to ensure that the lead falls between the age range
1820 * depending on the type of lead/product of interest
1821 *
1822 * @param {object} values
1823 * @returns {boolean}
1824 */
1825function isWithinAgeRange({ dob, fileName, loadDate, }) {
1826 if (!isValid(parse(dob)) && !isValid(parse(loadDate))) {
1827 return false;
1828 }
1829 const age = differenceInYears(loadDate, dob);
1830 const HEALTH = ['hlt', 'health'];
1831 const LIFE = ['life'];
1832 const checkData = { age, fileName, vertical: HEALTH, range: HealthAgeRange };
1833 return (isInRange(checkData) ||
1834 isInRange(Object.assign({}, checkData, { vertical: LIFE, range: LifeAgeRange })));
1835}
1836
1837/**
1838 * Converts the file into an object with zip as key and branch as value
1839 *
1840 * @param {array} file
1841 * @returns {object}
1842 */
1843function setBranchCodes(file) {
1844 const branchCodes = {};
1845 for (const row of file) {
1846 const zip = row.ZipCode;
1847 const branch = row.Branch;
1848 branchCodes[zip] = branch;
1849 }
1850 return branchCodes;
1851}
1852
1853var assertString_1 = createCommonjsModule(function (module, exports) {
1854
1855Object.defineProperty(exports, "__esModule", {
1856 value: true
1857});
1858exports.default = assertString;
1859function assertString(input) {
1860 var isString = typeof input === 'string' || input instanceof String;
1861
1862 if (!isString) {
1863 throw new TypeError('This library (validator.js) validates strings only');
1864 }
1865}
1866module.exports = exports['default'];
1867});
1868
1869unwrapExports(assertString_1);
1870
1871var toDate_1 = createCommonjsModule(function (module, exports) {
1872
1873Object.defineProperty(exports, "__esModule", {
1874 value: true
1875});
1876exports.default = toDate;
1877
1878
1879
1880var _assertString2 = _interopRequireDefault(assertString_1);
1881
1882function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1883
1884function toDate(date) {
1885 (0, _assertString2.default)(date);
1886 date = Date.parse(date);
1887 return !isNaN(date) ? new Date(date) : null;
1888}
1889module.exports = exports['default'];
1890});
1891
1892unwrapExports(toDate_1);
1893
1894var toFloat_1 = createCommonjsModule(function (module, exports) {
1895
1896Object.defineProperty(exports, "__esModule", {
1897 value: true
1898});
1899exports.default = toFloat;
1900
1901
1902
1903var _assertString2 = _interopRequireDefault(assertString_1);
1904
1905function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1906
1907function toFloat(str) {
1908 (0, _assertString2.default)(str);
1909 return parseFloat(str);
1910}
1911module.exports = exports['default'];
1912});
1913
1914unwrapExports(toFloat_1);
1915
1916var toInt_1 = createCommonjsModule(function (module, exports) {
1917
1918Object.defineProperty(exports, "__esModule", {
1919 value: true
1920});
1921exports.default = toInt;
1922
1923
1924
1925var _assertString2 = _interopRequireDefault(assertString_1);
1926
1927function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1928
1929function toInt(str, radix) {
1930 (0, _assertString2.default)(str);
1931 return parseInt(str, radix || 10);
1932}
1933module.exports = exports['default'];
1934});
1935
1936unwrapExports(toInt_1);
1937
1938var toBoolean_1 = createCommonjsModule(function (module, exports) {
1939
1940Object.defineProperty(exports, "__esModule", {
1941 value: true
1942});
1943exports.default = toBoolean;
1944
1945
1946
1947var _assertString2 = _interopRequireDefault(assertString_1);
1948
1949function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1950
1951function toBoolean(str, strict) {
1952 (0, _assertString2.default)(str);
1953 if (strict) {
1954 return str === '1' || str === 'true';
1955 }
1956 return str !== '0' && str !== 'false' && str !== '';
1957}
1958module.exports = exports['default'];
1959});
1960
1961unwrapExports(toBoolean_1);
1962
1963var equals_1 = createCommonjsModule(function (module, exports) {
1964
1965Object.defineProperty(exports, "__esModule", {
1966 value: true
1967});
1968exports.default = equals;
1969
1970
1971
1972var _assertString2 = _interopRequireDefault(assertString_1);
1973
1974function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
1975
1976function equals(str, comparison) {
1977 (0, _assertString2.default)(str);
1978 return str === comparison;
1979}
1980module.exports = exports['default'];
1981});
1982
1983unwrapExports(equals_1);
1984
1985var toString_1 = createCommonjsModule(function (module, exports) {
1986
1987Object.defineProperty(exports, "__esModule", {
1988 value: true
1989});
1990
1991var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
1992
1993exports.default = toString;
1994function toString(input) {
1995 if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) === 'object' && input !== null) {
1996 if (typeof input.toString === 'function') {
1997 input = input.toString();
1998 } else {
1999 input = '[object Object]';
2000 }
2001 } else if (input === null || typeof input === 'undefined' || isNaN(input) && !input.length) {
2002 input = '';
2003 }
2004 return String(input);
2005}
2006module.exports = exports['default'];
2007});
2008
2009unwrapExports(toString_1);
2010
2011var contains_1 = createCommonjsModule(function (module, exports) {
2012
2013Object.defineProperty(exports, "__esModule", {
2014 value: true
2015});
2016exports.default = contains;
2017
2018
2019
2020var _assertString2 = _interopRequireDefault(assertString_1);
2021
2022
2023
2024var _toString2 = _interopRequireDefault(toString_1);
2025
2026function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2027
2028function contains(str, elem) {
2029 (0, _assertString2.default)(str);
2030 return str.indexOf((0, _toString2.default)(elem)) >= 0;
2031}
2032module.exports = exports['default'];
2033});
2034
2035unwrapExports(contains_1);
2036
2037var matches_1 = createCommonjsModule(function (module, exports) {
2038
2039Object.defineProperty(exports, "__esModule", {
2040 value: true
2041});
2042exports.default = matches;
2043
2044
2045
2046var _assertString2 = _interopRequireDefault(assertString_1);
2047
2048function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2049
2050function matches(str, pattern, modifiers) {
2051 (0, _assertString2.default)(str);
2052 if (Object.prototype.toString.call(pattern) !== '[object RegExp]') {
2053 pattern = new RegExp(pattern, modifiers);
2054 }
2055 return pattern.test(str);
2056}
2057module.exports = exports['default'];
2058});
2059
2060unwrapExports(matches_1);
2061
2062var merge_1 = createCommonjsModule(function (module, exports) {
2063
2064Object.defineProperty(exports, "__esModule", {
2065 value: true
2066});
2067exports.default = merge;
2068function merge() {
2069 var obj = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
2070 var defaults = arguments[1];
2071
2072 for (var key in defaults) {
2073 if (typeof obj[key] === 'undefined') {
2074 obj[key] = defaults[key];
2075 }
2076 }
2077 return obj;
2078}
2079module.exports = exports['default'];
2080});
2081
2082unwrapExports(merge_1);
2083
2084var isByteLength_1 = createCommonjsModule(function (module, exports) {
2085
2086Object.defineProperty(exports, "__esModule", {
2087 value: true
2088});
2089
2090var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
2091
2092exports.default = isByteLength;
2093
2094
2095
2096var _assertString2 = _interopRequireDefault(assertString_1);
2097
2098function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2099
2100/* eslint-disable prefer-rest-params */
2101function isByteLength(str, options) {
2102 (0, _assertString2.default)(str);
2103 var min = void 0;
2104 var max = void 0;
2105 if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {
2106 min = options.min || 0;
2107 max = options.max;
2108 } else {
2109 // backwards compatibility: isByteLength(str, min [, max])
2110 min = arguments[1];
2111 max = arguments[2];
2112 }
2113 var len = encodeURI(str).split(/%..|./).length - 1;
2114 return len >= min && (typeof max === 'undefined' || len <= max);
2115}
2116module.exports = exports['default'];
2117});
2118
2119unwrapExports(isByteLength_1);
2120
2121var isFQDN_1 = createCommonjsModule(function (module, exports) {
2122
2123Object.defineProperty(exports, "__esModule", {
2124 value: true
2125});
2126exports.default = isFQDN;
2127
2128
2129
2130var _assertString2 = _interopRequireDefault(assertString_1);
2131
2132
2133
2134var _merge2 = _interopRequireDefault(merge_1);
2135
2136function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2137
2138var default_fqdn_options = {
2139 require_tld: true,
2140 allow_underscores: false,
2141 allow_trailing_dot: false
2142};
2143
2144function isFQDN(str, options) {
2145 (0, _assertString2.default)(str);
2146 options = (0, _merge2.default)(options, default_fqdn_options);
2147
2148 /* Remove the optional trailing dot before checking validity */
2149 if (options.allow_trailing_dot && str[str.length - 1] === '.') {
2150 str = str.substring(0, str.length - 1);
2151 }
2152 var parts = str.split('.');
2153 if (options.require_tld) {
2154 var tld = parts.pop();
2155 if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
2156 return false;
2157 }
2158 // disallow spaces
2159 if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(tld)) {
2160 return false;
2161 }
2162 }
2163 for (var part, i = 0; i < parts.length; i++) {
2164 part = parts[i];
2165 if (options.allow_underscores) {
2166 part = part.replace(/_/g, '');
2167 }
2168 if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) {
2169 return false;
2170 }
2171 // disallow full-width chars
2172 if (/[\uff01-\uff5e]/.test(part)) {
2173 return false;
2174 }
2175 if (part[0] === '-' || part[part.length - 1] === '-') {
2176 return false;
2177 }
2178 }
2179 return true;
2180}
2181module.exports = exports['default'];
2182});
2183
2184unwrapExports(isFQDN_1);
2185
2186var isEmail_1 = createCommonjsModule(function (module, exports) {
2187
2188Object.defineProperty(exports, "__esModule", {
2189 value: true
2190});
2191exports.default = isEmail;
2192
2193
2194
2195var _assertString2 = _interopRequireDefault(assertString_1);
2196
2197
2198
2199var _merge2 = _interopRequireDefault(merge_1);
2200
2201
2202
2203var _isByteLength2 = _interopRequireDefault(isByteLength_1);
2204
2205
2206
2207var _isFQDN2 = _interopRequireDefault(isFQDN_1);
2208
2209function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2210
2211var default_email_options = {
2212 allow_display_name: false,
2213 require_display_name: false,
2214 allow_utf8_local_part: true,
2215 require_tld: true
2216};
2217
2218/* eslint-disable max-len */
2219/* eslint-disable no-control-regex */
2220var displayName = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\,\.\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF\s]*<(.+)>$/i;
2221var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i;
2222var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i;
2223var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i;
2224var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;
2225/* eslint-enable max-len */
2226/* eslint-enable no-control-regex */
2227
2228function isEmail(str, options) {
2229 (0, _assertString2.default)(str);
2230 options = (0, _merge2.default)(options, default_email_options);
2231
2232 if (options.require_display_name || options.allow_display_name) {
2233 var display_email = str.match(displayName);
2234 if (display_email) {
2235 str = display_email[1];
2236 } else if (options.require_display_name) {
2237 return false;
2238 }
2239 }
2240
2241 var parts = str.split('@');
2242 var domain = parts.pop();
2243 var user = parts.join('@');
2244
2245 var lower_domain = domain.toLowerCase();
2246 if (lower_domain === 'gmail.com' || lower_domain === 'googlemail.com') {
2247 user = user.replace(/\./g, '').toLowerCase();
2248 }
2249
2250 if (!(0, _isByteLength2.default)(user, { max: 64 }) || !(0, _isByteLength2.default)(domain, { max: 254 })) {
2251 return false;
2252 }
2253
2254 if (!(0, _isFQDN2.default)(domain, { require_tld: options.require_tld })) {
2255 return false;
2256 }
2257
2258 if (user[0] === '"') {
2259 user = user.slice(1, user.length - 1);
2260 return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);
2261 }
2262
2263 var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;
2264
2265 var user_parts = user.split('.');
2266 for (var i = 0; i < user_parts.length; i++) {
2267 if (!pattern.test(user_parts[i])) {
2268 return false;
2269 }
2270 }
2271
2272 return true;
2273}
2274module.exports = exports['default'];
2275});
2276
2277unwrapExports(isEmail_1);
2278
2279var isIP_1 = createCommonjsModule(function (module, exports) {
2280
2281Object.defineProperty(exports, "__esModule", {
2282 value: true
2283});
2284exports.default = isIP;
2285
2286
2287
2288var _assertString2 = _interopRequireDefault(assertString_1);
2289
2290function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2291
2292var ipv4Maybe = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
2293var ipv6Block = /^[0-9A-F]{1,4}$/i;
2294
2295function isIP(str) {
2296 var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
2297
2298 (0, _assertString2.default)(str);
2299 version = String(version);
2300 if (!version) {
2301 return isIP(str, 4) || isIP(str, 6);
2302 } else if (version === '4') {
2303 if (!ipv4Maybe.test(str)) {
2304 return false;
2305 }
2306 var parts = str.split('.').sort(function (a, b) {
2307 return a - b;
2308 });
2309 return parts[3] <= 255;
2310 } else if (version === '6') {
2311 var blocks = str.split(':');
2312 var foundOmissionBlock = false; // marker to indicate ::
2313
2314 // At least some OS accept the last 32 bits of an IPv6 address
2315 // (i.e. 2 of the blocks) in IPv4 notation, and RFC 3493 says
2316 // that '::ffff:a.b.c.d' is valid for IPv4-mapped IPv6 addresses,
2317 // and '::a.b.c.d' is deprecated, but also valid.
2318 var foundIPv4TransitionBlock = isIP(blocks[blocks.length - 1], 4);
2319 var expectedNumberOfBlocks = foundIPv4TransitionBlock ? 7 : 8;
2320
2321 if (blocks.length > expectedNumberOfBlocks) {
2322 return false;
2323 }
2324 // initial or final ::
2325 if (str === '::') {
2326 return true;
2327 } else if (str.substr(0, 2) === '::') {
2328 blocks.shift();
2329 blocks.shift();
2330 foundOmissionBlock = true;
2331 } else if (str.substr(str.length - 2) === '::') {
2332 blocks.pop();
2333 blocks.pop();
2334 foundOmissionBlock = true;
2335 }
2336
2337 for (var i = 0; i < blocks.length; ++i) {
2338 // test for a :: which can not be at the string start/end
2339 // since those cases have been handled above
2340 if (blocks[i] === '' && i > 0 && i < blocks.length - 1) {
2341 if (foundOmissionBlock) {
2342 return false; // multiple :: in address
2343 }
2344 foundOmissionBlock = true;
2345 } else if (foundIPv4TransitionBlock && i === blocks.length - 1) {
2346 // it has been checked before that the last
2347 // block is a valid IPv4 address
2348 } else if (!ipv6Block.test(blocks[i])) {
2349 return false;
2350 }
2351 }
2352 if (foundOmissionBlock) {
2353 return blocks.length >= 1;
2354 }
2355 return blocks.length === expectedNumberOfBlocks;
2356 }
2357 return false;
2358}
2359module.exports = exports['default'];
2360});
2361
2362unwrapExports(isIP_1);
2363
2364var isURL_1 = createCommonjsModule(function (module, exports) {
2365
2366Object.defineProperty(exports, "__esModule", {
2367 value: true
2368});
2369exports.default = isURL;
2370
2371
2372
2373var _assertString2 = _interopRequireDefault(assertString_1);
2374
2375
2376
2377var _isFQDN2 = _interopRequireDefault(isFQDN_1);
2378
2379
2380
2381var _isIP2 = _interopRequireDefault(isIP_1);
2382
2383
2384
2385var _merge2 = _interopRequireDefault(merge_1);
2386
2387function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2388
2389var default_url_options = {
2390 protocols: ['http', 'https', 'ftp'],
2391 require_tld: true,
2392 require_protocol: false,
2393 require_host: true,
2394 require_valid_protocol: true,
2395 allow_underscores: false,
2396 allow_trailing_dot: false,
2397 allow_protocol_relative_urls: false
2398};
2399
2400var wrapped_ipv6 = /^\[([^\]]+)\](?::([0-9]+))?$/;
2401
2402function isRegExp(obj) {
2403 return Object.prototype.toString.call(obj) === '[object RegExp]';
2404}
2405
2406function checkHost(host, matches) {
2407 for (var i = 0; i < matches.length; i++) {
2408 var match = matches[i];
2409 if (host === match || isRegExp(match) && match.test(host)) {
2410 return true;
2411 }
2412 }
2413 return false;
2414}
2415
2416function isURL(url, options) {
2417 (0, _assertString2.default)(url);
2418 if (!url || url.length >= 2083 || /[\s<>]/.test(url)) {
2419 return false;
2420 }
2421 if (url.indexOf('mailto:') === 0) {
2422 return false;
2423 }
2424 options = (0, _merge2.default)(options, default_url_options);
2425 var protocol = void 0,
2426 auth = void 0,
2427 host = void 0,
2428 hostname = void 0,
2429 port = void 0,
2430 port_str = void 0,
2431 split = void 0,
2432 ipv6 = void 0;
2433
2434 split = url.split('#');
2435 url = split.shift();
2436
2437 split = url.split('?');
2438 url = split.shift();
2439
2440 split = url.split('://');
2441 if (split.length > 1) {
2442 protocol = split.shift();
2443 if (options.require_valid_protocol && options.protocols.indexOf(protocol) === -1) {
2444 return false;
2445 }
2446 } else if (options.require_protocol) {
2447 return false;
2448 } else if (options.allow_protocol_relative_urls && url.substr(0, 2) === '//') {
2449 split[0] = url.substr(2);
2450 }
2451 url = split.join('://');
2452
2453 if (url === '') {
2454 return false;
2455 }
2456
2457 split = url.split('/');
2458 url = split.shift();
2459
2460 if (url === '' && !options.require_host) {
2461 return true;
2462 }
2463
2464 split = url.split('@');
2465 if (split.length > 1) {
2466 auth = split.shift();
2467 if (auth.indexOf(':') >= 0 && auth.split(':').length > 2) {
2468 return false;
2469 }
2470 }
2471 hostname = split.join('@');
2472
2473 port_str = null;
2474 ipv6 = null;
2475 var ipv6_match = hostname.match(wrapped_ipv6);
2476 if (ipv6_match) {
2477 host = '';
2478 ipv6 = ipv6_match[1];
2479 port_str = ipv6_match[2] || null;
2480 } else {
2481 split = hostname.split(':');
2482 host = split.shift();
2483 if (split.length) {
2484 port_str = split.join(':');
2485 }
2486 }
2487
2488 if (port_str !== null) {
2489 port = parseInt(port_str, 10);
2490 if (!/^[0-9]+$/.test(port_str) || port <= 0 || port > 65535) {
2491 return false;
2492 }
2493 }
2494
2495 if (!(0, _isIP2.default)(host) && !(0, _isFQDN2.default)(host, options) && (!ipv6 || !(0, _isIP2.default)(ipv6, 6))) {
2496 return false;
2497 }
2498
2499 host = host || ipv6;
2500
2501 if (options.host_whitelist && !checkHost(host, options.host_whitelist)) {
2502 return false;
2503 }
2504 if (options.host_blacklist && checkHost(host, options.host_blacklist)) {
2505 return false;
2506 }
2507
2508 return true;
2509}
2510module.exports = exports['default'];
2511});
2512
2513unwrapExports(isURL_1);
2514
2515var isMACAddress_1 = createCommonjsModule(function (module, exports) {
2516
2517Object.defineProperty(exports, "__esModule", {
2518 value: true
2519});
2520exports.default = isMACAddress;
2521
2522
2523
2524var _assertString2 = _interopRequireDefault(assertString_1);
2525
2526function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2527
2528var macAddress = /^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$/;
2529
2530function isMACAddress(str) {
2531 (0, _assertString2.default)(str);
2532 return macAddress.test(str);
2533}
2534module.exports = exports['default'];
2535});
2536
2537unwrapExports(isMACAddress_1);
2538
2539var isBoolean_1 = createCommonjsModule(function (module, exports) {
2540
2541Object.defineProperty(exports, "__esModule", {
2542 value: true
2543});
2544exports.default = isBoolean;
2545
2546
2547
2548var _assertString2 = _interopRequireDefault(assertString_1);
2549
2550function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2551
2552function isBoolean(str) {
2553 (0, _assertString2.default)(str);
2554 return ['true', 'false', '1', '0'].indexOf(str) >= 0;
2555}
2556module.exports = exports['default'];
2557});
2558
2559unwrapExports(isBoolean_1);
2560
2561var alpha_1 = createCommonjsModule(function (module, exports) {
2562
2563Object.defineProperty(exports, "__esModule", {
2564 value: true
2565});
2566var alpha = exports.alpha = {
2567 'en-US': /^[A-Z]+$/i,
2568 'bg-BG': /^[А-Я]+$/i,
2569 'cs-CZ': /^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,
2570 'da-DK': /^[A-ZÆØÅ]+$/i,
2571 'de-DE': /^[A-ZÄÖÜß]+$/i,
2572 'el-GR': /^[Α-ω]+$/i,
2573 'es-ES': /^[A-ZÁÉÍÑÓÚÜ]+$/i,
2574 'fr-FR': /^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
2575 'it-IT': /^[A-ZÀÉÈÌÎÓÒÙ]+$/i,
2576 'nb-NO': /^[A-ZÆØÅ]+$/i,
2577 'nl-NL': /^[A-ZÁÉËÏÓÖÜÚ]+$/i,
2578 'nn-NO': /^[A-ZÆØÅ]+$/i,
2579 'hu-HU': /^[A-ZÁÉÍÓÖŐÚÜŰ]+$/i,
2580 'pl-PL': /^[A-ZĄĆĘŚŁŃÓŻŹ]+$/i,
2581 'pt-PT': /^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i,
2582 'ru-RU': /^[А-ЯЁ]+$/i,
2583 'sk-SK': /^[A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,
2584 'sr-RS@latin': /^[A-ZČĆŽŠĐ]+$/i,
2585 'sr-RS': /^[А-ЯЂЈЉЊЋЏ]+$/i,
2586 'sv-SE': /^[A-ZÅÄÖ]+$/i,
2587 'tr-TR': /^[A-ZÇĞİıÖŞÜ]+$/i,
2588 'uk-UA': /^[А-ЩЬЮЯЄIЇҐі]+$/i,
2589 ar: /^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/
2590};
2591
2592var alphanumeric = exports.alphanumeric = {
2593 'en-US': /^[0-9A-Z]+$/i,
2594 'bg-BG': /^[0-9А-Я]+$/i,
2595 'cs-CZ': /^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]+$/i,
2596 'da-DK': /^[0-9A-ZÆØÅ]+$/i,
2597 'de-DE': /^[0-9A-ZÄÖÜß]+$/i,
2598 'el-GR': /^[0-9Α-ω]+$/i,
2599 'es-ES': /^[0-9A-ZÁÉÍÑÓÚÜ]+$/i,
2600 'fr-FR': /^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]+$/i,
2601 'it-IT': /^[0-9A-ZÀÉÈÌÎÓÒÙ]+$/i,
2602 'hu-HU': /^[0-9A-ZÁÉÍÓÖŐÚÜŰ]+$/i,
2603 'nb-NO': /^[0-9A-ZÆØÅ]+$/i,
2604 'nl-NL': /^[0-9A-ZÁÉËÏÓÖÜÚ]+$/i,
2605 'nn-NO': /^[0-9A-ZÆØÅ]+$/i,
2606 'pl-PL': /^[0-9A-ZĄĆĘŚŁŃÓŻŹ]+$/i,
2607 'pt-PT': /^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]+$/i,
2608 'ru-RU': /^[0-9А-ЯЁ]+$/i,
2609 'sk-SK': /^[0-9A-ZÁČĎÉÍŇÓŠŤÚÝŽĹŔĽÄÔ]+$/i,
2610 'sr-RS@latin': /^[0-9A-ZČĆŽŠĐ]+$/i,
2611 'sr-RS': /^[0-9А-ЯЂЈЉЊЋЏ]+$/i,
2612 'sv-SE': /^[0-9A-ZÅÄÖ]+$/i,
2613 'tr-TR': /^[0-9A-ZÇĞİıÖŞÜ]+$/i,
2614 'uk-UA': /^[0-9А-ЩЬЮЯЄIЇҐі]+$/i,
2615 ar: /^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]+$/
2616};
2617
2618var decimal = exports.decimal = {
2619 'en-US': '.',
2620 ar: '٫'
2621};
2622
2623var englishLocales = exports.englishLocales = ['AU', 'GB', 'HK', 'IN', 'NZ', 'ZA', 'ZM'];
2624
2625for (var locale, i = 0; i < englishLocales.length; i++) {
2626 locale = 'en-' + englishLocales[i];
2627 alpha[locale] = alpha['en-US'];
2628 alphanumeric[locale] = alphanumeric['en-US'];
2629 decimal[locale] = decimal['en-US'];
2630}
2631
2632// Source: http://www.localeplanet.com/java/
2633var arabicLocales = exports.arabicLocales = ['AE', 'BH', 'DZ', 'EG', 'IQ', 'JO', 'KW', 'LB', 'LY', 'MA', 'QM', 'QA', 'SA', 'SD', 'SY', 'TN', 'YE'];
2634
2635for (var _locale, _i = 0; _i < arabicLocales.length; _i++) {
2636 _locale = 'ar-' + arabicLocales[_i];
2637 alpha[_locale] = alpha.ar;
2638 alphanumeric[_locale] = alphanumeric.ar;
2639 decimal[_locale] = decimal.ar;
2640}
2641
2642// Source: https://en.wikipedia.org/wiki/Decimal_mark
2643var dotDecimal = exports.dotDecimal = [];
2644var commaDecimal = exports.commaDecimal = ['bg-BG', 'cs-CZ', 'da-DK', 'de-DE', 'el-GR', 'es-ES', 'fr-FR', 'it-IT', 'hu-HU', 'nb-NO', 'nn-NO', 'nl-NL', 'pl-Pl', 'pt-PT', 'ru-RU', 'sr-RS@latin', 'sr-RS', 'sv-SE', 'tr-TR', 'uk-UA'];
2645
2646for (var _i2 = 0; _i2 < dotDecimal.length; _i2++) {
2647 decimal[dotDecimal[_i2]] = decimal['en-US'];
2648}
2649
2650for (var _i3 = 0; _i3 < commaDecimal.length; _i3++) {
2651 decimal[commaDecimal[_i3]] = ',';
2652}
2653
2654alpha['pt-BR'] = alpha['pt-PT'];
2655alphanumeric['pt-BR'] = alphanumeric['pt-PT'];
2656decimal['pt-BR'] = decimal['pt-PT'];
2657});
2658
2659unwrapExports(alpha_1);
2660var alpha_2 = alpha_1.alpha;
2661var alpha_3 = alpha_1.alphanumeric;
2662var alpha_4 = alpha_1.decimal;
2663var alpha_5 = alpha_1.englishLocales;
2664var alpha_6 = alpha_1.arabicLocales;
2665var alpha_7 = alpha_1.dotDecimal;
2666var alpha_8 = alpha_1.commaDecimal;
2667
2668var isAlpha_1 = createCommonjsModule(function (module, exports) {
2669
2670Object.defineProperty(exports, "__esModule", {
2671 value: true
2672});
2673exports.default = isAlpha;
2674
2675
2676
2677var _assertString2 = _interopRequireDefault(assertString_1);
2678
2679
2680
2681function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2682
2683function isAlpha(str) {
2684 var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
2685
2686 (0, _assertString2.default)(str);
2687 if (locale in alpha_1.alpha) {
2688 return alpha_1.alpha[locale].test(str);
2689 }
2690 throw new Error('Invalid locale \'' + locale + '\'');
2691}
2692module.exports = exports['default'];
2693});
2694
2695unwrapExports(isAlpha_1);
2696
2697var isAlphanumeric_1 = createCommonjsModule(function (module, exports) {
2698
2699Object.defineProperty(exports, "__esModule", {
2700 value: true
2701});
2702exports.default = isAlphanumeric;
2703
2704
2705
2706var _assertString2 = _interopRequireDefault(assertString_1);
2707
2708
2709
2710function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2711
2712function isAlphanumeric(str) {
2713 var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'en-US';
2714
2715 (0, _assertString2.default)(str);
2716 if (locale in alpha_1.alphanumeric) {
2717 return alpha_1.alphanumeric[locale].test(str);
2718 }
2719 throw new Error('Invalid locale \'' + locale + '\'');
2720}
2721module.exports = exports['default'];
2722});
2723
2724unwrapExports(isAlphanumeric_1);
2725
2726var isNumeric_1 = createCommonjsModule(function (module, exports) {
2727
2728Object.defineProperty(exports, "__esModule", {
2729 value: true
2730});
2731exports.default = isNumeric;
2732
2733
2734
2735var _assertString2 = _interopRequireDefault(assertString_1);
2736
2737function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2738
2739var numeric = /^[-+]?[0-9]+$/;
2740
2741function isNumeric(str) {
2742 (0, _assertString2.default)(str);
2743 return numeric.test(str);
2744}
2745module.exports = exports['default'];
2746});
2747
2748unwrapExports(isNumeric_1);
2749
2750var isInt_1 = createCommonjsModule(function (module, exports) {
2751
2752Object.defineProperty(exports, "__esModule", {
2753 value: true
2754});
2755exports.default = isInt;
2756
2757
2758
2759var _assertString2 = _interopRequireDefault(assertString_1);
2760
2761function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2762
2763var int = /^(?:[-+]?(?:0|[1-9][0-9]*))$/;
2764var intLeadingZeroes = /^[-+]?[0-9]+$/;
2765
2766function isInt(str, options) {
2767 (0, _assertString2.default)(str);
2768 options = options || {};
2769
2770 // Get the regex to use for testing, based on whether
2771 // leading zeroes are allowed or not.
2772 var regex = options.hasOwnProperty('allow_leading_zeroes') && !options.allow_leading_zeroes ? int : intLeadingZeroes;
2773
2774 // Check min/max/lt/gt
2775 var minCheckPassed = !options.hasOwnProperty('min') || str >= options.min;
2776 var maxCheckPassed = !options.hasOwnProperty('max') || str <= options.max;
2777 var ltCheckPassed = !options.hasOwnProperty('lt') || str < options.lt;
2778 var gtCheckPassed = !options.hasOwnProperty('gt') || str > options.gt;
2779
2780 return regex.test(str) && minCheckPassed && maxCheckPassed && ltCheckPassed && gtCheckPassed;
2781}
2782module.exports = exports['default'];
2783});
2784
2785unwrapExports(isInt_1);
2786
2787var isPort_1 = createCommonjsModule(function (module, exports) {
2788
2789Object.defineProperty(exports, "__esModule", {
2790 value: true
2791});
2792exports.default = isPort;
2793
2794
2795
2796var _isInt2 = _interopRequireDefault(isInt_1);
2797
2798function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2799
2800function isPort(str) {
2801 return (0, _isInt2.default)(str, { min: 0, max: 65535 });
2802}
2803module.exports = exports['default'];
2804});
2805
2806unwrapExports(isPort_1);
2807
2808var isLowercase_1 = createCommonjsModule(function (module, exports) {
2809
2810Object.defineProperty(exports, "__esModule", {
2811 value: true
2812});
2813exports.default = isLowercase;
2814
2815
2816
2817var _assertString2 = _interopRequireDefault(assertString_1);
2818
2819function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2820
2821function isLowercase(str) {
2822 (0, _assertString2.default)(str);
2823 return str === str.toLowerCase();
2824}
2825module.exports = exports['default'];
2826});
2827
2828unwrapExports(isLowercase_1);
2829
2830var isUppercase_1 = createCommonjsModule(function (module, exports) {
2831
2832Object.defineProperty(exports, "__esModule", {
2833 value: true
2834});
2835exports.default = isUppercase;
2836
2837
2838
2839var _assertString2 = _interopRequireDefault(assertString_1);
2840
2841function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2842
2843function isUppercase(str) {
2844 (0, _assertString2.default)(str);
2845 return str === str.toUpperCase();
2846}
2847module.exports = exports['default'];
2848});
2849
2850unwrapExports(isUppercase_1);
2851
2852var isAscii_1 = createCommonjsModule(function (module, exports) {
2853
2854Object.defineProperty(exports, "__esModule", {
2855 value: true
2856});
2857exports.default = isAscii;
2858
2859
2860
2861var _assertString2 = _interopRequireDefault(assertString_1);
2862
2863function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2864
2865/* eslint-disable no-control-regex */
2866var ascii = /^[\x00-\x7F]+$/;
2867/* eslint-enable no-control-regex */
2868
2869function isAscii(str) {
2870 (0, _assertString2.default)(str);
2871 return ascii.test(str);
2872}
2873module.exports = exports['default'];
2874});
2875
2876unwrapExports(isAscii_1);
2877
2878var isFullWidth_1 = createCommonjsModule(function (module, exports) {
2879
2880Object.defineProperty(exports, "__esModule", {
2881 value: true
2882});
2883exports.fullWidth = undefined;
2884exports.default = isFullWidth;
2885
2886
2887
2888var _assertString2 = _interopRequireDefault(assertString_1);
2889
2890function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2891
2892var fullWidth = exports.fullWidth = /[^\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
2893
2894function isFullWidth(str) {
2895 (0, _assertString2.default)(str);
2896 return fullWidth.test(str);
2897}
2898});
2899
2900unwrapExports(isFullWidth_1);
2901var isFullWidth_2 = isFullWidth_1.fullWidth;
2902
2903var isHalfWidth_1 = createCommonjsModule(function (module, exports) {
2904
2905Object.defineProperty(exports, "__esModule", {
2906 value: true
2907});
2908exports.halfWidth = undefined;
2909exports.default = isHalfWidth;
2910
2911
2912
2913var _assertString2 = _interopRequireDefault(assertString_1);
2914
2915function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2916
2917var halfWidth = exports.halfWidth = /[\u0020-\u007E\uFF61-\uFF9F\uFFA0-\uFFDC\uFFE8-\uFFEE0-9a-zA-Z]/;
2918
2919function isHalfWidth(str) {
2920 (0, _assertString2.default)(str);
2921 return halfWidth.test(str);
2922}
2923});
2924
2925unwrapExports(isHalfWidth_1);
2926var isHalfWidth_2 = isHalfWidth_1.halfWidth;
2927
2928var isVariableWidth_1 = createCommonjsModule(function (module, exports) {
2929
2930Object.defineProperty(exports, "__esModule", {
2931 value: true
2932});
2933exports.default = isVariableWidth;
2934
2935
2936
2937var _assertString2 = _interopRequireDefault(assertString_1);
2938
2939
2940
2941
2942
2943function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2944
2945function isVariableWidth(str) {
2946 (0, _assertString2.default)(str);
2947 return isFullWidth_1.fullWidth.test(str) && isHalfWidth_1.halfWidth.test(str);
2948}
2949module.exports = exports['default'];
2950});
2951
2952unwrapExports(isVariableWidth_1);
2953
2954var isMultibyte_1 = createCommonjsModule(function (module, exports) {
2955
2956Object.defineProperty(exports, "__esModule", {
2957 value: true
2958});
2959exports.default = isMultibyte;
2960
2961
2962
2963var _assertString2 = _interopRequireDefault(assertString_1);
2964
2965function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2966
2967/* eslint-disable no-control-regex */
2968var multibyte = /[^\x00-\x7F]/;
2969/* eslint-enable no-control-regex */
2970
2971function isMultibyte(str) {
2972 (0, _assertString2.default)(str);
2973 return multibyte.test(str);
2974}
2975module.exports = exports['default'];
2976});
2977
2978unwrapExports(isMultibyte_1);
2979
2980var isSurrogatePair_1 = createCommonjsModule(function (module, exports) {
2981
2982Object.defineProperty(exports, "__esModule", {
2983 value: true
2984});
2985exports.default = isSurrogatePair;
2986
2987
2988
2989var _assertString2 = _interopRequireDefault(assertString_1);
2990
2991function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2992
2993var surrogatePair = /[\uD800-\uDBFF][\uDC00-\uDFFF]/;
2994
2995function isSurrogatePair(str) {
2996 (0, _assertString2.default)(str);
2997 return surrogatePair.test(str);
2998}
2999module.exports = exports['default'];
3000});
3001
3002unwrapExports(isSurrogatePair_1);
3003
3004var isFloat_1 = createCommonjsModule(function (module, exports) {
3005
3006Object.defineProperty(exports, "__esModule", {
3007 value: true
3008});
3009exports.default = isFloat;
3010
3011
3012
3013var _assertString2 = _interopRequireDefault(assertString_1);
3014
3015
3016
3017function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3018
3019function isFloat(str, options) {
3020 (0, _assertString2.default)(str);
3021 options = options || {};
3022 var float = new RegExp('^(?:[-+])?(?:[0-9]+)?(?:\\' + (options.locale ? alpha_1.decimal[options.locale] : '.') + '[0-9]*)?(?:[eE][\\+\\-]?(?:[0-9]+))?$');
3023 if (str === '' || str === '.' || str === '-' || str === '+') {
3024 return false;
3025 }
3026 return float.test(str) && (!options.hasOwnProperty('min') || str >= options.min) && (!options.hasOwnProperty('max') || str <= options.max) && (!options.hasOwnProperty('lt') || str < options.lt) && (!options.hasOwnProperty('gt') || str > options.gt);
3027}
3028module.exports = exports['default'];
3029});
3030
3031unwrapExports(isFloat_1);
3032
3033var isDecimal_1 = createCommonjsModule(function (module, exports) {
3034
3035Object.defineProperty(exports, "__esModule", {
3036 value: true
3037});
3038exports.default = isDecimal;
3039
3040
3041
3042var _merge2 = _interopRequireDefault(merge_1);
3043
3044
3045
3046var _assertString2 = _interopRequireDefault(assertString_1);
3047
3048
3049
3050function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3051
3052function decimalRegExp(options) {
3053 var regExp = new RegExp('^[-+]?([0-9]+)?(\\' + alpha_1.decimal[options.locale] + '[0-9]{' + options.decimal_digits + '})' + (options.force_decimal ? '' : '?') + '$');
3054 return regExp;
3055}
3056
3057var default_decimal_options = {
3058 force_decimal: false,
3059 decimal_digits: '1,',
3060 locale: 'en-US'
3061};
3062
3063var blacklist = ['', '-', '+'];
3064
3065function isDecimal(str, options) {
3066 (0, _assertString2.default)(str);
3067 options = (0, _merge2.default)(options, default_decimal_options);
3068 if (options.locale in alpha_1.decimal) {
3069 return !blacklist.includes(str.replace(/ /g, '')) && decimalRegExp(options).test(str);
3070 }
3071 throw new Error('Invalid locale \'' + options.locale + '\'');
3072}
3073module.exports = exports['default'];
3074});
3075
3076unwrapExports(isDecimal_1);
3077
3078var isHexadecimal_1 = createCommonjsModule(function (module, exports) {
3079
3080Object.defineProperty(exports, "__esModule", {
3081 value: true
3082});
3083exports.default = isHexadecimal;
3084
3085
3086
3087var _assertString2 = _interopRequireDefault(assertString_1);
3088
3089function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3090
3091var hexadecimal = /^[0-9A-F]+$/i;
3092
3093function isHexadecimal(str) {
3094 (0, _assertString2.default)(str);
3095 return hexadecimal.test(str);
3096}
3097module.exports = exports['default'];
3098});
3099
3100unwrapExports(isHexadecimal_1);
3101
3102var isDivisibleBy_1 = createCommonjsModule(function (module, exports) {
3103
3104Object.defineProperty(exports, "__esModule", {
3105 value: true
3106});
3107exports.default = isDivisibleBy;
3108
3109
3110
3111var _assertString2 = _interopRequireDefault(assertString_1);
3112
3113
3114
3115var _toFloat2 = _interopRequireDefault(toFloat_1);
3116
3117function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3118
3119function isDivisibleBy(str, num) {
3120 (0, _assertString2.default)(str);
3121 return (0, _toFloat2.default)(str) % parseInt(num, 10) === 0;
3122}
3123module.exports = exports['default'];
3124});
3125
3126unwrapExports(isDivisibleBy_1);
3127
3128var isHexColor_1 = createCommonjsModule(function (module, exports) {
3129
3130Object.defineProperty(exports, "__esModule", {
3131 value: true
3132});
3133exports.default = isHexColor;
3134
3135
3136
3137var _assertString2 = _interopRequireDefault(assertString_1);
3138
3139function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3140
3141var hexcolor = /^#?([0-9A-F]{3}|[0-9A-F]{6})$/i;
3142
3143function isHexColor(str) {
3144 (0, _assertString2.default)(str);
3145 return hexcolor.test(str);
3146}
3147module.exports = exports['default'];
3148});
3149
3150unwrapExports(isHexColor_1);
3151
3152var isISRC_1 = createCommonjsModule(function (module, exports) {
3153
3154Object.defineProperty(exports, "__esModule", {
3155 value: true
3156});
3157exports.default = isISRC;
3158
3159
3160
3161var _assertString2 = _interopRequireDefault(assertString_1);
3162
3163function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3164
3165// see http://isrc.ifpi.org/en/isrc-standard/code-syntax
3166var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;
3167
3168function isISRC(str) {
3169 (0, _assertString2.default)(str);
3170 return isrc.test(str);
3171}
3172module.exports = exports['default'];
3173});
3174
3175unwrapExports(isISRC_1);
3176
3177var isMD5_1 = createCommonjsModule(function (module, exports) {
3178
3179Object.defineProperty(exports, "__esModule", {
3180 value: true
3181});
3182exports.default = isMD5;
3183
3184
3185
3186var _assertString2 = _interopRequireDefault(assertString_1);
3187
3188function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3189
3190var md5 = /^[a-f0-9]{32}$/;
3191
3192function isMD5(str) {
3193 (0, _assertString2.default)(str);
3194 return md5.test(str);
3195}
3196module.exports = exports['default'];
3197});
3198
3199unwrapExports(isMD5_1);
3200
3201var isHash_1 = createCommonjsModule(function (module, exports) {
3202
3203Object.defineProperty(exports, "__esModule", {
3204 value: true
3205});
3206exports.default = isHash;
3207
3208
3209
3210var _assertString2 = _interopRequireDefault(assertString_1);
3211
3212function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3213
3214var lengths = {
3215 md5: 32,
3216 md4: 32,
3217 sha1: 40,
3218 sha256: 64,
3219 sha384: 96,
3220 sha512: 128,
3221 ripemd128: 32,
3222 ripemd160: 40,
3223 tiger128: 32,
3224 tiger160: 40,
3225 tiger192: 48,
3226 crc32: 8,
3227 crc32b: 8
3228};
3229
3230function isHash(str, algorithm) {
3231 (0, _assertString2.default)(str);
3232 var hash = new RegExp('^[a-f0-9]{' + lengths[algorithm] + '}$');
3233 return hash.test(str);
3234}
3235module.exports = exports['default'];
3236});
3237
3238unwrapExports(isHash_1);
3239
3240var isJSON_1 = createCommonjsModule(function (module, exports) {
3241
3242Object.defineProperty(exports, "__esModule", {
3243 value: true
3244});
3245
3246var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
3247
3248exports.default = isJSON;
3249
3250
3251
3252var _assertString2 = _interopRequireDefault(assertString_1);
3253
3254function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3255
3256function isJSON(str) {
3257 (0, _assertString2.default)(str);
3258 try {
3259 var obj = JSON.parse(str);
3260 return !!obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';
3261 } catch (e) {/* ignore */}
3262 return false;
3263}
3264module.exports = exports['default'];
3265});
3266
3267unwrapExports(isJSON_1);
3268
3269var isEmpty_1 = createCommonjsModule(function (module, exports) {
3270
3271Object.defineProperty(exports, "__esModule", {
3272 value: true
3273});
3274exports.default = isEmpty;
3275
3276
3277
3278var _assertString2 = _interopRequireDefault(assertString_1);
3279
3280function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3281
3282function isEmpty(str) {
3283 (0, _assertString2.default)(str);
3284 return str.length === 0;
3285}
3286module.exports = exports['default'];
3287});
3288
3289unwrapExports(isEmpty_1);
3290
3291var isLength_1 = createCommonjsModule(function (module, exports) {
3292
3293Object.defineProperty(exports, "__esModule", {
3294 value: true
3295});
3296
3297var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
3298
3299exports.default = isLength;
3300
3301
3302
3303var _assertString2 = _interopRequireDefault(assertString_1);
3304
3305function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3306
3307/* eslint-disable prefer-rest-params */
3308function isLength(str, options) {
3309 (0, _assertString2.default)(str);
3310 var min = void 0;
3311 var max = void 0;
3312 if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {
3313 min = options.min || 0;
3314 max = options.max;
3315 } else {
3316 // backwards compatibility: isLength(str, min [, max])
3317 min = arguments[1];
3318 max = arguments[2];
3319 }
3320 var surrogatePairs = str.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g) || [];
3321 var len = str.length - surrogatePairs.length;
3322 return len >= min && (typeof max === 'undefined' || len <= max);
3323}
3324module.exports = exports['default'];
3325});
3326
3327unwrapExports(isLength_1);
3328
3329var isUUID_1 = createCommonjsModule(function (module, exports) {
3330
3331Object.defineProperty(exports, "__esModule", {
3332 value: true
3333});
3334exports.default = isUUID;
3335
3336
3337
3338var _assertString2 = _interopRequireDefault(assertString_1);
3339
3340function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3341
3342var uuid = {
3343 3: /^[0-9A-F]{8}-[0-9A-F]{4}-3[0-9A-F]{3}-[0-9A-F]{4}-[0-9A-F]{12}$/i,
3344 4: /^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
3345 5: /^[0-9A-F]{8}-[0-9A-F]{4}-5[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i,
3346 all: /^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i
3347};
3348
3349function isUUID(str) {
3350 var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'all';
3351
3352 (0, _assertString2.default)(str);
3353 var pattern = uuid[version];
3354 return pattern && pattern.test(str);
3355}
3356module.exports = exports['default'];
3357});
3358
3359unwrapExports(isUUID_1);
3360
3361var isMongoId_1 = createCommonjsModule(function (module, exports) {
3362
3363Object.defineProperty(exports, "__esModule", {
3364 value: true
3365});
3366exports.default = isMongoId;
3367
3368
3369
3370var _assertString2 = _interopRequireDefault(assertString_1);
3371
3372
3373
3374var _isHexadecimal2 = _interopRequireDefault(isHexadecimal_1);
3375
3376function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3377
3378function isMongoId(str) {
3379 (0, _assertString2.default)(str);
3380 return (0, _isHexadecimal2.default)(str) && str.length === 24;
3381}
3382module.exports = exports['default'];
3383});
3384
3385unwrapExports(isMongoId_1);
3386
3387var isAfter_1 = createCommonjsModule(function (module, exports) {
3388
3389Object.defineProperty(exports, "__esModule", {
3390 value: true
3391});
3392exports.default = isAfter;
3393
3394
3395
3396var _assertString2 = _interopRequireDefault(assertString_1);
3397
3398
3399
3400var _toDate2 = _interopRequireDefault(toDate_1);
3401
3402function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3403
3404function isAfter(str) {
3405 var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date());
3406
3407 (0, _assertString2.default)(str);
3408 var comparison = (0, _toDate2.default)(date);
3409 var original = (0, _toDate2.default)(str);
3410 return !!(original && comparison && original > comparison);
3411}
3412module.exports = exports['default'];
3413});
3414
3415unwrapExports(isAfter_1);
3416
3417var isBefore_1 = createCommonjsModule(function (module, exports) {
3418
3419Object.defineProperty(exports, "__esModule", {
3420 value: true
3421});
3422exports.default = isBefore;
3423
3424
3425
3426var _assertString2 = _interopRequireDefault(assertString_1);
3427
3428
3429
3430var _toDate2 = _interopRequireDefault(toDate_1);
3431
3432function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3433
3434function isBefore(str) {
3435 var date = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : String(new Date());
3436
3437 (0, _assertString2.default)(str);
3438 var comparison = (0, _toDate2.default)(date);
3439 var original = (0, _toDate2.default)(str);
3440 return !!(original && comparison && original < comparison);
3441}
3442module.exports = exports['default'];
3443});
3444
3445unwrapExports(isBefore_1);
3446
3447var isIn_1 = createCommonjsModule(function (module, exports) {
3448
3449Object.defineProperty(exports, "__esModule", {
3450 value: true
3451});
3452
3453var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
3454
3455exports.default = isIn;
3456
3457
3458
3459var _assertString2 = _interopRequireDefault(assertString_1);
3460
3461
3462
3463var _toString2 = _interopRequireDefault(toString_1);
3464
3465function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3466
3467function isIn(str, options) {
3468 (0, _assertString2.default)(str);
3469 var i = void 0;
3470 if (Object.prototype.toString.call(options) === '[object Array]') {
3471 var array = [];
3472 for (i in options) {
3473 if ({}.hasOwnProperty.call(options, i)) {
3474 array[i] = (0, _toString2.default)(options[i]);
3475 }
3476 }
3477 return array.indexOf(str) >= 0;
3478 } else if ((typeof options === 'undefined' ? 'undefined' : _typeof(options)) === 'object') {
3479 return options.hasOwnProperty(str);
3480 } else if (options && typeof options.indexOf === 'function') {
3481 return options.indexOf(str) >= 0;
3482 }
3483 return false;
3484}
3485module.exports = exports['default'];
3486});
3487
3488unwrapExports(isIn_1);
3489
3490var isCreditCard_1 = createCommonjsModule(function (module, exports) {
3491
3492Object.defineProperty(exports, "__esModule", {
3493 value: true
3494});
3495exports.default = isCreditCard;
3496
3497
3498
3499var _assertString2 = _interopRequireDefault(assertString_1);
3500
3501function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3502
3503/* eslint-disable max-len */
3504var creditCard = /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|62[0-9]{14})$/;
3505/* eslint-enable max-len */
3506
3507function isCreditCard(str) {
3508 (0, _assertString2.default)(str);
3509 var sanitized = str.replace(/[- ]+/g, '');
3510 if (!creditCard.test(sanitized)) {
3511 return false;
3512 }
3513 var sum = 0;
3514 var digit = void 0;
3515 var tmpNum = void 0;
3516 var shouldDouble = void 0;
3517 for (var i = sanitized.length - 1; i >= 0; i--) {
3518 digit = sanitized.substring(i, i + 1);
3519 tmpNum = parseInt(digit, 10);
3520 if (shouldDouble) {
3521 tmpNum *= 2;
3522 if (tmpNum >= 10) {
3523 sum += tmpNum % 10 + 1;
3524 } else {
3525 sum += tmpNum;
3526 }
3527 } else {
3528 sum += tmpNum;
3529 }
3530 shouldDouble = !shouldDouble;
3531 }
3532 return !!(sum % 10 === 0 ? sanitized : false);
3533}
3534module.exports = exports['default'];
3535});
3536
3537unwrapExports(isCreditCard_1);
3538
3539var isISIN_1 = createCommonjsModule(function (module, exports) {
3540
3541Object.defineProperty(exports, "__esModule", {
3542 value: true
3543});
3544exports.default = isISIN;
3545
3546
3547
3548var _assertString2 = _interopRequireDefault(assertString_1);
3549
3550function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3551
3552var isin = /^[A-Z]{2}[0-9A-Z]{9}[0-9]$/;
3553
3554function isISIN(str) {
3555 (0, _assertString2.default)(str);
3556 if (!isin.test(str)) {
3557 return false;
3558 }
3559
3560 var checksumStr = str.replace(/[A-Z]/g, function (character) {
3561 return parseInt(character, 36);
3562 });
3563
3564 var sum = 0;
3565 var digit = void 0;
3566 var tmpNum = void 0;
3567 var shouldDouble = true;
3568 for (var i = checksumStr.length - 2; i >= 0; i--) {
3569 digit = checksumStr.substring(i, i + 1);
3570 tmpNum = parseInt(digit, 10);
3571 if (shouldDouble) {
3572 tmpNum *= 2;
3573 if (tmpNum >= 10) {
3574 sum += tmpNum + 1;
3575 } else {
3576 sum += tmpNum;
3577 }
3578 } else {
3579 sum += tmpNum;
3580 }
3581 shouldDouble = !shouldDouble;
3582 }
3583
3584 return parseInt(str.substr(str.length - 1), 10) === (10000 - sum) % 10;
3585}
3586module.exports = exports['default'];
3587});
3588
3589unwrapExports(isISIN_1);
3590
3591var isISBN_1 = createCommonjsModule(function (module, exports) {
3592
3593Object.defineProperty(exports, "__esModule", {
3594 value: true
3595});
3596exports.default = isISBN;
3597
3598
3599
3600var _assertString2 = _interopRequireDefault(assertString_1);
3601
3602function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3603
3604var isbn10Maybe = /^(?:[0-9]{9}X|[0-9]{10})$/;
3605var isbn13Maybe = /^(?:[0-9]{13})$/;
3606var factor = [1, 3];
3607
3608function isISBN(str) {
3609 var version = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
3610
3611 (0, _assertString2.default)(str);
3612 version = String(version);
3613 if (!version) {
3614 return isISBN(str, 10) || isISBN(str, 13);
3615 }
3616 var sanitized = str.replace(/[\s-]+/g, '');
3617 var checksum = 0;
3618 var i = void 0;
3619 if (version === '10') {
3620 if (!isbn10Maybe.test(sanitized)) {
3621 return false;
3622 }
3623 for (i = 0; i < 9; i++) {
3624 checksum += (i + 1) * sanitized.charAt(i);
3625 }
3626 if (sanitized.charAt(9) === 'X') {
3627 checksum += 10 * 10;
3628 } else {
3629 checksum += 10 * sanitized.charAt(9);
3630 }
3631 if (checksum % 11 === 0) {
3632 return !!sanitized;
3633 }
3634 } else if (version === '13') {
3635 if (!isbn13Maybe.test(sanitized)) {
3636 return false;
3637 }
3638 for (i = 0; i < 12; i++) {
3639 checksum += factor[i % 2] * sanitized.charAt(i);
3640 }
3641 if (sanitized.charAt(12) - (10 - checksum % 10) % 10 === 0) {
3642 return !!sanitized;
3643 }
3644 }
3645 return false;
3646}
3647module.exports = exports['default'];
3648});
3649
3650unwrapExports(isISBN_1);
3651
3652var isISSN_1 = createCommonjsModule(function (module, exports) {
3653
3654Object.defineProperty(exports, "__esModule", {
3655 value: true
3656});
3657exports.default = isISSN;
3658
3659
3660
3661var _assertString2 = _interopRequireDefault(assertString_1);
3662
3663function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3664
3665var issn = '^\\d{4}-?\\d{3}[\\dX]$';
3666
3667function isISSN(str) {
3668 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
3669
3670 (0, _assertString2.default)(str);
3671 var testIssn = issn;
3672 testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;
3673 testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');
3674 if (!testIssn.test(str)) {
3675 return false;
3676 }
3677 var issnDigits = str.replace('-', '');
3678 var position = 8;
3679 var checksum = 0;
3680 var _iteratorNormalCompletion = true;
3681 var _didIteratorError = false;
3682 var _iteratorError = undefined;
3683
3684 try {
3685 for (var _iterator = issnDigits[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
3686 var digit = _step.value;
3687
3688 var digitValue = digit.toUpperCase() === 'X' ? 10 : +digit;
3689 checksum += digitValue * position;
3690 --position;
3691 }
3692 } catch (err) {
3693 _didIteratorError = true;
3694 _iteratorError = err;
3695 } finally {
3696 try {
3697 if (!_iteratorNormalCompletion && _iterator.return) {
3698 _iterator.return();
3699 }
3700 } finally {
3701 if (_didIteratorError) {
3702 throw _iteratorError;
3703 }
3704 }
3705 }
3706
3707 return checksum % 11 === 0;
3708}
3709module.exports = exports['default'];
3710});
3711
3712unwrapExports(isISSN_1);
3713
3714var isMobilePhone_1 = createCommonjsModule(function (module, exports) {
3715
3716Object.defineProperty(exports, "__esModule", {
3717 value: true
3718});
3719exports.default = isMobilePhone;
3720
3721
3722
3723var _assertString2 = _interopRequireDefault(assertString_1);
3724
3725function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3726
3727/* eslint-disable max-len */
3728var phones = {
3729 'ar-AE': /^((\+?971)|0)?5[024568]\d{7}$/,
3730 'ar-DZ': /^(\+?213|0)(5|6|7)\d{8}$/,
3731 'ar-EG': /^((\+?20)|0)?1[012]\d{8}$/,
3732 'ar-JO': /^(\+?962|0)?7[789]\d{7}$/,
3733 'ar-SA': /^(!?(\+?966)|0)?5\d{8}$/,
3734 'ar-SY': /^(!?(\+?963)|0)?9\d{8}$/,
3735 'be-BY': /^(\+?375)?(24|25|29|33|44)\d{7}$/,
3736 'bg-BG': /^(\+?359|0)?8[789]\d{7}$/,
3737 'cs-CZ': /^(\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
3738 'da-DK': /^(\+?45)?\s?\d{2}\s?\d{2}\s?\d{2}\s?\d{2}$/,
3739 'de-DE': /^(\+?49[ \.\-])?([\(]{1}[0-9]{1,6}[\)])?([0-9 \.\-\/]{3,20})((x|ext|extension)[ ]?[0-9]{1,4})?$/,
3740 'el-GR': /^(\+?30|0)?(69\d{8})$/,
3741 'en-AU': /^(\+?61|0)4\d{8}$/,
3742 'en-GB': /^(\+?44|0)7\d{9}$/,
3743 'en-HK': /^(\+?852\-?)?[456789]\d{3}\-?\d{4}$/,
3744 'en-IN': /^(\+?91|0)?[6789]\d{9}$/,
3745 'en-KE': /^(\+?254|0)?[7]\d{8}$/,
3746 'en-NG': /^(\+?234|0)?[789]\d{9}$/,
3747 'en-NZ': /^(\+?64|0)2\d{7,9}$/,
3748 'en-PK': /^((\+92)|(0092))-{0,1}\d{3}-{0,1}\d{7}$|^\d{11}$|^\d{4}-\d{7}$/,
3749 'en-RW': /^(\+?250|0)?[7]\d{8}$/,
3750 'en-SG': /^(\+65)?[89]\d{7}$/,
3751 'en-TZ': /^(\+?255|0)?[67]\d{8}$/,
3752 'en-UG': /^(\+?256|0)?[7]\d{8}$/,
3753 'en-US': /^(\+?1)?[2-9]\d{2}[2-9](?!11)\d{6}$/,
3754 'en-ZA': /^(\+?27|0)\d{9}$/,
3755 'en-ZM': /^(\+?26)?09[567]\d{7}$/,
3756 'es-ES': /^(\+?34)?(6\d{1}|7[1234])\d{7}$/,
3757 'et-EE': /^(\+?372)?\s?(5|8[1-4])\s?([0-9]\s?){6,7}$/,
3758 'fa-IR': /^(\+?98[\-\s]?|0)9[0-39]\d[\-\s]?\d{3}[\-\s]?\d{4}$/,
3759 'fi-FI': /^(\+?358|0)\s?(4(0|1|2|4|5|6)?|50)\s?(\d\s?){4,8}\d$/,
3760 'fo-FO': /^(\+?298)?\s?\d{2}\s?\d{2}\s?\d{2}$/,
3761 'fr-FR': /^(\+?33|0)[67]\d{8}$/,
3762 'he-IL': /^(\+972|0)([23489]|5[0248]|77)[1-9]\d{6}/,
3763 'hu-HU': /^(\+?36)(20|30|70)\d{7}$/,
3764 'id-ID': /^(\+?62|0[1-9])[\s|\d]+$/,
3765 'it-IT': /^(\+?39)?\s?3\d{2} ?\d{6,7}$/,
3766 'ja-JP': /^(\+?81|0)[789]0[ \-]?[1-9]\d{2}[ \-]?\d{5}$/,
3767 'kk-KZ': /^(\+?7|8)?7\d{9}$/,
3768 'kl-GL': /^(\+?299)?\s?\d{2}\s?\d{2}\s?\d{2}$/,
3769 'ko-KR': /^((\+?82)[ \-]?)?0?1([0|1|6|7|8|9]{1})[ \-]?\d{3,4}[ \-]?\d{4}$/,
3770 'lt-LT': /^(\+370|8)\d{8}$/,
3771 'ms-MY': /^(\+?6?01){1}(([145]{1}(\-|\s)?\d{7,8})|([236789]{1}(\s|\-)?\d{7}))$/,
3772 'nb-NO': /^(\+?47)?[49]\d{7}$/,
3773 'nl-BE': /^(\+?32|0)4?\d{8}$/,
3774 'nn-NO': /^(\+?47)?[49]\d{7}$/,
3775 'pl-PL': /^(\+?48)? ?[5-8]\d ?\d{3} ?\d{2} ?\d{2}$/,
3776 'pt-BR': /^(\+?55|0)\-?[1-9]{2}\-?[2-9]{1}\d{3,4}\-?\d{4}$/,
3777 'pt-PT': /^(\+?351)?9[1236]\d{7}$/,
3778 'ro-RO': /^(\+?4?0)\s?7\d{2}(\/|\s|\.|\-)?\d{3}(\s|\.|\-)?\d{3}$/,
3779 'ru-RU': /^(\+?7|8)?9\d{9}$/,
3780 'sk-SK': /^(\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,
3781 'sr-RS': /^(\+3816|06)[- \d]{5,9}$/,
3782 'th-TH': /^(\+66|66|0)\d{9}$/,
3783 'tr-TR': /^(\+?90|0)?5\d{9}$/,
3784 'uk-UA': /^(\+?38|8)?0\d{9}$/,
3785 'vi-VN': /^(\+?84|0)?((1(2([0-9])|6([2-9])|88|99))|(9((?!5)[0-9])))([0-9]{7})$/,
3786 'zh-CN': /^(\+?0?86\-?)?1[3456789]\d{9}$/,
3787 'zh-TW': /^(\+?886\-?|0)?9\d{8}$/
3788};
3789/* eslint-enable max-len */
3790
3791// aliases
3792phones['en-CA'] = phones['en-US'];
3793phones['fr-BE'] = phones['nl-BE'];
3794phones['zh-HK'] = phones['en-HK'];
3795
3796function isMobilePhone(str, locale, options) {
3797 (0, _assertString2.default)(str);
3798 if (options && options.strictMode && !str.startsWith('+')) {
3799 return false;
3800 }
3801 if (locale in phones) {
3802 return phones[locale].test(str);
3803 } else if (locale === 'any') {
3804 for (var key in phones) {
3805 if (phones.hasOwnProperty(key)) {
3806 var phone = phones[key];
3807 if (phone.test(str)) {
3808 return true;
3809 }
3810 }
3811 }
3812 return false;
3813 }
3814 throw new Error('Invalid locale \'' + locale + '\'');
3815}
3816module.exports = exports['default'];
3817});
3818
3819unwrapExports(isMobilePhone_1);
3820
3821var isCurrency_1 = createCommonjsModule(function (module, exports) {
3822
3823Object.defineProperty(exports, "__esModule", {
3824 value: true
3825});
3826exports.default = isCurrency;
3827
3828
3829
3830var _merge2 = _interopRequireDefault(merge_1);
3831
3832
3833
3834var _assertString2 = _interopRequireDefault(assertString_1);
3835
3836function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3837
3838function currencyRegex(options) {
3839 var decimal_digits = '\\d{' + options.digits_after_decimal[0] + '}';
3840 options.digits_after_decimal.forEach(function (digit, index) {
3841 if (index !== 0) decimal_digits = decimal_digits + '|\\d{' + digit + '}';
3842 });
3843 var symbol = '(\\' + options.symbol.replace(/\./g, '\\.') + ')' + (options.require_symbol ? '' : '?'),
3844 negative = '-?',
3845 whole_dollar_amount_without_sep = '[1-9]\\d*',
3846 whole_dollar_amount_with_sep = '[1-9]\\d{0,2}(\\' + options.thousands_separator + '\\d{3})*',
3847 valid_whole_dollar_amounts = ['0', whole_dollar_amount_without_sep, whole_dollar_amount_with_sep],
3848 whole_dollar_amount = '(' + valid_whole_dollar_amounts.join('|') + ')?',
3849 decimal_amount = '(\\' + options.decimal_separator + '(' + decimal_digits + '))' + (options.require_decimal ? '' : '?');
3850 var pattern = whole_dollar_amount + (options.allow_decimal || options.require_decimal ? decimal_amount : '');
3851
3852 // default is negative sign before symbol, but there are two other options (besides parens)
3853 if (options.allow_negatives && !options.parens_for_negatives) {
3854 if (options.negative_sign_after_digits) {
3855 pattern += negative;
3856 } else if (options.negative_sign_before_digits) {
3857 pattern = negative + pattern;
3858 }
3859 }
3860
3861 // South African Rand, for example, uses R 123 (space) and R-123 (no space)
3862 if (options.allow_negative_sign_placeholder) {
3863 pattern = '( (?!\\-))?' + pattern;
3864 } else if (options.allow_space_after_symbol) {
3865 pattern = ' ?' + pattern;
3866 } else if (options.allow_space_after_digits) {
3867 pattern += '( (?!$))?';
3868 }
3869
3870 if (options.symbol_after_digits) {
3871 pattern += symbol;
3872 } else {
3873 pattern = symbol + pattern;
3874 }
3875
3876 if (options.allow_negatives) {
3877 if (options.parens_for_negatives) {
3878 pattern = '(\\(' + pattern + '\\)|' + pattern + ')';
3879 } else if (!(options.negative_sign_before_digits || options.negative_sign_after_digits)) {
3880 pattern = negative + pattern;
3881 }
3882 }
3883
3884 // ensure there's a dollar and/or decimal amount, and that
3885 // it doesn't start with a space or a negative sign followed by a space
3886 return new RegExp('^(?!-? )(?=.*\\d)' + pattern + '$');
3887}
3888
3889var default_currency_options = {
3890 symbol: '$',
3891 require_symbol: false,
3892 allow_space_after_symbol: false,
3893 symbol_after_digits: false,
3894 allow_negatives: true,
3895 parens_for_negatives: false,
3896 negative_sign_before_digits: false,
3897 negative_sign_after_digits: false,
3898 allow_negative_sign_placeholder: false,
3899 thousands_separator: ',',
3900 decimal_separator: '.',
3901 allow_decimal: true,
3902 require_decimal: false,
3903 digits_after_decimal: [2],
3904 allow_space_after_digits: false
3905};
3906
3907function isCurrency(str, options) {
3908 (0, _assertString2.default)(str);
3909 options = (0, _merge2.default)(options, default_currency_options);
3910 return currencyRegex(options).test(str);
3911}
3912module.exports = exports['default'];
3913});
3914
3915unwrapExports(isCurrency_1);
3916
3917var isISO8601_1 = createCommonjsModule(function (module, exports) {
3918
3919Object.defineProperty(exports, "__esModule", {
3920 value: true
3921});
3922exports.default = isISO8601;
3923
3924
3925
3926var _assertString2 = _interopRequireDefault(assertString_1);
3927
3928function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3929
3930/* eslint-disable max-len */
3931// from http://goo.gl/0ejHHW
3932var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
3933/* eslint-enable max-len */
3934
3935function isISO8601(str) {
3936 (0, _assertString2.default)(str);
3937 return iso8601.test(str);
3938}
3939module.exports = exports['default'];
3940});
3941
3942unwrapExports(isISO8601_1);
3943
3944var isISO31661Alpha2_1 = createCommonjsModule(function (module, exports) {
3945
3946Object.defineProperty(exports, "__esModule", {
3947 value: true
3948});
3949exports.default = isISO31661Alpha2;
3950
3951
3952
3953var _assertString2 = _interopRequireDefault(assertString_1);
3954
3955function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3956
3957// from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
3958var validISO31661Alpha2CountriesCodes = ['AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ', 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS', 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE', 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GS', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR', 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP', 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX', 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS', 'YE', 'YT', 'ZA', 'ZM', 'ZW'];
3959
3960function isISO31661Alpha2(str) {
3961 (0, _assertString2.default)(str);
3962 return validISO31661Alpha2CountriesCodes.includes(str.toUpperCase());
3963}
3964module.exports = exports['default'];
3965});
3966
3967unwrapExports(isISO31661Alpha2_1);
3968
3969var isBase64_1 = createCommonjsModule(function (module, exports) {
3970
3971Object.defineProperty(exports, "__esModule", {
3972 value: true
3973});
3974exports.default = isBase64;
3975
3976
3977
3978var _assertString2 = _interopRequireDefault(assertString_1);
3979
3980function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
3981
3982var notBase64 = /[^A-Z0-9+\/=]/i;
3983
3984function isBase64(str) {
3985 (0, _assertString2.default)(str);
3986 var len = str.length;
3987 if (!len || len % 4 !== 0 || notBase64.test(str)) {
3988 return false;
3989 }
3990 var firstPaddingChar = str.indexOf('=');
3991 return firstPaddingChar === -1 || firstPaddingChar === len - 1 || firstPaddingChar === len - 2 && str[len - 1] === '=';
3992}
3993module.exports = exports['default'];
3994});
3995
3996unwrapExports(isBase64_1);
3997
3998var isDataURI_1 = createCommonjsModule(function (module, exports) {
3999
4000Object.defineProperty(exports, "__esModule", {
4001 value: true
4002});
4003exports.default = isDataURI;
4004
4005
4006
4007var _assertString2 = _interopRequireDefault(assertString_1);
4008
4009function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4010
4011var dataURI = /^\s*data:([a-z]+\/[a-z0-9\-\+]+(;[a-z\-]+=[a-z0-9\-]+)?)?(;base64)?,[a-z0-9!\$&',\(\)\*\+,;=\-\._~:@\/\?%\s]*\s*$/i; // eslint-disable-line max-len
4012
4013function isDataURI(str) {
4014 (0, _assertString2.default)(str);
4015 return dataURI.test(str);
4016}
4017module.exports = exports['default'];
4018});
4019
4020unwrapExports(isDataURI_1);
4021
4022var isMimeType_1 = createCommonjsModule(function (module, exports) {
4023
4024Object.defineProperty(exports, "__esModule", {
4025 value: true
4026});
4027exports.default = isMimeType;
4028
4029
4030
4031var _assertString2 = _interopRequireDefault(assertString_1);
4032
4033function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4034
4035/*
4036 Checks if the provided string matches to a correct Media type format (MIME type)
4037
4038 This function only checks is the string format follows the
4039 etablished rules by the according RFC specifications.
4040 This function supports 'charset' in textual media types
4041 (https://tools.ietf.org/html/rfc6657).
4042
4043 This function does not check against all the media types listed
4044 by the IANA (https://www.iana.org/assignments/media-types/media-types.xhtml)
4045 because of lightness purposes : it would require to include
4046 all these MIME types in this librairy, which would weigh it
4047 significantly. This kind of effort maybe is not worth for the use that
4048 this function has in this entire librairy.
4049
4050 More informations in the RFC specifications :
4051 - https://tools.ietf.org/html/rfc2045
4052 - https://tools.ietf.org/html/rfc2046
4053 - https://tools.ietf.org/html/rfc7231#section-3.1.1.1
4054 - https://tools.ietf.org/html/rfc7231#section-3.1.1.5
4055*/
4056
4057// Match simple MIME types
4058// NB :
4059// Subtype length must not exceed 100 characters.
4060// This rule does not comply to the RFC specs (what is the max length ?).
4061var mimeTypeSimple = /^(application|audio|font|image|message|model|multipart|text|video)\/[a-zA-Z0-9\.\-\+]{1,100}$/i; // eslint-disable-line max-len
4062
4063// Handle "charset" in "text/*"
4064var mimeTypeText = /^text\/[a-zA-Z0-9\.\-\+]{1,100};\s?charset=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?$/i; // eslint-disable-line max-len
4065
4066// Handle "boundary" in "multipart/*"
4067var mimeTypeMultipart = /^multipart\/[a-zA-Z0-9\.\-\+]{1,100}(;\s?(boundary|charset)=("[a-zA-Z0-9\.\-\+\s]{0,70}"|[a-zA-Z0-9\.\-\+]{0,70})(\s?\([a-zA-Z0-9\.\-\+\s]{1,20}\))?){0,2}$/i; // eslint-disable-line max-len
4068
4069function isMimeType(str) {
4070 (0, _assertString2.default)(str);
4071 return mimeTypeSimple.test(str) || mimeTypeText.test(str) || mimeTypeMultipart.test(str);
4072}
4073module.exports = exports['default'];
4074});
4075
4076unwrapExports(isMimeType_1);
4077
4078var isLatLong = createCommonjsModule(function (module, exports) {
4079
4080Object.defineProperty(exports, "__esModule", {
4081 value: true
4082});
4083
4084exports.default = function (str) {
4085 (0, _assertString2.default)(str);
4086 if (!str.includes(',')) return false;
4087 var pair = str.split(',');
4088 return lat.test(pair[0]) && long.test(pair[1]);
4089};
4090
4091
4092
4093var _assertString2 = _interopRequireDefault(assertString_1);
4094
4095function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4096
4097var lat = /^\(?[+-]?(90(\.0+)?|[1-8]?\d(\.\d+)?)$/;
4098var long = /^\s?[+-]?(180(\.0+)?|1[0-7]\d(\.\d+)?|\d{1,2}(\.\d+)?)\)?$/;
4099
4100module.exports = exports['default'];
4101});
4102
4103unwrapExports(isLatLong);
4104
4105var isPostalCode = createCommonjsModule(function (module, exports) {
4106
4107Object.defineProperty(exports, "__esModule", {
4108 value: true
4109});
4110exports.locales = undefined;
4111
4112exports.default = function (str, locale) {
4113 (0, _assertString2.default)(str);
4114 if (locale in patterns) {
4115 return patterns[locale].test(str);
4116 } else if (locale === 'any') {
4117 for (var key in patterns) {
4118 if (patterns.hasOwnProperty(key)) {
4119 var pattern = patterns[key];
4120 if (pattern.test(str)) {
4121 return true;
4122 }
4123 }
4124 }
4125 return false;
4126 }
4127 throw new Error('Invalid locale \'' + locale + '\'');
4128};
4129
4130
4131
4132var _assertString2 = _interopRequireDefault(assertString_1);
4133
4134function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4135
4136// common patterns
4137var threeDigit = /^\d{3}$/;
4138var fourDigit = /^\d{4}$/;
4139var fiveDigit = /^\d{5}$/;
4140var sixDigit = /^\d{6}$/;
4141
4142var patterns = {
4143 AT: fourDigit,
4144 AU: fourDigit,
4145 BE: fourDigit,
4146 BG: fourDigit,
4147 CA: /^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][\s\-]?\d[ABCEGHJ-NPRSTV-Z]\d$/i,
4148 CH: fourDigit,
4149 CZ: /^\d{3}\s?\d{2}$/,
4150 DE: fiveDigit,
4151 DK: fourDigit,
4152 DZ: fiveDigit,
4153 ES: fiveDigit,
4154 FI: fiveDigit,
4155 FR: /^\d{2}\s?\d{3}$/,
4156 GB: /^(gir\s?0aa|[a-z]{1,2}\d[\da-z]?\s?(\d[a-z]{2})?)$/i,
4157 GR: /^\d{3}\s?\d{2}$/,
4158 IL: fiveDigit,
4159 IN: sixDigit,
4160 IS: threeDigit,
4161 IT: fiveDigit,
4162 JP: /^\d{3}\-\d{4}$/,
4163 KE: fiveDigit,
4164 LI: /^(948[5-9]|949[0-7])$/,
4165 MX: fiveDigit,
4166 NL: /^\d{4}\s?[a-z]{2}$/i,
4167 NO: fourDigit,
4168 PL: /^\d{2}\-\d{3}$/,
4169 PT: /^\d{4}\-\d{3}?$/,
4170 RO: sixDigit,
4171 RU: sixDigit,
4172 SA: fiveDigit,
4173 SE: /^\d{3}\s?\d{2}$/,
4174 TW: /^\d{3}(\d{2})?$/,
4175 US: /^\d{5}(-\d{4})?$/,
4176 ZA: fourDigit,
4177 ZM: fiveDigit
4178};
4179
4180var locales = exports.locales = Object.keys(patterns);
4181});
4182
4183unwrapExports(isPostalCode);
4184var isPostalCode_1 = isPostalCode.locales;
4185
4186var ltrim_1 = createCommonjsModule(function (module, exports) {
4187
4188Object.defineProperty(exports, "__esModule", {
4189 value: true
4190});
4191exports.default = ltrim;
4192
4193
4194
4195var _assertString2 = _interopRequireDefault(assertString_1);
4196
4197function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4198
4199function ltrim(str, chars) {
4200 (0, _assertString2.default)(str);
4201 var pattern = chars ? new RegExp('^[' + chars + ']+', 'g') : /^\s+/g;
4202 return str.replace(pattern, '');
4203}
4204module.exports = exports['default'];
4205});
4206
4207unwrapExports(ltrim_1);
4208
4209var rtrim_1 = createCommonjsModule(function (module, exports) {
4210
4211Object.defineProperty(exports, "__esModule", {
4212 value: true
4213});
4214exports.default = rtrim;
4215
4216
4217
4218var _assertString2 = _interopRequireDefault(assertString_1);
4219
4220function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4221
4222function rtrim(str, chars) {
4223 (0, _assertString2.default)(str);
4224 var pattern = chars ? new RegExp('[' + chars + ']') : /\s/;
4225
4226 var idx = str.length - 1;
4227 while (idx >= 0 && pattern.test(str[idx])) {
4228 idx--;
4229 }
4230
4231 return idx < str.length ? str.substr(0, idx + 1) : str;
4232}
4233module.exports = exports['default'];
4234});
4235
4236unwrapExports(rtrim_1);
4237
4238var trim_1 = createCommonjsModule(function (module, exports) {
4239
4240Object.defineProperty(exports, "__esModule", {
4241 value: true
4242});
4243exports.default = trim;
4244
4245
4246
4247var _rtrim2 = _interopRequireDefault(rtrim_1);
4248
4249
4250
4251var _ltrim2 = _interopRequireDefault(ltrim_1);
4252
4253function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4254
4255function trim(str, chars) {
4256 return (0, _rtrim2.default)((0, _ltrim2.default)(str, chars), chars);
4257}
4258module.exports = exports['default'];
4259});
4260
4261unwrapExports(trim_1);
4262
4263var _escape = createCommonjsModule(function (module, exports) {
4264
4265Object.defineProperty(exports, "__esModule", {
4266 value: true
4267});
4268exports.default = escape;
4269
4270
4271
4272var _assertString2 = _interopRequireDefault(assertString_1);
4273
4274function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4275
4276function escape(str) {
4277 (0, _assertString2.default)(str);
4278 return str.replace(/&/g, '&amp;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\//g, '&#x2F;').replace(/\\/g, '&#x5C;').replace(/`/g, '&#96;');
4279}
4280module.exports = exports['default'];
4281});
4282
4283unwrapExports(_escape);
4284
4285var _unescape = createCommonjsModule(function (module, exports) {
4286
4287Object.defineProperty(exports, "__esModule", {
4288 value: true
4289});
4290exports.default = unescape;
4291
4292
4293
4294var _assertString2 = _interopRequireDefault(assertString_1);
4295
4296function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4297
4298function unescape(str) {
4299 (0, _assertString2.default)(str);
4300 return str.replace(/&amp;/g, '&').replace(/&quot;/g, '"').replace(/&#x27;/g, "'").replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&#x2F;/g, '/').replace(/&#x5C;/g, '\\').replace(/&#96;/g, '`');
4301}
4302module.exports = exports['default'];
4303});
4304
4305unwrapExports(_unescape);
4306
4307var blacklist_1 = createCommonjsModule(function (module, exports) {
4308
4309Object.defineProperty(exports, "__esModule", {
4310 value: true
4311});
4312exports.default = blacklist;
4313
4314
4315
4316var _assertString2 = _interopRequireDefault(assertString_1);
4317
4318function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4319
4320function blacklist(str, chars) {
4321 (0, _assertString2.default)(str);
4322 return str.replace(new RegExp('[' + chars + ']+', 'g'), '');
4323}
4324module.exports = exports['default'];
4325});
4326
4327unwrapExports(blacklist_1);
4328
4329var stripLow_1 = createCommonjsModule(function (module, exports) {
4330
4331Object.defineProperty(exports, "__esModule", {
4332 value: true
4333});
4334exports.default = stripLow;
4335
4336
4337
4338var _assertString2 = _interopRequireDefault(assertString_1);
4339
4340
4341
4342var _blacklist2 = _interopRequireDefault(blacklist_1);
4343
4344function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4345
4346function stripLow(str, keep_new_lines) {
4347 (0, _assertString2.default)(str);
4348 var chars = keep_new_lines ? '\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F' : '\\x00-\\x1F\\x7F';
4349 return (0, _blacklist2.default)(str, chars);
4350}
4351module.exports = exports['default'];
4352});
4353
4354unwrapExports(stripLow_1);
4355
4356var whitelist_1 = createCommonjsModule(function (module, exports) {
4357
4358Object.defineProperty(exports, "__esModule", {
4359 value: true
4360});
4361exports.default = whitelist;
4362
4363
4364
4365var _assertString2 = _interopRequireDefault(assertString_1);
4366
4367function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4368
4369function whitelist(str, chars) {
4370 (0, _assertString2.default)(str);
4371 return str.replace(new RegExp('[^' + chars + ']+', 'g'), '');
4372}
4373module.exports = exports['default'];
4374});
4375
4376unwrapExports(whitelist_1);
4377
4378var isWhitelisted_1 = createCommonjsModule(function (module, exports) {
4379
4380Object.defineProperty(exports, "__esModule", {
4381 value: true
4382});
4383exports.default = isWhitelisted;
4384
4385
4386
4387var _assertString2 = _interopRequireDefault(assertString_1);
4388
4389function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4390
4391function isWhitelisted(str, chars) {
4392 (0, _assertString2.default)(str);
4393 for (var i = str.length - 1; i >= 0; i--) {
4394 if (chars.indexOf(str[i]) === -1) {
4395 return false;
4396 }
4397 }
4398 return true;
4399}
4400module.exports = exports['default'];
4401});
4402
4403unwrapExports(isWhitelisted_1);
4404
4405var normalizeEmail_1 = createCommonjsModule(function (module, exports) {
4406
4407Object.defineProperty(exports, "__esModule", {
4408 value: true
4409});
4410exports.default = normalizeEmail;
4411
4412
4413
4414var _merge2 = _interopRequireDefault(merge_1);
4415
4416function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4417
4418var default_normalize_email_options = {
4419 // The following options apply to all email addresses
4420 // Lowercases the local part of the email address.
4421 // Please note this may violate RFC 5321 as per http://stackoverflow.com/a/9808332/192024).
4422 // The domain is always lowercased, as per RFC 1035
4423 all_lowercase: true,
4424
4425 // The following conversions are specific to GMail
4426 // Lowercases the local part of the GMail address (known to be case-insensitive)
4427 gmail_lowercase: true,
4428 // Removes dots from the local part of the email address, as that's ignored by GMail
4429 gmail_remove_dots: true,
4430 // Removes the subaddress (e.g. "+foo") from the email address
4431 gmail_remove_subaddress: true,
4432 // Conversts the googlemail.com domain to gmail.com
4433 gmail_convert_googlemaildotcom: true,
4434
4435 // The following conversions are specific to Outlook.com / Windows Live / Hotmail
4436 // Lowercases the local part of the Outlook.com address (known to be case-insensitive)
4437 outlookdotcom_lowercase: true,
4438 // Removes the subaddress (e.g. "+foo") from the email address
4439 outlookdotcom_remove_subaddress: true,
4440
4441 // The following conversions are specific to Yahoo
4442 // Lowercases the local part of the Yahoo address (known to be case-insensitive)
4443 yahoo_lowercase: true,
4444 // Removes the subaddress (e.g. "-foo") from the email address
4445 yahoo_remove_subaddress: true,
4446
4447 // The following conversions are specific to iCloud
4448 // Lowercases the local part of the iCloud address (known to be case-insensitive)
4449 icloud_lowercase: true,
4450 // Removes the subaddress (e.g. "+foo") from the email address
4451 icloud_remove_subaddress: true
4452};
4453
4454// List of domains used by iCloud
4455var icloud_domains = ['icloud.com', 'me.com'];
4456
4457// List of domains used by Outlook.com and its predecessors
4458// This list is likely incomplete.
4459// Partial reference:
4460// https://blogs.office.com/2013/04/17/outlook-com-gets-two-step-verification-sign-in-by-alias-and-new-international-domains/
4461var outlookdotcom_domains = ['hotmail.at', 'hotmail.be', 'hotmail.ca', 'hotmail.cl', 'hotmail.co.il', 'hotmail.co.nz', 'hotmail.co.th', 'hotmail.co.uk', 'hotmail.com', 'hotmail.com.ar', 'hotmail.com.au', 'hotmail.com.br', 'hotmail.com.gr', 'hotmail.com.mx', 'hotmail.com.pe', 'hotmail.com.tr', 'hotmail.com.vn', 'hotmail.cz', 'hotmail.de', 'hotmail.dk', 'hotmail.es', 'hotmail.fr', 'hotmail.hu', 'hotmail.id', 'hotmail.ie', 'hotmail.in', 'hotmail.it', 'hotmail.jp', 'hotmail.kr', 'hotmail.lv', 'hotmail.my', 'hotmail.ph', 'hotmail.pt', 'hotmail.sa', 'hotmail.sg', 'hotmail.sk', 'live.be', 'live.co.uk', 'live.com', 'live.com.ar', 'live.com.mx', 'live.de', 'live.es', 'live.eu', 'live.fr', 'live.it', 'live.nl', 'msn.com', 'outlook.at', 'outlook.be', 'outlook.cl', 'outlook.co.il', 'outlook.co.nz', 'outlook.co.th', 'outlook.com', 'outlook.com.ar', 'outlook.com.au', 'outlook.com.br', 'outlook.com.gr', 'outlook.com.pe', 'outlook.com.tr', 'outlook.com.vn', 'outlook.cz', 'outlook.de', 'outlook.dk', 'outlook.es', 'outlook.fr', 'outlook.hu', 'outlook.id', 'outlook.ie', 'outlook.in', 'outlook.it', 'outlook.jp', 'outlook.kr', 'outlook.lv', 'outlook.my', 'outlook.ph', 'outlook.pt', 'outlook.sa', 'outlook.sg', 'outlook.sk', 'passport.com'];
4462
4463// List of domains used by Yahoo Mail
4464// This list is likely incomplete
4465var yahoo_domains = ['rocketmail.com', 'yahoo.ca', 'yahoo.co.uk', 'yahoo.com', 'yahoo.de', 'yahoo.fr', 'yahoo.in', 'yahoo.it', 'ymail.com'];
4466
4467function normalizeEmail(email, options) {
4468 options = (0, _merge2.default)(options, default_normalize_email_options);
4469
4470 var raw_parts = email.split('@');
4471 var domain = raw_parts.pop();
4472 var user = raw_parts.join('@');
4473 var parts = [user, domain];
4474
4475 // The domain is always lowercased, as it's case-insensitive per RFC 1035
4476 parts[1] = parts[1].toLowerCase();
4477
4478 if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') {
4479 // Address is GMail
4480 if (options.gmail_remove_subaddress) {
4481 parts[0] = parts[0].split('+')[0];
4482 }
4483 if (options.gmail_remove_dots) {
4484 parts[0] = parts[0].replace(/\./g, '');
4485 }
4486 if (!parts[0].length) {
4487 return false;
4488 }
4489 if (options.all_lowercase || options.gmail_lowercase) {
4490 parts[0] = parts[0].toLowerCase();
4491 }
4492 parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1];
4493 } else if (~icloud_domains.indexOf(parts[1])) {
4494 // Address is iCloud
4495 if (options.icloud_remove_subaddress) {
4496 parts[0] = parts[0].split('+')[0];
4497 }
4498 if (!parts[0].length) {
4499 return false;
4500 }
4501 if (options.all_lowercase || options.icloud_lowercase) {
4502 parts[0] = parts[0].toLowerCase();
4503 }
4504 } else if (~outlookdotcom_domains.indexOf(parts[1])) {
4505 // Address is Outlook.com
4506 if (options.outlookdotcom_remove_subaddress) {
4507 parts[0] = parts[0].split('+')[0];
4508 }
4509 if (!parts[0].length) {
4510 return false;
4511 }
4512 if (options.all_lowercase || options.outlookdotcom_lowercase) {
4513 parts[0] = parts[0].toLowerCase();
4514 }
4515 } else if (~yahoo_domains.indexOf(parts[1])) {
4516 // Address is Yahoo
4517 if (options.yahoo_remove_subaddress) {
4518 var components = parts[0].split('-');
4519 parts[0] = components.length > 1 ? components.slice(0, -1).join('-') : components[0];
4520 }
4521 if (!parts[0].length) {
4522 return false;
4523 }
4524 if (options.all_lowercase || options.yahoo_lowercase) {
4525 parts[0] = parts[0].toLowerCase();
4526 }
4527 } else if (options.all_lowercase) {
4528 // Any other address
4529 parts[0] = parts[0].toLowerCase();
4530 }
4531 return parts.join('@');
4532}
4533module.exports = exports['default'];
4534});
4535
4536unwrapExports(normalizeEmail_1);
4537
4538var validator_1 = createCommonjsModule(function (module, exports) {
4539
4540Object.defineProperty(exports, "__esModule", {
4541 value: true
4542});
4543
4544
4545
4546var _toDate2 = _interopRequireDefault(toDate_1);
4547
4548
4549
4550var _toFloat2 = _interopRequireDefault(toFloat_1);
4551
4552
4553
4554var _toInt2 = _interopRequireDefault(toInt_1);
4555
4556
4557
4558var _toBoolean2 = _interopRequireDefault(toBoolean_1);
4559
4560
4561
4562var _equals2 = _interopRequireDefault(equals_1);
4563
4564
4565
4566var _contains2 = _interopRequireDefault(contains_1);
4567
4568
4569
4570var _matches2 = _interopRequireDefault(matches_1);
4571
4572
4573
4574var _isEmail2 = _interopRequireDefault(isEmail_1);
4575
4576
4577
4578var _isURL2 = _interopRequireDefault(isURL_1);
4579
4580
4581
4582var _isMACAddress2 = _interopRequireDefault(isMACAddress_1);
4583
4584
4585
4586var _isIP2 = _interopRequireDefault(isIP_1);
4587
4588
4589
4590var _isFQDN2 = _interopRequireDefault(isFQDN_1);
4591
4592
4593
4594var _isBoolean2 = _interopRequireDefault(isBoolean_1);
4595
4596
4597
4598var _isAlpha2 = _interopRequireDefault(isAlpha_1);
4599
4600
4601
4602var _isAlphanumeric2 = _interopRequireDefault(isAlphanumeric_1);
4603
4604
4605
4606var _isNumeric2 = _interopRequireDefault(isNumeric_1);
4607
4608
4609
4610var _isPort2 = _interopRequireDefault(isPort_1);
4611
4612
4613
4614var _isLowercase2 = _interopRequireDefault(isLowercase_1);
4615
4616
4617
4618var _isUppercase2 = _interopRequireDefault(isUppercase_1);
4619
4620
4621
4622var _isAscii2 = _interopRequireDefault(isAscii_1);
4623
4624
4625
4626var _isFullWidth2 = _interopRequireDefault(isFullWidth_1);
4627
4628
4629
4630var _isHalfWidth2 = _interopRequireDefault(isHalfWidth_1);
4631
4632
4633
4634var _isVariableWidth2 = _interopRequireDefault(isVariableWidth_1);
4635
4636
4637
4638var _isMultibyte2 = _interopRequireDefault(isMultibyte_1);
4639
4640
4641
4642var _isSurrogatePair2 = _interopRequireDefault(isSurrogatePair_1);
4643
4644
4645
4646var _isInt2 = _interopRequireDefault(isInt_1);
4647
4648
4649
4650var _isFloat2 = _interopRequireDefault(isFloat_1);
4651
4652
4653
4654var _isDecimal2 = _interopRequireDefault(isDecimal_1);
4655
4656
4657
4658var _isHexadecimal2 = _interopRequireDefault(isHexadecimal_1);
4659
4660
4661
4662var _isDivisibleBy2 = _interopRequireDefault(isDivisibleBy_1);
4663
4664
4665
4666var _isHexColor2 = _interopRequireDefault(isHexColor_1);
4667
4668
4669
4670var _isISRC2 = _interopRequireDefault(isISRC_1);
4671
4672
4673
4674var _isMD2 = _interopRequireDefault(isMD5_1);
4675
4676
4677
4678var _isHash2 = _interopRequireDefault(isHash_1);
4679
4680
4681
4682var _isJSON2 = _interopRequireDefault(isJSON_1);
4683
4684
4685
4686var _isEmpty2 = _interopRequireDefault(isEmpty_1);
4687
4688
4689
4690var _isLength2 = _interopRequireDefault(isLength_1);
4691
4692
4693
4694var _isByteLength2 = _interopRequireDefault(isByteLength_1);
4695
4696
4697
4698var _isUUID2 = _interopRequireDefault(isUUID_1);
4699
4700
4701
4702var _isMongoId2 = _interopRequireDefault(isMongoId_1);
4703
4704
4705
4706var _isAfter2 = _interopRequireDefault(isAfter_1);
4707
4708
4709
4710var _isBefore2 = _interopRequireDefault(isBefore_1);
4711
4712
4713
4714var _isIn2 = _interopRequireDefault(isIn_1);
4715
4716
4717
4718var _isCreditCard2 = _interopRequireDefault(isCreditCard_1);
4719
4720
4721
4722var _isISIN2 = _interopRequireDefault(isISIN_1);
4723
4724
4725
4726var _isISBN2 = _interopRequireDefault(isISBN_1);
4727
4728
4729
4730var _isISSN2 = _interopRequireDefault(isISSN_1);
4731
4732
4733
4734var _isMobilePhone2 = _interopRequireDefault(isMobilePhone_1);
4735
4736
4737
4738var _isCurrency2 = _interopRequireDefault(isCurrency_1);
4739
4740
4741
4742var _isISO2 = _interopRequireDefault(isISO8601_1);
4743
4744
4745
4746var _isISO31661Alpha2 = _interopRequireDefault(isISO31661Alpha2_1);
4747
4748
4749
4750var _isBase2 = _interopRequireDefault(isBase64_1);
4751
4752
4753
4754var _isDataURI2 = _interopRequireDefault(isDataURI_1);
4755
4756
4757
4758var _isMimeType2 = _interopRequireDefault(isMimeType_1);
4759
4760
4761
4762var _isLatLong2 = _interopRequireDefault(isLatLong);
4763
4764
4765
4766var _isPostalCode2 = _interopRequireDefault(isPostalCode);
4767
4768
4769
4770var _ltrim2 = _interopRequireDefault(ltrim_1);
4771
4772
4773
4774var _rtrim2 = _interopRequireDefault(rtrim_1);
4775
4776
4777
4778var _trim2 = _interopRequireDefault(trim_1);
4779
4780
4781
4782var _escape2 = _interopRequireDefault(_escape);
4783
4784
4785
4786var _unescape2 = _interopRequireDefault(_unescape);
4787
4788
4789
4790var _stripLow2 = _interopRequireDefault(stripLow_1);
4791
4792
4793
4794var _whitelist2 = _interopRequireDefault(whitelist_1);
4795
4796
4797
4798var _blacklist2 = _interopRequireDefault(blacklist_1);
4799
4800
4801
4802var _isWhitelisted2 = _interopRequireDefault(isWhitelisted_1);
4803
4804
4805
4806var _normalizeEmail2 = _interopRequireDefault(normalizeEmail_1);
4807
4808
4809
4810var _toString2 = _interopRequireDefault(toString_1);
4811
4812function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
4813
4814var version = '9.4.0';
4815
4816var validator = {
4817 version: version,
4818 toDate: _toDate2.default,
4819 toFloat: _toFloat2.default,
4820 toInt: _toInt2.default,
4821 toBoolean: _toBoolean2.default,
4822 equals: _equals2.default,
4823 contains: _contains2.default,
4824 matches: _matches2.default,
4825 isEmail: _isEmail2.default,
4826 isURL: _isURL2.default,
4827 isMACAddress: _isMACAddress2.default,
4828 isIP: _isIP2.default,
4829 isFQDN: _isFQDN2.default,
4830 isBoolean: _isBoolean2.default,
4831 isAlpha: _isAlpha2.default,
4832 isAlphanumeric: _isAlphanumeric2.default,
4833 isNumeric: _isNumeric2.default,
4834 isPort: _isPort2.default,
4835 isLowercase: _isLowercase2.default,
4836 isUppercase: _isUppercase2.default,
4837 isAscii: _isAscii2.default,
4838 isFullWidth: _isFullWidth2.default,
4839 isHalfWidth: _isHalfWidth2.default,
4840 isVariableWidth: _isVariableWidth2.default,
4841 isMultibyte: _isMultibyte2.default,
4842 isSurrogatePair: _isSurrogatePair2.default,
4843 isInt: _isInt2.default,
4844 isFloat: _isFloat2.default,
4845 isDecimal: _isDecimal2.default,
4846 isHexadecimal: _isHexadecimal2.default,
4847 isDivisibleBy: _isDivisibleBy2.default,
4848 isHexColor: _isHexColor2.default,
4849 isISRC: _isISRC2.default,
4850 isMD5: _isMD2.default,
4851 isHash: _isHash2.default,
4852 isJSON: _isJSON2.default,
4853 isEmpty: _isEmpty2.default,
4854 isLength: _isLength2.default,
4855 isByteLength: _isByteLength2.default,
4856 isUUID: _isUUID2.default,
4857 isMongoId: _isMongoId2.default,
4858 isAfter: _isAfter2.default,
4859 isBefore: _isBefore2.default,
4860 isIn: _isIn2.default,
4861 isCreditCard: _isCreditCard2.default,
4862 isISIN: _isISIN2.default,
4863 isISBN: _isISBN2.default,
4864 isISSN: _isISSN2.default,
4865 isMobilePhone: _isMobilePhone2.default,
4866 isPostalCode: _isPostalCode2.default,
4867 isCurrency: _isCurrency2.default,
4868 isISO8601: _isISO2.default,
4869 isISO31661Alpha2: _isISO31661Alpha2.default,
4870 isBase64: _isBase2.default,
4871 isDataURI: _isDataURI2.default,
4872 isMimeType: _isMimeType2.default,
4873 isLatLong: _isLatLong2.default,
4874 ltrim: _ltrim2.default,
4875 rtrim: _rtrim2.default,
4876 trim: _trim2.default,
4877 escape: _escape2.default,
4878 unescape: _unescape2.default,
4879 stripLow: _stripLow2.default,
4880 whitelist: _whitelist2.default,
4881 blacklist: _blacklist2.default,
4882 isWhitelisted: _isWhitelisted2.default,
4883 normalizeEmail: _normalizeEmail2.default,
4884 toString: _toString2.default
4885};
4886
4887exports.default = validator;
4888module.exports = exports['default'];
4889});
4890
4891unwrapExports(validator_1);
4892var validator_2 = validator_1.isEmail;
4893var validator_3 = validator_1.isEmpty;
4894
4895/**
4896 * Validates and returns the branch if valid
4897 *
4898 * @param {string} zip
4899 * @param {object} branchCodes
4900 * @returns {string}
4901 */
4902function validateBranch(zip, branchCodes) {
4903 return branchCodes[zip] ? true : false;
4904}
4905/**
4906 * Check to see if an email is valid
4907 *
4908 * @param {string} email
4909 * @returns {boolean}
4910 */
4911function validateEmail(email) {
4912 return validator_3(email) || !validator_2(email) ? false : true;
4913}
4914/**
4915 * check to see if a phone is valid
4916 *
4917 * @export
4918 * @param {string} phone value to be validated
4919 * @returns {boolean} true if valid or false if not
4920 */
4921function validatePhone(phone) {
4922 const parsedPhone = cleanPhone(phone);
4923 const length = parsedPhone.length;
4924 if (!parsedPhone || length !== 10) {
4925 return false;
4926 }
4927 return true;
4928}
4929/**
4930 * Check to ensure it falls between the specified dates between
4931 * the load date and the date posted (normally 58 days)
4932 *
4933 * @export
4934 * @param {DateTimeRange} date loadDate and datePosted values
4935 * @returns {boolean} true if valid or false if not
4936 */
4937function validateLoadDate(date) {
4938 const diff = differenceInDays(date.dateLoaded, date.datePosted);
4939 return diff < 0 || diff > DueDaysLimit.DUE_DAYS_LIMIT ? false : true;
4940}
4941
4942/**
4943 * check and pad the zip code to ensure it's a
4944 * five digit number
4945 *
4946 * @param {string} zip
4947 * @returns {string}
4948 */
4949function zipcode(zip) {
4950 const ZIP_FIVE_REGEX = /\d{5}-\d{4}/gi;
4951 const ZIP_FIVE_PAD_REGEX = /\d{4,5}-\d{4}/gi;
4952 if (!zip) {
4953 return '';
4954 }
4955 if (zip.length < 5) {
4956 return underscore_string_1(zip, 5, '0');
4957 }
4958 if (zip.length > 5 && ZIP_FIVE_REGEX.test(zip)) {
4959 return zip.slice(0, 5);
4960 }
4961 if (zip.length > 5 && ZIP_FIVE_PAD_REGEX.test(zip)) {
4962 const slicedZip = zip.slice(0, 4);
4963 return underscore_string_1(slicedZip, 5, '0');
4964 }
4965 return zip;
4966}
4967
4968/**
4969 * Count the number of leads that are false
4970 *
4971 * @export
4972 * @param {Leads[]} data data to be processed
4973 * @param {string} filterBy what to filter the data with
4974 * @returns {number} number of false leads
4975 */
4976function report(data, filterBy) {
4977 return data.filter((val) => {
4978 const filter = val[filterBy];
4979 if (filter === false) {
4980 return val;
4981 }
4982 }).length;
4983}
4984/**
4985 * filter and get the valid leads from the file
4986 *
4987 * @export
4988 * @param {Leads[]} data data to be filtered
4989 * @param {string} filterBy the filter criteria
4990 * @returns {Leads[]} the filtered leads
4991 */
4992function validData(data, filterBy) {
4993 return data.filter((row) => {
4994 const filter = row[filterBy];
4995 if (filter === true) {
4996 return row;
4997 }
4998 });
4999}
5000
5001/**
5002 * upload data to different verticals in leadspeida
5003 *
5004 * @export
5005 * @class LeadsPedia
5006 */
5007class LeadsPedia {
5008 constructor() {
5009 this.pingUrl = 'http://datawerx.leadspediatrack.com/ping.do';
5010 this.postUrl = 'http://datawerx.leadspediatrack.com/post.do';
5011 this.axios = Axios.create({
5012 baseURL: this.postUrl,
5013 });
5014 }
5015 /**
5016 * upload health leads to leadspedia
5017 *
5018 * @param {LpLeadData} data data to be uploaded
5019 * @returns {Promise<LpRequestBody>}
5020 * @memberof LeadsPedia
5021 */
5022 health(data) {
5023 return __awaiter(this, void 0, void 0, function* () {
5024 const lpData = this.lpHealthFormat(data);
5025 try {
5026 return yield this.postRequest(lpData);
5027 }
5028 catch (err) {
5029 return err;
5030 }
5031 });
5032 }
5033 /**
5034 * upload life leads to leadspedia
5035 *
5036 * @param {LpLeadData} data data to be uploaded
5037 * @returns {Promise<LpRequestBody>} response
5038 * @memberof LeadsPedia
5039 */
5040 life(data) {
5041 return __awaiter(this, void 0, void 0, function* () {
5042 const lpData = this.lpLifeFormat(data);
5043 try {
5044 return yield this.postRequest(lpData);
5045 }
5046 catch (err) {
5047 return err;
5048 }
5049 });
5050 }
5051 /**
5052 * upload medicare leads
5053 *
5054 * @param {LpLeadData} data data to be uploaded
5055 * @returns {Promise<LpRequestBody>}
5056 * @memberof LeadsPedia
5057 */
5058 medicare(data) {
5059 return __awaiter(this, void 0, void 0, function* () {
5060 const lpData = this.lpMedicareFormat(data);
5061 try {
5062 return yield this.postRequest(lpData);
5063 }
5064 catch (err) {
5065 return err;
5066 }
5067 });
5068 }
5069 /**
5070 * convert data to the format accepted by leadspedia
5071 *
5072 * @private
5073 * @param {LpLeadData} data data to be converted
5074 * @returns formated data
5075 * @memberof LeadsPedia
5076 */
5077 lpBaseFromat(data) {
5078 return {
5079 lp_campaign_id: data.apiId,
5080 lp_campaign_key: data.apiKey,
5081 lp_response: 'JSON',
5082 first_name: data.firstName,
5083 last_name: data.lastName,
5084 address: data.address,
5085 city: data.city,
5086 state: data.state,
5087 zip_code: data.zip,
5088 email_address: data.email,
5089 phone: data.phone,
5090 dob: convertDateFormat(data.dob),
5091 ip_address: data.ipAddress,
5092 gender: data.gender,
5093 universal_leadid: data.universalLeadId,
5094 promo_id: data.promoId,
5095 sub_id: data.subId,
5096 sub_source: data.utmSource,
5097 medium: data.utmMedium,
5098 campaign_name: data.utmCampaign,
5099 phone_to_name: data.phoneToName,
5100 email_to_name: data.emailToName,
5101 address_to_name: data.addressToName,
5102 address_contact_score: data.addressContactScore,
5103 email_contact_score: data.emailContactScore,
5104 phone_contact_score: data.phoneContactScore,
5105 fb_lead_id: data.fbLeadId,
5106 fb_form_id: data.formId,
5107 };
5108 }
5109 /**
5110 * health formatted data
5111 *
5112 * @private
5113 * @param {LpLeadData} data lead to be formatted
5114 * @returns {LpHealthRequest}
5115 * @memberof LeadsPedia
5116 */
5117 lpHealthFormat(data) {
5118 return Object.assign({}, this.lpBaseFromat(data), {
5119 height_feet: data.heightFt,
5120 height_inches: data.heightIn,
5121 weight: data.weight,
5122 income: data.income,
5123 health_condition: data.healthCondition,
5124 life_event: data.lifeEvent,
5125 marital_status: data.maritalStatus,
5126 occupation: data.occupation,
5127 relationshipToApplicant: data.relationshipToApplicant,
5128 education: data.education,
5129 student: data.student,
5130 deniedCoverage: data.deniedCoverage,
5131 currentlyInsured: data.currentlyInsured,
5132 relativeHeartDisease: data.relativeHeartDisease,
5133 relativeCancer: data.relativeCancer,
5134 medicalTreatment: data.medicalTreatment,
5135 hospitalized: data.hospitalized,
5136 pregnant: data.pregnant,
5137 alcoholAbstain: data.alcoholAbstain,
5138 dui: data.dui,
5139 preexistingConditions: data.preexistingConditions,
5140 });
5141 }
5142 /**
5143 * life formatted data
5144 *
5145 * @private
5146 * @param {LpLeadData} data data to be formatted
5147 * @returns {LpLifeRequest}
5148 * @memberof LeadsPedia
5149 */
5150 lpLifeFormat(data) {
5151 return Object.assign({}, this.lpBaseFromat(data), {
5152 height_ft: data.heightFt,
5153 height_inches: data.heightIn,
5154 smoker: data.smoker,
5155 insurance_amount: data.insuranceAmount,
5156 phone_home: data.phone,
5157 });
5158 }
5159 /**
5160 * medicare formatted data
5161 *
5162 * @private
5163 * @param {LpLeadData} data data to be formatted
5164 * @returns {LpMedicareRequest}
5165 * @memberof LeadsPedia
5166 */
5167 lpMedicareFormat(data) {
5168 return Object.assign({}, this.lpBaseFromat(data), {
5169 phone_home: data.phone,
5170 plan_type: data.planType,
5171 part_a_b: data.partAorB,
5172 chronic_disease: data.chronicDisease,
5173 medicaid: data.medicaid,
5174 });
5175 }
5176 /**
5177 * send a post request to leadspeida servers
5178 *
5179 * @private
5180 * @param {{}} params data to be sent over
5181 * @returns {Promise<LpRequestBody>}
5182 * @memberof LeadsPedia
5183 */
5184 postRequest(params) {
5185 return __awaiter(this, void 0, void 0, function* () {
5186 try {
5187 const res = yield this.axios({
5188 method: 'post',
5189 params,
5190 });
5191 return res.data;
5192 }
5193 catch (err) {
5194 return err;
5195 }
5196 });
5197 }
5198}
5199
5200/**
5201 * Validate a lead to ensure that the name,
5202 * email, phone and address match
5203 *
5204 * @export
5205 * @class WhitePages
5206 */
5207class WhitePages {
5208 /**
5209 * Creates an instance of WhitePages.
5210 * @param {string} apiKey wp api key
5211 * @memberof WhitePages
5212 */
5213 constructor(apiKey) {
5214 this.url = 'https://proapi.whitepages.com/3.3/lead_verify.json?';
5215 this.apiKey = apiKey;
5216 this.axios = Axios.create({ baseURL: this.url });
5217 }
5218 /**
5219 * process the lead and sure it's valid through certain crietria
5220 *
5221 * @param {Lead} leads data to be processed
5222 * @returns {(Promise<{ status: string; errors: string[] | null }>)}
5223 * @memberof WhitePages
5224 */
5225 validateLead(leads) {
5226 return __awaiter(this, void 0, void 0, function* () {
5227 try {
5228 const formated = this.convertToWpFormat(leads);
5229 const data = yield this.getRequest(formated);
5230 const phoneChecks = data.phone_checks;
5231 const emailChecks = data.email_address_checks;
5232 const addressChecks = data.address_checks;
5233 const errors = [];
5234 if (emailChecks.is_valid === false ||
5235 emailChecks.is_disposable ||
5236 emailChecks.email_contact_score === 4) {
5237 errors.push('invalid Email');
5238 }
5239 /**
5240 * validate phone
5241 */
5242 if (phoneChecks.is_valid === false ||
5243 phoneChecks.is_commercial ||
5244 phoneChecks.line_type === 'Tollfree' ||
5245 phoneChecks.phone_contact_score === 4) {
5246 errors.push('invalid phone number');
5247 }
5248 /**
5249 * validate address
5250 */
5251 if (addressChecks.is_valid === false ||
5252 !addressChecks.is_active ||
5253 addressChecks.is_commercial ||
5254 addressChecks.address_contact_score === 4) {
5255 errors.push('invalid address');
5256 }
5257 if (errors.length > 0) {
5258 return Promise.resolve({ status: 'error', errors });
5259 }
5260 return Promise.resolve({ status: 'success', errors: null });
5261 }
5262 catch (err) {
5263 return err;
5264 }
5265 });
5266 }
5267 /**
5268 * convert the lead data to the format required by wp to process
5269 *
5270 * @private
5271 * @param {Lead} lead
5272 * @returns {WpFormat}
5273 * @memberof WhitePages
5274 */
5275 convertToWpFormat(lead) {
5276 return {
5277 firstname: lead.firstName,
5278 lastname: lead.lastName,
5279 phone: lead.phone,
5280 email_address: lead.email,
5281 'address.postal_code': lead.zip,
5282 'address.street_line_1': lead.address,
5283 'address.city': lead.city,
5284 'address.state_code': lead.state,
5285 };
5286 }
5287 /**
5288 * run the get request using axios
5289 *
5290 * @private
5291 * @param {WpFormat} params object of param to be passed
5292 * @returns {Promise<WpLeadResponse>}
5293 * @memberof WhitePages
5294 */
5295 getRequest(params) {
5296 return __awaiter(this, void 0, void 0, function* () {
5297 try {
5298 const res = yield this.axios({
5299 method: 'get',
5300 params: Object.assign({}, params, { api_key: this.apiKey }),
5301 });
5302 return res.data;
5303 }
5304 catch (err) {
5305 return err;
5306 }
5307 });
5308 }
5309}
5310
5311export { Ftp, cleanPhone, cleanString, cleanRow, columnHeaders, dobValues, correctDobFormart, convertDateFormat, extraColumns, initLeadId, assignLeadId, isHiddenFile, isTuesday$1 as isTuesday, isWithinAgeRange, setBranchCodes, validateBranch, validateEmail, validatePhone, validateLoadDate, zipcode, report, validData, Convert, LeadsPedia, WhitePages };
5312//# sourceMappingURL=index.js.map