import { traverse } from '@/scripts/scan/traverse' import { createTerminalTable, getPluginAbilityTypes, getPluginModuleTypes, getScanConfig, MANIFEST_SCAN_PATTERN_FRAGMENT, scanCodingAPIs, transformScanResultToPattern, } from '@ones-open/cli-utils' import type { ApiCollectedResultItem, ManifestSchema, ProjectPluginConfig, } from '@ones-open/cli-utils' import chalk from 'chalk' export const generateManifestContent = async (): Promise => { const scanConfig = await getScanConfig() const { roots } = scanConfig const apiScanResults: Array = [] const scanTasks = roots.map((rootPath) => { return traverse( rootPath, async (filePath) => { apiScanResults.push(...(await scanCodingAPIs(filePath, scanConfig))) }, scanConfig, ) }) await Promise.all(scanTasks) const manifestContent: ManifestSchema = { apis: apiScanResults.map((item) => { const { value, location: { file: absoluteFilePath, line, column }, } = item const relativeFilePath = absoluteFilePath.replace(process.cwd(), '.') return { code: value, location: `${relativeFilePath}:${line}:${column}`, pattern: transformScanResultToPattern(item, MANIFEST_SCAN_PATTERN_FRAGMENT), } }), } return manifestContent } export const printManifest = async ( manifestContent: ManifestSchema, pluginContent: ProjectPluginConfig, ) => { const { apis = [] } = manifestContent const moduleTypes = getPluginModuleTypes(pluginContent) const abilities = getPluginAbilityTypes(pluginContent) const manifestTable = createTerminalTable({ 'ONES Apis': 1, 'Modules': 1, 'Abilities': 1, }) const spliter = '\n\0\n' manifestTable.push([ apis.map(({ code, location }) => `${chalk.green(code)}\n at ${location}`).join(spliter), moduleTypes.join(spliter), abilities.join(spliter), ]) // eslint-disable-next-line no-console console.log(manifestTable.toString()) }