tokenResolver<E extends Enum> function
Set strictCollisions: true to reject conflicting normalized tokens.
By default, the last assignment wins for 1.x compatibility.
Build a resolver from a flat string->enum mapping. Useful when you already have a normalized token map.
Example:
final resolver = tokenResolver<AppEnv>({
'prod': AppEnv.production,
'production': AppEnv.production,
'stage': AppEnv.staging,
'staging': AppEnv.staging,
'dev': AppEnv.development,
'development': AppEnv.development,
});
Implementation
EnvResolver<E> tokenResolver<E extends Enum>(
Map<String, E> tokens, {
bool caseInsensitive = true,
bool strictCollisions = false,
}) {
if (tokens.isEmpty) return (_) => null;
final map = <String, E>{};
String keyOf(String s) => caseInsensitive ? s.toLowerCase() : s;
for (final entry in tokens.entries) {
final k = entry.key.trim();
if (k.isEmpty) continue;
final normalized = keyOf(k);
if (strictCollisions &&
map.containsKey(normalized) &&
map[normalized] != entry.value) {
throw ArgumentError('Conflicting normalized environment tokens.');
}
map[normalized] = entry.value;
}
if (map.isEmpty) return (_) => null;
return (String input) {
final k = keyOf(input.trim());
if (k.isEmpty) return null;
return map[k];
};
}