yarnDependenciesGenerator top-level property

FigGenerator yarnDependenciesGenerator
final

Implementation

final FigGenerator yarnDependenciesGenerator = FigGenerator(
  script: [
    'bash',
    '-c',
    "until [[ -f package.json ]] || [[ \$PWD = '/' ]]; do cd ..; done; cat package.json",
  ],
  postProcess: (String out, [List<String>? context]) {
    final tokens = context ?? [];

    if (out.trim().isEmpty) {
      return <FigSuggestion>[];
    }

    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 allDependencies = <String, dynamic>{};
      allDependencies.addAll(dependencies);
      allDependencies.addAll(devDependencies);
      allDependencies.addAll(optionalDependencies);

      return allDependencies.keys
          .where((pkgName) => !tokens.any((current) => current == pkgName))
          .map((pkgName) {
        String description;
        if (dependencies.containsKey(pkgName)) {
          description = 'dependency';
        } else if (optionalDependencies.containsKey(pkgName)) {
          description = 'optionalDependency';
        } else {
          description = 'devDependency';
        }

        return FigSuggestion(
          name: pkgName,
          icon: '📦',
          description: description,
        );
      }).toList();
    } catch (e) {
      print('Error in yarn dependencies generator: $e');
      return <FigSuggestion>[];
    }
  },
);