resolveNitroNativePath function

String resolveNitroNativePath(
  1. String pluginDir
)

Resolves the absolute path to the installed nitro package's src/native directory by reading .dart_tool/package_config.json inside pluginDir.

Implementation

String resolveNitroNativePath(String pluginDir) {
  // Walk up from pluginDir looking for .dart_tool/package_config.json.
  // In Dart workspaces the config lives at the workspace root, not in each
  // member's own directory.
  var searchDir = Directory(pluginDir);
  while (true) {
    final configFile = File(p.join(searchDir.path, '.dart_tool', 'package_config.json'));
    if (configFile.existsSync()) {
      try {
        final config = jsonDecode(configFile.readAsStringSync()) as Map<String, dynamic>;
        final packages = (config['packages'] as List<dynamic>?) ?? [];
        for (final pkg in packages) {
          final pkgMap = pkg as Map<String, dynamic>;
          if (pkgMap['name'] == 'nitro') {
            final rootUri = pkgMap['rootUri'] as String;
            final uri = Uri.parse(rootUri);
            if (uri.scheme == 'file') {
              return p.join(uri.toFilePath(), 'src', 'native');
            } else {
              final dartToolDir = p.join(searchDir.path, '.dart_tool');
              final resolved = p.normalize(p.join(dartToolDir, rootUri));
              return p.join(resolved, 'src', 'native');
            }
          }
        }
      } catch (_) {}
    }
    final parent = searchDir.parent;
    if (parent.path == searchDir.path) break;
    searchDir = parent;
  }
  return p.normalize(
    p.absolute(p.join(pluginDir, '..', 'packages', 'nitro', 'src', 'native')),
  );
}