alwaysai
Version:
The alwaysAI command-line interface (CLI)
42 lines (39 loc) • 1.45 kB
text/typescript
import { CliTerseError } from '@alwaysai/alwayscli';
import { APP_JSON_FILE_NAME } from '../../paths';
import { AppJsonFile } from '../../core/app';
import { Spinner, UnableToProceedWithoutMessage } from '../../util';
import { checkConfigFileExistsAndValid } from '../../util/config-file-exists-and-is-valid';
import { confirmWriteFilePromptComponent } from '../general';
const WRITE_MESSAGE = `Write ${APP_JSON_FILE_NAME}`;
const FOUND_MESSAGE = `Found ${APP_JSON_FILE_NAME}`;
export async function findOrWriteAppJsonFileComponent(props: { yes: boolean }) {
const { yes } = props;
const appJsonFile = AppJsonFile();
if (!appJsonFile.exists()) {
const confirmed =
yes ||
(await confirmWriteFilePromptComponent({
fileName: APP_JSON_FILE_NAME,
description: 'Configuration file'
}));
if (!confirmed) {
throw new CliTerseError(
UnableToProceedWithoutMessage(APP_JSON_FILE_NAME)
);
}
try {
appJsonFile.remove();
appJsonFile.initialize();
Spinner(WRITE_MESSAGE).succeed();
} catch (exception) {
Spinner(WRITE_MESSAGE).fail();
throw exception;
}
} else if (await checkConfigFileExistsAndValid(appJsonFile)) {
Spinner(FOUND_MESSAGE).succeed();
}
// if it exists but doesn't pass the checkConfigFileExistsAndValid, then it's syntax error.
else {
throw new CliTerseError(UnableToProceedWithoutMessage(APP_JSON_FILE_NAME));
}
}