121 lines
2.7 KiB
JavaScript
121 lines
2.7 KiB
JavaScript
const os = require('node:os');
|
|
|
|
/**
|
|
* Environment Variable Resolver
|
|
*
|
|
* Resolves configuration values from environment variables
|
|
* with fallbacks to system defaults.
|
|
*/
|
|
|
|
/**
|
|
* Get user name from environment variables
|
|
* Tries USER, USERNAME, LOGNAME in order, falls back to system username or 'User'
|
|
* @returns {string} User name
|
|
*/
|
|
function getUserName() {
|
|
// Try common environment variables
|
|
const envUser = process.env.USER || process.env.USERNAME || process.env.LOGNAME;
|
|
|
|
if (envUser) {
|
|
return envUser;
|
|
}
|
|
|
|
// Try Node.js os.userInfo()
|
|
try {
|
|
const userInfo = os.userInfo();
|
|
if (userInfo.username) {
|
|
return userInfo.username;
|
|
}
|
|
} catch {
|
|
// os.userInfo() can fail in some environments
|
|
}
|
|
|
|
// Final fallback
|
|
return 'User';
|
|
}
|
|
|
|
/**
|
|
* Get system language from environment variables
|
|
* Tries LANG, LC_ALL, falls back to 'English'
|
|
* @returns {string} Language name
|
|
*/
|
|
function getSystemLanguage() {
|
|
const lang = process.env.LANG || process.env.LC_ALL;
|
|
|
|
if (!lang) {
|
|
return 'English';
|
|
}
|
|
|
|
// Parse language from locale string (e.g., 'en_US.UTF-8' -> 'English')
|
|
const langCode = lang.split('_')[0].toLowerCase();
|
|
|
|
// Map common language codes to full names
|
|
const languageMap = {
|
|
en: 'English',
|
|
es: 'Spanish',
|
|
fr: 'French',
|
|
de: 'German',
|
|
it: 'Italian',
|
|
pt: 'Portuguese',
|
|
ru: 'Russian',
|
|
ja: 'Japanese',
|
|
zh: 'Chinese',
|
|
ko: 'Korean',
|
|
ar: 'Arabic',
|
|
hi: 'Hindi',
|
|
};
|
|
|
|
return languageMap[langCode] || 'English';
|
|
}
|
|
|
|
/**
|
|
* Get home directory from environment
|
|
* @returns {string} Home directory path
|
|
*/
|
|
function getHomeDirectory() {
|
|
return process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
}
|
|
|
|
/**
|
|
* Resolve a config value with priority: CLI > ENV > default
|
|
* @param {*} cliValue - Value from CLI argument
|
|
* @param {string} envVar - Environment variable name to check
|
|
* @param {*} defaultValue - Default value if neither CLI nor ENV is set
|
|
* @returns {*} Resolved value
|
|
*/
|
|
function resolveValue(cliValue, envVar, defaultValue) {
|
|
// CLI value has highest priority
|
|
if (cliValue !== undefined && cliValue !== null) {
|
|
return cliValue;
|
|
}
|
|
|
|
// Try environment variable
|
|
if (envVar && process.env[envVar]) {
|
|
return process.env[envVar];
|
|
}
|
|
|
|
// Use default
|
|
return defaultValue;
|
|
}
|
|
|
|
/**
|
|
* Get all environment-based defaults
|
|
* @returns {Object} Default config values from environment
|
|
*/
|
|
function getEnvironmentDefaults() {
|
|
return {
|
|
userName: getUserName(),
|
|
communicationLanguage: getSystemLanguage(),
|
|
documentLanguage: getSystemLanguage(),
|
|
homeDirectory: getHomeDirectory(),
|
|
};
|
|
}
|
|
|
|
module.exports = {
|
|
getUserName,
|
|
getSystemLanguage,
|
|
getHomeDirectory,
|
|
resolveValue,
|
|
getEnvironmentDefaults,
|
|
};
|