import { getMinSystemVersion } from '@/scripts/min-system-version' import type { ProjectPluginConfig } from '@ones-open/cli-utils' import { clone } from '@senojs/lodash' import chalk from 'chalk' import Listr from 'listr' import type { ListrTask, ListrContext, ListrTaskWrapper } from 'listr' import { getPluginConfigContent, updatePluginConfigContent } from './common' interface UpdateMinSystemVersionTasksContext { newPluginConfig: ProjectPluginConfig } function generateUpdateMinSystemVersionTask(min_system_version: string) { const subTasks: ListrTask[] = [ { title: 'Generating new plugin config', task: async (ctx) => { const pluginConfig = await getPluginConfigContent() const clonedPluginConfigContent = clone(pluginConfig) clonedPluginConfigContent.service.min_system_version = min_system_version ctx.newPluginConfig = clonedPluginConfigContent }, }, { title: 'Updating plugin config', task: ({ newPluginConfig }) => updatePluginConfigContent(newPluginConfig), }, ] const updateTask = new Listr(subTasks) return updateTask } function getUpdateMinSystemVersionTask() { return { title: 'Updating min_system_version in plugin.yaml', task: async (ctx: ListrContext, task: ListrTaskWrapper) => { const pluginConfig = await getPluginConfigContent() const abilities = pluginConfig.abilities if (!abilities?.length) { task.skip('The list of abilities is empty in plugin.yaml') return } const min_system_version = await getMinSystemVersion({ pluginConfigAbilities: abilities }) if (pluginConfig.service.min_system_version === min_system_version) { task.skip('The value of min_system_version has not changed') return } else { // 当 `min_system_version` 变动时,提示用户 const indent = ` ` const tips = chalk.yellow( `${indent}Warning: According to the abilities you added in plugin \n${indent}min_system_version: ${pluginConfig.service.min_system_version} -> ${min_system_version}`, ) task.title += `\n${tips}` } return generateUpdateMinSystemVersionTask(min_system_version) }, } } export { getUpdateMinSystemVersionTask }