UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

62 lines (55 loc) 1.89 kB
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; } }