diff --git a/dist/Autolinker.js b/dist/Autolinker.js index 2697fb0c..a9bf0f96 100644 --- a/dist/Autolinker.js +++ b/dist/Autolinker.js @@ -1,6 +1,6 @@ /*! * Autolinker.js - * 2.2.2 + * 3.0.0 * * Copyright(c) 2019 Gregory Jacobs * MIT License @@ -128,6 +128,13 @@ result.push(str.substring(lastIdx)); return result; } + /** + * Function that should never be called but is used to check that every + * enum value is handled using TypeScript's 'never' type. + */ + function throwUnhandledCaseError(theValue) { + throw new Error("Unhandled case for value: '" + theValue + "'"); + } /** * @class Autolinker.HtmlTag @@ -1632,6 +1639,27 @@ * Other regular expressions may exist ad-hoc, but these are generally the * regular expressions that are shared between source files. */ + /** + * Regular expression to match upper and lowercase ASCII letters + */ + var letterRe = /[A-Za-z]/; + /** + * Regular expression to match ASCII digits + */ + var digitRe = /[0-9]/; + /** + * Regular expression to match whitespace + */ + var whitespaceRe = /\s/; + /** + * Regular expression to match quote characters + */ + var quoteRe = /['"]/; + /** + * Regular expression to match the range of ASCII control characters (0-31), and + * the backspace char (127) + */ + var controlCharsRe = /[\x00-\x1F\x7F]/; /** * The string form of a regular expression that would match all of the * alphabetic ("letter") chars in the unicode character set when placed in a @@ -1751,11 +1779,14 @@ var getDomainNameStr = function (group) { return '(?:' + getDomainLabelStr(group) + '(?:\\.' + getDomainLabelStr(group + 1) + '){0,126}|' + ipStr + ')'; }; + /** + * A regular expression that is simply the character class of the characters + * that may be used in a domain name, minus the '-' or '.' + */ + var domainNameCharRegex = new RegExp("[" + alphaNumericAndMarksCharsStr + "]"); - // NOTE: THIS IS A GENERATED FILE - // To update with the latest TLD list, run `npm run update-tld-regex` or `yarn update-tld-regex` (depending on which you have installed) - var tldRegex = /(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/; - + // For debugging: search for other "For debugging" lines + // import CliTable from 'cli-table'; /** * @class Autolinker.matcher.Email * @extends Autolinker.matcher.Matcher @@ -1769,41 +1800,205 @@ function EmailMatcher() { var _this = _super !== null && _super.apply(this, arguments) || this; /** - * The regular expression to match email addresses. Example match: - * - * person@place.com - * - * @protected - * @property {RegExp} matcherRegex + * Valid characters that can be used in the "local" part of an email address, + * i.e. the "name" part of "name@site.com" */ - _this.matcherRegex = (function () { - var specialCharacters = '!#$%&\'*+\\-\\/=?^_`{|}~', restrictedSpecialCharacters = '\\s"(),:;<>@\\[\\]', validCharacters = alphaNumericAndMarksCharsStr + specialCharacters, validRestrictedCharacters = validCharacters + restrictedSpecialCharacters, emailRegex = new RegExp('(?:[' + validCharacters + '](?:[' + validCharacters + ']|\\.(?!\\.|@))*|\\"[' + validRestrictedCharacters + '.]+\\")@'); - return new RegExp([ - emailRegex.source, - getDomainNameStr(1), - '\\.', tldRegex.source // '.com', '.net', etc - ].join(""), 'gi'); - })(); + _this.localPartCharRegex = new RegExp("[" + alphaNumericAndMarksCharsStr + "!#$%&'*+/=?^_`{|}~-]"); return _this; } /** * @inheritdoc */ EmailMatcher.prototype.parseMatches = function (text) { - var matcherRegex = this.matcherRegex, tagBuilder = this.tagBuilder, matches = [], match; - while ((match = matcherRegex.exec(text)) !== null) { - var matchedText = match[0]; - matches.push(new EmailMatch({ - tagBuilder: tagBuilder, - matchedText: matchedText, - offset: match.index, - email: matchedText - })); - } + var tagBuilder = this.tagBuilder, localPartCharRegex = this.localPartCharRegex, matches = [], len = text.length, noCurrentEmailAddress = new CurrentEmailAddress(); + var charIdx = 0, state = 0 /* NonEmailAddress */, currentEmailAddress = noCurrentEmailAddress; + // For debugging: search for other "For debugging" lines + // const table = new CliTable( { + // head: [ 'charIdx', 'char', 'state', 'charIdx', 'currentEmailAddress.idx', 'hasDomainDot' ] + // } ); + while (charIdx < len) { + var char = text.charAt(charIdx); + // For debugging: search for other "For debugging" lines + // table.push( + // [ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ] + // ); + switch (state) { + case 0 /* NonEmailAddress */: + stateNonEmailAddress(char); + break; + case 1 /* LocalPart */: + stateLocalPart(char); + break; + case 2 /* LocalPartDot */: + stateLocalPartDot(char); + break; + case 3 /* AtSign */: + stateAtSign(char); + break; + case 4 /* DomainChar */: + stateDomainChar(char); + break; + case 5 /* DomainHyphen */: + stateDomainHyphen(char); + break; + case 6 /* DomainDot */: + stateDomainDot(char); + break; + default: + throwUnhandledCaseError(state); + } + // For debugging: search for other "For debugging" lines + // table.push( + // [ charIdx, char, State[ state ], charIdx, currentEmailAddress.idx, currentEmailAddress.hasDomainDot ] + // ); + charIdx++; + } + // Capture any valid match at the end of the string + captureMatchIfValidAndReset(); + // For debugging: search for other "For debugging" lines + //console.log( '\n' + table.toString() ); return matches; + // Handles the state when we're not in an email address + function stateNonEmailAddress(char) { + if (localPartCharRegex.test(char)) { + beginEmailAddress(); + } + } + // Handles the state when we're currently in the "local part" of an + // email address (as opposed to the "domain part") + function stateLocalPart(char) { + if (char === '.') { + state = 2 /* LocalPartDot */; + } + else if (char === '@') { + state = 3 /* AtSign */; + } + else if (localPartCharRegex.test(char)) ; + else { + // not an email address character, return to "NonEmailAddress" state + resetToNonEmailAddressState(); + } + } + // Handles the state where we've read + function stateLocalPartDot(char) { + if (char === '.') { + // We read a second '.' in a row, not a valid email address + // local part + resetToNonEmailAddressState(); + } + else if (char === '@') { + // We read the '@' character immediately after a dot ('.'), not + // an email address + resetToNonEmailAddressState(); + } + else if (localPartCharRegex.test(char)) { + state = 1 /* LocalPart */; + } + else { + // Anything else, not an email address + resetToNonEmailAddressState(); + } + } + function stateAtSign(char) { + if (domainNameCharRegex.test(char)) { + state = 4 /* DomainChar */; + } + else { + // Anything else, not an email address + resetToNonEmailAddressState(); + } + } + function stateDomainChar(char) { + if (char === '.') { + state = 6 /* DomainDot */; + } + else if (char === '-') { + state = 5 /* DomainHyphen */; + } + else if (domainNameCharRegex.test(char)) ; + else { + // Anything else, we potentially matched if the criteria has + // been met + captureMatchIfValidAndReset(); + } + } + function stateDomainHyphen(char) { + if (char === '-' || char === '.') { + // Not valid to have two hyphens ("--") or hypen+dot ("-.") + captureMatchIfValidAndReset(); + } + else if (domainNameCharRegex.test(char)) { + state = 4 /* DomainChar */; + } + else { + // Anything else + captureMatchIfValidAndReset(); + } + } + function stateDomainDot(char) { + if (char === '.' || char === '-') { + // not valid to have two dots ("..") or dot+hypen (".-") + captureMatchIfValidAndReset(); + } + else if (domainNameCharRegex.test(char)) { + state = 4 /* DomainChar */; + // After having read a '.' and then a valid domain character, + // we now know that the domain part of the email is valid, and + // we have found at least a partial EmailMatch (however, the + // email address may have additional characters from this point) + currentEmailAddress = new CurrentEmailAddress(__assign({}, currentEmailAddress, { hasDomainDot: true })); + } + else { + // Anything else + captureMatchIfValidAndReset(); + } + } + function beginEmailAddress() { + state = 1 /* LocalPart */; + currentEmailAddress = new CurrentEmailAddress({ idx: charIdx }); + } + function resetToNonEmailAddressState() { + state = 0 /* NonEmailAddress */; + currentEmailAddress = noCurrentEmailAddress; + } + /* + * Captures the current email address as an EmailMatch if it's valid, + * and resets the state to read another email address. + */ + function captureMatchIfValidAndReset() { + if (currentEmailAddress.hasDomainDot) { // we need at least one dot in the domain to be considered a valid email address + var emailAddress = text.slice(currentEmailAddress.idx, charIdx); + // If we read a '.' or '-' char that ended the email address + // (valid domain name characters, but only valid email address + // characters if they are followed by something else), strip + // it off now + if (/[-.]$/.test(emailAddress)) { + emailAddress = emailAddress.slice(0, -1); + } + matches.push(new EmailMatch({ + tagBuilder: tagBuilder, + matchedText: emailAddress, + offset: currentEmailAddress.idx, + email: emailAddress + })); + } + resetToNonEmailAddressState(); + } }; return EmailMatcher; }(Matcher)); + var CurrentEmailAddress = /** @class */ (function () { + function CurrentEmailAddress(cfg) { + if (cfg === void 0) { cfg = {}; } + this.idx = cfg.idx !== undefined ? cfg.idx : -1; + this.hasDomainDot = !!cfg.hasDomainDot; + } + return CurrentEmailAddress; + }()); + + // NOTE: THIS IS A GENERATED FILE + // To update with the latest TLD list, run `npm run update-tld-regex` or `yarn update-tld-regex` (depending on which you have installed) + var tldRegex = /(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/; /** * @private @@ -2489,8 +2684,7 @@ */ function parseHtml(html, _a) { var onOpenTag = _a.onOpenTag, onCloseTag = _a.onCloseTag, onText = _a.onText, onComment = _a.onComment, onDoctype = _a.onDoctype; - var letterRe = /[A-Za-z]/, digitRe = /[0-9]/, whitespaceRe = /\s/, quoteRe = /['"]/, controlCharsRe = /[\x00-\x1F\x7F]/, // control chars (0-31), and the backspace char (127) - noCurrentTag = new CurrentTag(); + var noCurrentTag = new CurrentTag(); var charIdx = 0, len = html.length, state = 0 /* Data */, currentDataIdx = 0, // where the current data start index is currentTag = noCurrentTag; // describes the current tag that is being read // For debugging: search for other "For debugging" lines @@ -2568,7 +2762,7 @@ stateDoctype(char); break; default: - throwUnhandledStateError(state); + throwUnhandledCaseError(state); } // For debugging: search for other "For debugging" lines // table.push( @@ -2581,13 +2775,6 @@ } // For debugging: search for other "For debugging" lines //console.log( '\n' + table.toString() ); - /** - * Function that should never be called but is used to check that every - * enum value is handled using TypeScript's 'never' type. - */ - function throwUnhandledStateError(state) { - throw new Error('Unhandled State'); - } // Called when non-tags are being read (i.e. the text around HTML †ags) // https://www.w3.org/TR/html51/syntax.html#data-state function stateData(char) { @@ -3867,7 +4054,7 @@ * * Ex: 0.25.1 */ - Autolinker.version = '2.2.2'; + Autolinker.version = '3.0.0'; /** * For backwards compatibility with Autolinker 1.x, the AnchorTagBuilder * class is provided as a static on the Autolinker class. diff --git a/dist/Autolinker.js.map b/dist/Autolinker.js.map index c8898f9b..97e40727 100644 --- a/dist/Autolinker.js.map +++ b/dist/Autolinker.js.map @@ -1 +1 @@ -{"version":3,"sources":["es2015/utils.js","es2015/html-tag.js","es2015/truncate/truncate-smart.js","es2015/truncate/truncate-middle.js","es2015/truncate/truncate-end.js","es2015/anchor-tag-builder.js","es2015/match/match.js","../node_modules/tslib/tslib.es6.js","es2015/match/email-match.js","es2015/match/hashtag-match.js","es2015/match/mention-match.js","es2015/match/phone-match.js","es2015/match/url-match.js","es2015/matcher/matcher.js","es2015/regex-lib.js","es2015/matcher/tld-regex.js","es2015/matcher/email-matcher.js","es2015/matcher/url-match-validator.js","es2015/matcher/url-matcher.js","es2015/matcher/hashtag-matcher.js","es2015/matcher/phone-matcher.js","es2015/matcher/mention-matcher.js","es2015/htmlParser/parse-html.js","es2015/autolinker.js"],"names":["tslib_1.__extends","tslib_1.__assign"],"mappings":"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CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;;IC/PV;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,OAAO,kBAAkB,YAAY;IACzC;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,OAAO,CAAC,GAAG,EAAE;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACzC,QAAQ,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IACzC,KAAK;IACL,IAAI,OAAO,OAAO,CAAC;IACnB,CAAC,EAAE,CAAC,CAAC;;IC3BL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA,IAAO,IAAI,aAAa,GAAG,2sIAA2sI;IACtuI,KAAK,MAAM,CAAC;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA,IAAO,IAAI,QAAQ,GAAG,yhEAAyhE;IAC/iE,KAAK,MAAM,CAAC;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA,IAAO,IAAI,qBAAqB,GAAG,aAAa,GAAG,QAAQ,CAAC;IAC5D;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA,IAAO,IAAI,iBAAiB,GAAG,ydAAyd;IACxf,KAAK,MAAM,CAAC;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA,IAAO,IAAI,oBAAoB,GAAG,qBAAqB,GAAG,iBAAiB,CAAC;IAC5E;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;AACA,IAAO,IAAI,4BAA4B,GAAG,qBAAqB,GAAG,iBAAiB,CAA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AAQ,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;IACzC,KAAK;IACL,IAAI,OAAO,UAAU,CAAC;IACtB,CAAC,EAAE,CAAC,CAAC;;IC3mBL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,IAAI,UAAU,kBAAkB,YAAY;IAC5C;IACA;IACA;IACA;IACA;IACA,IAAI,SAAS,UAAU,CAAC,GAAG,EAAE;IAC7B,QAAQ,IAAI,GAAG,KAAK,KAAK,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE;IACzC;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACvB;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IAC1B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IAC7B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IAC7B;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,WAAW,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACvD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;IACvC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;IAC1C;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,QAAQ,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IAC5B;IACA;IACA;IACA;IACA;IACA;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","file":"Autolinker.js","sourcesContent":["/**\n * Assigns (shallow copies) the properties of `src` onto `dest`, if the\n * corresponding property on `dest` === `undefined`.\n *\n * @param {Object} dest The destination object.\n * @param {Object} src The source object.\n * @return {Object} The destination object (`dest`)\n */\nexport function defaults(dest, src) {\n for (var prop in src) {\n if (src.hasOwnProperty(prop) && dest[prop] === undefined) {\n dest[prop] = src[prop];\n }\n }\n return dest;\n}\n/**\n * Truncates the `str` at `len - ellipsisChars.length`, and adds the `ellipsisChars` to the\n * end of the string (by default, two periods: '..'). If the `str` length does not exceed\n * `len`, the string will be returned unchanged.\n *\n * @param {String} str The string to truncate and add an ellipsis to.\n * @param {Number} truncateLen The length to truncate the string at.\n * @param {String} [ellipsisChars=...] The ellipsis character(s) to add to the end of `str`\n * when truncated. Defaults to '...'\n */\nexport function ellipsis(str, truncateLen, ellipsisChars) {\n var ellipsisLength;\n if (str.length > truncateLen) {\n if (ellipsisChars == null) {\n ellipsisChars = '…';\n ellipsisLength = 3;\n }\n else {\n ellipsisLength = ellipsisChars.length;\n }\n str = str.substring(0, truncateLen - ellipsisLength) + ellipsisChars;\n }\n return str;\n}\n/**\n * Supports `Array.prototype.indexOf()` functionality for old IE (IE8 and below).\n *\n * @param {Array} arr The array to find an element of.\n * @param {*} element The element to find in the array, and return the index of.\n * @return {Number} The index of the `element`, or -1 if it was not found.\n */\nexport function indexOf(arr, element) {\n if (Array.prototype.indexOf) {\n return arr.indexOf(element);\n }\n else {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === element)\n return i;\n }\n return -1;\n }\n}\n/**\n * Removes array elements based on a filtering function. Mutates the input\n * array.\n *\n * Using this instead of the ES5 Array.prototype.filter() function, to allow\n * Autolinker compatibility with IE8, and also to prevent creating many new\n * arrays in memory for filtering.\n *\n * @param {Array} arr The array to remove elements from. This array is\n * mutated.\n * @param {Function} fn A function which should return `true` to\n * remove an element.\n * @return {Array} The mutated input `arr`.\n */\nexport function remove(arr, fn) {\n for (var i = arr.length - 1; i >= 0; i--) {\n if (fn(arr[i]) === true) {\n arr.splice(i, 1);\n }\n }\n}\n/**\n * Performs the functionality of what modern browsers do when `String.prototype.split()` is called\n * with a regular expression that contains capturing parenthesis.\n *\n * For example:\n *\n * // Modern browsers:\n * \"a,b,c\".split( /(,)/ ); // --> [ 'a', ',', 'b', ',', 'c' ]\n *\n * // Old IE (including IE8):\n * \"a,b,c\".split( /(,)/ ); // --> [ 'a', 'b', 'c' ]\n *\n * This method emulates the functionality of modern browsers for the old IE case.\n *\n * @param {String} str The string to split.\n * @param {RegExp} splitRegex The regular expression to split the input `str` on. The splitting\n * character(s) will be spliced into the array, as in the \"modern browsers\" example in the\n * description of this method.\n * Note #1: the supplied regular expression **must** have the 'g' flag specified.\n * Note #2: for simplicity's sake, the regular expression does not need\n * to contain capturing parenthesis - it will be assumed that any match has them.\n * @return {String[]} The split array of strings, with the splitting character(s) included.\n */\nexport function splitAndCapture(str, splitRegex) {\n if (!splitRegex.global)\n throw new Error(\"`splitRegex` must have the 'g' flag set\");\n var result = [], lastIdx = 0, match;\n while (match = splitRegex.exec(str)) {\n result.push(str.substring(lastIdx, match.index));\n result.push(match[0]); // push the splitting char(s)\n lastIdx = match.index + match[0].length;\n }\n result.push(str.substring(lastIdx));\n return result;\n}\n\n//# sourceMappingURL=utils.js.map\n","import { indexOf } from \"./utils\";\n/**\n * @class Autolinker.HtmlTag\n * @extends Object\n *\n * Represents an HTML tag, which can be used to easily build/modify HTML tags programmatically.\n *\n * Autolinker uses this abstraction to create HTML tags, and then write them out as strings. You may also use\n * this class in your code, especially within a {@link Autolinker#replaceFn replaceFn}.\n *\n * ## Examples\n *\n * Example instantiation:\n *\n * var tag = new Autolinker.HtmlTag( {\n * tagName : 'a',\n * attrs : { 'href': 'http://google.com', 'class': 'external-link' },\n * innerHtml : 'Google'\n * } );\n *\n * tag.toAnchorString(); // Google\n *\n * // Individual accessor methods\n * tag.getTagName(); // 'a'\n * tag.getAttr( 'href' ); // 'http://google.com'\n * tag.hasClass( 'external-link' ); // true\n *\n *\n * Using mutator methods (which may be used in combination with instantiation config properties):\n *\n * var tag = new Autolinker.HtmlTag();\n * tag.setTagName( 'a' );\n * tag.setAttr( 'href', 'http://google.com' );\n * tag.addClass( 'external-link' );\n * tag.setInnerHtml( 'Google' );\n *\n * tag.getTagName(); // 'a'\n * tag.getAttr( 'href' ); // 'http://google.com'\n * tag.hasClass( 'external-link' ); // true\n *\n * tag.toAnchorString(); // Google\n *\n *\n * ## Example use within a {@link Autolinker#replaceFn replaceFn}\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = match.buildTag(); // returns an {@link Autolinker.HtmlTag} instance, configured with the Match's href and anchor text\n * tag.setAttr( 'rel', 'nofollow' );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test google.com\n *\n *\n * ## Example use with a new tag for the replacement\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = new Autolinker.HtmlTag( {\n * tagName : 'button',\n * attrs : { 'title': 'Load URL: ' + match.getAnchorHref() },\n * innerHtml : 'Load URL: ' + match.getAnchorText()\n * } );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test \n */\nvar HtmlTag = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} [cfg] The configuration properties for this class, in an Object (map)\n */\n function HtmlTag(cfg) {\n if (cfg === void 0) { cfg = {}; }\n /**\n * @cfg {String} tagName\n *\n * The tag name. Ex: 'a', 'button', etc.\n *\n * Not required at instantiation time, but should be set using {@link #setTagName} before {@link #toAnchorString}\n * is executed.\n */\n this.tagName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object.} attrs\n *\n * An key/value Object (map) of attributes to create the tag with. The keys are the attribute names, and the\n * values are the attribute values.\n */\n this.attrs = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} innerHTML\n *\n * The inner HTML for the tag.\n */\n this.innerHTML = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @protected\n * @property {RegExp} whitespaceRegex\n *\n * Regular expression used to match whitespace in a string of CSS classes.\n */\n this.whitespaceRegex = /\\s+/; // default value just to get the above doc comment in the ES5 output and documentation generator\n this.tagName = cfg.tagName || '';\n this.attrs = cfg.attrs || {};\n this.innerHTML = cfg.innerHtml || cfg.innerHTML || ''; // accept either the camelCased form or the fully capitalized acronym as in the DOM\n }\n /**\n * Sets the tag name that will be used to generate the tag with.\n *\n * @param {String} tagName\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setTagName = function (tagName) {\n this.tagName = tagName;\n return this;\n };\n /**\n * Retrieves the tag name.\n *\n * @return {String}\n */\n HtmlTag.prototype.getTagName = function () {\n return this.tagName || '';\n };\n /**\n * Sets an attribute on the HtmlTag.\n *\n * @param {String} attrName The attribute name to set.\n * @param {String} attrValue The attribute value to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setAttr = function (attrName, attrValue) {\n var tagAttrs = this.getAttrs();\n tagAttrs[attrName] = attrValue;\n return this;\n };\n /**\n * Retrieves an attribute from the HtmlTag. If the attribute does not exist, returns `undefined`.\n *\n * @param {String} attrName The attribute name to retrieve.\n * @return {String} The attribute's value, or `undefined` if it does not exist on the HtmlTag.\n */\n HtmlTag.prototype.getAttr = function (attrName) {\n return this.getAttrs()[attrName];\n };\n /**\n * Sets one or more attributes on the HtmlTag.\n *\n * @param {Object.} attrs A key/value Object (map) of the attributes to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setAttrs = function (attrs) {\n Object.assign(this.getAttrs(), attrs);\n return this;\n };\n /**\n * Retrieves the attributes Object (map) for the HtmlTag.\n *\n * @return {Object.} A key/value object of the attributes for the HtmlTag.\n */\n HtmlTag.prototype.getAttrs = function () {\n return this.attrs || (this.attrs = {});\n };\n /**\n * Sets the provided `cssClass`, overwriting any current CSS classes on the HtmlTag.\n *\n * @param {String} cssClass One or more space-separated CSS classes to set (overwrite).\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setClass = function (cssClass) {\n return this.setAttr('class', cssClass);\n };\n /**\n * Convenience method to add one or more CSS classes to the HtmlTag. Will not add duplicate CSS classes.\n *\n * @param {String} cssClass One or more space-separated CSS classes to add.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.addClass = function (cssClass) {\n var classAttr = this.getClass(), whitespaceRegex = this.whitespaceRegex, classes = (!classAttr) ? [] : classAttr.split(whitespaceRegex), newClasses = cssClass.split(whitespaceRegex), newClass;\n while (newClass = newClasses.shift()) {\n if (indexOf(classes, newClass) === -1) {\n classes.push(newClass);\n }\n }\n this.getAttrs()['class'] = classes.join(\" \");\n return this;\n };\n /**\n * Convenience method to remove one or more CSS classes from the HtmlTag.\n *\n * @param {String} cssClass One or more space-separated CSS classes to remove.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.removeClass = function (cssClass) {\n var classAttr = this.getClass(), whitespaceRegex = this.whitespaceRegex, classes = (!classAttr) ? [] : classAttr.split(whitespaceRegex), removeClasses = cssClass.split(whitespaceRegex), removeClass;\n while (classes.length && (removeClass = removeClasses.shift())) {\n var idx = indexOf(classes, removeClass);\n if (idx !== -1) {\n classes.splice(idx, 1);\n }\n }\n this.getAttrs()['class'] = classes.join(\" \");\n return this;\n };\n /**\n * Convenience method to retrieve the CSS class(es) for the HtmlTag, which will each be separated by spaces when\n * there are multiple.\n *\n * @return {String}\n */\n HtmlTag.prototype.getClass = function () {\n return this.getAttrs()['class'] || \"\";\n };\n /**\n * Convenience method to check if the tag has a CSS class or not.\n *\n * @param {String} cssClass The CSS class to check for.\n * @return {Boolean} `true` if the HtmlTag has the CSS class, `false` otherwise.\n */\n HtmlTag.prototype.hasClass = function (cssClass) {\n return (' ' + this.getClass() + ' ').indexOf(' ' + cssClass + ' ') !== -1;\n };\n /**\n * Sets the inner HTML for the tag.\n *\n * @param {String} html The inner HTML to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setInnerHTML = function (html) {\n this.innerHTML = html;\n return this;\n };\n /**\n * Backwards compatibility method name.\n *\n * @param {String} html The inner HTML to set.\n * @return {Autolinker.HtmlTag} This HtmlTag instance, so that method calls may be chained.\n */\n HtmlTag.prototype.setInnerHtml = function (html) {\n return this.setInnerHTML(html);\n };\n /**\n * Retrieves the inner HTML for the tag.\n *\n * @return {String}\n */\n HtmlTag.prototype.getInnerHTML = function () {\n return this.innerHTML || \"\";\n };\n /**\n * Backward compatibility method name.\n *\n * @return {String}\n */\n HtmlTag.prototype.getInnerHtml = function () {\n return this.getInnerHTML();\n };\n /**\n * Override of superclass method used to generate the HTML string for the tag.\n *\n * @return {String}\n */\n HtmlTag.prototype.toAnchorString = function () {\n var tagName = this.getTagName(), attrsStr = this.buildAttrsStr();\n attrsStr = (attrsStr) ? ' ' + attrsStr : ''; // prepend a space if there are actually attributes\n return ['<', tagName, attrsStr, '>', this.getInnerHtml(), ''].join(\"\");\n };\n /**\n * Support method for {@link #toAnchorString}, returns the string space-separated key=\"value\" pairs, used to populate\n * the stringified HtmlTag.\n *\n * @protected\n * @return {String} Example return: `attr1=\"value1\" attr2=\"value2\"`\n */\n HtmlTag.prototype.buildAttrsStr = function () {\n if (!this.attrs)\n return \"\"; // no `attrs` Object (map) has been set, return empty string\n var attrs = this.getAttrs(), attrsArr = [];\n for (var prop in attrs) {\n if (attrs.hasOwnProperty(prop)) {\n attrsArr.push(prop + '=\"' + attrs[prop] + '\"');\n }\n }\n return attrsArr.join(\" \");\n };\n return HtmlTag;\n}());\nexport { HtmlTag };\n\n//# sourceMappingURL=html-tag.js.map\n","/**\n * Date: 2015-10-05\n * Author: Kasper Søfren (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed at a section within\n * the URL making it still somewhat human readable.\n *\n * @param {String} url\t\t\t\t\t\t A URL.\n * @param {Number} truncateLen\t\t The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars\t The characters to place within the url, e.g. \"...\".\n * @return {String} The truncated URL.\n */\nexport function truncateSmart(url, truncateLen, ellipsisChars) {\n var ellipsisLengthBeforeParsing;\n var ellipsisLength;\n if (ellipsisChars == null) {\n ellipsisChars = '…';\n ellipsisLength = 3;\n ellipsisLengthBeforeParsing = 8;\n }\n else {\n ellipsisLength = ellipsisChars.length;\n ellipsisLengthBeforeParsing = ellipsisChars.length;\n }\n var parse_url = function (url) {\n var urlObj = {};\n var urlSub = url;\n var match = urlSub.match(/^([a-z]+):\\/\\//i);\n if (match) {\n urlObj.scheme = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^(.*?)(?=(\\?|#|\\/|$))/i);\n if (match) {\n urlObj.host = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^\\/(.*?)(?=(\\?|#|$))/i);\n if (match) {\n urlObj.path = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^\\?(.*?)(?=(#|$))/i);\n if (match) {\n urlObj.query = match[1];\n urlSub = urlSub.substr(match[0].length);\n }\n match = urlSub.match(/^#(.*?)$/i);\n if (match) {\n urlObj.fragment = match[1];\n //urlSub = urlSub.substr(match[0].length); -- not used. Uncomment if adding another block.\n }\n return urlObj;\n };\n var buildUrl = function (urlObj) {\n var url = \"\";\n if (urlObj.scheme && urlObj.host) {\n url += urlObj.scheme + \"://\";\n }\n if (urlObj.host) {\n url += urlObj.host;\n }\n if (urlObj.path) {\n url += \"/\" + urlObj.path;\n }\n if (urlObj.query) {\n url += \"?\" + urlObj.query;\n }\n if (urlObj.fragment) {\n url += \"#\" + urlObj.fragment;\n }\n return url;\n };\n var buildSegment = function (segment, remainingAvailableLength) {\n var remainingAvailableLengthHalf = remainingAvailableLength / 2, startOffset = Math.ceil(remainingAvailableLengthHalf), endOffset = (-1) * Math.floor(remainingAvailableLengthHalf), end = \"\";\n if (endOffset < 0) {\n end = segment.substr(endOffset);\n }\n return segment.substr(0, startOffset) + ellipsisChars + end;\n };\n if (url.length <= truncateLen) {\n return url;\n }\n var availableLength = truncateLen - ellipsisLength;\n var urlObj = parse_url(url);\n // Clean up the URL\n if (urlObj.query) {\n var matchQuery = urlObj.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);\n if (matchQuery) {\n // Malformed URL; two or more \"?\". Removed any content behind the 2nd.\n urlObj.query = urlObj.query.substr(0, matchQuery[1].length);\n url = buildUrl(urlObj);\n }\n }\n if (url.length <= truncateLen) {\n return url;\n }\n if (urlObj.host) {\n urlObj.host = urlObj.host.replace(/^www\\./, \"\");\n url = buildUrl(urlObj);\n }\n if (url.length <= truncateLen) {\n return url;\n }\n // Process and build the URL\n var str = \"\";\n if (urlObj.host) {\n str += urlObj.host;\n }\n if (str.length >= availableLength) {\n if (urlObj.host.length == truncateLen) {\n return (urlObj.host.substr(0, (truncateLen - ellipsisLength)) + ellipsisChars).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n return buildSegment(str, availableLength).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n var pathAndQuery = \"\";\n if (urlObj.path) {\n pathAndQuery += \"/\" + urlObj.path;\n }\n if (urlObj.query) {\n pathAndQuery += \"?\" + urlObj.query;\n }\n if (pathAndQuery) {\n if ((str + pathAndQuery).length >= availableLength) {\n if ((str + pathAndQuery).length == truncateLen) {\n return (str + pathAndQuery).substr(0, truncateLen);\n }\n var remainingAvailableLength = availableLength - str.length;\n return (str + buildSegment(pathAndQuery, remainingAvailableLength)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n else {\n str += pathAndQuery;\n }\n }\n if (urlObj.fragment) {\n var fragment = \"#\" + urlObj.fragment;\n if ((str + fragment).length >= availableLength) {\n if ((str + fragment).length == truncateLen) {\n return (str + fragment).substr(0, truncateLen);\n }\n var remainingAvailableLength2 = availableLength - str.length;\n return (str + buildSegment(fragment, remainingAvailableLength2)).substr(0, availableLength + ellipsisLengthBeforeParsing);\n }\n else {\n str += fragment;\n }\n }\n if (urlObj.scheme && urlObj.host) {\n var scheme = urlObj.scheme + \"://\";\n if ((str + scheme).length < availableLength) {\n return (scheme + str).substr(0, truncateLen);\n }\n }\n if (str.length <= truncateLen) {\n return str;\n }\n var end = \"\";\n if (availableLength > 0) {\n end = str.substr((-1) * Math.floor(availableLength / 2));\n }\n return (str.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\n\n//# sourceMappingURL=truncate-smart.js.map\n","/**\n * Date: 2015-10-05\n * Author: Kasper Søfren (https://github.com/kafoso)\n *\n * A truncation feature, where the ellipsis will be placed in the dead-center of the URL.\n *\n * @param {String} url A URL.\n * @param {Number} truncateLen The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\nexport function truncateMiddle(url, truncateLen, ellipsisChars) {\n if (url.length <= truncateLen) {\n return url;\n }\n var ellipsisLengthBeforeParsing;\n var ellipsisLength;\n if (ellipsisChars == null) {\n ellipsisChars = '…';\n ellipsisLengthBeforeParsing = 8;\n ellipsisLength = 3;\n }\n else {\n ellipsisLengthBeforeParsing = ellipsisChars.length;\n ellipsisLength = ellipsisChars.length;\n }\n var availableLength = truncateLen - ellipsisLength;\n var end = \"\";\n if (availableLength > 0) {\n end = url.substr((-1) * Math.floor(availableLength / 2));\n }\n return (url.substr(0, Math.ceil(availableLength / 2)) + ellipsisChars + end).substr(0, availableLength + ellipsisLengthBeforeParsing);\n}\n\n//# sourceMappingURL=truncate-middle.js.map\n","import { ellipsis } from \"../utils\";\n/**\n * A truncation feature where the ellipsis will be placed at the end of the URL.\n *\n * @param {String} anchorText\n * @param {Number} truncateLen The maximum length of the truncated output URL string.\n * @param {String} ellipsisChars The characters to place within the url, e.g. \"..\".\n * @return {String} The truncated URL.\n */\nexport function truncateEnd(anchorText, truncateLen, ellipsisChars) {\n return ellipsis(anchorText, truncateLen, ellipsisChars);\n}\n\n//# sourceMappingURL=truncate-end.js.map\n","import { HtmlTag } from \"./html-tag\";\nimport { truncateSmart } from \"./truncate/truncate-smart\";\nimport { truncateMiddle } from \"./truncate/truncate-middle\";\nimport { truncateEnd } from \"./truncate/truncate-end\";\n/**\n * @protected\n * @class Autolinker.AnchorTagBuilder\n * @extends Object\n *\n * Builds anchor (<a>) tags for the Autolinker utility when a match is\n * found.\n *\n * Normally this class is instantiated, configured, and used internally by an\n * {@link Autolinker} instance, but may actually be used indirectly in a\n * {@link Autolinker#replaceFn replaceFn} to create {@link Autolinker.HtmlTag HtmlTag}\n * instances which may be modified before returning from the\n * {@link Autolinker#replaceFn replaceFn}. For example:\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = match.buildTag(); // returns an {@link Autolinker.HtmlTag} instance\n * tag.setAttr( 'rel', 'nofollow' );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test google.com\n */\nvar AnchorTagBuilder = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} [cfg] The configuration options for the AnchorTagBuilder instance, specified in an Object (map).\n */\n function AnchorTagBuilder(cfg) {\n if (cfg === void 0) { cfg = {}; }\n /**\n * @cfg {Boolean} newWindow\n * @inheritdoc Autolinker#newWindow\n */\n this.newWindow = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object} truncate\n * @inheritdoc Autolinker#truncate\n */\n this.truncate = {}; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} className\n * @inheritdoc Autolinker#className\n */\n this.className = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n this.newWindow = cfg.newWindow || false;\n this.truncate = cfg.truncate || {};\n this.className = cfg.className || '';\n }\n /**\n * Generates the actual anchor (<a>) tag to use in place of the\n * matched text, via its `match` object.\n *\n * @param {Autolinker.match.Match} match The Match instance to generate an\n * anchor tag from.\n * @return {Autolinker.HtmlTag} The HtmlTag instance for the anchor tag.\n */\n AnchorTagBuilder.prototype.build = function (match) {\n return new HtmlTag({\n tagName: 'a',\n attrs: this.createAttrs(match),\n innerHtml: this.processAnchorText(match.getAnchorText())\n });\n };\n /**\n * Creates the Object (map) of the HTML attributes for the anchor (<a>)\n * tag being generated.\n *\n * @protected\n * @param {Autolinker.match.Match} match The Match instance to generate an\n * anchor tag from.\n * @return {Object} A key/value Object (map) of the anchor tag's attributes.\n */\n AnchorTagBuilder.prototype.createAttrs = function (match) {\n var attrs = {\n 'href': match.getAnchorHref() // we'll always have the `href` attribute\n };\n var cssClass = this.createCssClass(match);\n if (cssClass) {\n attrs['class'] = cssClass;\n }\n if (this.newWindow) {\n attrs['target'] = \"_blank\";\n attrs['rel'] = \"noopener noreferrer\";\n }\n if (this.truncate) {\n if (this.truncate.length && this.truncate.length < match.getAnchorText().length) {\n attrs['title'] = match.getAnchorHref();\n }\n }\n return attrs;\n };\n /**\n * Creates the CSS class that will be used for a given anchor tag, based on\n * the `matchType` and the {@link #className} config.\n *\n * Example returns:\n *\n * - \"\" // no {@link #className}\n * - \"myLink myLink-url\" // url match\n * - \"myLink myLink-email\" // email match\n * - \"myLink myLink-phone\" // phone match\n * - \"myLink myLink-hashtag\" // hashtag match\n * - \"myLink myLink-mention myLink-twitter\" // mention match with Twitter service\n *\n * @protected\n * @param {Autolinker.match.Match} match The Match instance to generate an\n * anchor tag from.\n * @return {String} The CSS class string for the link. Example return:\n * \"myLink myLink-url\". If no {@link #className} was configured, returns\n * an empty string.\n */\n AnchorTagBuilder.prototype.createCssClass = function (match) {\n var className = this.className;\n if (!className) {\n return \"\";\n }\n else {\n var returnClasses = [className], cssClassSuffixes = match.getCssClassSuffixes();\n for (var i = 0, len = cssClassSuffixes.length; i < len; i++) {\n returnClasses.push(className + '-' + cssClassSuffixes[i]);\n }\n return returnClasses.join(' ');\n }\n };\n /**\n * Processes the `anchorText` by truncating the text according to the\n * {@link #truncate} config.\n *\n * @private\n * @param {String} anchorText The anchor tag's text (i.e. what will be\n * displayed).\n * @return {String} The processed `anchorText`.\n */\n AnchorTagBuilder.prototype.processAnchorText = function (anchorText) {\n anchorText = this.doTruncate(anchorText);\n return anchorText;\n };\n /**\n * Performs the truncation of the `anchorText` based on the {@link #truncate}\n * option. If the `anchorText` is longer than the length specified by the\n * {@link #truncate} option, the truncation is performed based on the\n * `location` property. See {@link #truncate} for details.\n *\n * @private\n * @param {String} anchorText The anchor tag's text (i.e. what will be\n * displayed).\n * @return {String} The truncated anchor text.\n */\n AnchorTagBuilder.prototype.doTruncate = function (anchorText) {\n var truncate = this.truncate;\n if (!truncate || !truncate.length)\n return anchorText;\n var truncateLength = truncate.length, truncateLocation = truncate.location;\n if (truncateLocation === 'smart') {\n return truncateSmart(anchorText, truncateLength);\n }\n else if (truncateLocation === 'middle') {\n return truncateMiddle(anchorText, truncateLength);\n }\n else {\n return truncateEnd(anchorText, truncateLength);\n }\n };\n return AnchorTagBuilder;\n}());\nexport { AnchorTagBuilder };\n\n//# sourceMappingURL=anchor-tag-builder.js.map\n","/**\n * @abstract\n * @class Autolinker.match.Match\n *\n * Represents a match found in an input string which should be Autolinked. A Match object is what is provided in a\n * {@link Autolinker#replaceFn replaceFn}, and may be used to query for details about the match.\n *\n * For example:\n *\n * var input = \"...\"; // string with URLs, Email Addresses, and Mentions (Twitter, Instagram, Soundcloud)\n *\n * var linkedText = Autolinker.link( input, {\n * replaceFn : function( match ) {\n * console.log( \"href = \", match.getAnchorHref() );\n * console.log( \"text = \", match.getAnchorText() );\n *\n * switch( match.getType() ) {\n * case 'url' :\n * console.log( \"url: \", match.getUrl() );\n *\n * case 'email' :\n * console.log( \"email: \", match.getEmail() );\n *\n * case 'mention' :\n * console.log( \"mention: \", match.getMention() );\n * }\n * }\n * } );\n *\n * See the {@link Autolinker} class for more details on using the {@link Autolinker#replaceFn replaceFn}.\n */\nvar Match = /** @class */ (function () {\n /**\n * @member Autolinker.match.Match\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function Match(cfg) {\n /**\n * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n *\n * Reference to the AnchorTagBuilder instance to use to generate an anchor\n * tag for the Match.\n */\n this.__jsduckDummyDocProp = null; // property used just to get the above doc comment into the ES5 output and documentation generator\n /**\n * @cfg {String} matchedText (required)\n *\n * The original text that was matched by the {@link Autolinker.matcher.Matcher}.\n */\n this.matchedText = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Number} offset (required)\n *\n * The offset of where the match was made in the input string.\n */\n this.offset = 0; // default value just to get the above doc comment in the ES5 output and documentation generator\n this.tagBuilder = cfg.tagBuilder;\n this.matchedText = cfg.matchedText;\n this.offset = cfg.offset;\n }\n /**\n * Returns the original text that was matched.\n *\n * @return {String}\n */\n Match.prototype.getMatchedText = function () {\n return this.matchedText;\n };\n /**\n * Sets the {@link #offset} of where the match was made in the input string.\n *\n * A {@link Autolinker.matcher.Matcher} will be fed only HTML text nodes,\n * and will therefore set an original offset that is relative to the HTML\n * text node itself. However, we want this offset to be relative to the full\n * HTML input string, and thus if using {@link Autolinker#parse} (rather\n * than calling a {@link Autolinker.matcher.Matcher} directly), then this\n * offset is corrected after the Matcher itself has done its job.\n *\n * @param {Number} offset\n */\n Match.prototype.setOffset = function (offset) {\n this.offset = offset;\n };\n /**\n * Returns the offset of where the match was made in the input string. This\n * is the 0-based index of the match.\n *\n * @return {Number}\n */\n Match.prototype.getOffset = function () {\n return this.offset;\n };\n /**\n * Returns the CSS class suffix(es) for this match.\n *\n * A CSS class suffix is appended to the {@link Autolinker#className} in\n * the {@link Autolinker.AnchorTagBuilder} when a match is translated into\n * an anchor tag.\n *\n * For example, if {@link Autolinker#className} was configured as 'myLink',\n * and this method returns `[ 'url' ]`, the final class name of the element\n * will become: 'myLink myLink-url'.\n *\n * The match may provide multiple CSS class suffixes to be appended to the\n * {@link Autolinker#className} in order to facilitate better styling\n * options for different match criteria. See {@link Autolinker.match.Mention}\n * for an example.\n *\n * By default, this method returns a single array with the match's\n * {@link #getType type} name, but may be overridden by subclasses.\n *\n * @return {String[]}\n */\n Match.prototype.getCssClassSuffixes = function () {\n return [this.getType()];\n };\n /**\n * Builds and returns an {@link Autolinker.HtmlTag} instance based on the\n * Match.\n *\n * This can be used to easily generate anchor tags from matches, and either\n * return their HTML string, or modify them before doing so.\n *\n * Example Usage:\n *\n * var tag = match.buildTag();\n * tag.addClass( 'cordova-link' );\n * tag.setAttr( 'target', '_system' );\n *\n * tag.toAnchorString(); // Google\n *\n * Example Usage in {@link Autolinker#replaceFn}:\n *\n * var html = Autolinker.link( \"Test google.com\", {\n * replaceFn : function( match ) {\n * var tag = match.buildTag(); // returns an {@link Autolinker.HtmlTag} instance\n * tag.setAttr( 'rel', 'nofollow' );\n *\n * return tag;\n * }\n * } );\n *\n * // generated html:\n * // Test google.com\n */\n Match.prototype.buildTag = function () {\n return this.tagBuilder.build(this);\n };\n return Match;\n}());\nexport { Match };\n\n//# sourceMappingURL=match.js.map\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import * as tslib_1 from \"tslib\";\nimport { Match } from \"./match\";\n/**\n * @class Autolinker.match.Email\n * @extends Autolinker.match.Match\n *\n * Represents a Email match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar EmailMatch = /** @class */ (function (_super) {\n tslib_1.__extends(EmailMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function EmailMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} email (required)\n *\n * The email address that was matched.\n */\n _this.email = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.email = cfg.email;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n *\n * @return {String}\n */\n EmailMatch.prototype.getType = function () {\n return 'email';\n };\n /**\n * Returns the email address that was matched.\n *\n * @return {String}\n */\n EmailMatch.prototype.getEmail = function () {\n return this.email;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n EmailMatch.prototype.getAnchorHref = function () {\n return 'mailto:' + this.email;\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n EmailMatch.prototype.getAnchorText = function () {\n return this.email;\n };\n return EmailMatch;\n}(Match));\nexport { EmailMatch };\n\n//# sourceMappingURL=email-match.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Match } from \"./match\";\n/**\n * @class Autolinker.match.Hashtag\n * @extends Autolinker.match.Match\n *\n * Represents a Hashtag match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\nvar HashtagMatch = /** @class */ (function (_super) {\n tslib_1.__extends(HashtagMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function HashtagMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} serviceName\n *\n * The service to point hashtag matches to. See {@link Autolinker#hashtag}\n * for available values.\n */\n _this.serviceName = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} hashtag (required)\n *\n * The HashtagMatch that was matched, without the '#'.\n */\n _this.hashtag = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.serviceName = cfg.serviceName;\n _this.hashtag = cfg.hashtag;\n return _this;\n }\n /**\n * Returns the type of match that this class represents.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getType = function () {\n return 'hashtag';\n };\n /**\n * Returns the configured {@link #serviceName} to point the HashtagMatch to.\n * Ex: 'facebook', 'twitter'.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getServiceName = function () {\n return this.serviceName;\n };\n /**\n * Returns the matched hashtag, without the '#' character.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getHashtag = function () {\n return this.hashtag;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getAnchorHref = function () {\n var serviceName = this.serviceName, hashtag = this.hashtag;\n switch (serviceName) {\n case 'twitter':\n return 'https://twitter.com/hashtag/' + hashtag;\n case 'facebook':\n return 'https://www.facebook.com/hashtag/' + hashtag;\n case 'instagram':\n return 'https://instagram.com/explore/tags/' + hashtag;\n default: // Shouldn't happen because Autolinker's constructor should block any invalid values, but just in case.\n throw new Error('Unknown service name to point hashtag to: ' + serviceName);\n }\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n HashtagMatch.prototype.getAnchorText = function () {\n return '#' + this.hashtag;\n };\n return HashtagMatch;\n}(Match));\nexport { HashtagMatch };\n\n//# sourceMappingURL=hashtag-match.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Match } from \"./match\";\n/**\n * @class Autolinker.match.Mention\n * @extends Autolinker.match.Match\n *\n * Represents a Mention match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar MentionMatch = /** @class */ (function (_super) {\n tslib_1.__extends(MentionMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function MentionMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} serviceName\n *\n * The service to point mention matches to. See {@link Autolinker#mention}\n * for available values.\n */\n _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {String} mention (required)\n *\n * The Mention that was matched, without the '@' character.\n */\n _this.mention = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.mention = cfg.mention;\n _this.serviceName = cfg.serviceName;\n return _this;\n }\n /**\n * Returns the type of match that this class represents.\n *\n * @return {String}\n */\n MentionMatch.prototype.getType = function () {\n return 'mention';\n };\n /**\n * Returns the mention, without the '@' character.\n *\n * @return {String}\n */\n MentionMatch.prototype.getMention = function () {\n return this.mention;\n };\n /**\n * Returns the configured {@link #serviceName} to point the mention to.\n * Ex: 'instagram', 'twitter', 'soundcloud'.\n *\n * @return {String}\n */\n MentionMatch.prototype.getServiceName = function () {\n return this.serviceName;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n MentionMatch.prototype.getAnchorHref = function () {\n switch (this.serviceName) {\n case 'twitter':\n return 'https://twitter.com/' + this.mention;\n case 'instagram':\n return 'https://instagram.com/' + this.mention;\n case 'soundcloud':\n return 'https://soundcloud.com/' + this.mention;\n default: // Shouldn't happen because Autolinker's constructor should block any invalid values, but just in case.\n throw new Error('Unknown service name to point mention to: ' + this.serviceName);\n }\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n MentionMatch.prototype.getAnchorText = function () {\n return '@' + this.mention;\n };\n /**\n * Returns the CSS class suffixes that should be used on a tag built with\n * the match. See {@link Autolinker.match.Match#getCssClassSuffixes} for\n * details.\n *\n * @return {String[]}\n */\n MentionMatch.prototype.getCssClassSuffixes = function () {\n var cssClassSuffixes = _super.prototype.getCssClassSuffixes.call(this), serviceName = this.getServiceName();\n if (serviceName) {\n cssClassSuffixes.push(serviceName);\n }\n return cssClassSuffixes;\n };\n return MentionMatch;\n}(Match));\nexport { MentionMatch };\n\n//# sourceMappingURL=mention-match.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Match } from \"./match\";\n/**\n * @class Autolinker.match.Phone\n * @extends Autolinker.match.Match\n *\n * Represents a Phone number match found in an input string which should be\n * Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more\n * details.\n */\nvar PhoneMatch = /** @class */ (function (_super) {\n tslib_1.__extends(PhoneMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function PhoneMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @protected\n * @property {String} number (required)\n *\n * The phone number that was matched, without any delimiter characters.\n *\n * Note: This is a string to allow for prefixed 0's.\n */\n _this.number = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @protected\n * @property {Boolean} plusSign (required)\n *\n * `true` if the matched phone number started with a '+' sign. We'll include\n * it in the `tel:` URL if so, as this is needed for international numbers.\n *\n * Ex: '+1 (123) 456 7879'\n */\n _this.plusSign = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n _this.number = cfg.number;\n _this.plusSign = cfg.plusSign;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getType = function () {\n return 'phone';\n };\n /**\n * Returns the phone number that was matched as a string, without any\n * delimiter characters.\n *\n * Note: This is a string to allow for prefixed 0's.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getPhoneNumber = function () {\n return this.number;\n };\n /**\n * Alias of {@link #getPhoneNumber}, returns the phone number that was\n * matched as a string, without any delimiter characters.\n *\n * Note: This is a string to allow for prefixed 0's.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getNumber = function () {\n return this.getPhoneNumber();\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getAnchorHref = function () {\n return 'tel:' + (this.plusSign ? '+' : '') + this.number;\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n PhoneMatch.prototype.getAnchorText = function () {\n return this.matchedText;\n };\n return PhoneMatch;\n}(Match));\nexport { PhoneMatch };\n\n//# sourceMappingURL=phone-match.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Match } from \"./match\";\n/**\n * @class Autolinker.match.Url\n * @extends Autolinker.match.Match\n *\n * Represents a Url match found in an input string which should be Autolinked.\n *\n * See this class's superclass ({@link Autolinker.match.Match}) for more details.\n */\nvar UrlMatch = /** @class */ (function (_super) {\n tslib_1.__extends(UrlMatch, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match\n * instance, specified in an Object (map).\n */\n function UrlMatch(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} url (required)\n *\n * The url that was matched.\n */\n _this.url = ''; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {\"scheme\"/\"www\"/\"tld\"} urlMatchType (required)\n *\n * The type of URL match that this class represents. This helps to determine\n * if the match was made in the original text with a prefixed scheme (ex:\n * 'http://www.google.com'), a prefixed 'www' (ex: 'www.google.com'), or\n * was matched by a known top-level domain (ex: 'google.com').\n */\n _this.urlMatchType = 'scheme'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} protocolUrlMatch (required)\n *\n * `true` if the URL is a match which already has a protocol (i.e.\n * 'http://'), `false` if the match was from a 'www' or known TLD match.\n */\n _this.protocolUrlMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} protocolRelativeMatch (required)\n *\n * `true` if the URL is a protocol-relative match. A protocol-relative match\n * is a URL that starts with '//', and will be either http:// or https://\n * based on the protocol that the site is loaded under.\n */\n _this.protocolRelativeMatch = false; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Object} stripPrefix (required)\n *\n * The Object form of {@link Autolinker#cfg-stripPrefix}.\n */\n _this.stripPrefix = { scheme: true, www: true }; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} stripTrailingSlash (required)\n * @inheritdoc Autolinker#cfg-stripTrailingSlash\n */\n _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} decodePercentEncoding (required)\n * @inheritdoc Autolinker#cfg-decodePercentEncoding\n */\n _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @private\n * @property {RegExp} schemePrefixRegex\n *\n * A regular expression used to remove the 'http://' or 'https://' from\n * URLs.\n */\n _this.schemePrefixRegex = /^(https?:\\/\\/)?/i;\n /**\n * @private\n * @property {RegExp} wwwPrefixRegex\n *\n * A regular expression used to remove the 'www.' from URLs.\n */\n _this.wwwPrefixRegex = /^(https?:\\/\\/)?(www\\.)?/i;\n /**\n * @private\n * @property {RegExp} protocolRelativeRegex\n *\n * The regular expression used to remove the protocol-relative '//' from the {@link #url} string, for purposes\n * of {@link #getAnchorText}. A protocol-relative URL is, for example, \"//yahoo.com\"\n */\n _this.protocolRelativeRegex = /^\\/\\//;\n /**\n * @private\n * @property {Boolean} protocolPrepended\n *\n * Will be set to `true` if the 'http://' protocol has been prepended to the {@link #url} (because the\n * {@link #url} did not have a protocol)\n */\n _this.protocolPrepended = false;\n _this.urlMatchType = cfg.urlMatchType;\n _this.url = cfg.url;\n _this.protocolUrlMatch = cfg.protocolUrlMatch;\n _this.protocolRelativeMatch = cfg.protocolRelativeMatch;\n _this.stripPrefix = cfg.stripPrefix;\n _this.stripTrailingSlash = cfg.stripTrailingSlash;\n _this.decodePercentEncoding = cfg.decodePercentEncoding;\n return _this;\n }\n /**\n * Returns a string name for the type of match that this class represents.\n *\n * @return {String}\n */\n UrlMatch.prototype.getType = function () {\n return 'url';\n };\n /**\n * Returns a string name for the type of URL match that this class\n * represents.\n *\n * This helps to determine if the match was made in the original text with a\n * prefixed scheme (ex: 'http://www.google.com'), a prefixed 'www' (ex:\n * 'www.google.com'), or was matched by a known top-level domain (ex:\n * 'google.com').\n *\n * @return {\"scheme\"/\"www\"/\"tld\"}\n */\n UrlMatch.prototype.getUrlMatchType = function () {\n return this.urlMatchType;\n };\n /**\n * Returns the url that was matched, assuming the protocol to be 'http://' if the original\n * match was missing a protocol.\n *\n * @return {String}\n */\n UrlMatch.prototype.getUrl = function () {\n var url = this.url;\n // if the url string doesn't begin with a protocol, assume 'http://'\n if (!this.protocolRelativeMatch && !this.protocolUrlMatch && !this.protocolPrepended) {\n url = this.url = 'http://' + url;\n this.protocolPrepended = true;\n }\n return url;\n };\n /**\n * Returns the anchor href that should be generated for the match.\n *\n * @return {String}\n */\n UrlMatch.prototype.getAnchorHref = function () {\n var url = this.getUrl();\n return url.replace(/&/g, '&'); // any &'s in the URL should be converted back to '&' if they were displayed as & in the source html\n };\n /**\n * Returns the anchor text that should be generated for the match.\n *\n * @return {String}\n */\n UrlMatch.prototype.getAnchorText = function () {\n var anchorText = this.getMatchedText();\n if (this.protocolRelativeMatch) {\n // Strip off any protocol-relative '//' from the anchor text\n anchorText = this.stripProtocolRelativePrefix(anchorText);\n }\n if (this.stripPrefix.scheme) {\n anchorText = this.stripSchemePrefix(anchorText);\n }\n if (this.stripPrefix.www) {\n anchorText = this.stripWwwPrefix(anchorText);\n }\n if (this.stripTrailingSlash) {\n anchorText = this.removeTrailingSlash(anchorText); // remove trailing slash, if there is one\n }\n if (this.decodePercentEncoding) {\n anchorText = this.removePercentEncoding(anchorText);\n }\n return anchorText;\n };\n // ---------------------------------------\n // Utility Functionality\n /**\n * Strips the scheme prefix (such as \"http://\" or \"https://\") from the given\n * `url`.\n *\n * @private\n * @param {String} url The text of the anchor that is being generated, for\n * which to strip off the url scheme.\n * @return {String} The `url`, with the scheme stripped.\n */\n UrlMatch.prototype.stripSchemePrefix = function (url) {\n return url.replace(this.schemePrefixRegex, '');\n };\n /**\n * Strips the 'www' prefix from the given `url`.\n *\n * @private\n * @param {String} url The text of the anchor that is being generated, for\n * which to strip off the 'www' if it exists.\n * @return {String} The `url`, with the 'www' stripped.\n */\n UrlMatch.prototype.stripWwwPrefix = function (url) {\n return url.replace(this.wwwPrefixRegex, '$1'); // leave any scheme ($1), it one exists\n };\n /**\n * Strips any protocol-relative '//' from the anchor text.\n *\n * @private\n * @param {String} text The text of the anchor that is being generated, for which to strip off the\n * protocol-relative prefix (such as stripping off \"//\")\n * @return {String} The `anchorText`, with the protocol-relative prefix stripped.\n */\n UrlMatch.prototype.stripProtocolRelativePrefix = function (text) {\n return text.replace(this.protocolRelativeRegex, '');\n };\n /**\n * Removes any trailing slash from the given `anchorText`, in preparation for the text to be displayed.\n *\n * @private\n * @param {String} anchorText The text of the anchor that is being generated, for which to remove any trailing\n * slash ('/') that may exist.\n * @return {String} The `anchorText`, with the trailing slash removed.\n */\n UrlMatch.prototype.removeTrailingSlash = function (anchorText) {\n if (anchorText.charAt(anchorText.length - 1) === '/') {\n anchorText = anchorText.slice(0, -1);\n }\n return anchorText;\n };\n /**\n * Decodes percent-encoded characters from the given `anchorText`, in\n * preparation for the text to be displayed.\n *\n * @private\n * @param {String} anchorText The text of the anchor that is being\n * generated, for which to decode any percent-encoded characters.\n * @return {String} The `anchorText`, with the percent-encoded characters\n * decoded.\n */\n UrlMatch.prototype.removePercentEncoding = function (anchorText) {\n // First, convert a few of the known % encodings to the corresponding\n // HTML entities that could accidentally be interpretted as special\n // HTML characters\n var preProcessedEntityAnchorText = anchorText\n .replace(/%22/gi, '"') // \" char\n .replace(/%26/gi, '&') // & char\n .replace(/%27/gi, ''') // ' char\n .replace(/%3C/gi, '<') // < char\n .replace(/%3E/gi, '>'); // > char\n try {\n // Now attempt to decode the rest of the anchor text\n return decodeURIComponent(preProcessedEntityAnchorText);\n }\n catch (e) { // Invalid % escape sequence in the anchor text\n return preProcessedEntityAnchorText;\n }\n };\n return UrlMatch;\n}(Match));\nexport { UrlMatch };\n\n//# sourceMappingURL=url-match.js.map\n","/**\n * @abstract\n * @class Autolinker.matcher.Matcher\n *\n * An abstract class and interface for individual matchers to find matches in\n * an input string with linkified versions of them.\n *\n * Note that Matchers do not take HTML into account - they must be fed the text\n * nodes of any HTML string, which is handled by {@link Autolinker#parse}.\n */\nvar Matcher = /** @class */ (function () {\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Matcher\n * instance, specified in an Object (map).\n */\n function Matcher(cfg) {\n /**\n * @cfg {Autolinker.AnchorTagBuilder} tagBuilder (required)\n *\n * Reference to the AnchorTagBuilder instance to use to generate HTML tags\n * for {@link Autolinker.match.Match Matches}.\n */\n this.__jsduckDummyDocProp = null; // property used just to get the above doc comment into the ES5 output and documentation generator\n this.tagBuilder = cfg.tagBuilder;\n }\n return Matcher;\n}());\nexport { Matcher };\n\n//# sourceMappingURL=matcher.js.map\n","/*\n * This file builds and stores a library of the common regular expressions used\n * by the Autolinker utility.\n *\n * Other regular expressions may exist ad-hoc, but these are generally the\n * regular expressions that are shared between source files.\n */\n/**\n * The string form of a regular expression that would match all of the\n * alphabetic (\"letter\") chars in the unicode character set when placed in a\n * RegExp character class (`[]`). This includes all international alphabetic\n * characters.\n *\n * These would be the characters matched by unicode regex engines `\\p{L}`\n * escape (\"all letters\").\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Letter'\n * regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n * Expression literal rather than a string literal to prevent UglifyJS from\n * compressing the unicode escape sequences into their actual unicode\n * characters. If Uglify compresses these into the unicode characters\n * themselves, this results in the error \"Range out of order in character\n * class\" when these characters are used inside of a Regular Expression\n * character class (`[]`). See usages of this const. Alternatively, we can set\n * the UglifyJS option `ascii_only` to true for the build, but that doesn't\n * help others who are pulling in Autolinker into their own build and running\n * UglifyJS themselves.\n */\nexport var alphaCharsStr = /A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/\n .source; // see note in above variable description\n/**\n * The string form of a regular expression that would match all of the\n * combining mark characters in the unicode character set when placed in a\n * RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines `\\p{M}`\n * escape (\"all marks\").\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Mark'\n * regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n * Expression literal rather than a string literal to prevent UglifyJS from\n * compressing the unicode escape sequences into their actual unicode\n * characters. If Uglify compresses these into the unicode characters\n * themselves, this results in the error \"Range out of order in character\n * class\" when these characters are used inside of a Regular Expression\n * character class (`[]`). See usages of this const. Alternatively, we can set\n * the UglifyJS option `ascii_only` to true for the build, but that doesn't\n * help others who are pulling in Autolinker into their own build and running\n * UglifyJS themselves.\n */\nexport var marksStr = /\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/\n .source; // see note in above variable description\n/**\n * The string form of a regular expression that would match all of the\n * alphabetic (\"letter\") chars and combining marks in the unicode character set\n * when placed in a RegExp character class (`[]`). This includes all\n * international alphabetic characters.\n *\n * These would be the characters matched by unicode regex engines `\\p{L}\\p{M}`\n * escapes.\n */\nexport var alphaCharsAndMarksStr = alphaCharsStr + marksStr;\n/**\n * The string form of a regular expression that would match all of the\n * decimal number chars in the unicode character set when placed in a RegExp\n * character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines `\\p{Nd}`\n * escape (\"all decimal numbers\")\n *\n * Taken from the XRegExp library: http://xregexp.com/ (thanks @https://github.com/slevithan)\n * Specifically: http://xregexp.com/v/3.2.0/xregexp-all.js, the 'Decimal_Number'\n * regex's bmp\n *\n * VERY IMPORTANT: This set of characters is defined inside of a Regular\n * Expression literal rather than a string literal to prevent UglifyJS from\n * compressing the unicode escape sequences into their actual unicode\n * characters. If Uglify compresses these into the unicode characters\n * themselves, this results in the error \"Range out of order in character\n * class\" when these characters are used inside of a Regular Expression\n * character class (`[]`). See usages of this const. Alternatively, we can set\n * the UglifyJS option `ascii_only` to true for the build, but that doesn't\n * help others who are pulling in Autolinker into their own build and running\n * UglifyJS themselves.\n */\nexport var decimalNumbersStr = /0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/\n .source; // see note in above variable description\n/**\n * The string form of a regular expression that would match all of the\n * letters and decimal number chars in the unicode character set when placed in\n * a RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines\n * `[\\p{L}\\p{Nd}]` escape (\"all letters and decimal numbers\")\n */\nexport var alphaNumericCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\n/**\n * The string form of a regular expression that would match all of the\n * letters, combining marks, and decimal number chars in the unicode character\n * set when placed in a RegExp character class (`[]`).\n *\n * These would be the characters matched by unicode regex engines\n * `[\\p{L}\\p{M}\\p{Nd}]` escape (\"all letters, combining marks, and decimal\n * numbers\")\n */\nexport var alphaNumericAndMarksCharsStr = alphaCharsAndMarksStr + decimalNumbersStr;\n// Simplified IP regular expression\nvar ipStr = '(?:[' + decimalNumbersStr + ']{1,3}\\\\.){3}[' + decimalNumbersStr + ']{1,3}';\n// Protected domain label which do not allow \"-\" character on the beginning and the end of a single label\nvar domainLabelStr = '[' + alphaNumericAndMarksCharsStr + '](?:[' + alphaNumericAndMarksCharsStr + '\\\\-]{0,61}[' + alphaNumericAndMarksCharsStr + '])?';\nvar getDomainLabelStr = function (group) {\n return '(?=(' + domainLabelStr + '))\\\\' + group;\n};\n/**\n * A function to match domain names of a URL or email address.\n * Ex: 'google', 'yahoo', 'some-other-company', etc.\n */\nexport var getDomainNameStr = function (group) {\n return '(?:' + getDomainLabelStr(group) + '(?:\\\\.' + getDomainLabelStr(group + 1) + '){0,126}|' + ipStr + ')';\n};\n/**\n * A regular expression to match domain names of a URL or email address.\n * Ex: 'google', 'yahoo', 'some-other-company', etc.\n */\nexport var domainNameRegex = new RegExp('[' + alphaNumericAndMarksCharsStr + '.\\\\-]*[' + alphaNumericAndMarksCharsStr + '\\\\-]');\n\n//# sourceMappingURL=regex-lib.js.map\n","// NOTE: THIS IS A GENERATED FILE\n// To update with the latest TLD list, run `npm run update-tld-regex` or `yarn update-tld-regex` (depending on which you have installed)\nexport var tldRegex = /(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/;\n\n//# sourceMappingURL=tld-regex.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Matcher } from \"./matcher\";\nimport { alphaNumericAndMarksCharsStr, getDomainNameStr } from \"../regex-lib\";\nimport { tldRegex } from \"./tld-regex\";\nimport { EmailMatch } from \"../match/email-match\";\n/**\n * @class Autolinker.matcher.Email\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find email matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more details.\n */\nvar EmailMatcher = /** @class */ (function (_super) {\n tslib_1.__extends(EmailMatcher, _super);\n function EmailMatcher() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * The regular expression to match email addresses. Example match:\n *\n * person@place.com\n *\n * @protected\n * @property {RegExp} matcherRegex\n */\n _this.matcherRegex = (function () {\n var specialCharacters = '!#$%&\\'*+\\\\-\\\\/=?^_`{|}~', restrictedSpecialCharacters = '\\\\s\"(),:;<>@\\\\[\\\\]', validCharacters = alphaNumericAndMarksCharsStr + specialCharacters, validRestrictedCharacters = validCharacters + restrictedSpecialCharacters, emailRegex = new RegExp('(?:[' + validCharacters + '](?:[' + validCharacters + ']|\\\\.(?!\\\\.|@))*|\\\\\"[' + validRestrictedCharacters + '.]+\\\\\")@');\n return new RegExp([\n emailRegex.source,\n getDomainNameStr(1),\n '\\\\.', tldRegex.source // '.com', '.net', etc\n ].join(\"\"), 'gi');\n })();\n return _this;\n }\n /**\n * @inheritdoc\n */\n EmailMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, tagBuilder = this.tagBuilder, matches = [], match;\n while ((match = matcherRegex.exec(text)) !== null) {\n var matchedText = match[0];\n matches.push(new EmailMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: match.index,\n email: matchedText\n }));\n }\n return matches;\n };\n return EmailMatcher;\n}(Matcher));\nexport { EmailMatcher };\n\n//# sourceMappingURL=email-matcher.js.map\n","import { alphaCharsStr } from \"../regex-lib\";\n/**\n * @private\n * @class Autolinker.matcher.UrlMatchValidator\n * @singleton\n *\n * Used by Autolinker to filter out false URL positives from the\n * {@link Autolinker.matcher.Url UrlMatcher}.\n *\n * Due to the limitations of regular expressions (including the missing feature\n * of look-behinds in JS regular expressions), we cannot always determine the\n * validity of a given match. This class applies a bit of additional logic to\n * filter out any false positives that have been matched by the\n * {@link Autolinker.matcher.Url UrlMatcher}.\n */\nvar UrlMatchValidator = /** @class */ (function () {\n function UrlMatchValidator() {\n }\n /**\n * Determines if a given URL match found by the {@link Autolinker.matcher.Url UrlMatcher}\n * is valid. Will return `false` for:\n *\n * 1) URL matches which do not have at least have one period ('.') in the\n * domain name (effectively skipping over matches like \"abc:def\").\n * However, URL matches with a protocol will be allowed (ex: 'http://localhost')\n * 2) URL matches which do not have at least one word character in the\n * domain name (effectively skipping over matches like \"git:1.0\").\n * 3) A protocol-relative url match (a URL beginning with '//') whose\n * previous character is a word character (effectively skipping over\n * strings like \"abc//google.com\")\n *\n * Otherwise, returns `true`.\n *\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} protocolUrlMatch The match URL string for a protocol\n * match. Ex: 'http://yahoo.com'. This is used to match something like\n * 'http://localhost', where we won't double check that the domain name\n * has at least one '.' in it.\n * @return {Boolean} `true` if the match given is valid and should be\n * processed, or `false` if the match is invalid and/or should just not be\n * processed.\n */\n UrlMatchValidator.isValid = function (urlMatch, protocolUrlMatch) {\n if ((protocolUrlMatch && !this.isValidUriScheme(protocolUrlMatch)) ||\n this.urlMatchDoesNotHaveProtocolOrDot(urlMatch, protocolUrlMatch) || // At least one period ('.') must exist in the URL match for us to consider it an actual URL, *unless* it was a full protocol match (like 'http://localhost')\n (this.urlMatchDoesNotHaveAtLeastOneWordChar(urlMatch, protocolUrlMatch) && // At least one letter character must exist in the domain name after a protocol match. Ex: skip over something like \"git:1.0\"\n !this.isValidIpAddress(urlMatch)) || // Except if it's an IP address\n this.containsMultipleDots(urlMatch)) {\n return false;\n }\n return true;\n };\n UrlMatchValidator.isValidIpAddress = function (uriSchemeMatch) {\n var newRegex = new RegExp(this.hasFullProtocolRegex.source + this.ipRegex.source);\n var uriScheme = uriSchemeMatch.match(newRegex);\n return uriScheme !== null;\n };\n UrlMatchValidator.containsMultipleDots = function (urlMatch) {\n var stringBeforeSlash = urlMatch;\n if (this.hasFullProtocolRegex.test(urlMatch)) {\n stringBeforeSlash = urlMatch.split('://')[1];\n }\n return stringBeforeSlash.split('/')[0].indexOf(\"..\") > -1;\n };\n /**\n * Determines if the URI scheme is a valid scheme to be autolinked. Returns\n * `false` if the scheme is 'javascript:' or 'vbscript:'\n *\n * @private\n * @param {String} uriSchemeMatch The match URL string for a full URI scheme\n * match. Ex: 'http://yahoo.com' or 'mailto:a@a.com'.\n * @return {Boolean} `true` if the scheme is a valid one, `false` otherwise.\n */\n UrlMatchValidator.isValidUriScheme = function (uriSchemeMatch) {\n var uriSchemeMatchArr = uriSchemeMatch.match(this.uriSchemeRegex), uriScheme = uriSchemeMatchArr && uriSchemeMatchArr[0].toLowerCase();\n return (uriScheme !== 'javascript:' && uriScheme !== 'vbscript:');\n };\n /**\n * Determines if a URL match does not have either:\n *\n * a) a full protocol (i.e. 'http://'), or\n * b) at least one dot ('.') in the domain name (for a non-full-protocol\n * match).\n *\n * Either situation is considered an invalid URL (ex: 'git:d' does not have\n * either the '://' part, or at least one dot in the domain name. If the\n * match was 'git:abc.com', we would consider this valid.)\n *\n * @private\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} protocolUrlMatch The match URL string for a protocol\n * match. Ex: 'http://yahoo.com'. This is used to match something like\n * 'http://localhost', where we won't double check that the domain name\n * has at least one '.' in it.\n * @return {Boolean} `true` if the URL match does not have a full protocol,\n * or at least one dot ('.') in a non-full-protocol match.\n */\n UrlMatchValidator.urlMatchDoesNotHaveProtocolOrDot = function (urlMatch, protocolUrlMatch) {\n return (!!urlMatch && (!protocolUrlMatch || !this.hasFullProtocolRegex.test(protocolUrlMatch)) && urlMatch.indexOf('.') === -1);\n };\n /**\n * Determines if a URL match does not have at least one word character after\n * the protocol (i.e. in the domain name).\n *\n * At least one letter character must exist in the domain name after a\n * protocol match. Ex: skip over something like \"git:1.0\"\n *\n * @private\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} protocolUrlMatch The match URL string for a protocol\n * match. Ex: 'http://yahoo.com'. This is used to know whether or not we\n * have a protocol in the URL string, in order to check for a word\n * character after the protocol separator (':').\n * @return {Boolean} `true` if the URL match does not have at least one word\n * character in it after the protocol, `false` otherwise.\n */\n UrlMatchValidator.urlMatchDoesNotHaveAtLeastOneWordChar = function (urlMatch, protocolUrlMatch) {\n if (urlMatch && protocolUrlMatch) {\n return !this.hasWordCharAfterProtocolRegex.test(urlMatch);\n }\n else {\n return false;\n }\n };\n /**\n * Regex to test for a full protocol, with the two trailing slashes. Ex: 'http://'\n *\n * @private\n * @property {RegExp} hasFullProtocolRegex\n */\n UrlMatchValidator.hasFullProtocolRegex = /^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//;\n /**\n * Regex to find the URI scheme, such as 'mailto:'.\n *\n * This is used to filter out 'javascript:' and 'vbscript:' schemes.\n *\n * @private\n * @property {RegExp} uriSchemeRegex\n */\n UrlMatchValidator.uriSchemeRegex = /^[A-Za-z][-.+A-Za-z0-9]*:/;\n /**\n * Regex to determine if at least one word char exists after the protocol (i.e. after the ':')\n *\n * @private\n * @property {RegExp} hasWordCharAfterProtocolRegex\n */\n UrlMatchValidator.hasWordCharAfterProtocolRegex = new RegExp(\":[^\\\\s]*?[\" + alphaCharsStr + \"]\");\n /**\n * Regex to determine if the string is a valid IP address\n *\n * @private\n * @property {RegExp} ipRegex\n */\n UrlMatchValidator.ipRegex = /[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/;\n return UrlMatchValidator;\n}());\nexport { UrlMatchValidator };\n\n//# sourceMappingURL=url-match-validator.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Matcher } from \"./matcher\";\nimport { alphaNumericCharsStr, alphaNumericAndMarksCharsStr, getDomainNameStr } from \"../regex-lib\";\nimport { tldRegex } from \"./tld-regex\";\nimport { UrlMatch } from \"../match/url-match\";\nimport { UrlMatchValidator } from \"./url-match-validator\";\n/**\n * @class Autolinker.matcher.Url\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find URL matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more details.\n */\nvar UrlMatcher = /** @class */ (function (_super) {\n tslib_1.__extends(UrlMatcher, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match instance,\n * specified in an Object (map).\n */\n function UrlMatcher(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {Object} stripPrefix (required)\n *\n * The Object form of {@link Autolinker#cfg-stripPrefix}.\n */\n _this.stripPrefix = { scheme: true, www: true }; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} stripTrailingSlash (required)\n * @inheritdoc Autolinker#stripTrailingSlash\n */\n _this.stripTrailingSlash = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @cfg {Boolean} decodePercentEncoding (required)\n * @inheritdoc Autolinker#decodePercentEncoding\n */\n _this.decodePercentEncoding = true; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * @protected\n * @property {RegExp} matcherRegex\n *\n * The regular expression to match URLs with an optional scheme, port\n * number, path, query string, and hash anchor.\n *\n * Example matches:\n *\n * http://google.com\n * www.google.com\n * google.com/path/to/file?q1=1&q2=2#myAnchor\n *\n *\n * This regular expression will have the following capturing groups:\n *\n * 1. Group that matches a scheme-prefixed URL (i.e. 'http://google.com').\n * This is used to match scheme URLs with just a single word, such as\n * 'http://localhost', where we won't double check that the domain name\n * has at least one dot ('.') in it.\n * 2. Group that matches a 'www.' prefixed URL. This is only matched if the\n * 'www.' text was not prefixed by a scheme (i.e.: not prefixed by\n * 'http://', 'ftp:', etc.)\n * 3. A protocol-relative ('//') match for the case of a 'www.' prefixed\n * URL. Will be an empty string if it is not a protocol-relative match.\n * We need to know the character before the '//' in order to determine\n * if it is a valid match or the // was in a string we don't want to\n * auto-link.\n * 4. Group that matches a known TLD (top level domain), when a scheme\n * or 'www.'-prefixed domain is not matched.\n * 5. A protocol-relative ('//') match for the case of a known TLD prefixed\n * URL. Will be an empty string if it is not a protocol-relative match.\n * See #3 for more info.\n */\n _this.matcherRegex = (function () {\n var schemeRegex = /(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/, // match protocol, allow in format \"http://\" or \"mailto:\". However, do not match the first part of something like 'link:http://www.google.com' (i.e. don't match \"link:\"). Also, make sure we don't interpret 'google.com:8000' as if 'google.com' was a protocol here (i.e. ignore a trailing port number in this regex)\n wwwRegex = /(?:www\\.)/, // starting with 'www.'\n // Allow optional path, query string, and hash anchor, not ending in the following characters: \"?!:,.;\"\n // http://blog.codinghorror.com/the-problem-with-urls/\n urlSuffixRegex = new RegExp('[/?#](?:[' + alphaNumericAndMarksCharsStr + '\\\\-+&@#/%=~_()|\\'$*\\\\[\\\\]?!:,.;\\u2713]*[' + alphaNumericAndMarksCharsStr + '\\\\-+&@#/%=~_()|\\'$*\\\\[\\\\]\\u2713])?');\n return new RegExp([\n '(?:',\n '(',\n schemeRegex.source,\n getDomainNameStr(2),\n ')',\n '|',\n '(',\n '(//)?',\n wwwRegex.source,\n getDomainNameStr(6),\n ')',\n '|',\n '(',\n '(//)?',\n getDomainNameStr(10) + '\\\\.',\n tldRegex.source,\n '(?![-' + alphaNumericCharsStr + '])',\n ')',\n ')',\n '(?::[0-9]+)?',\n '(?:' + urlSuffixRegex.source + ')?' // match for path, query string, and/or hash anchor - optional\n ].join(\"\"), 'gi');\n })();\n /**\n * A regular expression to use to check the character before a protocol-relative\n * URL match. We don't want to match a protocol-relative URL if it is part\n * of another word.\n *\n * For example, we want to match something like \"Go to: //google.com\",\n * but we don't want to match something like \"abc//google.com\"\n *\n * This regular expression is used to test the character before the '//'.\n *\n * @protected\n * @type {RegExp} wordCharRegExp\n */\n _this.wordCharRegExp = new RegExp('[' + alphaNumericAndMarksCharsStr + ']');\n /**\n * The regular expression to match opening parenthesis in a URL match.\n *\n * This is to determine if we have unbalanced parenthesis in the URL, and to\n * drop the final parenthesis that was matched if so.\n *\n * Ex: The text \"(check out: wikipedia.com/something_(disambiguation))\"\n * should only autolink the inner \"wikipedia.com/something_(disambiguation)\"\n * part, so if we find that we have unbalanced parenthesis, we will drop the\n * last one for the match.\n *\n * @protected\n * @property {RegExp}\n */\n _this.openParensRe = /\\(/g;\n /**\n * The regular expression to match closing parenthesis in a URL match. See\n * {@link #openParensRe} for more information.\n *\n * @protected\n * @property {RegExp}\n */\n _this.closeParensRe = /\\)/g;\n _this.stripPrefix = cfg.stripPrefix;\n _this.stripTrailingSlash = cfg.stripTrailingSlash;\n _this.decodePercentEncoding = cfg.decodePercentEncoding;\n return _this;\n }\n /**\n * @inheritdoc\n */\n UrlMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, stripPrefix = this.stripPrefix, stripTrailingSlash = this.stripTrailingSlash, decodePercentEncoding = this.decodePercentEncoding, tagBuilder = this.tagBuilder, matches = [], match;\n while ((match = matcherRegex.exec(text)) !== null) {\n var matchStr = match[0], schemeUrlMatch = match[1], wwwUrlMatch = match[4], wwwProtocolRelativeMatch = match[5], \n //tldUrlMatch = match[ 8 ], -- not needed at the moment\n tldProtocolRelativeMatch = match[9], offset = match.index, protocolRelativeMatch = wwwProtocolRelativeMatch || tldProtocolRelativeMatch, prevChar = text.charAt(offset - 1);\n if (!UrlMatchValidator.isValid(matchStr, schemeUrlMatch)) {\n continue;\n }\n // If the match is preceded by an '@' character, then it is either\n // an email address or a username. Skip these types of matches.\n if (offset > 0 && prevChar === '@') {\n continue;\n }\n // If it's a protocol-relative '//' match, but the character before the '//'\n // was a word character (i.e. a letter/number), then we found the '//' in the\n // middle of another word (such as \"asdf//asdf.com\"). In this case, skip the\n // match.\n if (offset > 0 && protocolRelativeMatch && this.wordCharRegExp.test(prevChar)) {\n continue;\n }\n if (/\\?$/.test(matchStr)) {\n matchStr = matchStr.substr(0, matchStr.length - 1);\n }\n // Handle a closing parenthesis at the end of the match, and exclude\n // it if there is not a matching open parenthesis in the match\n // itself.\n if (this.matchHasUnbalancedClosingParen(matchStr)) {\n matchStr = matchStr.substr(0, matchStr.length - 1); // remove the trailing \")\"\n }\n else {\n // Handle an invalid character after the TLD\n var pos = this.matchHasInvalidCharAfterTld(matchStr, schemeUrlMatch);\n if (pos > -1) {\n matchStr = matchStr.substr(0, pos); // remove the trailing invalid chars\n }\n }\n var urlMatchType = schemeUrlMatch ? 'scheme' : (wwwUrlMatch ? 'www' : 'tld'), protocolUrlMatch = !!schemeUrlMatch;\n matches.push(new UrlMatch({\n tagBuilder: tagBuilder,\n matchedText: matchStr,\n offset: offset,\n urlMatchType: urlMatchType,\n url: matchStr,\n protocolUrlMatch: protocolUrlMatch,\n protocolRelativeMatch: !!protocolRelativeMatch,\n stripPrefix: stripPrefix,\n stripTrailingSlash: stripTrailingSlash,\n decodePercentEncoding: decodePercentEncoding,\n }));\n }\n return matches;\n };\n /**\n * Determines if a match found has an unmatched closing parenthesis. If so,\n * this parenthesis will be removed from the match itself, and appended\n * after the generated anchor tag.\n *\n * A match may have an extra closing parenthesis at the end of the match\n * because the regular expression must include parenthesis for URLs such as\n * \"wikipedia.com/something_(disambiguation)\", which should be auto-linked.\n *\n * However, an extra parenthesis *will* be included when the URL itself is\n * wrapped in parenthesis, such as in the case of \"(wikipedia.com/something_(disambiguation))\".\n * In this case, the last closing parenthesis should *not* be part of the\n * URL itself, and this method will return `true`.\n *\n * @protected\n * @param {String} matchStr The full match string from the {@link #matcherRegex}.\n * @return {Boolean} `true` if there is an unbalanced closing parenthesis at\n * the end of the `matchStr`, `false` otherwise.\n */\n UrlMatcher.prototype.matchHasUnbalancedClosingParen = function (matchStr) {\n var lastChar = matchStr.charAt(matchStr.length - 1);\n if (lastChar === ')') {\n var openParensMatch = matchStr.match(this.openParensRe), closeParensMatch = matchStr.match(this.closeParensRe), numOpenParens = (openParensMatch && openParensMatch.length) || 0, numCloseParens = (closeParensMatch && closeParensMatch.length) || 0;\n if (numOpenParens < numCloseParens) {\n return true;\n }\n }\n return false;\n };\n /**\n * Determine if there's an invalid character after the TLD in a URL. Valid\n * characters after TLD are ':/?#'. Exclude scheme matched URLs from this\n * check.\n *\n * @protected\n * @param {String} urlMatch The matched URL, if there was one. Will be an\n * empty string if the match is not a URL match.\n * @param {String} schemeUrlMatch The match URL string for a scheme\n * match. Ex: 'http://yahoo.com'. This is used to match something like\n * 'http://localhost', where we won't double check that the domain name\n * has at least one '.' in it.\n * @return {Number} the position where the invalid character was found. If\n * no such character was found, returns -1\n */\n UrlMatcher.prototype.matchHasInvalidCharAfterTld = function (urlMatch, schemeUrlMatch) {\n if (!urlMatch) {\n return -1;\n }\n var offset = 0;\n if (schemeUrlMatch) {\n offset = urlMatch.indexOf(':');\n urlMatch = urlMatch.slice(offset);\n }\n var re = new RegExp(\"^((.?\\/\\/)?[-.\" + alphaNumericAndMarksCharsStr + \"]*[-\" + alphaNumericAndMarksCharsStr + \"]\\\\.[-\" + alphaNumericAndMarksCharsStr + \"]+)\");\n var res = re.exec(urlMatch);\n if (res === null) {\n return -1;\n }\n offset += res[1].length;\n urlMatch = urlMatch.slice(res[1].length);\n if (/^[^-.A-Za-z0-9:\\/?#]/.test(urlMatch)) {\n return offset;\n }\n return -1;\n };\n return UrlMatcher;\n}(Matcher));\nexport { UrlMatcher };\n\n//# sourceMappingURL=url-matcher.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Matcher } from \"./matcher\";\nimport { alphaNumericAndMarksCharsStr } from \"../regex-lib\";\nimport { HashtagMatch } from \"../match/hashtag-match\";\n/**\n * @class Autolinker.matcher.Hashtag\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find HashtagMatch matches in an input string.\n */\nvar HashtagMatcher = /** @class */ (function (_super) {\n tslib_1.__extends(HashtagMatcher, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match instance,\n * specified in an Object (map).\n */\n function HashtagMatcher(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {String} serviceName\n *\n * The service to point hashtag matches to. See {@link Autolinker#hashtag}\n * for available values.\n */\n _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * The regular expression to match Hashtags. Example match:\n *\n * #asdf\n *\n * @protected\n * @property {RegExp} matcherRegex\n */\n _this.matcherRegex = new RegExp(\"#[_\" + alphaNumericAndMarksCharsStr + \"]{1,139}(?![_\" + alphaNumericAndMarksCharsStr + \"])\", 'g'); // lookahead used to make sure we don't match something above 139 characters\n /**\n * The regular expression to use to check the character before a username match to\n * make sure we didn't accidentally match an email address.\n *\n * For example, the string \"asdf@asdf.com\" should not match \"@asdf\" as a username.\n *\n * @protected\n * @property {RegExp} nonWordCharRegex\n */\n _this.nonWordCharRegex = new RegExp('[^' + alphaNumericAndMarksCharsStr + ']');\n _this.serviceName = cfg.serviceName;\n return _this;\n }\n /**\n * @inheritdoc\n */\n HashtagMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, nonWordCharRegex = this.nonWordCharRegex, serviceName = this.serviceName, tagBuilder = this.tagBuilder, matches = [], match;\n while ((match = matcherRegex.exec(text)) !== null) {\n var offset = match.index, prevChar = text.charAt(offset - 1);\n // If we found the match at the beginning of the string, or we found the match\n // and there is a whitespace char in front of it (meaning it is not a '#' char\n // in the middle of a word), then it is a hashtag match.\n if (offset === 0 || nonWordCharRegex.test(prevChar)) {\n var matchedText = match[0], hashtag = match[0].slice(1); // strip off the '#' character at the beginning\n matches.push(new HashtagMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: offset,\n serviceName: serviceName,\n hashtag: hashtag\n }));\n }\n }\n return matches;\n };\n return HashtagMatcher;\n}(Matcher));\nexport { HashtagMatcher };\n\n//# sourceMappingURL=hashtag-matcher.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Matcher } from \"./matcher\";\nimport { PhoneMatch } from \"../match/phone-match\";\n/**\n * @class Autolinker.matcher.Phone\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find Phone number matches in an input string.\n *\n * See this class's superclass ({@link Autolinker.matcher.Matcher}) for more\n * details.\n */\nvar PhoneMatcher = /** @class */ (function (_super) {\n tslib_1.__extends(PhoneMatcher, _super);\n function PhoneMatcher() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /**\n * The regular expression to match Phone numbers. Example match:\n *\n * (123) 456-7890\n *\n * This regular expression has the following capturing groups:\n *\n * 1 or 2. The prefixed '+' sign, if there is one.\n *\n * @protected\n * @property {RegExp} matcherRegex\n */\n _this.matcherRegex = /(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/g;\n return _this;\n }\n // ex: (123) 456-7890, 123 456 7890, 123-456-7890, +18004441234,,;,10226420346#,\n // +1 (800) 444 1234, 10226420346#, 1-800-444-1234,1022,64,20346#\n /**\n * @inheritdoc\n */\n PhoneMatcher.prototype.parseMatches = function (text) {\n var matcherRegex = this.matcherRegex, tagBuilder = this.tagBuilder, matches = [], match;\n while ((match = matcherRegex.exec(text)) !== null) {\n // Remove non-numeric values from phone number string\n var matchedText = match[0], cleanNumber = matchedText.replace(/[^0-9,;#]/g, ''), // strip out non-digit characters exclude comma semicolon and #\n plusSign = !!(match[1] || match[2]), // match[ 1 ] or match[ 2 ] is the prefixed plus sign, if there is one\n before = match.index == 0 ? '' : text.substr(match.index - 1, 1), after = text.substr(match.index + matchedText.length, 1), contextClear = !before.match(/\\d/) && !after.match(/\\d/);\n if (this.testMatch(match[3]) && this.testMatch(matchedText) && contextClear) {\n matches.push(new PhoneMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: match.index,\n number: cleanNumber,\n plusSign: plusSign\n }));\n }\n }\n return matches;\n };\n PhoneMatcher.prototype.testMatch = function (text) {\n return /\\D/.test(text);\n };\n return PhoneMatcher;\n}(Matcher));\nexport { PhoneMatcher };\n\n//# sourceMappingURL=phone-matcher.js.map\n","import * as tslib_1 from \"tslib\";\nimport { Matcher } from \"./matcher\";\nimport { alphaNumericAndMarksCharsStr } from \"../regex-lib\";\nimport { MentionMatch } from \"../match/mention-match\";\n/**\n * @class Autolinker.matcher.Mention\n * @extends Autolinker.matcher.Matcher\n *\n * Matcher to find/replace username matches in an input string.\n */\nvar MentionMatcher = /** @class */ (function (_super) {\n tslib_1.__extends(MentionMatcher, _super);\n /**\n * @method constructor\n * @param {Object} cfg The configuration properties for the Match instance,\n * specified in an Object (map).\n */\n function MentionMatcher(cfg) {\n var _this = _super.call(this, cfg) || this;\n /**\n * @cfg {'twitter'/'instagram'/'soundcloud'} protected\n *\n * The name of service to link @mentions to.\n *\n * Valid values are: 'twitter', 'instagram', or 'soundcloud'\n */\n _this.serviceName = 'twitter'; // default value just to get the above doc comment in the ES5 output and documentation generator\n /**\n * Hash of regular expression to match username handles. Example match:\n *\n * @asdf\n *\n * @private\n * @property {Object} matcherRegexes\n */\n _this.matcherRegexes = {\n 'twitter': new RegExp(\"@[_\" + alphaNumericAndMarksCharsStr + \"]{1,50}(?![_\" + alphaNumericAndMarksCharsStr + \"])\", 'g'),\n 'instagram': new RegExp(\"@[_.\" + alphaNumericAndMarksCharsStr + \"]{1,30}(?![_\" + alphaNumericAndMarksCharsStr + \"])\", 'g'),\n 'soundcloud': new RegExp(\"@[-_.\" + alphaNumericAndMarksCharsStr + \"]{1,50}(?![-_\" + alphaNumericAndMarksCharsStr + \"])\", 'g') // lookahead used to make sure we don't match something above 50 characters\n };\n /**\n * The regular expression to use to check the character before a username match to\n * make sure we didn't accidentally match an email address.\n *\n * For example, the string \"asdf@asdf.com\" should not match \"@asdf\" as a username.\n *\n * @private\n * @property {RegExp} nonWordCharRegex\n */\n _this.nonWordCharRegex = new RegExp('[^' + alphaNumericAndMarksCharsStr + ']');\n _this.serviceName = cfg.serviceName;\n return _this;\n }\n /**\n * @inheritdoc\n */\n MentionMatcher.prototype.parseMatches = function (text) {\n var serviceName = this.serviceName, matcherRegex = this.matcherRegexes[this.serviceName], nonWordCharRegex = this.nonWordCharRegex, tagBuilder = this.tagBuilder, matches = [], match;\n if (!matcherRegex) {\n return matches;\n }\n while ((match = matcherRegex.exec(text)) !== null) {\n var offset = match.index, prevChar = text.charAt(offset - 1);\n // If we found the match at the beginning of the string, or we found the match\n // and there is a whitespace char in front of it (meaning it is not an email\n // address), then it is a username match.\n if (offset === 0 || nonWordCharRegex.test(prevChar)) {\n var matchedText = match[0].replace(/\\.+$/g, ''), // strip off trailing .\n mention = matchedText.slice(1); // strip off the '@' character at the beginning\n matches.push(new MentionMatch({\n tagBuilder: tagBuilder,\n matchedText: matchedText,\n offset: offset,\n serviceName: serviceName,\n mention: mention\n }));\n }\n }\n return matches;\n };\n return MentionMatcher;\n}(Matcher));\nexport { MentionMatcher };\n\n//# sourceMappingURL=mention-matcher.js.map\n","import * as tslib_1 from \"tslib\";\n// For debugging: search for other \"For debugging\" lines\n// import CliTable from 'cli-table';\n/**\n * Parses an HTML string, calling the callbacks to notify of tags and text.\n *\n * ## History\n *\n * This file previously used a regular expression to find html tags in the input\n * text. Unfortunately, we ran into a bunch of catastrophic backtracking issues\n * with certain input text, causing Autolinker to either hang or just take a\n * really long time to parse the string.\n *\n * The current code is intended to be a O(n) algorithm that walks through\n * the string in one pass, and tries to be as cheap as possible. We don't need\n * to implement the full HTML spec, but rather simply determine where the string\n * looks like an HTML tag, and where it looks like text (so that we can autolink\n * that).\n *\n * This state machine parser is intended just to be a simple but performant\n * parser of HTML for the subset of requirements we have. We simply need to:\n *\n * 1. Determine where HTML tags are\n * 2. Determine the tag name (Autolinker specifically only cares about ,\n * - + @@ -22,9 +22,9 @@ -
Autolinker v2.2.2 API Docs
+
Autolinker v3.0.0 API Docs
-
Autolinker v2.2.2 API Docs
+
Autolinker v3.0.0 API Docs