UNPKG

@sprucelabs/spruce-skill-utils

Version:

Loosely coupled classes and functions to make skill development faster! 🏎

87 lines (86 loc) 2.52 kB
"use strict"; 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;