normalizeUri function

  1. @visibleForTesting
String normalizeUri(
  1. Uri uri,
  2. String packageRootPath,
  3. String packageName
)

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();
}