const fs = require('fs'); const path = require('path'); class ConfigManager { constructor(relPath = '.') { this.configDir = path.resolve(__dirname, relPath); } /** * Load a configuration file by name * @param {string} configName - Name of the config file (without .json extension) * @returns {Object} Parsed configuration object */ getConfig(configName) { try { const configPath = path.resolve(this.configDir, `${configName}.json`); const configData = fs.readFileSync(configPath, 'utf8'); return JSON.parse(configData); } catch (error) { throw new Error(`Failed to load config '${configName}': ${error.message}`); } } /** * Get list of available configuration files * @returns {Array} Array of config names (without .json extension) */ getAvailableConfigs() { try { const resolvedDir = path.resolve(this.configDir); const files = fs.readdirSync(resolvedDir); return files .filter(file => file.endsWith('.json')) .map(file => path.basename(file, '.json')); } catch (error) { throw new Error(`Failed to read config directory: ${error.message}`); } } /** * Check if a specific config exists * @param {string} configName - Name of the config file * @returns {boolean} True if config exists */ hasConfig(configName) { const configPath = path.resolve(this.configDir, `${configName}.json`); return fs.existsSync(configPath); } createEndpoint(nodeName) { try { // Load the config for this node const config = this.getConfig(nodeName); // Convert config to JSON const configJSON = JSON.stringify(config, null, 2); // Assemble the complete script return ` // Create the namespace structure window.EVOLV = window.EVOLV || {}; window.EVOLV.nodes = window.EVOLV.nodes || {}; window.EVOLV.nodes.${nodeName} = window.EVOLV.nodes.${nodeName} || {}; // Inject the pre-loaded config data directly into the namespace window.EVOLV.nodes.${nodeName}.config = ${configJSON}; console.log('${nodeName} config loaded and endpoint created'); `; } catch (error) { throw new Error(`Failed to create endpoint for '${nodeName}': ${error.message}`); } } } module.exports = ConfigManager;