tokenResolver<E extends Enum> function

EnvResolver<E> tokenResolver<E extends Enum>(
  1. Map<String, E> tokens, {
  2. bool caseInsensitive = true,
  3. bool strictCollisions = false,
})

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];
  };
}