alwaysai
Version:
The alwaysAI command-line interface (CLI)
48 lines (46 loc) • 1.46 kB
text/typescript
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;
}
}
}