parseEnvContent static method

Map<String, String> parseEnvContent(
  1. String content, {
  2. String sourceName = '.env',
})

Pure parser behind parseEnvFile; exposed for testing.

Implementation

static Map<String, String> parseEnvContent(String content,
    {String sourceName = '.env'}) {
  final envVars = <String, String>{};
  final lines = const LineSplitter().convert(content);

  for (var i = 0; i < lines.length; i++) {
    var line = lines[i].trim();
    if (line.isEmpty || line.startsWith('#')) continue;

    if (line.startsWith('export ')) {
      line = line.substring('export '.length).trim();
    }

    final eq = line.indexOf('=');
    if (eq <= 0) {
      Logger.warning(
          '$sourceName:${i + 1}: ignoring malformed line (expected KEY=VALUE).');
      continue;
    }

    final key = line.substring(0, eq).trim();
    if (!RegExp(r'^[A-Za-z_][A-Za-z0-9_]*$').hasMatch(key)) {
      Logger.warning('$sourceName:${i + 1}: ignoring invalid key "$key".');
      continue;
    }

    envVars[key] = _parseEnvValue(line.substring(eq + 1).trim());
  }
  return envVars;
}