dependenciesGeneratorRevised top-level property
Implementation
final FigGenerator dependenciesGeneratorRevised = FigGenerator(
trigger: (String newToken, String oldToken) =>
newToken == '-g' || newToken == '--global',
script: (List<String> tokens) {
if (!tokens.contains('-g') && !tokens.contains('--global')) {
return ['bash', '-c', 'cat "\$(npm prefix)/package.json" 2>/dev/null'];
} else {
return ['bash', '-c', 'ls -1 `npm root -g`'];
}
},
postProcess: (String out, [List<String>? tokens]) {
if (tokens != null &&
(tokens.contains('-g') || tokens.contains('--global'))) {
return out.split('\n').where((line) => line.isNotEmpty).map((name) {
return FigSuggestion(
name: name,
icon: '📦',
description: 'global dependency',
);
}).toList();
}
if (out.trim().isEmpty) return [];
try {
final packageContent = jsonDecode(out);
final dependencies = packageContent['dependencies'] ?? {};
final devDependencies = packageContent['devDependencies'] ?? {};
final optionalDependencies = packageContent['optionalDependencies'] ?? {};
final allDeps = {};
allDeps.addAll(dependencies);
allDeps.addAll(devDependencies);
allDeps.addAll(optionalDependencies);
return allDeps.keys.map((key) {
final pkgName = key as String;
// Filtering is usually handled by the client, but we can do it here if needed.
// The TS spec filters out already listed tokens. We can skip that for simplicity or implement it.
// Let's implement basic suggestion.
String desc = 'dependency';
if (optionalDependencies.containsKey(pkgName)) {
desc = 'optionalDependency';
} else if (devDependencies.containsKey(pkgName)) {
desc = 'devDependency';
}
return FigSuggestion(
name: pkgName,
icon: '📦',
description: desc,
);
}).toList();
} catch (e) {
return [];
}
},
);