| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- 'use strict';
 
- const Domain = require('./domain');
 
- const Email = require('./email');
 
- const Tlds = require('./tlds');
 
- const internals = {
 
-     defaultTlds: { allow: Tlds, deny: null }
 
- };
 
- module.exports = {
 
-     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);
 
-         }
 
-     }
 
- };
 
- 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;
 
- };
 
 
  |