UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

69 lines 2.31 kB
import chalk from 'chalk'; import inquirer from 'inquirer'; import { execSync } from './shell.js'; import { logger } from './logger.js'; const getConfirmationMessage = action => `Continue ${action} the latest ${chalk.yellow('Composer dependencies')}`; const confirmComposerAction = async (action, options = {}, dependencies = {}) => { const { promptImpl = inquirer.prompt } = dependencies; if (options.allYes === true) { return true; } const { isConfirmed } = await promptImpl([{ type: 'confirm', name: 'isConfirmed', default: true, message: getConfirmationMessage(action) }]); return isConfirmed; }; const runComposerCommand = (action, options = {}, dependencies = {}) => { const { execSyncImpl = execSync } = dependencies; const commandOptions = { cwd: options.cwd, dryRun: options.dryRun === true, ignorePlatformReqs: options.force === true, log: options.log === true }; try { return execSyncImpl(`composer ${action}`, commandOptions); } catch (error) { const workingDirectory = options.cwd ?? process.cwd(); const renderedCommand = ['composer', action, commandOptions.dryRun ? '--dry-run' : null, commandOptions.ignorePlatformReqs ? '--ignore-platform-reqs' : null].filter(Boolean).join(' '); throw new Error(`${renderedCommand} failed in ${workingDirectory}. ${error.message}`); } }; const manageComposerDependencies = async (action, options = {}, dependencies = {}) => { const { execSyncImpl = execSync, loggerImpl = logger, promptImpl = inquirer.prompt } = dependencies; const isConfirmed = await confirmComposerAction(action, options, { promptImpl }); if (!isConfirmed) { loggerImpl.info(`Composer ${action} cancelled.`); return; } loggerImpl.info(`Simulating composer ${action}...`); runComposerCommand(action, { ...options, dryRun: true }, { execSyncImpl }); runComposerCommand(action, { ...options, log: true }, { execSyncImpl }); }; export const installComposerDependencies = async (options = {}, dependencies = {}) => manageComposerDependencies('install', options, dependencies); export const updateComposerDependencies = async (options = {}, dependencies = {}) => manageComposerDependencies('update', options, dependencies);