dockerGenerators top-level property

Map<String, FigGenerator> dockerGenerators
final

Docker generators map (running/all containers, images, contexts, networks, etc.).

Implementation

final Map<String, FigGenerator> dockerGenerators = {
  'runningDockerContainers': FigGenerator(
    script: ['docker', 'ps', '--format', '{{ json . }}'],
    postProcess: postProcessDockerPs,
  ),
  'allDockerContainers': FigGenerator(
    script: ['docker', 'ps', '-a', '--format', '{{ json . }}'],
    postProcess: postProcessDockerPs,
  ),
  'pausedDockerContainers': FigGenerator(
    script: [
      'docker',
      'ps',
      '--filter',
      'status=paused',
      '--format',
      '{{ json . }}',
    ],
    postProcess: postProcessDockerPs,
  ),
  'allLocalImages': FigGenerator(
    script: ['docker', 'image', 'ls', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['ID']?.toString(),
                displayName: '${i['Repository']} - ${i['ID']}',
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'allLocalImagesWithRepository': FigGenerator(
    script: ['docker', 'image', 'ls', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['Repository']?.toString(),
                displayName: '${i['Repository']} - ${i['ID']}',
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'dockerHubSearch': FigGenerator(
    // Original TS uses script(context) with search term from context; Dart runtime uses fixed script.
    script: ['docker', 'search', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['Name']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
    trigger: true,
  ),
  'allDockerContexts': FigGenerator(
    script: ['docker', 'context', 'list', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['Name']?.toString(),
                description: i['Description']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'listDockerNetworks': FigGenerator(
    script: ['docker', 'network', 'list', '--format', '{{ json . }}'],
    postProcess: sharedPostProcess,
  ),
  'listDockerSwarmNodes': FigGenerator(
    script: ['docker', 'node', 'list', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['ID']?.toString(),
                displayName: '${i['ID']} - ${i['Hostname']}',
                description: i['Status']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'listDockerPlugins': FigGenerator(
    script: ['docker', 'plugin', 'list', '--format', '{{ json . }}'],
    postProcess: sharedPostProcess,
  ),
  'listDockerSecrets': FigGenerator(
    script: ['docker', 'secret', 'list', '--format', '{{ json . }}'],
    postProcess: sharedPostProcess,
  ),
  'listDockerServices': FigGenerator(
    script: ['docker', 'service', 'list', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['Name']?.toString(),
                description: i['Image']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'listDockerServicesReplicas': FigGenerator(
    script: ['docker', 'service', 'list', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: '${i['Name']}=',
                description: i['Image']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'listDockerStacks': FigGenerator(
    script: ['docker', 'stack', 'list', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['Name']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
  'listDockerVolumes': FigGenerator(
    script: ['docker', 'volume', 'list', '--format', '{{ json . }}'],
    postProcess: (String out, [List<String>? tokens]) {
      return out
          .split('\n')
          .where((line) => line.trim().isNotEmpty)
          .map((line) {
            try {
              final i = jsonDecode(line) as Map<String, dynamic>;
              return FigSuggestion(
                name: i['Name']?.toString(),
                icon: 'fig://icon?type=docker',
              );
            } catch (_) {
              return null;
            }
          })
          .whereType<FigSuggestion>()
          .toList();
    },
  ),
};