UNPKG

modurize

Version:

Intelligent CLI tool to scaffold dynamic, context-aware modules for Node.js apps with smart CRUD generation and database integration

92 lines (75 loc) 2.48 kB
import fs from 'fs'; import path from 'path'; const CONFIG_FILE = '.modurizerc'; const CONFIG_FILE_JSON = '.modurizerc.json'; export function loadConfig() { const cwd = process.cwd(); // Try to find config file in current directory or parent directories let configPath = findConfigFile(cwd); if (!configPath) { return getDefaultConfig(); } try { const configContent = fs.readFileSync(configPath, 'utf8'); const config = JSON.parse(configContent); // Merge with defaults return { ...getDefaultConfig(), ...config }; } catch (error) { console.warn(`⚠️ Warning: Could not parse config file ${configPath}: ${error.message}`); return getDefaultConfig(); } } function findConfigFile(startDir) { let currentDir = startDir; while (currentDir !== path.dirname(currentDir)) { const jsonPath = path.join(currentDir, CONFIG_FILE_JSON); const jsPath = path.join(currentDir, CONFIG_FILE); if (fs.existsSync(jsonPath)) { return jsonPath; } if (fs.existsSync(jsPath)) { return jsPath; } currentDir = path.dirname(currentDir); } return null; } function getDefaultConfig() { return { defaultStyle: 'func', // 'func' or 'class' defaultOutput: 'src/modules', useTypeScript: false, includeTests: false, templates: { controller: true, service: true, routes: true, model: true, middleware: true, validator: true } }; } export function createConfigFile(options = {}) { const config = { ...getDefaultConfig(), ...options }; const configPath = path.join(process.cwd(), CONFIG_FILE_JSON); try { fs.writeFileSync(configPath, JSON.stringify(config, null, 2)); console.log(`✅ Configuration file created: ${configPath}`); return configPath; } catch (error) { console.error(`❌ Failed to create config file: ${error.message}`); return null; } } export function mergeConfigWithArgs(config, args) { const flags = args.filter(arg => arg.startsWith('--')); return { ...config, defaultStyle: flags.includes('--class') ? 'class' : flags.includes('--func') ? 'func' : config.defaultStyle, useTypeScript: flags.includes('--typescript') || config.useTypeScript, includeTests: flags.includes('--tests') || config.includeTests }; }