import type { ProjectPluginConfig, ProjectPluginConfigModulesField } from '@/types' export const checkSubModuleScene = ( rootModule: ProjectPluginConfigModulesField, moduleType: string, ) => { const { id, modules } = rootModule if (!Array.isArray(modules)) { throw `the module ${moduleType}@${id} should contain sub modules` } // eslint-disable-next-line @typescript-eslint/no-explicit-any const renderModules = modules.filter((module: any) => module?.scene == 'render') if (renderModules.length !== 1) { throw `the module ${moduleType}@${id} should contain 1 sub module whose scene is 'render' but got ${renderModules.length}` } // eslint-disable-next-line @typescript-eslint/no-explicit-any const settingModules = modules.filter((module: any) => module?.scene == 'setting') if (settingModules.length > 1) { throw `the module ${moduleType}@${id} should contain a maximum of 1 sub module whose scene is 'setting' but got ${settingModules.length}` } } export const checkRequiredFields = async ( rootModule: ProjectPluginConfigModulesField, moduleType: string, requiredFields: string[], ) => { const { id } = rootModule for (const field of requiredFields) { if (!rootModule[field as keyof typeof rootModule]) { throw `the module ${moduleType}@${id} should contain the field '${field}'` } } } export const getPluginAbilitiy = (pluginConfig: ProjectPluginConfig, ability: string) => { const [abilityType, abilityVersion] = ability.split('@') const { apis = [], abilities = [] } = pluginConfig if (abilityType === 'api-register-jack') { return apis } return abilities.filter((abilityConfig) => { return abilityConfig.abilityType === abilityType && abilityConfig.version === abilityVersion }) }