qraft
Version:
A powerful CLI tool to qraft structured project setups from GitHub template repositories
223 lines • 9.83 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.configCommand = configCommand;
const chalk_1 = __importDefault(require("chalk"));
const commander_1 = require("commander");
const inquirer_1 = __importDefault(require("inquirer"));
const interactiveMode_1 = require("../interactive/interactiveMode");
function configCommand(configManager, boxManager) {
const config = new commander_1.Command('config');
// Show current configuration
config
.command('show')
.description('Show current configuration')
.option('--json', 'output as JSON')
.action(async (options) => {
try {
const currentConfig = await configManager.getConfig();
if (options.json) {
console.log(JSON.stringify(currentConfig, null, 2));
return;
}
console.log(chalk_1.default.blue.bold('📋 Current Configuration\n'));
// Default registry
console.log(chalk_1.default.yellow('Default Registry:'));
console.log(` ${currentConfig.defaultRegistry}\n`);
// Registries
console.log(chalk_1.default.yellow('Configured Registries:'));
Object.entries(currentConfig.registries).forEach(([name, registry]) => {
console.log(` ${chalk_1.default.cyan('•')} ${chalk_1.default.white.bold(name)}`);
console.log(` Repository: ${registry.repository}`);
console.log(` Base URL: ${registry.baseUrl || 'https://api.github.com'}`);
console.log(` Token: ${registry.token ? chalk_1.default.green('✓ configured') : chalk_1.default.gray('not set')}`);
if (name === currentConfig.defaultRegistry) {
console.log(` ${chalk_1.default.green('(default)')}`);
}
console.log();
});
// Global token
console.log(chalk_1.default.yellow('Global Token:'));
console.log(` ${currentConfig.globalToken ? chalk_1.default.green('✓ configured') : chalk_1.default.gray('not set')}\n`);
// Cache settings
console.log(chalk_1.default.yellow('Cache Settings:'));
if (currentConfig.cache) {
console.log(` Enabled: ${currentConfig.cache.enabled ? chalk_1.default.green('yes') : chalk_1.default.red('no')}`);
console.log(` Directory: ${currentConfig.cache.directory}`);
console.log(` TTL: ${currentConfig.cache.ttl} seconds`);
}
else {
console.log(chalk_1.default.red(' Cache configuration not found'));
}
}
catch (error) {
console.error(chalk_1.default.red('Error reading configuration:'), error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
});
// Add registry
config
.command('add-registry [name] [repository]')
.description('Add a new registry')
.option('--base-url <url>', 'GitHub API base URL (default: https://api.github.com)')
.option('--token <token>', 'GitHub token for this registry')
.option('--default', 'set as default registry')
.option('-i, --interactive', 'use interactive mode')
.action(async (name, repository, options) => {
try {
// Use interactive mode if requested or if name/repository not provided
if (options.interactive || !name || !repository) {
if (boxManager) {
const interactiveMode = new interactiveMode_1.InteractiveMode(boxManager);
await interactiveMode.configureRegistry();
return;
}
else {
console.error(chalk_1.default.red('Interactive mode not available - BoxManager not provided'));
process.exit(1);
}
}
// Non-interactive mode
await configManager.addRegistry(name, {
name,
repository,
baseUrl: options.baseUrl,
token: options.token
});
if (options.default) {
await configManager.setDefaultRegistry(name);
}
console.log(chalk_1.default.green('✅ Registry added successfully'));
console.log(chalk_1.default.gray(` Name: ${name}`));
console.log(chalk_1.default.gray(` Repository: ${repository}`));
if (options.default) {
console.log(chalk_1.default.gray(' Set as default registry'));
}
}
catch (error) {
console.error(chalk_1.default.red('Error adding registry:'), error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
});
// Remove registry
config
.command('remove-registry <name>')
.description('Remove a registry')
.option('-f, --force', 'force removal without confirmation')
.action(async (name, options) => {
try {
if (!options.force) {
const { confirm } = await inquirer_1.default.prompt([
{
type: 'confirm',
name: 'confirm',
message: `Remove registry "${name}"?`,
default: false
}
]);
if (!confirm) {
console.log(chalk_1.default.yellow('❌ Operation cancelled'));
return;
}
}
await configManager.removeRegistry(name);
console.log(chalk_1.default.green('✅ Registry removed successfully'));
}
catch (error) {
console.error(chalk_1.default.red('Error removing registry:'), error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
});
// Set default registry
config
.command('set-default <name>')
.description('Set default registry')
.action(async (name) => {
try {
await configManager.setDefaultRegistry(name);
console.log(chalk_1.default.green('✅ Default registry updated'));
console.log(chalk_1.default.gray(` Default registry: ${name}`));
}
catch (error) {
console.error(chalk_1.default.red('Error setting default registry:'), error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
});
// Cache settings
config
.command('cache')
.description('Configure cache settings')
.option('--enable', 'enable cache')
.option('--disable', 'disable cache')
.option('--directory <dir>', 'set cache directory')
.option('--ttl <seconds>', 'set cache TTL in seconds')
.action(async (options) => {
try {
const updates = {};
if (options.enable) {
updates.enabled = true;
}
if (options.disable) {
updates.enabled = false;
}
if (options.directory) {
updates.directory = options.directory;
}
if (options.ttl) {
const ttl = parseInt(options.ttl, 10);
if (isNaN(ttl) || ttl < 0) {
console.error(chalk_1.default.red('Error: TTL must be a positive number'));
process.exit(1);
}
updates.ttl = ttl;
}
if (Object.keys(updates).length === 0) {
console.error(chalk_1.default.red('Error: No cache settings specified'));
console.error(chalk_1.default.gray('Use --enable, --disable, --directory, or --ttl'));
process.exit(1);
}
await configManager.updateCacheConfig(updates);
console.log(chalk_1.default.green('✅ Cache settings updated'));
Object.entries(updates).forEach(([key, value]) => {
console.log(chalk_1.default.gray(` ${key}: ${value}`));
});
}
catch (error) {
console.error(chalk_1.default.red('Error updating cache settings:'), error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
});
// Reset configuration
config
.command('reset')
.description('Reset configuration to defaults')
.option('-f, --force', 'force reset without confirmation')
.action(async (options) => {
try {
if (!options.force) {
const { confirm } = await inquirer_1.default.prompt([
{
type: 'confirm',
name: 'confirm',
message: 'Reset all configuration to defaults? This will remove all registries and tokens.',
default: false
}
]);
if (!confirm) {
console.log(chalk_1.default.yellow('❌ Operation cancelled'));
return;
}
}
await configManager.resetConfig();
console.log(chalk_1.default.green('✅ Configuration reset to defaults'));
}
catch (error) {
console.error(chalk_1.default.red('Error resetting configuration:'), error instanceof Error ? error.message : 'Unknown error');
process.exit(1);
}
});
return config;
}
//# sourceMappingURL=config.js.map