createEnvFile function

void createEnvFile(
  1. Config config,
  2. String environment,
  3. bool verbose, {
  4. bool envFile = false,
  5. String output = 'lib/env.dart',
})

Implementation

void createEnvFile(Config config, String environment, bool verbose,
    {bool envFile = false, String output = 'lib/env.dart'}) {
  Map<String, dynamic?> envVars = {...(config.defaults.vars), ...(config.environments[environment]?.vars ?? {})};
  var platEnv = Platform.environment;
  if (verbose) {
    stdout.writeln('Reading variables from environment:\n$platEnv');
  }
  for (var key in envVars.keys) {
    dynamic? val;
    envVars[key] = platEnv['${environment.toUpperCase()}_$key'] ?? platEnv[key] ?? val ?? envVars[key];
  }
  if (verbose) {
    stdout.writeln('Using $environment environment:\n$envVars');
    // envVars.forEach((k, v) {
    //   if (v == null) stdout.writeln('WARN: $k is null');
    // });
  }

  Directory('lib').createSync(recursive: true);
  var stringVars = '';
  for (var env in envVars.entries) {
    if (env.value is String) {
      stringVars += '\tstatic String ${env.key} = "${env.value}";\n';
    } else {
      stringVars += '\tstatic ${env.value.runtimeType.toString()} ${env.key} = ${env.value};\n';
    }
  }
  File(output).writeAsString('class Environment {\n' +
      stringVars +
      '\tfinal raw = ${json.encode(envVars)};\n'
          '}');
  if (verbose) stdout.writeln('Environment configuration written to \'$output\'');
  if (envFile) {
    stringVars = '';
    for (var env in envVars.entries) {
      if (env.value?.contains(' ') ?? false) {
        stringVars += '${env.key}="${env.value}"\n';
      } else {
        stringVars += '${env.key}=${env.value}\n';
      }
    }
    File('.env').writeAsString(stringVars);

    if (verbose) stdout.writeln('Env file written to .env');
  }
}