Files
2026-04-12 01:06:31 +07:00

95 lines
2.4 KiB
JavaScript
Executable File

#!/usr/bin/env node
/**
* Environment variable loader for docs-seeker skill
* Respects order: process.env > skill/.env > skills/.env > .claude/.env
*/
const fs = require('fs');
const path = require('path');
/**
* Parse .env file content into key-value pairs
* @param {string} content - .env file content
* @returns {Object} Parsed environment variables
*/
function parseEnvFile(content) {
const env = {};
const lines = content.split('\n');
for (const line of lines) {
// Skip comments and empty lines
if (!line || line.trim().startsWith('#')) continue;
const match = line.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/);
if (match) {
const key = match[1];
let value = match[2].trim();
// Remove quotes if present
if ((value.startsWith('"') && value.endsWith('"')) ||
(value.startsWith("'") && value.endsWith("'"))) {
value = value.slice(1, -1);
}
env[key] = value;
}
}
return env;
}
/**
* Load environment variables from .env files in priority order
* Priority: process.env > skill/.env > skills/.env > .claude/.env
* @returns {Object} Merged environment variables
*/
function loadEnv() {
const skillDir = path.resolve(__dirname, '../..');
const skillsDir = path.resolve(skillDir, '..');
const claudeDir = path.resolve(skillsDir, '..');
const envPaths = [
path.join(claudeDir, '.env'), // Lowest priority
path.join(skillsDir, '.env'),
path.join(skillDir, '.env'), // Highest priority (file)
];
let mergedEnv = {};
// Load .env files in order (lowest to highest priority)
for (const envPath of envPaths) {
if (fs.existsSync(envPath)) {
try {
const content = fs.readFileSync(envPath, 'utf8');
const parsed = parseEnvFile(content);
mergedEnv = { ...mergedEnv, ...parsed };
} catch (error) {
// Silently skip unreadable files
}
}
}
// process.env has highest priority
mergedEnv = { ...mergedEnv, ...process.env };
return mergedEnv;
}
/**
* Get environment variable with fallback
* @param {string} key - Environment variable key
* @param {string} defaultValue - Default value if not found
* @returns {string} Environment variable value
*/
function getEnv(key, defaultValue = '') {
const env = loadEnv();
return env[key] || defaultValue;
}
module.exports = {
loadEnv,
getEnv,
parseEnvFile,
};