// адреса в Markdown вики: пропускаются внутренние page:/attachment:, http(s) и относительные; остальные схемы // (javascript:, data:, vbscript:, file: …) и адреса вида //host заменяются пустой строкой. Управляющие символы и пробелы в схеме // браузер игнорирует («java\nscript:»), поэтому схема определяется после их удаления. const ALLOWED = new Set(["page", "attachment", "http", "https"]); // eslint-disable-next-line no-control-regex const IGNORED = /[\u0000- \u007f]/g; export function wikiUrlTransform(url: string): string { const bare = url.replace(IGNORED, ""); if (/^[/\\]{2}/.test(bare)) return ""; // «//host» и «/\host» — адрес без схемы, но на внешний сайт const m = /^([a-z][a-z0-9+.-]*):/i.exec(bare); if (!m) return url; // схемы нет — относительный адрес return ALLOWED.has(m[1].toLowerCase()) ? url : ""; }