@sprucelabs/spruce-skill-utils
Version:
Loosely coupled classes and functions to make skill development faster! 🏎
87 lines (86 loc) • 2.52 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const disk_utility_1 = __importDefault(require("../utilities/disk.utility"));
const dotenv = require('dotenv');
class EnvService {
constructor(cwd) {
this.cwd = cwd;
}
set(key, value) {
const env = this.parseEnv();
env[key] = value;
//@ts-ignore
process.env[key] = value;
this.writeConfig(env);
}
writeConfig(env) {
const path = this.getEnvPath();
const lines = [];
for (const key in env) {
let valueLiteral = this.generateValueLiteral(env[key]);
lines.push(`${key}=${valueLiteral}`);
}
disk_utility_1.default.writeFile(path, lines.join('\n'));
}
get(key) {
if (process.env[key]) {
return this.coerceType(process.env[key]);
}
const env = this.parseEnv();
const value = env[key];
return this.coerceType(value);
}
coerceType(value) {
//@ts-ignore
const numValue = parseInt(value, 10);
//@ts-ignore
if (/^-?\d+$/.test(value) && !isNaN(numValue)) {
return numValue;
}
else if (value === 'true') {
return true;
}
else if (value === 'false') {
return false;
}
return value;
}
unset(key) {
const env = this.parseEnv();
delete env[key];
this.writeConfig(env);
delete process.env[key];
}
parseEnv() {
const path = this.getEnvPath();
if (!disk_utility_1.default.doesFileExist(path)) {
return {};
}
const contents = disk_utility_1.default.readFile(path);
const config = dotenv.parse(contents);
return config;
}
generateValueLiteral(value) {
let valueLiteral = '';
if (typeof value === 'string') {
valueLiteral = `"${this.escape(value)}"`;
}
else if (typeof value === 'boolean') {
valueLiteral = value ? 'true' : 'false';
}
else {
valueLiteral = `${value}`;
}
return valueLiteral;
}
escape(value) {
return value.replace(/\n/g, '\\n');
}
getEnvPath() {
return disk_utility_1.default.resolvePath(this.cwd, '.env');
}
}
exports.default = EnvService;
;