UNPKG

1.68 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = isFQDN;
7
8var _assertString = _interopRequireDefault(require("./util/assertString"));
9
10var _merge = _interopRequireDefault(require("./util/merge"));
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14var default_fqdn_options = {
15 require_tld: true,
16 allow_underscores: false,
17 allow_trailing_dot: false
18};
19
20function isFQDN(str, options) {
21 (0, _assertString.default)(str);
22 options = (0, _merge.default)(options, default_fqdn_options);
23 /* Remove the optional trailing dot before checking validity */
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 } // disallow spaces
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 } // disallow full-width chars
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
74module.exports = exports.default;
\No newline at end of file