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
JavaScript
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
};
}