sdlc-hub/web/src/modules/wiki/urlTransform.ts
Andrey Epifancev 5a142f772c Веб: вики — правки по ревью Task 10 (#91)
Дерево не раскрывает предков повторно после ручного сворачивания, предел опроса вложения,
//host не ссылка, регистр схем page:/attachment:, тесты дерева, загрузки, плашки панели, 422/404.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 03:17:13 +04:00

15 lines
1.1 KiB
TypeScript

// адреса в 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 : "";
}