dockerGenerators top-level property
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();
},
),
};