env-toolkit
Version:
This is a package that can generate or compare env files for your project.
38 lines (37 loc) • 2.12 kB
JavaScript
import chalk from 'chalk';
import { appendFileSync } from 'fs';
import { join } from 'path';
import { DEFAULT_FILE_NAME } from './constant.js';
import { findDifference, formatBlame, readExistingEnvFile } from './utils.js';
const { green, red, bgGray } = chalk;
export function updateOrCompareEnv(envDirectory, fileName, allEnvs, compare, update) {
var _a, _b, _c, _d, _e;
try {
const envFilePath = join(envDirectory, fileName || DEFAULT_FILE_NAME);
const currentEnvs = readExistingEnvFile(envFilePath);
const difference = findDifference(currentEnvs, allEnvs);
if (!((_a = difference === null || difference === void 0 ? void 0 : difference.added) === null || _a === void 0 ? void 0 : _a.length) && !((_b = difference === null || difference === void 0 ? void 0 : difference.removed) === null || _b === void 0 ? void 0 : _b.length)) {
console.log(green('The current .env file is up to date!'));
return;
}
if (compare) {
console.log(bgGray('The current .env file is out of date!'));
console.log(green(`New variables: ${(_c = difference === null || difference === void 0 ? void 0 : difference.added) === null || _c === void 0 ? void 0 : _c.length}`));
console.log(red(`Removed variables: ${(_d = difference === null || difference === void 0 ? void 0 : difference.removed) === null || _d === void 0 ? void 0 : _d.length}`));
console.log(formatBlame(difference));
}
else if (update && ((_e = difference === null || difference === void 0 ? void 0 : difference.added) === null || _e === void 0 ? void 0 : _e.length)) {
const newVariables = `\n# Newly added env variables (${new Date()}) \n${difference.added
.map((varName) => `${varName}=`)
.join('\n')}\n`;
appendFileSync(envFilePath, newVariables);
console.log(green('The .env file has been updated!'));
}
else {
console.log(red('No changes were made to the .env'));
}
}
catch (err) {
throw new Error(err);
}
}