normalizeUri function
Normalizes a URI to a relative path from the package root.
Converts both file:// and package: URIs to relative paths:
- file:///Users/user/project/lib/main.dart -> lib/main.dart
- package:import_rules/src/config.dart -> lib/src/config.dart
- package:flutter/material.dart -> package:flutter/material.dart (external)
Implementation
@visibleForTesting
String normalizeUri(Uri uri, String packageRootPath, String packageName) {
if (uri.scheme == 'file') {
// Convert file:// URI to relative path from package root
final filePath = uri.toFilePath();
return p.relative(filePath, from: packageRootPath);
} else if (uri.scheme == 'package') {
// Check if this is a package URI for the current package
final uriString = uri.toString();
final packagePrefix = 'package:$packageName/';
if (uriString.startsWith(packagePrefix)) {
// Internal package URI: strip prefix and prepend 'lib/'
final pathAfterPackage = uriString.substring(packagePrefix.length);
return 'lib/$pathAfterPackage';
} else {
// External package URI: keep as-is
return uriString;
}
}
// Fallback: return as-is (shouldn't happen in practice)
return uri.toString();
}