All files / scripts/validators/executive-brief-translations/extractors urls.ts

100% Statements 8/8
100% Branches 4/4
100% Functions 1/1
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25                                  23x 23x 23x 23x 23x 23x    
/**
 * @module scripts/validators/executive-brief-translations/extractors/urls
 * @description Extract bare URLs (`https?://...`) plus markdown link
 *              targets for parity comparison between source and
 *              translation.
 *
 *              Rule census: extracted from
 *              `scripts/validate-executive-brief-translations.ts` lines
 *              178–187. Logic is byte-identical to the original.
 *
 * @author Hack23 AB
 * @license Apache-2.0
 */
 
/** Extract bare URLs (https?://...). */
export function extractUrls(md: string): Set<string> {
  // Capture URL inside Markdown link target `(...)` and bare URLs in text.
  const urls = new Set<string>();
  const linkTargets = md.match(/\((https?:\/\/[^\s)]+)\)/g) ?? [];
  for (const t of linkTargets) urls.add(t.slice(1, -1));
  const bare = md.match(/(?<![("])https?:\/\/[^\s)<]+/g) ?? [];
  for (const u of bare) urls.add(u);
  return urls;
}