2026-07-25 08:10:48 +00:00
// Module ID: 4569
2026-07-27 11:26:19 +00:00
// Function ID: 40066
2026-07-20 16:05:17 +00:00
// Name: _createForOfIteratorHelperLoose
2026-07-25 08:10:48 +00:00
// Dependencies: [57, 1362, 4570, 4564, 1327, 4115, 1443, 4571, 3830, 22, 2]
2026-07-20 16:05:17 +00:00
2026-07-25 08:10:48 +00:00
// Module 4569 (_createForOfIteratorHelperLoose)
2026-07-23 10:11:24 +00:00
import _slicedToArray from "_slicedToArray" ;
import importDefaultResult from "priv" ;
const require = arg1 ;
function _createForOfIteratorHelperLoose ( iterable ) {
let closure_0 = iterable ;
iterable = "undefined" !== typeof Symbol ;
if ( iterable ) {
2026-07-20 16:05:17 +00:00
const _Symbol = Symbol ;
2026-07-23 10:11:24 +00:00
iterable = iterable [ Symbol . iterator ] ;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
if ( ! iterable ) {
iterable = iterable [ Symbol . iterator ] ;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
if ( iterable ) {
const iter = iterable . call ( iterable ) ;
2026-07-20 16:05:17 +00:00
const next = iter . next ;
return next . bind ( iter ) ;
} else {
const _Array = Array ;
2026-07-23 10:11:24 +00:00
let tmp = iterable ;
if ( ! Array . isArray ( iterable ) ) {
2026-07-20 16:05:17 +00:00
let tmp2 ;
2026-07-23 10:11:24 +00:00
if ( iterable ) {
if ( "string" === typeof iterable ) {
tmp2 = _arrayLikeToArray ( iterable , undefined ) ;
2026-07-20 16:05:17 +00:00
} else {
const toString = { } . toString ;
2026-07-23 10:11:24 +00:00
const substr = toString . call ( iterable ) . slice ( 8 , - 1 ) ;
2026-07-20 16:05:17 +00:00
let name = substr ;
if ( tmp3 ) {
2026-07-23 10:11:24 +00:00
name = iterable . constructor . name ;
2026-07-20 16:05:17 +00:00
}
if ( "Map" !== name ) {
if ( "Set" !== name ) {
if ( "Arguments" === name ) {
2026-07-23 10:11:24 +00:00
let arr = _arrayLikeToArray ( iterable , undefined ) ;
2026-07-20 16:05:17 +00:00
} else {
2026-07-23 10:11:24 +00:00
let obj = /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/ ;
2026-07-20 16:05:17 +00:00
}
}
tmp2 = arr ;
}
const _Array2 = Array ;
2026-07-23 10:11:24 +00:00
arr = Array . from ( iterable ) ;
const callResult = toString . call ( iterable ) ;
tmp3 = "Object" === substr && iterable . constructor ;
2026-07-20 16:05:17 +00:00
}
}
tmp = tmp2 ;
if ( ! tmp2 ) {
const _TypeError = TypeError ;
const typeError = new TypeError ( "Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method." ) ;
throw typeError ;
}
}
if ( tmp ) {
2026-07-23 10:11:24 +00:00
closure_0 = tmp ;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
let c1 = 0 ;
2026-07-20 16:05:17 +00:00
return ( ) = > {
2026-07-23 10:11:24 +00:00
if ( closure_1 >= length . length ) {
2026-07-20 16:05:17 +00:00
let obj = { done : true } ;
} else {
obj = { done : false } ;
closure_1 = tmp3 + 1 ;
2026-07-23 10:11:24 +00:00
obj . value = length [ + closure_1 ] ;
2026-07-20 16:05:17 +00:00
}
return obj ;
} ;
}
}
function _arrayLikeToArray ( arg0 , arg1 ) {
let length ;
if ( tmp ) {
length = arg0 . length ;
}
const ArrayResult = Array ( length ) ;
for ( let num = 0 ; num < length ; num = num + 1 ) {
ArrayResult [ num ] = arg0 [ num ] ;
}
return ArrayResult ;
}
2026-07-23 10:11:24 +00:00
function sanitizeWithCache ( outer1_0 ) {
const value = importDefaultResult . get ( outer1_0 ) ;
2026-07-20 16:05:17 +00:00
if ( null != value ) {
return value ;
} else {
2026-07-25 08:10:48 +00:00
let obj = require ( 4570 ) /* makeMatcher */ ;
2026-07-23 10:11:24 +00:00
const sanitizeWhitespaceResult = obj . sanitizeWhitespace ( outer1_0 ) ;
2026-07-25 08:10:48 +00:00
obj = { whitespaceSanitized : sanitizeWhitespaceResult , fullySanitized : require ( 4570 ) /* makeMatcher */ . sanitizeUnicodeConfusables ( sanitizeWhitespaceResult ) } ;
2026-07-23 10:11:24 +00:00
const result = importDefaultResult . set ( outer1_0 , obj ) ;
2026-07-20 16:05:17 +00:00
return obj ;
}
}
function validateContentTypes ( content , items , items2 ) {
items = items2 ;
if ( items2 === undefined ) {
items = [ ] ;
}
let tmp = content ;
if ( ! Array . isArray ( content ) ) {
const items1 = [ content ] ;
tmp = items1 ;
}
const tmp2 = _createForOfIteratorHelperLoose ( tmp ) ;
let iter = tmp2 ( ) ;
if ( ! iter . done ) {
const value = iter . value ;
while ( undefined !== value ) {
if ( ! items . includes ( value . type ) ) {
break ;
} else {
2026-07-23 10:11:24 +00:00
let tmp3 = require ;
2026-07-20 16:05:17 +00:00
let tmp4 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( value . type === require ( 4564 ) /* AST_KEY */ . AST_KEY . INLINE_CODE ) {
2026-07-20 16:05:17 +00:00
items2 = [ ] ;
let tmp5 = items2 ;
let tmp6 = items ;
let num = 0 ;
let tmp7 = items2 ;
let tmp8 = items ;
let arraySpreadResult = HermesBuiltin . arraySpread ( items , HermesBuiltin . arraySpread ( items , 0 ) ) ;
let tmp10 = validateContentTypes ;
if ( null == validateContentTypes ( value . validationChildContent , items2 ) ) {
return null ;
}
}
let _Array = Array ;
if ( Array . isArray ( value . content ) ) {
let tmp11 = validateContentTypes ;
if ( null == validateContentTypes ( value . content , items ) ) {
return null ;
}
}
let iter2 = tmp2 ( ) ;
iter = iter2 ;
}
}
return null ;
}
return tmp ;
}
function getRawText ( content ) {
const tmp = _createForOfIteratorHelperLoose ( content ) ;
const iter = tmp ( ) ;
let iter2 = iter ;
let str = "" ;
let str2 = "" ;
if ( ! iter . done ) {
while ( true ) {
let value = iter2 . value ;
let type = value . type ;
2026-07-23 10:11:24 +00:00
let tmp2 = require ;
2026-07-20 16:05:17 +00:00
let tmp3 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . TEXT !== type ) {
2026-07-23 10:11:24 +00:00
let tmp13 = require ;
2026-07-20 16:05:17 +00:00
let tmp14 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . INLINE_CODE !== type ) {
2026-07-23 10:11:24 +00:00
let tmp15 = require ;
2026-07-20 16:05:17 +00:00
let tmp16 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . CUSTOM_EMOJI === type ) {
2026-07-20 16:05:17 +00:00
let text = ` ${ value . name } ` ;
} else {
2026-07-23 10:11:24 +00:00
let tmp17 = require ;
2026-07-20 16:05:17 +00:00
let tmp18 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . EMOJI === type ) {
2026-07-20 16:05:17 +00:00
text = ` ${ value . surrogate } ` ;
} else {
2026-07-23 10:11:24 +00:00
let tmp19 = require ;
2026-07-20 16:05:17 +00:00
let tmp20 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . LINE_BREAK === type ) {
2026-07-20 16:05:17 +00:00
text = `
` ;
} else {
2026-07-23 10:11:24 +00:00
let tmp21 = require ;
2026-07-20 16:05:17 +00:00
let tmp22 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . STRONG !== type ) {
2026-07-23 10:11:24 +00:00
let tmp23 = require ;
2026-07-20 16:05:17 +00:00
let tmp24 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . ITALICS !== type ) {
2026-07-23 10:11:24 +00:00
let tmp25 = require ;
2026-07-20 16:05:17 +00:00
let tmp26 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . UNDERLINE !== type ) {
2026-07-23 10:11:24 +00:00
let tmp27 = require ;
2026-07-20 16:05:17 +00:00
let tmp28 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . STRIKETHROUGH !== type ) {
2026-07-23 10:11:24 +00:00
let tmp29 = require ;
2026-07-20 16:05:17 +00:00
let tmp30 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . SPOILER !== type ) {
2026-07-23 10:11:24 +00:00
let tmp31 = require ;
2026-07-20 16:05:17 +00:00
let tmp32 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . TIMESTAMP === type ) {
2026-07-20 16:05:17 +00:00
text = ` <timestamp> ` ;
} else {
2026-07-23 10:11:24 +00:00
let tmp33 = require ;
2026-07-20 16:05:17 +00:00
let tmp34 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . BLOCK_QUOTE !== type ) {
2026-07-23 10:11:24 +00:00
let tmp35 = require ;
2026-07-20 16:05:17 +00:00
let tmp36 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . LIST !== type ) {
2026-07-23 10:11:24 +00:00
let tmp4 = require ;
2026-07-20 16:05:17 +00:00
let tmp5 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . HEADING !== type ) {
2026-07-23 10:11:24 +00:00
let tmp6 = require ;
2026-07-20 16:05:17 +00:00
let tmp7 = dependencyMap ;
2026-07-25 08:10:48 +00:00
if ( require ( 4564 ) /* AST_KEY */ . AST_KEY . SUBTEXT !== type ) {
2026-07-23 10:11:24 +00:00
let tmp8 = require ;
2026-07-20 16:05:17 +00:00
let tmp9 = dependencyMap ;
2026-07-23 10:11:24 +00:00
let obj = require ( 1327 ) /* isDiscordFrontendDevelopment */ ;
2026-07-20 16:05:17 +00:00
let assertNeverResult = obj . assertNever ( value . type ) ;
text = str ;
}
}
}
}
let _HermesInternal = HermesInternal ;
text = str + "<" + value . type + "Content>" ;
}
}
}
}
}
}
let tmp12 = getRawText ;
text = str + getRawText ( value . content ) ;
}
}
}
}
let iter3 = tmp ( ) ;
str = text ;
iter2 = iter3 ;
str2 = text ;
if ( iter3 . done ) {
break ;
}
}
text = str + value . content ;
}
}
return str2 ;
}
2026-07-23 10:11:24 +00:00
function isSuspiciousUrl ( outer1_0 ) {
if ( obj . isSuspiciousCodedLink ( outer1_0 ) ) {
2026-07-20 16:05:17 +00:00
return true ;
2026-07-23 10:11:24 +00:00
} else if ( sanitizeWithCache ( outer1_0 ) . whitespaceSanitized !== outer1_0 ) {
2026-07-20 16:05:17 +00:00
return true ;
} else {
2026-07-23 10:11:24 +00:00
const toURLSafeResult = importDefault ( 1443 ) . toURLSafe ( outer1_0 ) ;
2026-07-20 16:05:17 +00:00
if ( null == toURLSafeResult ) {
return true ;
} else {
if ( "http:" !== toURLSafeResult . protocol ) {
if ( "https:" !== toURLSafeResult . protocol ) {
return false ;
}
}
2026-07-23 10:11:24 +00:00
const parts = outer1_0 . split ( "/" ) ;
2026-07-20 16:05:17 +00:00
let tmp2 = parts . length < 3 ;
if ( ! tmp2 ) {
let tmp3 = "" !== parts [ 1 ] ;
if ( ! tmp3 ) {
2026-07-23 10:11:24 +00:00
tmp3 = importDefault ( 1443 ) . safeDecodeURIComponent ( parts [ 2 ] ) !== parts [ 2 ] ;
const obj2 = importDefault ( 1443 ) ;
2026-07-20 16:05:17 +00:00
}
tmp2 = tmp3 ;
}
return tmp2 ;
}
2026-07-23 10:11:24 +00:00
const obj3 = importDefault ( 1443 ) ;
2026-07-20 16:05:17 +00:00
}
2026-07-25 08:10:48 +00:00
obj = require ( 4115 ) /* _createForOfIteratorHelperLoose */ ;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
function punycodeLink ( outer1_0 ) {
if ( isSuspiciousUrl ( outer1_0 ) ) {
2026-07-20 16:05:17 +00:00
const _Error3 = Error ;
const _JSON = JSON ;
2026-07-23 10:11:24 +00:00
const error = new Error ( "Rejected due to suspicious characters in URL: " + JSON . stringify ( outer1_0 ) ) ;
2026-07-20 16:05:17 +00:00
throw error ;
} else {
const _URL = URL ;
2026-07-23 10:11:24 +00:00
const uRL = new URL ( outer1_0 ) ;
2026-07-20 16:05:17 +00:00
const protocol = uRL . protocol ;
let str2 = "" ;
if ( null != protocol ) {
str2 = protocol ;
}
if ( items . includes ( str2 . toLowerCase ( ) ) ) {
if ( "http:" === tmp9 ) {
const _Error2 = Error ;
const error1 = new Error ( "no hostname" ) ;
throw error1 ;
}
2026-07-25 08:10:48 +00:00
let obj = importDefault ( 4571 ) ;
2026-07-20 16:05:17 +00:00
tmp6 . hostname = obj . toASCII ( tmp6 . hostname . toLowerCase ( ) ) ;
tmp6 . username = "" ;
tmp6 . password = "" ;
2026-07-25 08:10:48 +00:00
obj = { target : require ( 4570 ) /* makeMatcher */ . safelyMakeUrlHumanReadable ( tmp6 ) } ;
const obj2 = require ( 4570 ) /* makeMatcher */ ;
2026-07-20 16:05:17 +00:00
const str7 = tmp6 . hostname ;
2026-07-25 08:10:48 +00:00
obj . displayTarget = require ( 4570 ) /* makeMatcher */ . safelyMakeUrlHumanReadable ( tmp6 ) ;
2026-07-20 16:05:17 +00:00
return obj ;
} else {
const _Error = Error ;
const error2 = new Error ( "Provided protocol is not allowed: " + tmp9 ) ;
throw error2 ;
}
}
}
let obj = { max : 50 } ;
importDefaultResult = new importDefaultResult ( obj ) ;
2026-07-23 10:11:24 +00:00
let items = [ "http:" , "https:" , "discord:" , "tel:" , "sms:" , "mailto:" ] ;
let items1 = [ require ( "AST_KEY" ) . AST_KEY . TEXT , require ( "AST_KEY" ) . AST_KEY . UNDERLINE , require ( "AST_KEY" ) . AST_KEY . STRONG , require ( "AST_KEY" ) . AST_KEY . ITALICS , require ( "AST_KEY" ) . AST_KEY . STRIKETHROUGH , require ( "AST_KEY" ) . AST_KEY . INLINE_CODE , require ( "AST_KEY" ) . AST_KEY . SPOILER , require ( "AST_KEY" ) . AST_KEY . LINE_BREAK , require ( "AST_KEY" ) . AST_KEY . TIMESTAMP ] ;
let items2 = [ . . . items1 , require ( "AST_KEY" ) . AST_KEY . EMOJI , require ( "AST_KEY" ) . AST_KEY . CUSTOM_EMOJI ] ;
const items3 = [ require ( "AST_KEY" ) . AST_KEY . LIST , require ( "AST_KEY" ) . AST_KEY . HEADING , require ( "AST_KEY" ) . AST_KEY . BLOCK_QUOTE , require ( "AST_KEY" ) . AST_KEY . SUBTEXT ] ;
const items4 = [ require ( "AST_KEY" ) . AST_KEY . TEXT ] ;
const items5 = [ require ( "AST_KEY" ) . AST_KEY . UNDERLINE , require ( "AST_KEY" ) . AST_KEY . STRONG , require ( "AST_KEY" ) . AST_KEY . ITALICS , require ( "AST_KEY" ) . AST_KEY . STRIKETHROUGH , require ( "AST_KEY" ) . AST_KEY . INLINE_CODE , require ( "AST_KEY" ) . AST_KEY . SPOILER , require ( "AST_KEY" ) . AST_KEY . LINE_BREAK , require ( "AST_KEY" ) . AST_KEY . TIMESTAMP , require ( "AST_KEY" ) . AST_KEY . EMOJI , require ( "AST_KEY" ) . AST_KEY . CUSTOM_EMOJI , require ( "AST_KEY" ) . AST_KEY . LIST , require ( "AST_KEY" ) . AST_KEY . HEADING , require ( "AST_KEY" ) . AST_KEY . BLOCK_QUOTE , require ( "AST_KEY" ) . AST_KEY . SUBTEXT ] ;
2026-07-20 16:05:17 +00:00
obj = { } ;
2026-07-23 10:11:24 +00:00
let merged = Object . assign ( require ( "t" ) . defaultRules . link ) ;
2026-07-20 16:05:17 +00:00
obj [ "match" ] = function match ( arr , allowLinks ) {
if ( allowLinks . allowLinks ) {
if ( - 1 === arr . indexOf ( "](" ) ) {
return null ;
} else {
let num4 = 0 ;
let num5 = 0 ;
let num3 = 0 ;
if ( 0 < arr . length ) {
while ( true ) {
let tmp2 = arr [ num3 ] ;
let tmp3 = num4 ;
let num2 = 0 ;
if ( ")" !== tmp2 ) {
if ( "[" === tmp2 ) {
let sum = num4 + 1 ;
if ( sum > 10 ) {
break ;
}
} else if ( "]" === tmp2 ) {
sum = num4 ;
if ( num4 > 0 ) {
sum = num4 - 1 ;
}
} else {
sum = num4 ;
tmp3 = num4 ;
num2 = num5 ;
}
num2 = num5 + 1 ;
tmp3 = sum ;
if ( num2 > 200 ) {
let tmp8 = null ;
return null ;
}
}
num3 = num3 + 1 ;
num4 = tmp3 ;
num5 = num2 ;
}
return null ;
}
2026-07-25 08:10:48 +00:00
return importDefault ( 3830 ) . defaultRules . link . match ( arr , allowLinks , arg2 ) ;
2026-07-20 16:05:17 +00:00
}
} else {
return null ;
}
} ;
obj [ "parse" ] = function parse ( arg0 , rules , allowEmojiLinks ) {
function renderIndividualParts() {
2026-07-23 10:11:24 +00:00
return { type : callback ( outer1_2 [ 3 ] ) . AST_KEY . TEXT , content : callback } ;
2026-07-20 16:05:17 +00:00
}
2026-07-23 10:11:24 +00:00
const tmp = callback ( arg0 , 4 ) ;
const _require = tmp [ 0 ] ;
2026-07-20 16:05:17 +00:00
if ( isSuspiciousUrl ( tmp [ 2 ] ) ) {
return renderIndividualParts ( ) ;
} else {
const tmp7 = sanitizeWithCache ( tmp2 ) ;
let str = "" ;
if ( null != tmp4 ) {
str = tmp4 ;
}
const tmp5Result = sanitizeWithCache ( str ) ;
const tmp5 = sanitizeWithCache ;
const tmp6 = sanitizeWithCache ( tmp3 ) ;
const trimmed = str3 . trim ( ) ;
if ( 0 !== str2 . trim ( ) . length ) {
if ( 0 !== trimmed . length ) {
2026-07-25 08:10:48 +00:00
const tmp38 = punycodeLink ( importDefault ( 3830 ) . unescapeUrl ( tmp3 ) ) ;
let tmp12 = importDefault ( 4115 ) ( tmp2 ) . length > 0 ;
2026-07-20 16:05:17 +00:00
if ( ! tmp12 ) {
2026-07-25 08:10:48 +00:00
tmp12 = importDefault ( 4115 ) ( tmp4 ) . length > 0 ;
2026-07-20 16:05:17 +00:00
}
if ( null != tmp38 ) {
if ( ! tmp12 ) {
let obj = { } ;
const merged = Object . assign ( allowEmojiLinks ) ;
obj [ "allowEscape" ] = false ;
obj [ "parseInlineCodeChildContent" ] = true ;
const tmp16 = allowEmojiLinks . allowEmojiLinks ? items2 : items1 ;
const items = [ ] ;
HermesBuiltin . arraySpread ( items3 , HermesBuiltin . arraySpread ( tmp16 , 0 ) ) ;
2026-07-23 10:11:24 +00:00
items1 = [ ] ;
2026-07-20 16:05:17 +00:00
HermesBuiltin . arraySpread ( items5 , HermesBuiltin . arraySpread ( items4 , 0 ) ) ;
2026-07-25 08:10:48 +00:00
items2 = [ _require ( 4564 ) . AST_KEY . EMOJI ] ;
2026-07-20 16:05:17 +00:00
const tmp31 = validateContentTypes ( rules ( str3 , obj ) , items , items2 ) ;
if ( null != tmp31 ) {
if ( null != validateContentTypes ( rules ( tmp5Result . fullySanitized , obj ) , items1 ) ) {
if ( 0 === str6 . trim ( ) . length ) {
return renderIndividualParts ( ) ;
} else {
2026-07-23 10:11:24 +00:00
const obj2 = importDefault ( 22 ) ;
const pickResult = importDefault ( 22 ) . pick ( rules . rules , tmp16 ) ;
2026-07-20 16:05:17 +00:00
obj = { } ;
2026-07-25 08:10:48 +00:00
obj . content = importDefault ( 3830 ) . parserFor ( pickResult ) ( tmp7 . whitespaceSanitized , obj ) ;
2026-07-20 16:05:17 +00:00
obj . target = tmp38 . target ;
obj . title = tmp5Result . whitespaceSanitized ;
return obj ;
}
2026-07-23 10:11:24 +00:00
str6 = getRawText ( tmp31 ) ;
2026-07-20 16:05:17 +00:00
}
}
return renderIndividualParts ( ) ;
}
}
return renderIndividualParts ( ) ;
}
}
return renderIndividualParts ( ) ;
}
} ;
2026-07-23 10:11:24 +00:00
let result = require ( "makeMatcher" ) . fileFinishedImporting ( "modules/markup/MarkupLinkRule.tsx" ) ;
2026-07-20 16:05:17 +00:00
export default obj ;
export const ALLOWED_PROTOCOLS = items ;
export { isSuspiciousUrl } ;
export { punycodeLink } ;