npmSearchGenerator top-level property
Implementation
final FigGenerator npmSearchGenerator = FigGenerator(
trigger: (String token) {
if (token.startsWith('@') && token.indexOf('@', 1) != -1) return true;
if (!token.startsWith('@') && token.contains('@')) return true;
return false;
},
script: (tokens) {
final searchTerm = tokens.last;
if (searchTerm.contains('@')) {
final name = searchTerm.substring(0, searchTerm.lastIndexOf('@'));
return ['npm', 'view', name, 'dist-tags', '--json'];
} else {
return [
'curl',
'-s',
'-H',
'Accept: application/json',
'https://api.npms.io/v2/search/suggestions?q=$searchTerm&size=20'
];
}
},
postProcess: (out, [tokens]) {
if (out.trim().isEmpty) return [];
try {
final searchTerm = tokens?.last ?? '';
final json = jsonDecode(out);
if (searchTerm.contains('@')) {
if (json is Map) {
return json.entries.map((e) {
return FigSuggestion(
name: e.value is String ? e.value as String : e.value.toString(),
description: 'Tag: ${e.key}',
icon: 'fig://icon?type=version',
);
}).toList();
}
} else {
if (json is List) {
return json.map((item) {
final pkg = item['package'];
return FigSuggestion(
name: pkg['name'] as String,
description: pkg['description'] as String?,
icon: '📦',
);
}).toList();
}
}
} catch (e) {
return [];
}
return [];
},
cache: const FigCache(ttl: 172800000),
);