UNPKG

managedenv

Version:

Manage your environment variables with ease

64 lines (63 loc) 2.18 kB
export class EnvManager { definitions = []; /** * Adds a new variable definition. * * @param def The variable definition to add. * @returns The updated EnvManager instance. */ add(def) { this.definitions.push(def); return this; } /** * Retrieves the value of a CLI flag. * * @param flag The CLI flag to check (e.g., "--token"). * @returns The value of the flag or undefined if not set. */ getFlagValue(flag) { const idx = process.argv.indexOf(flag); if (idx !== -1 && process.argv[idx + 1]) { return process.argv[idx + 1]; } return undefined; } /** * Loads the environment variables based on the defined variable definitions. * * @returns An object containing the loaded variables grouped by project. * @throws Error if a required variable is missing and quitOnMissing is true. */ load() { const result = {}; for (const def of this.definitions) { const { name, project = "env", required = false, default: defVal, type = (v => v), flag, quitOnMissing, } = def; if (!result[project]) result[project] = {}; // First try CLI flag, then fallback to env var const raw = (flag && this.getFlagValue(flag)) || process.env[name]; if (raw === undefined || raw === "") { if (defVal !== undefined) { result[project][name] = defVal; } else if (required) { const msg = `Missing required variable/flag: ${name}${flag ? ` (flag: ${flag})` : ""}`; if (quitOnMissing !== false) throw new Error(msg); else console.warn(msg); } } else { try { result[project][name] = type(raw); } catch (e) { throw new Error(`Failed to parse variable "${name}": ${e.message}`); } } } return result; } }