@interopio/desktop-cli
Version:
io.Connect Desktop Seed Repository CLI Tools
148 lines (141 loc) ⢠7.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.setupCommand = void 0;
const commander_1 = require("commander");
const utils_1 = require("../utils");
const license_validator_1 = require("../services/license-validator");
const component_manager_1 = require("../services/component-manager");
const modification_manager_1 = require("../services/modification-manager");
exports.setupCommand = new commander_1.Command('setup')
.description('Initialize the io.Connect Desktop seed repository')
.option('--skip-license', 'Skip license validation')
.option('--skip-components', 'Skip component installation')
.option('--skip-modifications', 'Skip applying modifications')
.option('--force', 'Force setup even if already initialized')
.option('--arch <arch>', 'Target architecture (x64, arm64)')
.action(async (options) => {
try {
const targetPlatform = process.platform;
const targetArch = options.arch || process.arch;
utils_1.Logger.debug(`Setup started with options: ${JSON.stringify(options)}`, 'setup');
utils_1.Logger.debug(`Target platform: ${targetPlatform}, arch: ${targetArch}`, 'setup');
// Validate architecture option
const validArchs = ['x64', 'arm64'];
if (options.arch && !validArchs.includes(options.arch)) {
utils_1.Logger.error(`Invalid architecture: ${options.arch}. Valid options: ${validArchs.join(', ')}`);
process.exit(1);
}
utils_1.Logger.info(`Starting io.Connect Desktop seed repository setup for ${targetPlatform}-${targetArch}...`);
// Step 1: Validate license
if (!options.skipLicense) {
utils_1.Logger.debug('Starting license validation...', 'setup');
utils_1.Logger.info('Validating license...');
const licenseValidator = new license_validator_1.LicenseValidator();
const isValid = await licenseValidator.validate();
if (!isValid) {
utils_1.Logger.debug('License validation failed', 'setup');
utils_1.Logger.error('License validation failed. Please ensure license.json is present and valid.');
process.exit(1);
}
utils_1.Logger.debug('License validation successful', 'setup');
utils_1.Logger.success('License validation passed');
}
else {
utils_1.Logger.debug('Skipping license validation', 'setup');
}
// Step 2: Create directory structure
utils_1.Logger.info('Creating directory structure...');
await createDirectoryStructure();
utils_1.Logger.success('Directory structure created');
// Step 3: Install components
if (!options.skipComponents) {
utils_1.Logger.info(`Installing components for ${targetPlatform}-${targetArch}...`);
const componentManager = new component_manager_1.ComponentManager();
await componentManager.installAll(undefined, options.arch);
utils_1.Logger.success(`Components installed successfully for ${targetPlatform}-${targetArch}`);
}
// Step 4: Apply modifications
if (!options.skipModifications) {
utils_1.Logger.info('Applying modifications...');
const modificationManager = new modification_manager_1.ModificationManager();
await modificationManager.applyAll();
utils_1.Logger.success('Modifications applied successfully');
}
utils_1.Logger.success(`Setup completed successfully for ${targetPlatform}-${targetArch}!`);
// Provide next steps
utils_1.Logger.info('\nš Next Steps:');
utils_1.Logger.info(' iocd start - Start io.Connect Desktop');
utils_1.Logger.info(' iocd component list - View installed components');
utils_1.Logger.info(' iocd package - Create distribution package');
utils_1.Logger.info('\nš¦ Component Management:');
utils_1.Logger.info(' iocd component all - List all available components');
utils_1.Logger.info(' iocd component add <name> - Install additional components');
utils_1.Logger.info(' iocd component remove <name> - Remove installed components');
utils_1.Logger.info('\nš§ Maintenance Commands:');
utils_1.Logger.info(' iocd validate - Validate current setup');
utils_1.Logger.info(' iocd clean - Clean build artifacts');
utils_1.Logger.info(' iocd config show - Display current configuration');
utils_1.Logger.info('\nš Storage Configuration:');
utils_1.Logger.info(' š¦ HTTP Storage (default) - Ready to use!');
utils_1.Logger.info(' ⢠Default URL: http://localhost:8080');
utils_1.Logger.info(' ⢠Override: Set IOCD_HTTP_BASE_URL=https://your-server.com');
utils_1.Logger.info(' ⢠Example: https://releases.company.com/io-connect-desktop-v10.0.0-win32-x64.zip');
utils_1.Logger.info(' ⨠Built-in Components (no configuration needed):');
utils_1.Logger.info(' ⢠iocd - io.Connect Desktop runtime');
utils_1.Logger.info(' ⢠bbg-v2 - Bloomberg integration');
utils_1.Logger.info(' ⢠teams-adapter - Microsoft Teams integration');
utils_1.Logger.info(' ⢠excel-adapter - Excel integration');
utils_1.Logger.info(' āļø Optional: Run "iocd config init" for advanced storage settings');
}
catch (error) {
utils_1.Logger.error(`Setup failed: ${error instanceof Error ? error.message : String(error)}`);
process.exit(1);
}
});
async function createDirectoryStructure() {
const directories = [
utils_1.PathUtils.getComponentsDir(),
utils_1.PathUtils.getModificationsDir(),
utils_1.PathUtils.getDistDir(),
utils_1.PathUtils.getScriptsDir(),
'docs',
'.vscode'
];
for (const dir of directories) {
await utils_1.FileUtils.ensureDir(dir);
utils_1.Logger.debug(`Created directory: ${dir}`);
}
// Create .gitignore if it doesn't exist
const gitignorePath = '.gitignore';
if (!(await utils_1.FileUtils.exists(gitignorePath))) {
const gitignoreContent = `
# Dependencies
node_modules/
npm-debug.log*
# Build outputs
dist/
*.tsbuildinfo
# Environment files
.env
.env.local
# OS generated files
.DS_Store
Thumbs.db
# IDE files
.vscode/settings.json
.idea/
# Component downloads
components/
temp/
# Logs
logs/
*.log
# Runtime
.pid
.seed
.coverage
`;
await utils_1.FileUtils.writeFile(gitignorePath, gitignoreContent.trim());
}
}
//# sourceMappingURL=setup.js.map