aliasesResolver<E extends Enum> function
Set strictCollisions: true to reject aliases assigned to different values.
By default, the last assignment wins for 1.x compatibility.
Build a resolver from explicit alias lists per enum value.
Example:
final resolver = aliasesResolver<AppEnv>({
AppEnv.production: ['prod', 'production'],
AppEnv.staging: ['stage', 'staging'],
AppEnv.development: ['dev', 'development'],
});
Notes:
- Matching is case-insensitive by default.
- Optionally recognizes the enum's
name(Dart >= 2.15) whenallowEnumNameis true.
Implementation
EnvResolver<E> aliasesResolver<E extends Enum>(
Map<E, List<String>> aliases, {
bool caseInsensitive = true,
bool allowEnumName = true,
bool strictCollisions = false,
}) {
// Empty input creates a resolver that never matches.
if (aliases.isEmpty) {
return (_) => null;
}
final map = <String, E>{};
String keyOf(String s) => caseInsensitive ? s.toLowerCase() : s;
void add(String key, E value) {
if (strictCollisions && map.containsKey(key) && map[key] != value) {
throw ArgumentError('Conflicting normalized environment aliases.');
}
map[key] = value;
}
for (final entry in aliases.entries) {
final env = entry.key;
final values = entry.value;
if (allowEnumName) {
add(keyOf(env.name), env);
}
for (final raw in values) {
if (raw.trim().isEmpty) continue;
add(keyOf(raw.trim()), env);
}
}
if (map.isEmpty) {
return (_) => null;
}
return (String input) {
final k = keyOf(input.trim());
if (k.isEmpty) return null;
return map[k];
};
}