232 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* eslint-disable unicorn/prefer-module, unicorn/prefer-node-protocol */
 | 
						|
/**
 | 
						|
 * {{MODULE_NAME}} Module Installer
 | 
						|
 * Custom installation logic for complex module setup
 | 
						|
 *
 | 
						|
 * This is a template - replace {{VARIABLES}} with actual values
 | 
						|
 */
 | 
						|
 | 
						|
// const fs = require('fs'); // Uncomment when implementing file operations
 | 
						|
const path = require('path');
 | 
						|
 | 
						|
/**
 | 
						|
 * Main installation function
 | 
						|
 * Called by BMAD installer when processing the module
 | 
						|
 */
 | 
						|
async function installModule(config) {
 | 
						|
  console.log('🚀 Installing {{MODULE_NAME}} module...');
 | 
						|
  console.log(`   Version: ${config.version}`);
 | 
						|
  console.log(`   Module Code: ${config.module_code}`);
 | 
						|
 | 
						|
  try {
 | 
						|
    // Step 1: Validate environment
 | 
						|
    await validateEnvironment(config);
 | 
						|
 | 
						|
    // Step 2: Setup custom configurations
 | 
						|
    await setupConfigurations(config);
 | 
						|
 | 
						|
    // Step 3: Initialize module-specific features
 | 
						|
    await initializeFeatures(config);
 | 
						|
 | 
						|
    // Step 4: Run post-install tasks
 | 
						|
    await runPostInstallTasks(config);
 | 
						|
 | 
						|
    console.log('✅ {{MODULE_NAME}} module installed successfully!');
 | 
						|
    return {
 | 
						|
      success: true,
 | 
						|
      message: 'Module installed and configured',
 | 
						|
    };
 | 
						|
  } catch (error) {
 | 
						|
    console.error('❌ Installation failed:', error.message);
 | 
						|
    return {
 | 
						|
      success: false,
 | 
						|
      error: error.message,
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Validate that the environment meets module requirements
 | 
						|
 */
 | 
						|
async function validateEnvironment(config) {
 | 
						|
  console.log('   Validating environment...');
 | 
						|
 | 
						|
  // TODO: Add environment checks
 | 
						|
  // Examples:
 | 
						|
  // - Check for required tools/binaries
 | 
						|
  // - Verify permissions
 | 
						|
  // - Check network connectivity
 | 
						|
  // - Validate API keys
 | 
						|
 | 
						|
  // Placeholder validation
 | 
						|
  if (!config.project_root) {
 | 
						|
    throw new Error('Project root not defined');
 | 
						|
  }
 | 
						|
 | 
						|
  console.log('   ✓ Environment validated');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Setup module-specific configurations
 | 
						|
 */
 | 
						|
async function setupConfigurations(config) {
 | 
						|
  console.log('   Setting up configurations...');
 | 
						|
 | 
						|
  // TODO: Add configuration setup
 | 
						|
  // Examples:
 | 
						|
  // - Create config files
 | 
						|
  // - Setup environment variables
 | 
						|
  // - Configure external services
 | 
						|
  // - Initialize settings
 | 
						|
 | 
						|
  // Placeholder configuration
 | 
						|
  const configPath = path.join(config.project_root, 'bmad', config.module_code, 'config.json');
 | 
						|
 | 
						|
  // Example of module config that would be created
 | 
						|
  // const moduleConfig = {
 | 
						|
  //   installed: new Date().toISOString(),
 | 
						|
  //   settings: {
 | 
						|
  //     // Add default settings
 | 
						|
  //   }
 | 
						|
  // };
 | 
						|
 | 
						|
  // Note: This is a placeholder - actual implementation would write the file
 | 
						|
  console.log(`   ✓ Would create config at: ${configPath}`);
 | 
						|
  console.log('   ✓ Configurations complete');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Initialize module-specific features
 | 
						|
 */
 | 
						|
async function initializeFeatures(config) {
 | 
						|
  console.log('   Initializing features...');
 | 
						|
 | 
						|
  // TODO: Add feature initialization
 | 
						|
  // Examples:
 | 
						|
  // - Create database schemas
 | 
						|
  // - Setup cron jobs
 | 
						|
  // - Initialize caches
 | 
						|
  // - Register webhooks
 | 
						|
  // - Setup file watchers
 | 
						|
 | 
						|
  // Module-specific initialization based on type
 | 
						|
  switch (config.module_category) {
 | 
						|
    case 'data': {
 | 
						|
      await initializeDataFeatures(config);
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    case 'automation': {
 | 
						|
      await initializeAutomationFeatures(config);
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    case 'integration': {
 | 
						|
      await initializeIntegrationFeatures(config);
 | 
						|
      break;
 | 
						|
    }
 | 
						|
    default: {
 | 
						|
      console.log('   - Using standard initialization');
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  console.log('   ✓ Features initialized');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Initialize data-related features
 | 
						|
 */
 | 
						|
async function initializeDataFeatures(/* config */) {
 | 
						|
  console.log('   - Setting up data storage...');
 | 
						|
  // TODO: Setup databases, data folders, etc.
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Initialize automation features
 | 
						|
 */
 | 
						|
async function initializeAutomationFeatures(/* config */) {
 | 
						|
  console.log('   - Setting up automation hooks...');
 | 
						|
  // TODO: Setup triggers, watchers, schedulers
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Initialize integration features
 | 
						|
 */
 | 
						|
async function initializeIntegrationFeatures(/* config */) {
 | 
						|
  console.log('   - Setting up integrations...');
 | 
						|
  // TODO: Configure APIs, webhooks, external services
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Run post-installation tasks
 | 
						|
 */
 | 
						|
async function runPostInstallTasks(/* config */) {
 | 
						|
  console.log('   Running post-install tasks...');
 | 
						|
 | 
						|
  // TODO: Add post-install tasks
 | 
						|
  // Examples:
 | 
						|
  // - Generate sample data
 | 
						|
  // - Run initial workflows
 | 
						|
  // - Send notifications
 | 
						|
  // - Update registries
 | 
						|
 | 
						|
  console.log('   ✓ Post-install tasks complete');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Initialize database for the module (optional)
 | 
						|
 */
 | 
						|
async function initDatabase(/* config */) {
 | 
						|
  console.log('   Initializing database...');
 | 
						|
 | 
						|
  // TODO: Add database initialization
 | 
						|
  // This function can be called from install-config.yaml
 | 
						|
 | 
						|
  console.log('   ✓ Database initialized');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Generate sample data for the module (optional)
 | 
						|
 */
 | 
						|
async function generateSamples(config) {
 | 
						|
  console.log('   Generating sample data...');
 | 
						|
 | 
						|
  // TODO: Create sample files, data, configurations
 | 
						|
  // This helps users understand how to use the module
 | 
						|
 | 
						|
  const samplesPath = path.join(config.project_root, 'examples', config.module_code);
 | 
						|
 | 
						|
  console.log(`   - Would create samples at: ${samplesPath}`);
 | 
						|
  console.log('   ✓ Samples generated');
 | 
						|
}
 | 
						|
 | 
						|
/**
 | 
						|
 * Uninstall the module (cleanup)
 | 
						|
 */
 | 
						|
async function uninstallModule(/* config */) {
 | 
						|
  console.log('🗑️  Uninstalling {{MODULE_NAME}} module...');
 | 
						|
 | 
						|
  try {
 | 
						|
    // TODO: Add cleanup logic
 | 
						|
    // - Remove configurations
 | 
						|
    // - Clean up databases
 | 
						|
    // - Unregister services
 | 
						|
    // - Backup user data
 | 
						|
 | 
						|
    console.log('✅ Module uninstalled successfully');
 | 
						|
    return { success: true };
 | 
						|
  } catch (error) {
 | 
						|
    console.error('❌ Uninstall failed:', error.message);
 | 
						|
    return {
 | 
						|
      success: false,
 | 
						|
      error: error.message,
 | 
						|
    };
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
// Export functions for BMAD installer
 | 
						|
module.exports = {
 | 
						|
  installModule,
 | 
						|
  initDatabase,
 | 
						|
  generateSamples,
 | 
						|
  uninstallModule,
 | 
						|
};
 |