n8n-workflow-manager
Version:
Command-line tools for managing n8n workflows with version control and TypeScript support
85 lines (70 loc) ⢠3.23 kB
JavaScript
const chalk = require('chalk');
const ConfigManager = require('../utils/config');
const TypesGenerator = require('../core/types-generator');
const WorkflowSelector = require('../utils/selector');
/**
* Types command implementation
*/
async function typesCommand(options, globalOptions) {
const { workflow, all, base } = options;
const { verbose = false, dryRun = false } = globalOptions;
try {
// Load configuration
const config = new ConfigManager(globalOptions.config);
const generator = new TypesGenerator(config);
const selector = new WorkflowSelector(config);
console.log(chalk.cyan.bold('š·ļø Generating TypeScript types...\n'));
if (base) {
// Generate only base types
console.log(chalk.blue('š§ Generating base type definitions...'));
const result = await generator.generateBaseTypes();
console.log(chalk.green(`ā
Generated base types: ${result.outputPath}`));
} else if (all) {
// Generate types for all workflows
console.log(chalk.blue('š§ Generating types for all workflows...'));
const results = await generator.generateAllTypes();
const successful = results.filter(r => r.success).length;
const failed = results.filter(r => !r.success).length;
console.log(chalk.green(`ā
Generated types for ${successful} workflows successfully`));
if (failed > 0) {
console.log(chalk.yellow(`ā ļø ${failed} workflows failed to generate types`));
}
if (verbose) {
results.forEach(result => {
const status = result.success ? chalk.green('ā
') : chalk.red('ā');
console.log(chalk.gray(` ${status} ${result.workflowName}: ${result.outputPath || 'failed'}`));
});
}
} else if (workflow) {
// Generate types for specific workflow
console.log(chalk.blue(`š§ Generating types for workflow: ${workflow}`));
const result = await generator.generateWorkflowTypes(workflow);
console.log(chalk.green(`ā
Generated types for ${workflow}`));
console.log(chalk.gray(` Output: ${result.outputPath}`));
} else {
// Interactive selection
const selection = await selector.selectWorkflow('generate types for');
if (!selection) {
console.log(chalk.yellow('No workflow selected. Exiting.'));
return;
}
if (selection === 'all') {
const results = await generator.generateAllTypes();
const successful = results.filter(r => r.success).length;
console.log(chalk.green(`ā
Generated types for ${successful} workflows successfully`));
} else {
const result = await generator.generateWorkflowTypes(selection);
console.log(chalk.green(`ā
Generated types for ${selection}`));
}
}
console.log(chalk.cyan('\nšÆ TypeScript types have been generated'));
console.log(chalk.gray('Use these types in your code nodes for better development experience'));
} catch (error) {
console.error(chalk.red('ā Types generation failed:'), error.message);
if (verbose) {
console.error(chalk.gray(error.stack));
}
throw error;
}
}
module.exports = typesCommand;