UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

48 lines (46 loc) 1.46 kB
import { CliTerseError } from '@alwaysai/alwayscli'; import { confirmWriteFilePromptComponent } from '../general'; import { DOCKER_COMPOSE_FILE } from '../../paths'; import { JsSpawner, Spinner, UnableToProceedWithoutMessage } from '../../util'; import { DockerComposeCmd } from '../../util/docker'; import { writeDockerComposeFile } from '../../core/app'; const WRITE_MESSAGE = `Write ${DOCKER_COMPOSE_FILE}`; const FOUND_MESSAGE = `Found ${DOCKER_COMPOSE_FILE}`; export async function findOrWriteDockerComposeFileComponent(props: { yes: boolean; cmd: DockerComposeCmd; }): Promise<boolean> { const { yes, cmd } = props; const spawner = JsSpawner(); if (await spawner.exists(DOCKER_COMPOSE_FILE)) { Spinner(FOUND_MESSAGE).succeed(); return true; } { // !exists const confirmed = yes || (await confirmWriteFilePromptComponent({ fileName: DOCKER_COMPOSE_FILE })); if (!confirmed) { throw new CliTerseError( UnableToProceedWithoutMessage(DOCKER_COMPOSE_FILE) ); } const spinner = Spinner(WRITE_MESSAGE); try { await writeDockerComposeFile({ spawner, cmd }); spinner.succeed(); return false; } catch (exception) { if (exception.code === 'EEXIST') { // Unlikely scenario that the file did not exist but now does spinner.succeed(FOUND_MESSAGE); return true; } spinner.fail(); throw exception; } } }