"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.shouldAutoLinkifyMatch = shouldAutoLinkifyMatch;
exports.shouldAutoLinkifyTld = shouldAutoLinkifyTld;
/** Created by scanning the Wikipedia page for all TLDs and selecting those that are common filenames, along
 * with customer complaints */
var tldsToNotAutoLinkify = ['name', 'zip', 'doc', 'mov',
// Ensure common 2 character file extensions aren't linkified without https prefix
'md',
// Postscript
'ps',
// C++
'cc',
// C#
'cs',
// f#
'fs',
// Go
'go',
// JavaScript
'js',
// Perl
'pl',
// Perl module
'pm',
// Python
'py',
// Ruby
'rb',
// Rust
'rs',
// Bash
'sh',
// Typescript
'ts',
// C#
'cs',
// Visual Basic
'vb'];

/**
 * Decide if a url should auto linkify, based on the TLD.
 * If URL is in a list of suspicious TLDs (eg. README.md), returns false
 * If URL is prefixed with http:// or https:// or www, returns true (allows linkify), as user intention is clear
 * this is a URL.
 * If the link is invalid (eg. missing a TLD), returns true (allows linkify)
 *
 * @param url Link that hasn't been already prefixed with http://, https:// or www.
 */
function shouldAutoLinkifyTld(url) {
  var startsWithHttpHttps = /^https?:\/\//.test(url);
  if (startsWithHttpHttps) {
    return true;
  }
  var startsWithWWW = /^www\./.test(url);
  if (startsWithWWW) {
    return true;
  }
  try {
    var hostname = new URL("https://".concat(url)).hostname;
    var parts = hostname.split('.');
    var tld = parts.length > 1 ? parts[parts.length - 1] : null;
    if (parts[0] === '') {
      // If the domain is an empty string (ie the link is `.com`), it's invalid, so
      // automatically return true
      return true;
    }
    if (!tld) {
      return true;
    }
    return !tldsToNotAutoLinkify.includes(tld);
  } catch (e) {
    return true;
  }
}

/**
 * Check if url match uses tld we don't want to auto linkify
 * @param match Linkify Match
 * @returns True if should auto linkify, false otherwise
 */
function shouldAutoLinkifyMatch(match) {
  return shouldAutoLinkifyTld(match.raw);
}