alwaysai
Version:
The alwaysAI command-line interface (CLI)
62 lines (55 loc) • 1.89 kB
text/typescript
import { CliTerseError } from '@alwaysai/alwayscli';
import { projectSelectComponent } from './project-select-component';
import { PLEASE_REPORT_THIS_ERROR_MESSAGE } from '../../constants';
import { Spinner } from '../../util';
import {
ProjectJsonFile,
requireUserIsCollaboratorOnProject
} from '../../core/project';
import { checkConfigFileExistsAndValid } from '../../util/config-file-exists-and-is-valid';
import { PROJECT_JSON_FILE_NAME } from '../../paths';
const WRITE_MESSAGE = `Write ${PROJECT_JSON_FILE_NAME}`;
export async function findOrWriteProjectJsonFileComponent(props: {
yes: boolean;
projectUuid?: string;
}) {
const { yes } = props;
const projectJsonFile = ProjectJsonFile();
if (await checkConfigFileExistsAndValid(projectJsonFile)) {
const storedProjectUuid = projectJsonFile.read().project.id;
const projectUuid = props.projectUuid ?? storedProjectUuid;
await requireUserIsCollaboratorOnProject(projectUuid);
if (projectUuid !== storedProjectUuid) {
const project = await projectSelectComponent({ yes: true, projectUuid });
await writeProjectJsonFile(projectUuid, project.name.toString());
}
} else {
const { projectUuid } = props;
const project = await projectSelectComponent({ yes, projectUuid });
if (!project.uuid) {
throw new CliTerseError(
`Invalid project! ${PLEASE_REPORT_THIS_ERROR_MESSAGE}`
);
}
await writeProjectJsonFile(
project.uuid.toString(),
project.name.toString()
);
}
}
async function writeProjectJsonFile(projectUuid, projectName) {
const projectJsonFile = ProjectJsonFile();
const spinner = Spinner(WRITE_MESSAGE);
try {
projectJsonFile.write({
project: {
id: projectUuid,
name: projectName
}
});
spinner.succeed();
} catch (exception) {
spinner.fail();
throw exception;
}
}