index.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. 'use strict';
  2. const Decode = require('./decode');
  3. const Domain = require('./domain');
  4. const Email = require('./email');
  5. const Errors = require('./errors');
  6. const Ip = require('./ip');
  7. const Tlds = require('./tlds');
  8. const Uri = require('./uri');
  9. const internals = {
  10. defaultTlds: { allow: Tlds, deny: null }
  11. };
  12. module.exports = {
  13. errors: Errors.codes,
  14. domain: {
  15. analyze(domain, options) {
  16. options = internals.options(options);
  17. return Domain.analyze(domain, options);
  18. },
  19. isValid(domain, options) {
  20. options = internals.options(options);
  21. return Domain.isValid(domain, options);
  22. }
  23. },
  24. email: {
  25. analyze(email, options) {
  26. options = internals.options(options);
  27. return Email.analyze(email, options);
  28. },
  29. isValid(email, options) {
  30. options = internals.options(options);
  31. return Email.isValid(email, options);
  32. }
  33. },
  34. ip: {
  35. regex: Ip.regex
  36. },
  37. uri: {
  38. decode: Decode.decode,
  39. regex: Uri.regex
  40. }
  41. };
  42. internals.options = function (options) {
  43. if (!options) {
  44. return { tlds: internals.defaultTlds };
  45. }
  46. if (options.tlds === false) { // Defaults to true
  47. return options;
  48. }
  49. if (!options.tlds ||
  50. options.tlds === true) {
  51. return Object.assign({}, options, { tlds: internals.defaultTlds });
  52. }
  53. if (typeof options.tlds !== 'object') {
  54. throw new Error('Invalid options: tlds must be a boolean or an object');
  55. }
  56. if (options.tlds.deny) {
  57. if (options.tlds.deny instanceof Set === false) {
  58. throw new Error('Invalid options: tlds.deny must be a Set object');
  59. }
  60. if (options.tlds.allow) {
  61. throw new Error('Invalid options: cannot specify both tlds.allow and tlds.deny lists');
  62. }
  63. return options;
  64. }
  65. if (options.tlds.allow === true) {
  66. return Object.assign({}, options, { tlds: internals.defaultTlds });
  67. }
  68. if (options.tlds.allow instanceof Set === false) {
  69. throw new Error('Invalid options: tlds.allow must be a Set object or true');
  70. }
  71. return options;
  72. };