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