resolveNitroNativePath function
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')),
);
}