dependenciesGenerator top-level property

FigGenerator dependenciesGenerator
final

Implementation

final FigGenerator dependenciesGenerator = FigGenerator(
  trigger: {'on': 'change'},
  script: (List<String> tokens) {
    if (tokens.contains('-g') || tokens.contains('--global')) {
      return ['bash', '-c', 'ls -1 \$(npm root -g)'];
    }
    return ['bash', '-c', 'cat \$(npm prefix)/package.json'];
  },
  postProcess: (String out, [List<String>? tokens]) {
    if (tokens != null &&
        (tokens.contains('-g') || tokens.contains('--global'))) {
      return out
          .split('\n')
          .where((s) => s.trim().isNotEmpty)
          .map((name) => FigSuggestion(
                name: name.trim(),
                icon: '📦',
                description: 'Global dependency',
              ))
          .toList();
    }
    try {
      final packageContent = jsonDecode(out) as Map<String, dynamic>;
      final dependencies =
          packageContent['dependencies'] as Map<String, dynamic>? ?? {};
      final devDependencies =
          packageContent['devDependencies'] as Map<String, dynamic>?;
      final optionalDependencies =
          packageContent['optionalDependencies'] as Map<String, dynamic>? ?? {};
      final all = <String, dynamic>{...dependencies};
      if (devDependencies != null) all.addAll(devDependencies);
      all.addAll(optionalDependencies);
      final listed = tokens?.toSet() ?? <String>{};
      return all.keys
          .where((pkgName) => !listed.contains(pkgName))
          .map((pkgName) {
        String desc = 'dependency';
        if (optionalDependencies.containsKey(pkgName))
          desc = 'optionalDependency';
        else if (devDependencies != null &&
            devDependencies.containsKey(pkgName)) desc = 'devDependency';
        return FigSuggestion(
          name: pkgName,
          icon: '📦',
          description: desc,
        );
      }).toList();
    } catch (_) {
      return <FigSuggestion>[];
    }
  },
);