1*ffe4ee79STomasz Sapetaimport { Command } from '@expo/commander'; 2*ffe4ee79STomasz Sapeta 3*ffe4ee79STomasz Sapetaimport { DependencyKind } from '../Packages'; 4*ffe4ee79STomasz Sapetaimport { PackagesGraph, printGraph, printNodeDependents } from '../packages-graph'; 5*ffe4ee79STomasz Sapeta 6*ffe4ee79STomasz Sapetatype ActionOptions = { 7*ffe4ee79STomasz Sapeta dev: boolean; 8*ffe4ee79STomasz Sapeta peer: boolean; 9*ffe4ee79STomasz Sapeta listDependentsOf: string; 10*ffe4ee79STomasz Sapeta}; 11*ffe4ee79STomasz Sapeta 12*ffe4ee79STomasz Sapetaasync function action(packageNames: string[], options: ActionOptions) { 13*ffe4ee79STomasz Sapeta const graph = await PackagesGraph.makeFromPublicPackages(); 14*ffe4ee79STomasz Sapeta const dependencyKinds = [ 15*ffe4ee79STomasz Sapeta DependencyKind.Normal, 16*ffe4ee79STomasz Sapeta options.dev && DependencyKind.Dev, 17*ffe4ee79STomasz Sapeta options.peer && DependencyKind.Peer, 18*ffe4ee79STomasz Sapeta ].filter(Boolean) as DependencyKind[]; 19*ffe4ee79STomasz Sapeta 20*ffe4ee79STomasz Sapeta if (options.listDependentsOf) { 21*ffe4ee79STomasz Sapeta const packageName = options.listDependentsOf; 22*ffe4ee79STomasz Sapeta const node = graph.getNode(packageName); 23*ffe4ee79STomasz Sapeta 24*ffe4ee79STomasz Sapeta if (!node) { 25*ffe4ee79STomasz Sapeta throw new Error(`Package with name "${packageName}" not found`); 26*ffe4ee79STomasz Sapeta } 27*ffe4ee79STomasz Sapeta printNodeDependents(node, dependencyKinds); 28*ffe4ee79STomasz Sapeta return; 29*ffe4ee79STomasz Sapeta } 30*ffe4ee79STomasz Sapeta 31*ffe4ee79STomasz Sapeta printGraph(graph, packageNames, dependencyKinds); 32*ffe4ee79STomasz Sapeta} 33*ffe4ee79STomasz Sapeta 34*ffe4ee79STomasz Sapetaexport default (program: Command) => { 35*ffe4ee79STomasz Sapeta program 36*ffe4ee79STomasz Sapeta .command('packages-dependency-graph [packageNames...]') 37*ffe4ee79STomasz Sapeta .alias('pdg') 38*ffe4ee79STomasz Sapeta .option('--dev', 'Whether to include dev dependencies', false) 39*ffe4ee79STomasz Sapeta .option('--peer', 'Whether to include peer dependencies', false) 40*ffe4ee79STomasz Sapeta .option('--list-dependents-of <packageName>', 'Lists all dependents of the given package', '') 41*ffe4ee79STomasz Sapeta .asyncAction(action); 42*ffe4ee79STomasz Sapeta}; 43