diff --git a/pkg/pub_package_reader/lib/src/known_templates.dart b/pkg/pub_package_reader/lib/src/known_templates.dart index 56d47c73b4..9d3ff0361f 100644 --- a/pkg/pub_package_reader/lib/src/known_templates.dart +++ b/pkg/pub_package_reader/lib/src/known_templates.dart @@ -4,6 +4,33 @@ import 'package:pub_package_reader/pub_package_reader.dart'; +/// Returns true if the URL is a GitHub blob image URL +bool isGitHubBlobImageUrl(String url) { + return url.contains('github.com') && url.contains('/blob/'); +} + +/// Rewrites a GitHub blob URL to raw.githubusercontent.com +String rewriteToRawGitHubUrl(String url) { + return url + .replaceFirst('github.com', 'raw.githubusercontent.com') + .replaceFirst('/blob/', '/'); +} + +/// Rewrites all GitHub blob image URLs in markdown content +String rewriteGithubImagesInMarkdown(String markdown) { + final regex = RegExp( + r'!\[([^\]]*)\]\((https://github\.com/[^)]+/blob/[^)]+)\)', + multiLine: true, + caseSensitive: true, + ); + return markdown.replaceAllMapped(regex, (match) { + final altText = match[1]; + final url = match[2]!; + final newUrl = rewriteToRawGitHubUrl(url); + return '![$altText]($newUrl)'; + }); +} + const _knownTemplateDescriptions = { // ex-stagehand templates, check latest versions in dart-lang/sdk's // pkg/dartdev/lib/src/templates/ directory: @@ -66,11 +93,18 @@ Iterable validateKnownTemplateReadme( if (path == null || content == null) { return; } - final lower = content.toLowerCase(); + + // rewrite image URLs + final rewrittenContent = rewriteGithubImagesInMarkdown(content); + + final lower = rewrittenContent.toLowerCase(); for (final text in _knownTemplateReadmes) { final firstIndex = lower.indexOf(text); if (firstIndex >= 0) { - final origText = content.substring(firstIndex, firstIndex + text.length); + final origText = rewrittenContent.substring( + firstIndex, + firstIndex + text.length, + ); yield ArchiveIssue( '`$path` contains a generic text fragment coming from package templates (`$origText`).\n' 'Please follow the guides to write great package pages:\n' diff --git a/pkg/pub_package_reader/test/known_templates_test.dart b/pkg/pub_package_reader/test/known_templates_test.dart index 8a6ac97546..42e98cf1d6 100644 --- a/pkg/pub_package_reader/test/known_templates_test.dart +++ b/pkg/pub_package_reader/test/known_templates_test.dart @@ -44,5 +44,12 @@ void main() { isNotEmpty, ); }); + + test('rewrite Github blob image URLs', (){ + final input = '![example](https://github.com/org/repo/blob/main/img.png)'; + final expected = '![example](https://raw.githubusercontent.com/org/repo/main/img.png)'; + final output = rewriteGithubImagesInMarkdown(input); + expect(output, expected); + }); }); }