createEnvFile function
void
createEnvFile(})
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');
}
}