UNPKG

alwaysai

Version:

The alwaysAI command-line interface (CLI)

52 lines (48 loc) 1.73 kB
import { posix } from 'path'; import * as logSymbols from 'log-symbols'; import { CliTerseError } from '@alwaysai/alwayscli'; import { APP_MODELS_DIRECTORY_NAME } from '../../../paths'; import { AppJsonFile, TargetJsonFile } from '../../../core/app'; import { ModelId } from '../../../core/model'; import { logger, echo, stringifyError } from '../../../util'; import { removeModelFromProject } from '../../project'; export async function appModelsRemoveComponent(props: { id: string; purge: boolean; removeFromProject: boolean; }) { const { id, purge, removeFromProject } = props; const appJsonFile = AppJsonFile(); const models = appJsonFile.read().models; if (!models || Object.keys(models).indexOf(id) === -1) { throw new CliTerseError(`Model ${id} not part of application config!`); } appJsonFile.removeModel(id); let success = true; if (purge) { const { publisher, name } = ModelId.parse(id); const modelDir = posix.join(APP_MODELS_DIRECTORY_NAME, publisher, name); const targetJsonFile = TargetJsonFile(); try { const targetSpawner = targetJsonFile.readHostSpawner(); await targetSpawner.rimraf(modelDir); } catch (error) { logger.error(stringifyError(error)); success = false; echo(`${logSymbols.error} Failed to purge model package: ${error}`); } } if (removeFromProject) { try { await removeModelFromProject(id); } catch (error) { logger.error(stringifyError(error)); success = false; echo(`${logSymbols.error} Failed to purge model package: ${error}`); } } if (!success) { throw new CliTerseError(`Failed during process of removing ${id}`); } echo(`${logSymbols.success} Remove ${id}`); }