import { CliTree, CliTrees, objectPropertiesToCliTrees, writeCliTree } from '@cirrusct/cli-utils'; import { MrCommandHandler, MrCommandResults, MrPackage } from '@cirrusct/mr-core'; import { ListCommandOptions } from './types'; const getDepsTrees = (mrPackage: MrPackage, deep: boolean = false, includeIndirect: boolean = false): CliTrees => { const getDeps = (pkg: MrPackage) => pkg.getLocalDependencyPackages(!includeIndirect).filter(p => !!!p.config.value.ignore); const mrPackagesToTrees = (pkgs: MrPackage[]): CliTrees => { const trees = pkgs.map(p => mrPackageToTree(p)); return trees.length > 0 ? trees : [{ name: '(none)', color: 'grey' }]; }; const mrPackageToTree = (pkg: MrPackage): CliTree => { const tree: CliTree = { name: pkg.name, hint: pkg.version, }; if (deep) { const deps = getDeps(pkg); tree.children = deps.length > 0 ? mrPackagesToTrees(deps) : []; } return tree; }; const depsx = getDeps(mrPackage); return mrPackagesToTrees(getDeps(mrPackage)); }; export const handleCommand: MrCommandHandler = async ({ options, session, logger, packages }) => { debugger; for (const pkg of packages) { const subTrees: CliTrees = []; await session.setCurrentPackageAsync(pkg); // Package props subtree const packageProps = ['version', 'description']; const packageData = {}; for (const prop of packageProps) { if (pkg[prop] && pkg[prop].length > 0) { packageData[prop] = pkg[prop]; } } const pkgTree: CliTree = { name: 'package', children: objectPropertiesToCliTrees(packageData), }; subTrees.push(pkgTree); // Dependencies subtree if (options.showDeps || options.showDepsDeep || options.showDepsIndirect) { const depTree: CliTree = { name: 'Mr dependencies', children: getDepsTrees(pkg, !!options.showDepsDeep, !!options.showDepsIndirect), }; subTrees.push(depTree); } // Build Config subtree if (options.showConfig) { const config = await pkg.config.value; const depTree: CliTree = { name: 'config', children: objectPropertiesToCliTrees(config), }; subTrees.push(depTree); } const tree: CliTree = { name: pkg.name, children: subTrees, }; writeCliTree(tree, process.stdout); } return { exitCode: 0, }; };