UNPKG

@atlaskit/editor-common

Version:

A package that contains common classes and components for editor and renderer

87 lines (84 loc) 2.09 kB
"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); }