1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = isFQDN;
|
7 |
|
8 | var _assertString = _interopRequireDefault(require("./util/assertString"));
|
9 |
|
10 | var _merge = _interopRequireDefault(require("./util/merge"));
|
11 |
|
12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
13 |
|
14 | var default_fqdn_options = {
|
15 | require_tld: true,
|
16 | allow_underscores: false,
|
17 | allow_trailing_dot: false
|
18 | };
|
19 |
|
20 | function isFQDN(str, options) {
|
21 | (0, _assertString.default)(str);
|
22 | options = (0, _merge.default)(options, default_fqdn_options);
|
23 |
|
24 |
|
25 | if (options.allow_trailing_dot && str[str.length - 1] === '.') {
|
26 | str = str.substring(0, str.length - 1);
|
27 | }
|
28 |
|
29 | var parts = str.split('.');
|
30 |
|
31 | for (var i = 0; i < parts.length; i++) {
|
32 | if (parts[i].length > 63) {
|
33 | return false;
|
34 | }
|
35 | }
|
36 |
|
37 | if (options.require_tld) {
|
38 | var tld = parts.pop();
|
39 |
|
40 | if (!parts.length || !/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(tld)) {
|
41 | return false;
|
42 | }
|
43 |
|
44 |
|
45 | if (/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(tld)) {
|
46 | return false;
|
47 | }
|
48 | }
|
49 |
|
50 | for (var part, _i = 0; _i < parts.length; _i++) {
|
51 | part = parts[_i];
|
52 |
|
53 | if (options.allow_underscores) {
|
54 | part = part.replace(/_/g, '');
|
55 | }
|
56 |
|
57 | if (!/^[a-z\u00a1-\uffff0-9-]+$/i.test(part)) {
|
58 | return false;
|
59 | }
|
60 |
|
61 |
|
62 | if (/[\uff01-\uff5e]/.test(part)) {
|
63 | return false;
|
64 | }
|
65 |
|
66 | if (part[0] === '-' || part[part.length - 1] === '-') {
|
67 | return false;
|
68 | }
|
69 | }
|
70 |
|
71 | return true;
|
72 | }
|
73 |
|
74 | module.exports = exports.default; |
\ | No newline at end of file |