parseImpellerCDepfileDependencies function

List<Uri> parseImpellerCDepfileDependencies(
  1. String depfileContents, {
  2. Uri? relativeTo,
})

Parses dependency paths from an impellerc depfile.

impellerc emits a Ninja-style single-line depfile: <target>: <dep1> <dep2> .... The target is ignored. Dependency paths are converted to file URIs; relative paths are resolved against relativeTo when it is provided.

Implementation

List<Uri> parseImpellerCDepfileDependencies(
  String depfileContents, {
  Uri? relativeTo,
}) {
  final separator = RegExp(r':(?:\s|$)').firstMatch(depfileContents);
  if (separator == null) {
    return const [];
  }
  final dependencies = depfileContents.substring(separator.end).trim();
  if (dependencies.isEmpty) {
    return const [];
  }
  return dependencies
      .split(RegExp(r'\s+'))
      .where((dependency) => dependency.isNotEmpty)
      .map((dependency) {
        if (_isAbsoluteFilePath(dependency)) {
          return Uri.file(dependency);
        }
        return relativeTo?.resolve(dependency) ?? Uri.file(dependency);
      })
      .toList();
}