You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.2 KiB
97 lines
2.2 KiB
'use strict'; |
|
|
|
const Decode = require('./decode'); |
|
const Domain = require('./domain'); |
|
const Email = require('./email'); |
|
const Errors = require('./errors'); |
|
const Ip = require('./ip'); |
|
const Tlds = require('./tlds'); |
|
const Uri = require('./uri'); |
|
|
|
|
|
const internals = { |
|
defaultTlds: { allow: Tlds, deny: null } |
|
}; |
|
|
|
|
|
module.exports = { |
|
errors: Errors.codes, |
|
|
|
domain: { |
|
analyze(domain, options) { |
|
|
|
options = internals.options(options); |
|
return Domain.analyze(domain, options); |
|
}, |
|
|
|
isValid(domain, options) { |
|
|
|
options = internals.options(options); |
|
return Domain.isValid(domain, options); |
|
} |
|
}, |
|
email: { |
|
analyze(email, options) { |
|
|
|
options = internals.options(options); |
|
return Email.analyze(email, options); |
|
}, |
|
|
|
isValid(email, options) { |
|
|
|
options = internals.options(options); |
|
return Email.isValid(email, options); |
|
} |
|
}, |
|
ip: { |
|
regex: Ip.regex |
|
}, |
|
uri: { |
|
decode: Decode.decode, |
|
regex: Uri.regex |
|
} |
|
}; |
|
|
|
|
|
internals.options = function (options) { |
|
|
|
if (!options) { |
|
return { tlds: internals.defaultTlds }; |
|
} |
|
|
|
if (options.tlds === false) { // Defaults to true |
|
return options; |
|
} |
|
|
|
if (!options.tlds || |
|
options.tlds === true) { |
|
|
|
return Object.assign({}, options, { tlds: internals.defaultTlds }); |
|
} |
|
|
|
if (typeof options.tlds !== 'object') { |
|
throw new Error('Invalid options: tlds must be a boolean or an object'); |
|
} |
|
|
|
if (options.tlds.deny) { |
|
if (options.tlds.deny instanceof Set === false) { |
|
throw new Error('Invalid options: tlds.deny must be a Set object'); |
|
} |
|
|
|
if (options.tlds.allow) { |
|
throw new Error('Invalid options: cannot specify both tlds.allow and tlds.deny lists'); |
|
} |
|
|
|
return options; |
|
} |
|
|
|
if (options.tlds.allow === true) { |
|
return Object.assign({}, options, { tlds: internals.defaultTlds }); |
|
} |
|
|
|
if (options.tlds.allow instanceof Set === false) { |
|
throw new Error('Invalid options: tlds.allow must be a Set object or true'); |
|
} |
|
|
|
return options; |
|
};
|
|
|