import type { ProjectPluginConfig } from '@ones-open/cli-utils' import { PLUGIN_CONFIG_RELATIVE_PATH, getYamlConfigContent, updateYamlConfigContent, } from '@ones-open/cli-utils' import { merge } from '@senojs/lodash' import { join } from 'path' import { cwd } from 'process' const APP_ID_PREFIX = 'dev_' as const function getPluginYamlPath() { return join(cwd(), PLUGIN_CONFIG_RELATIVE_PATH) } async function removePrefixOfAppIDInPluginYaml() { const pluginConfigPath = getPluginYamlPath() const pluginConfigContent = await getYamlConfigContent(pluginConfigPath) const { app_id } = pluginConfigContent.service if (!app_id.startsWith(APP_ID_PREFIX)) { return } await updateYamlConfigContent( pluginConfigPath, merge(pluginConfigContent, { service: { app_id: app_id.replace(APP_ID_PREFIX, ''), }, }), ) } async function addPrefixOfAppIDInPluginYaml() { const pluginConfigPath = getPluginYamlPath() const pluginConfigContent = await getYamlConfigContent(pluginConfigPath) const { app_id } = pluginConfigContent.service if (app_id.startsWith(APP_ID_PREFIX)) { return } await updateYamlConfigContent( pluginConfigPath, merge(pluginConfigContent, { service: { app_id: `${APP_ID_PREFIX}${app_id}`, }, }), ) } export async function wrapperActionWithDevAppID( cb: () => Promise, skipWrapper: boolean, ): Promise { if (skipWrapper) { await removePrefixOfAppIDInPluginYaml() return await cb() } try { await addPrefixOfAppIDInPluginYaml() return await cb() } finally { await removePrefixOfAppIDInPluginYaml() } }