| | '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) { |
| | 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; |
| | }; |
| |
|