From f535a89ca251b5b77df2d1d6500ffc266d8276c8 Mon Sep 17 00:00:00 2001
From: Fernando Lisboa Costa <fernando.costa@codeminer42.com>
Date: Wed, 24 Jan 2024 05:30:18 -0300
Subject: [PATCH 1/4] fix: default tlds: { allow: true }  on domain validation

---
 lib/types/string.js | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lib/types/string.js b/lib/types/string.js
index d472e610..c5fcec55 100755
--- a/lib/types/string.js
+++ b/lib/types/string.js
@@ -742,7 +742,8 @@ module.exports = Any.extend({
 internals.addressOptions = function (options) {
 
     if (!options) {
-        return options;
+        assert(internals.tlds, 'Built-in TLD list disabled');
+        return Object.assign({}, options, internals.tlds);
     }
 
     // minDomainSegments

From 9a62741c174386da0c4ce20ff0e662ff9a3d9146 Mon Sep 17 00:00:00 2001
From: Fernando Lisboa Costa <fernando.costa@codeminer42.com>
Date: Wed, 24 Jan 2024 05:30:27 -0300
Subject: [PATCH 2/4] test: default tlds: { allow: true }  on domain validation

---
 test/types/string.js | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/test/types/string.js b/test/types/string.js
index 438d553b..dcb3462f 100755
--- a/test/types/string.js
+++ b/test/types/string.js
@@ -1323,7 +1323,8 @@ describe('string', () => {
                     type: 'string.domain',
                     context: { value: '"example.com', label: 'value' }
                 }],
-                ['mail@example.com', false, '"value" must contain a valid domain name']
+                ['mail@example.com', false, '"value" must contain a valid domain name'],
+                ['joi.dev.whatevertldiwant', false, '"value" must contain a valid domain name']
             ]);
         });
 
@@ -1496,7 +1497,8 @@ describe('string', () => {
                     type: 'string.email',
                     context: { value: '123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345.toolong.com', invalids: ['123456789012345678901234567890123456789012345678901234567890@12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345678901234567890123456789012345678901234567890123456789.12345.toolong.com'], label: 'value' }
                 }],
-                ['foo@bar%2ecom', false, '"value" must be a valid email']
+                ['foo@bar%2ecom', false, '"value" must be a valid email'],
+                ['invalid_tlds@email.ccc', false, '"value" must be a valid email']
             ]);
         });
 

From 1ed55fb0210f3720614b60cce30e4313fb607383 Mon Sep 17 00:00:00 2001
From: Fernando Lisboa Costa <fernando.costa@codeminer42.com>
Date: Wed, 24 Jan 2024 14:14:30 -0300
Subject: [PATCH 3/4] refactor: remove Object.assign and internals.tlds assert

---
 lib/types/string.js | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lib/types/string.js b/lib/types/string.js
index c5fcec55..db2b8b51 100755
--- a/lib/types/string.js
+++ b/lib/types/string.js
@@ -742,8 +742,7 @@ module.exports = Any.extend({
 internals.addressOptions = function (options) {
 
     if (!options) {
-        assert(internals.tlds, 'Built-in TLD list disabled');
-        return Object.assign({}, options, internals.tlds);
+        return internals.tlds;
     }
 
     // minDomainSegments

From 582e81209c6fbb02c4394c3ed5afd5a8fb662219 Mon Sep 17 00:00:00 2001
From: Nicolas Morel <nicolas@morel.io>
Date: Mon, 29 Jan 2024 14:08:36 +0100
Subject: [PATCH 4/4] Apply suggestions from code review

---
 lib/types/string.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/types/string.js b/lib/types/string.js
index db2b8b51..57b3d34b 100755
--- a/lib/types/string.js
+++ b/lib/types/string.js
@@ -742,7 +742,7 @@ module.exports = Any.extend({
 internals.addressOptions = function (options) {
 
     if (!options) {
-        return internals.tlds;
+        return internals.tlds || options;      // $lab:coverage:ignore$
     }
 
     // minDomainSegments