From 756055a079e9b0028da2b072dca61e3ddafa4602 Mon Sep 17 00:00:00 2001 From: alikia2x Date: Sun, 14 Jul 2024 17:43:40 +0800 Subject: [PATCH] update: better TLD detection --- bun.lockb | Bin 378556 -> 379278 bytes lib/url/tldList.ts | 6 +- lib/url/tlds.txt | 1447 ++++++++++++++++++++++++++++++++++++++++ lib/url/updateTLD.ts | 3 + lib/url/validLink.ts | 10 +- package.json | 4 +- test/validLink.test.ts | 51 +- 7 files changed, 1493 insertions(+), 28 deletions(-) create mode 100644 lib/url/tlds.txt create mode 100644 lib/url/updateTLD.ts diff --git a/bun.lockb b/bun.lockb index d19a4385e4769868940d490ca296715cb28d7678..d17a0756ede0e2bd687f2654f0cc67ac1d8d9d7e 100755 GIT binary patch delta 77560 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 SwTx)J#@&6L=X&>Oum1 line[0] !== "#") +} \ No newline at end of file diff --git a/lib/url/tlds.txt b/lib/url/tlds.txt new file mode 100644 index 0000000..143dcdc --- /dev/null +++ b/lib/url/tlds.txt @@ -0,0 +1,1447 @@ +# Version 2024071300, Last Updated Sat Jul 13 07:07:01 2024 UTC +AAA +AARP +ABB +ABBOTT +ABBVIE +ABC +ABLE +ABOGADO +ABUDHABI +AC +ACADEMY +ACCENTURE +ACCOUNTANT +ACCOUNTANTS +ACO +ACTOR +AD +ADS +ADULT +AE +AEG +AERO +AETNA +AF +AFL +AFRICA +AG +AGAKHAN +AGENCY +AI +AIG +AIRBUS +AIRFORCE +AIRTEL +AKDN +AL +ALIBABA +ALIPAY +ALLFINANZ +ALLSTATE +ALLY +ALSACE +ALSTOM +AM +AMAZON +AMERICANEXPRESS +AMERICANFAMILY +AMEX +AMFAM +AMICA +AMSTERDAM +ANALYTICS +ANDROID +ANQUAN +ANZ +AO +AOL +APARTMENTS +APP +APPLE +AQ +AQUARELLE +AR +ARAB +ARAMCO +ARCHI +ARMY +ARPA +ART +ARTE +AS +ASDA +ASIA +ASSOCIATES +AT +ATHLETA +ATTORNEY +AU +AUCTION +AUDI +AUDIBLE +AUDIO +AUSPOST +AUTHOR +AUTO +AUTOS +AW +AWS +AX +AXA +AZ +AZURE +BA +BABY +BAIDU +BANAMEX +BAND +BANK +BAR +BARCELONA +BARCLAYCARD +BARCLAYS +BAREFOOT +BARGAINS +BASEBALL +BASKETBALL +BAUHAUS +BAYERN +BB +BBC +BBT +BBVA +BCG +BCN +BD +BE +BEATS +BEAUTY +BEER +BENTLEY +BERLIN +BEST +BESTBUY +BET +BF +BG +BH +BHARTI +BI +BIBLE +BID +BIKE +BING +BINGO +BIO +BIZ +BJ +BLACK +BLACKFRIDAY +BLOCKBUSTER +BLOG +BLOOMBERG +BLUE +BM +BMS +BMW +BN +BNPPARIBAS +BO +BOATS +BOEHRINGER +BOFA +BOM +BOND +BOO +BOOK +BOOKING +BOSCH +BOSTIK +BOSTON +BOT +BOUTIQUE +BOX +BR +BRADESCO +BRIDGESTONE +BROADWAY +BROKER +BROTHER +BRUSSELS +BS +BT +BUILD +BUILDERS +BUSINESS +BUY +BUZZ +BV +BW +BY +BZ +BZH +CA +CAB +CAFE +CAL +CALL +CALVINKLEIN +CAM +CAMERA +CAMP +CANON +CAPETOWN +CAPITAL +CAPITALONE +CAR +CARAVAN +CARDS +CARE +CAREER +CAREERS +CARS +CASA +CASE +CASH +CASINO +CAT +CATERING +CATHOLIC +CBA +CBN +CBRE +CC +CD +CENTER +CEO +CERN +CF +CFA +CFD +CG +CH +CHANEL +CHANNEL +CHARITY +CHASE +CHAT +CHEAP +CHINTAI +CHRISTMAS +CHROME +CHURCH +CI +CIPRIANI +CIRCLE +CISCO +CITADEL +CITI +CITIC +CITY +CK +CL +CLAIMS +CLEANING +CLICK +CLINIC +CLINIQUE +CLOTHING +CLOUD +CLUB +CLUBMED +CM +CN +CO +COACH +CODES +COFFEE +COLLEGE +COLOGNE +COM +COMMBANK +COMMUNITY +COMPANY +COMPARE +COMPUTER +COMSEC +CONDOS +CONSTRUCTION +CONSULTING +CONTACT +CONTRACTORS +COOKING +COOL +COOP +CORSICA +COUNTRY +COUPON +COUPONS +COURSES +CPA +CR +CREDIT +CREDITCARD +CREDITUNION +CRICKET +CROWN +CRS +CRUISE +CRUISES +CU +CUISINELLA +CV +CW +CX +CY +CYMRU +CYOU +CZ +DABUR +DAD +DANCE +DATA +DATE +DATING +DATSUN +DAY +DCLK +DDS +DE +DEAL +DEALER +DEALS +DEGREE +DELIVERY +DELL +DELOITTE +DELTA +DEMOCRAT +DENTAL +DENTIST +DESI +DESIGN +DEV +DHL +DIAMONDS +DIET +DIGITAL +DIRECT +DIRECTORY +DISCOUNT +DISCOVER +DISH +DIY +DJ +DK +DM +DNP +DO +DOCS +DOCTOR +DOG +DOMAINS +DOT +DOWNLOAD +DRIVE +DTV +DUBAI +DUNLOP +DUPONT +DURBAN +DVAG +DVR +DZ +EARTH +EAT +EC +ECO +EDEKA +EDU +EDUCATION +EE +EG +EMAIL +EMERCK +ENERGY +ENGINEER +ENGINEERING +ENTERPRISES +EPSON +EQUIPMENT +ER +ERICSSON +ERNI +ES +ESQ +ESTATE +ET +EU +EUROVISION +EUS +EVENTS +EXCHANGE +EXPERT +EXPOSED +EXPRESS +EXTRASPACE +FAGE +FAIL +FAIRWINDS +FAITH +FAMILY +FAN +FANS +FARM +FARMERS +FASHION +FAST +FEDEX +FEEDBACK +FERRARI +FERRERO +FI +FIDELITY +FIDO +FILM +FINAL +FINANCE +FINANCIAL +FIRE +FIRESTONE +FIRMDALE +FISH +FISHING +FIT +FITNESS +FJ +FK +FLICKR +FLIGHTS +FLIR +FLORIST +FLOWERS +FLY +FM +FO +FOO +FOOD +FOOTBALL +FORD +FOREX +FORSALE +FORUM +FOUNDATION +FOX +FR +FREE +FRESENIUS +FRL +FROGANS +FRONTIER +FTR +FUJITSU +FUN +FUND +FURNITURE +FUTBOL +FYI +GA +GAL +GALLERY +GALLO +GALLUP +GAME +GAMES +GAP +GARDEN +GAY +GB +GBIZ +GD +GDN +GE +GEA +GENT +GENTING +GEORGE +GF +GG +GGEE +GH +GI +GIFT +GIFTS +GIVES +GIVING +GL +GLASS +GLE +GLOBAL +GLOBO +GM +GMAIL +GMBH +GMO +GMX +GN +GODADDY +GOLD +GOLDPOINT +GOLF +GOO +GOODYEAR +GOOG +GOOGLE +GOP +GOT +GOV +GP +GQ +GR +GRAINGER +GRAPHICS +GRATIS +GREEN +GRIPE +GROCERY +GROUP +GS +GT +GU +GUCCI +GUGE +GUIDE +GUITARS +GURU +GW +GY +HAIR +HAMBURG +HANGOUT +HAUS +HBO +HDFC +HDFCBANK +HEALTH +HEALTHCARE +HELP +HELSINKI +HERE +HERMES +HIPHOP +HISAMITSU +HITACHI +HIV +HK +HKT +HM +HN +HOCKEY +HOLDINGS +HOLIDAY +HOMEDEPOT +HOMEGOODS +HOMES +HOMESENSE +HONDA +HORSE +HOSPITAL +HOST +HOSTING +HOT +HOTELS +HOTMAIL +HOUSE +HOW +HR +HSBC +HT +HU +HUGHES +HYATT +HYUNDAI +IBM +ICBC +ICE +ICU +ID +IE +IEEE +IFM +IKANO +IL +IM +IMAMAT +IMDB +IMMO +IMMOBILIEN +IN +INC +INDUSTRIES +INFINITI +INFO +ING +INK +INSTITUTE +INSURANCE +INSURE +INT +INTERNATIONAL +INTUIT +INVESTMENTS +IO +IPIRANGA +IQ +IR +IRISH +IS +ISMAILI +IST +ISTANBUL +IT +ITAU +ITV +JAGUAR +JAVA +JCB +JE +JEEP +JETZT +JEWELRY +JIO +JLL +JM +JMP +JNJ +JO +JOBS +JOBURG +JOT +JOY +JP +JPMORGAN +JPRS +JUEGOS +JUNIPER +KAUFEN +KDDI +KE +KERRYHOTELS +KERRYLOGISTICS +KERRYPROPERTIES +KFH +KG +KH +KI +KIA +KIDS +KIM +KINDLE +KITCHEN +KIWI +KM +KN +KOELN +KOMATSU +KOSHER +KP +KPMG +KPN +KR +KRD +KRED +KUOKGROUP +KW +KY +KYOTO +KZ +LA +LACAIXA +LAMBORGHINI +LAMER +LANCASTER +LAND +LANDROVER +LANXESS +LASALLE +LAT +LATINO +LATROBE +LAW +LAWYER +LB +LC +LDS +LEASE +LECLERC +LEFRAK +LEGAL +LEGO +LEXUS +LGBT +LI +LIDL +LIFE +LIFEINSURANCE +LIFESTYLE +LIGHTING +LIKE +LILLY +LIMITED +LIMO +LINCOLN +LINK +LIPSY +LIVE +LIVING +LK +LLC +LLP +LOAN +LOANS +LOCKER +LOCUS +LOL +LONDON +LOTTE +LOTTO +LOVE +LPL +LPLFINANCIAL +LR +LS +LT +LTD +LTDA +LU +LUNDBECK +LUXE +LUXURY +LV +LY +MA +MADRID +MAIF +MAISON +MAKEUP +MAN +MANAGEMENT +MANGO +MAP +MARKET +MARKETING +MARKETS +MARRIOTT +MARSHALLS +MATTEL +MBA +MC +MCKINSEY +MD +ME +MED +MEDIA +MEET +MELBOURNE +MEME +MEMORIAL +MEN +MENU +MERCKMSD +MG +MH +MIAMI +MICROSOFT +MIL +MINI +MINT +MIT +MITSUBISHI +MK +ML +MLB +MLS +MM +MMA +MN +MO +MOBI +MOBILE +MODA +MOE +MOI +MOM +MONASH +MONEY +MONSTER +MORMON +MORTGAGE +MOSCOW +MOTO +MOTORCYCLES +MOV +MOVIE +MP +MQ +MR +MS +MSD +MT +MTN +MTR +MU +MUSEUM +MUSIC +MV +MW +MX +MY +MZ +NA +NAB +NAGOYA +NAME +NAVY +NBA +NC +NE +NEC +NET +NETBANK +NETFLIX +NETWORK +NEUSTAR +NEW +NEWS +NEXT +NEXTDIRECT +NEXUS +NF +NFL +NG +NGO +NHK +NI +NICO +NIKE +NIKON +NINJA +NISSAN +NISSAY +NL +NO +NOKIA +NORTON +NOW +NOWRUZ +NOWTV +NP +NR +NRA +NRW +NTT +NU +NYC +NZ +OBI +OBSERVER +OFFICE +OKINAWA +OLAYAN +OLAYANGROUP +OLLO +OM +OMEGA +ONE +ONG +ONL +ONLINE +OOO +OPEN +ORACLE +ORANGE +ORG +ORGANIC +ORIGINS +OSAKA +OTSUKA +OTT +OVH +PA +PAGE +PANASONIC +PARIS +PARS +PARTNERS +PARTS +PARTY +PAY +PCCW +PE +PET +PF +PFIZER +PG +PH +PHARMACY +PHD +PHILIPS +PHONE +PHOTO +PHOTOGRAPHY +PHOTOS +PHYSIO +PICS +PICTET +PICTURES +PID +PIN +PING +PINK +PIONEER +PIZZA +PK +PL +PLACE +PLAY +PLAYSTATION +PLUMBING +PLUS +PM +PN +PNC +POHL +POKER +POLITIE +PORN +POST +PR +PRAMERICA +PRAXI +PRESS +PRIME +PRO +PROD +PRODUCTIONS +PROF +PROGRESSIVE +PROMO +PROPERTIES +PROPERTY +PROTECTION +PRU +PRUDENTIAL +PS +PT +PUB +PW +PWC +PY +QA +QPON +QUEBEC +QUEST +RACING +RADIO +RE +READ +REALESTATE +REALTOR +REALTY +RECIPES +RED +REDSTONE +REDUMBRELLA +REHAB +REISE +REISEN +REIT +RELIANCE +REN +RENT +RENTALS +REPAIR +REPORT +REPUBLICAN +REST +RESTAURANT +REVIEW +REVIEWS +REXROTH +RICH +RICHARDLI +RICOH +RIL +RIO +RIP +RO +ROCKS +RODEO +ROGERS +ROOM +RS +RSVP +RU +RUGBY +RUHR +RUN +RW +RWE +RYUKYU +SA +SAARLAND +SAFE +SAFETY +SAKURA +SALE +SALON +SAMSCLUB +SAMSUNG +SANDVIK +SANDVIKCOROMANT +SANOFI +SAP +SARL +SAS +SAVE +SAXO +SB +SBI +SBS +SC +SCB +SCHAEFFLER +SCHMIDT +SCHOLARSHIPS +SCHOOL +SCHULE +SCHWARZ +SCIENCE +SCOT +SD +SE +SEARCH +SEAT +SECURE +SECURITY +SEEK +SELECT +SENER +SERVICES +SEVEN +SEW +SEX +SEXY +SFR +SG +SH +SHANGRILA +SHARP +SHELL +SHIA +SHIKSHA +SHOES +SHOP +SHOPPING +SHOUJI +SHOW +SI +SILK +SINA +SINGLES +SITE +SJ +SK +SKI +SKIN +SKY +SKYPE +SL +SLING +SM +SMART +SMILE +SN +SNCF +SO +SOCCER +SOCIAL +SOFTBANK +SOFTWARE +SOHU +SOLAR +SOLUTIONS +SONG +SONY +SOY +SPA +SPACE +SPORT +SPOT +SR +SRL +SS +ST +STADA +STAPLES +STAR +STATEBANK +STATEFARM +STC +STCGROUP +STOCKHOLM +STORAGE +STORE +STREAM +STUDIO +STUDY +STYLE +SU +SUCKS +SUPPLIES +SUPPLY +SUPPORT +SURF +SURGERY +SUZUKI +SV +SWATCH +SWISS +SX +SY +SYDNEY +SYSTEMS +SZ +TAB +TAIPEI +TALK +TAOBAO +TARGET +TATAMOTORS +TATAR +TATTOO +TAX +TAXI +TC +TCI +TD +TDK +TEAM +TECH +TECHNOLOGY +TEL +TEMASEK +TENNIS +TEVA +TF +TG +TH +THD +THEATER +THEATRE +TIAA +TICKETS +TIENDA +TIPS +TIRES +TIROL +TJ +TJMAXX +TJX +TK +TKMAXX +TL +TM +TMALL +TN +TO +TODAY +TOKYO +TOOLS +TOP +TORAY +TOSHIBA +TOTAL +TOURS +TOWN +TOYOTA +TOYS +TR +TRADE +TRADING +TRAINING +TRAVEL +TRAVELERS +TRAVELERSINSURANCE +TRUST +TRV +TT +TUBE +TUI +TUNES +TUSHU +TV +TVS +TW +TZ +UA +UBANK +UBS +UG +UK +UNICOM +UNIVERSITY +UNO +UOL +UPS +US +UY +UZ +VA +VACATIONS +VANA +VANGUARD +VC +VE +VEGAS +VENTURES +VERISIGN +VERSICHERUNG +VET +VG +VI +VIAJES +VIDEO +VIG +VIKING +VILLAS +VIN +VIP +VIRGIN +VISA +VISION +VIVA +VIVO +VLAANDEREN +VN +VODKA +VOLVO +VOTE +VOTING +VOTO +VOYAGE +VU +WALES +WALMART +WALTER +WANG +WANGGOU +WATCH +WATCHES +WEATHER +WEATHERCHANNEL +WEBCAM +WEBER +WEBSITE +WED +WEDDING +WEIBO +WEIR +WF +WHOSWHO +WIEN +WIKI +WILLIAMHILL +WIN +WINDOWS +WINE +WINNERS +WME +WOLTERSKLUWER +WOODSIDE +WORK +WORKS +WORLD +WOW +WS +WTC +WTF +XBOX +XEROX +XIHUAN +XIN +XN--11B4C3D +XN--1CK2E1B +XN--1QQW23A +XN--2SCRJ9C +XN--30RR7Y +XN--3BST00M +XN--3DS443G +XN--3E0B707E +XN--3HCRJ9C +XN--3PXU8K +XN--42C2D9A +XN--45BR5CYL +XN--45BRJ9C +XN--45Q11C +XN--4DBRK0CE +XN--4GBRIM +XN--54B7FTA0CC +XN--55QW42G +XN--55QX5D +XN--5SU34J936BGSG +XN--5TZM5G +XN--6FRZ82G +XN--6QQ986B3XL +XN--80ADXHKS +XN--80AO21A +XN--80AQECDR1A +XN--80ASEHDB +XN--80ASWG +XN--8Y0A063A +XN--90A3AC +XN--90AE +XN--90AIS +XN--9DBQ2A +XN--9ET52U +XN--9KRT00A +XN--B4W605FERD +XN--BCK1B9A5DRE4C +XN--C1AVG +XN--C2BR7G +XN--CCK2B3B +XN--CCKWCXETD +XN--CG4BKI +XN--CLCHC0EA0B2G2A9GCD +XN--CZR694B +XN--CZRS0T +XN--CZRU2D +XN--D1ACJ3B +XN--D1ALF +XN--E1A4C +XN--ECKVDTC9D +XN--EFVY88H +XN--FCT429K +XN--FHBEI +XN--FIQ228C5HS +XN--FIQ64B +XN--FIQS8S +XN--FIQZ9S +XN--FJQ720A +XN--FLW351E +XN--FPCRJ9C3D +XN--FZC2C9E2C +XN--FZYS8D69UVGM +XN--G2XX48C +XN--GCKR3F0F +XN--GECRJ9C +XN--GK3AT1E +XN--H2BREG3EVE +XN--H2BRJ9C +XN--H2BRJ9C8C +XN--HXT814E +XN--I1B6B1A6A2E +XN--IMR513N +XN--IO0A7I +XN--J1AEF +XN--J1AMH +XN--J6W193G +XN--JLQ480N2RG +XN--JVR189M +XN--KCRX77D1X4A +XN--KPRW13D +XN--KPRY57D +XN--KPUT3I +XN--L1ACC +XN--LGBBAT1AD8J +XN--MGB9AWBF +XN--MGBA3A3EJT +XN--MGBA3A4F16A +XN--MGBA7C0BBN0A +XN--MGBAAM7A8H +XN--MGBAB2BD +XN--MGBAH1A3HJKRD +XN--MGBAI9AZGQP6J +XN--MGBAYH7GPA +XN--MGBBH1A +XN--MGBBH1A71E +XN--MGBC0A9AZCG +XN--MGBCA7DZDO +XN--MGBCPQ6GPA1A +XN--MGBERP4A5D4AR +XN--MGBGU82A +XN--MGBI4ECEXP +XN--MGBPL2FH +XN--MGBT3DHD +XN--MGBTX2B +XN--MGBX4CD0AB +XN--MIX891F +XN--MK1BU44C +XN--MXTQ1M +XN--NGBC5AZD +XN--NGBE9E0A +XN--NGBRX +XN--NODE +XN--NQV7F +XN--NQV7FS00EMA +XN--NYQY26A +XN--O3CW4H +XN--OGBPF8FL +XN--OTU796D +XN--P1ACF +XN--P1AI +XN--PGBS0DH +XN--PSSY2U +XN--Q7CE6A +XN--Q9JYB4C +XN--QCKA1PMC +XN--QXA6A +XN--QXAM +XN--RHQV96G +XN--ROVU88B +XN--RVC1E0AM3E +XN--S9BRJ9C +XN--SES554G +XN--T60B56A +XN--TCKWE +XN--TIQ49XQYJ +XN--UNUP4Y +XN--VERMGENSBERATER-CTB +XN--VERMGENSBERATUNG-PWB +XN--VHQUV +XN--VUQ861B +XN--W4R85EL8FHU5DNRA +XN--W4RS40L +XN--WGBH1C +XN--WGBL6A +XN--XHQ521B +XN--XKC2AL3HYE2A +XN--XKC2DL3A5EE0H +XN--Y9A3AQ +XN--YFRO4I67O +XN--YGBI2AMMX +XN--ZFR164B +XXX +XYZ +YACHTS +YAHOO +YAMAXUN +YANDEX +YE +YODOBASHI +YOGA +YOKOHAMA +YOU +YOUTUBE +YT +YUN +ZA +ZAPPOS +ZARA +ZERO +ZIP +ZM +ZONE +ZUERICH +ZW diff --git a/lib/url/updateTLD.ts b/lib/url/updateTLD.ts new file mode 100644 index 0000000..32f173d --- /dev/null +++ b/lib/url/updateTLD.ts @@ -0,0 +1,3 @@ +const response = await fetch("https://data.iana.org/TLD/tlds-alpha-by-domain.txt"); +const tldText = await response.text(); +await Bun.write("./lib/url/tlds.txt", tldText); \ No newline at end of file diff --git a/lib/url/validLink.ts b/lib/url/validLink.ts index 5489f6e..5112091 100644 --- a/lib/url/validLink.ts +++ b/lib/url/validLink.ts @@ -1,5 +1,5 @@ -import punycode from "punycode"; -import { tldList } from "./tldList"; +import { toASCII } from "tr46"; +import { getTLD } from "./tldList"; export default function validLink(link: string) { let finalURL; @@ -28,8 +28,10 @@ export default function validLink(link: string) { } export function validTLD(domain: string): boolean { - const tld = punycode.toUnicode(domain.split(".").reverse()[0]); - if (tldList.includes(tld)) { + if (!domain.includes(".")) return false; + const tld = toASCII(domain.split(".").reverse()[0]); + const tldList = getTLD(); + if (tldList.includes(tld.toUpperCase())) { return true; } else { return false; diff --git a/package.json b/package.json index 69918b3..5ff3dfa 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sparkhome", "private": false, - "version": "5.5.1", + "version": "5.5.2", "type": "module", "scripts": { "dev": "bun server.ts", @@ -14,6 +14,7 @@ "@nextui-org/react": "^2.4.2", "@types/bun": "^1.1.6", "@types/express": "^4.17.21", + "@types/tr46": "^5.0.0", "cac": "^6.7.14", "chalk": "^5.3.0", "express": "^4.19.2", @@ -31,6 +32,7 @@ "react-router": "^6.23.1", "react-router-dom": "^6.23.1", "search-engine-autocomplete": "^0.4.3", + "tr46": "^5.0.0", "valid-url": "^1.0.9", "validate-color": "^2.2.4", "vite-express": "^0.17.0" diff --git a/test/validLink.test.ts b/test/validLink.test.ts index 49ee01f..e80d8ce 100644 --- a/test/validLink.test.ts +++ b/test/validLink.test.ts @@ -28,43 +28,50 @@ describe("Check if a string is an accessible domain/URL/IP", () => { test("IPv6 without protocol", () => { expect(validLink("[::]")).toBe(true); }); + test("special test for 铜锣湾.chn.moe", () => { + expect(validLink("铜锣湾.chn.moe")).toBe(true); + }); + test("Not a valid host/URL.", () => { + expect(validLink("weather")).toBe(false); + }); }); // Reference: https://www.iana.org/domains/root/db describe("Check if the given TLD exist and assigned.", () => { test("Valid normal TLD", () => { - expect(validTLD("com")).toBe(true); - expect(validTLD("top")).toBe(true); - expect(validTLD("net")).toBe(true); - expect(validTLD("org")).toBe(true); + expect(validTLD("example.com")).toBe(true); + expect(validTLD("example.top")).toBe(true); + expect(validTLD("example.net")).toBe(true); + expect(validTLD("example.org")).toBe(true); }); test("Valid new TLDs", () => { // they really exist! - expect(validTLD("foo")).toBe(true); - expect(validTLD("bar")).toBe(true); + expect(validTLD("example.foo")).toBe(true); + expect(validTLD("example.bar")).toBe(true); + expect(validTLD('example.zip')).toBe(true); }); test("Exist but not assigned TLD", () => { - expect(validTLD("active")).toBe(false); - expect(validTLD("off")).toBe(false); + expect(validTLD("example.active")).toBe(false); + expect(validTLD("example.off")).toBe(false); }); test("with dot", () => { - expect(validTLD(".com")).toBe(true); - expect(validTLD(".us")).toBe(true); - expect(validTLD(".cn")).toBe(true); - expect(validTLD(".io")).toBe(true); + expect(validTLD("example.com")).toBe(true); + expect(validTLD("example.us")).toBe(true); + expect(validTLD("example.cn")).toBe(true); + expect(validTLD("example.io")).toBe(true); }); test("Punycode TLDs", () => { - expect(validTLD(".中国")).toBe(true); - expect(validTLD(".РФ")).toBe(true); - expect(validTLD(".कॉम")).toBe(true); - expect(validTLD("ایران")).toBe(true); - expect(validTLD("இலங்கை")).toBe(true); - expect(validTLD("გე")).toBe(true); - expect(validTLD("ポイント")).toBe(true); + expect(validTLD("example.中国")).toBe(true); + expect(validTLD("example.РФ")).toBe(true); + expect(validTLD("example.कॉम")).toBe(true); + expect(validTLD("example.ایران")).toBe(true); + expect(validTLD("example.இலங்கை")).toBe(true); + expect(validTLD("example.გე")).toBe(true); + expect(validTLD("example.ポイント")).toBe(true); }); test("Punycode TLDs but not assigned", () => { - expect(validTLD("テスト")).toBe(false); - expect(validTLD("परीक्षा")).toBe(false); - expect(validTLD("测试")).toBe(false); + expect(validTLD("example.テスト")).toBe(false); + expect(validTLD("example.परीक्षा")).toBe(false); + expect(validTLD("example.测试")).toBe(false); }); });