@principal-ai/quality-lens-cli 0.1.41 → 0.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.js +1 -1
  2. package/package.json +1 -1
package/dist/cli.js CHANGED
@@ -1103,7 +1103,7 @@ jobs:
1103
1103
  name: quality-lens-results-\${{ github.sha }}
1104
1104
  path: results.json
1105
1105
  if-no-files-found: warn
1106
- `,h6e={eslint:{bin:"eslint",args:[".","--ext",".ts,.tsx,.js,.jsx","--format","json"]},lint:{bin:"eslint",args:[".","--ext",".ts,.tsx,.js,.jsx","--format","json"]},typescript:{bin:"tsc",args:["--noEmit","--pretty","false","--listFiles"]},typecheck:{bin:"tsc",args:["--noEmit","--pretty","false","--listFiles"]},jest:{bin:"jest",args:["--passWithNoTests","--json","--no-colors"]},test:{bin:"jest",args:["--passWithNoTests","--json","--no-colors"]},prettier:{bin:"prettier",args:["--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"]},format:{bin:"prettier",args:["--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"]},knip:{bin:"knip",args:["--reporter","json"]},alexandria:{bin:"alexandria",args:["coverage","--json"]},docs:{bin:"alexandria",args:["coverage","--json"]}},Goe={eslint:["npx","--yes","eslint",".","--ext",".ts,.tsx,.js,.jsx","--format","json"],lint:["npx","--yes","eslint",".","--ext",".ts,.tsx,.js,.jsx","--format","json"],typescript:["npx","--yes","tsc","--noEmit","--pretty","false","--listFiles"],typecheck:["npx","--yes","tsc","--noEmit","--pretty","false","--listFiles"],jest:["npx","--yes","jest","--passWithNoTests","--json","--no-colors"],test:["npx","--yes","jest","--passWithNoTests","--json","--no-colors"],prettier:["npx","--yes","prettier","--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"],format:["npx","--yes","prettier","--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"],knip:["npx","--yes","knip","--reporter","json"],alexandria:["npx","--yes","@principal-ai/alexandria-cli","coverage","--json"],docs:["npx","--yes","@principal-ai/alexandria-cli","coverage","--json"]};async function hfr(_,c){let f=dE.join(_,"node_modules",".bin",c);try{return await MT.access(f),!0}catch{return!1}}function gfr(_,c){let f=Date.now(),g=h6e[_];return g?new Promise(S=>{let k="",J="",fe=`"${dE.join(c,"node_modules",".bin",g.bin)}" ${g.args.join(" ")}`,me=(0,g6e.spawn)(fe,[],{cwd:c,shell:!0});me.stdout&&me.stdout.on("data",be=>{k+=be.toString()}),me.stderr&&me.stderr.on("data",be=>{J+=be.toString()}),me.on("close",be=>{S({success:be!==null&&be!==127,stdout:k,stderr:J,duration:Date.now()-f,exitCode:be??1})}),me.on("error",be=>{S({success:!1,stdout:k,stderr:J||be.message,duration:Date.now()-f,exitCode:1})})}):Promise.resolve({success:!1,stdout:"",stderr:`No local command defined for lens: ${_}`,duration:Date.now()-f,exitCode:1})}function yfr(_,c){let f=Date.now(),g=Goe[_];return g?new Promise(S=>{let k="",J="",ee=g.join(" "),fe=(0,g6e.spawn)(ee,[],{cwd:c,shell:!0});fe.stdout&&fe.stdout.on("data",me=>{k+=me.toString()}),fe.stderr&&fe.stderr.on("data",me=>{J+=me.toString()}),fe.on("close",me=>{S({success:me!==null&&me!==127,stdout:k,stderr:J,duration:Date.now()-f,exitCode:me??1})}),fe.on("error",me=>{S({success:!1,stdout:k,stderr:J||me.message,duration:Date.now()-f,exitCode:1})})}):Promise.resolve({success:!1,stdout:"",stderr:`No npx command defined for lens: ${_}`,duration:Date.now()-f,exitCode:1})}async function Fpt(_){let c=await kpt(_,"");return new $oe().build({files:c,rootPath:_})}async function kpt(_,c){let f=[],g=await MT.readdir(_,{withFileTypes:!0});for(let S of g){if(vfr(S.name))continue;let k=dE.join(_,S.name),J=c?`${c}/${S.name}`:S.name;if(S.isDirectory()){let ee=await kpt(k,J);f.push(...ee)}else S.isFile()&&f.push(J)}return f}function vfr(_){return["node_modules",".git",".next",".nuxt","dist","build","coverage",".turbo",".cache"].includes(_)||_.startsWith(".")}async function Dfr(_){let c=new h$,f=new Joe,g=new qoe,S=new Voe;try{let k=dE.resolve(_.path);console.log(`Scanning repository: ${k}`);let J=await Fpt(k);g.setFileTree(J);let ee=await c.extractPackages(J,k);ee.length===0&&(console.warn("No packages found in repository"),process.exit(1)),console.log(`Found ${ee.length} package(s)`);let fe=_.lenses?_.lenses.split(",").map(Ie=>Ie.trim()):null,me=[];for(let Ie of ee){let X=Ie.packageData.availableCommands?.filter(We=>!(!We.isLensCommand||fe&&!fe.includes(We.lensId||"")||We.name.includes("watch")||We.name.includes(":dev")));if(!X||X.length===0){console.log(`Skipping ${Ie.packageData.name} (no lens commands)`);continue}console.log(`
1106
+ `,h6e={eslint:{bin:"eslint",args:[".","--ext",".ts,.tsx,.js,.jsx","--format","json"]},lint:{bin:"eslint",args:[".","--ext",".ts,.tsx,.js,.jsx","--format","json"]},typescript:{bin:"tsc",args:["--noEmit","--pretty","false","--listFiles"]},typecheck:{bin:"tsc",args:["--noEmit","--pretty","false","--listFiles"]},jest:{bin:"jest",args:["--passWithNoTests","--json","--no-colors","--coverage"]},test:{bin:"jest",args:["--passWithNoTests","--json","--no-colors","--coverage"]},prettier:{bin:"prettier",args:["--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"]},format:{bin:"prettier",args:["--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"]},knip:{bin:"knip",args:["--reporter","json"]},alexandria:{bin:"alexandria",args:["coverage","--json"]},docs:{bin:"alexandria",args:["coverage","--json"]}},Goe={eslint:["npx","--yes","eslint",".","--ext",".ts,.tsx,.js,.jsx","--format","json"],lint:["npx","--yes","eslint",".","--ext",".ts,.tsx,.js,.jsx","--format","json"],typescript:["npx","--yes","tsc","--noEmit","--pretty","false","--listFiles"],typecheck:["npx","--yes","tsc","--noEmit","--pretty","false","--listFiles"],jest:["npx","--yes","jest","--passWithNoTests","--json","--no-colors","--coverage"],test:["npx","--yes","jest","--passWithNoTests","--json","--no-colors","--coverage"],prettier:["npx","--yes","prettier","--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"],format:["npx","--yes","prettier","--check",".","--no-error-on-unmatched-pattern","--no-color","--log-level","debug"],knip:["npx","--yes","knip","--reporter","json"],alexandria:["npx","--yes","@principal-ai/alexandria-cli","coverage","--json"],docs:["npx","--yes","@principal-ai/alexandria-cli","coverage","--json"]};async function hfr(_,c){let f=dE.join(_,"node_modules",".bin",c);try{return await MT.access(f),!0}catch{return!1}}function gfr(_,c){let f=Date.now(),g=h6e[_];return g?new Promise(S=>{let k="",J="",fe=`"${dE.join(c,"node_modules",".bin",g.bin)}" ${g.args.join(" ")}`,me=(0,g6e.spawn)(fe,[],{cwd:c,shell:!0});me.stdout&&me.stdout.on("data",be=>{k+=be.toString()}),me.stderr&&me.stderr.on("data",be=>{J+=be.toString()}),me.on("close",be=>{S({success:be!==null&&be!==127,stdout:k,stderr:J,duration:Date.now()-f,exitCode:be??1})}),me.on("error",be=>{S({success:!1,stdout:k,stderr:J||be.message,duration:Date.now()-f,exitCode:1})})}):Promise.resolve({success:!1,stdout:"",stderr:`No local command defined for lens: ${_}`,duration:Date.now()-f,exitCode:1})}function yfr(_,c){let f=Date.now(),g=Goe[_];return g?new Promise(S=>{let k="",J="",ee=g.join(" "),fe=(0,g6e.spawn)(ee,[],{cwd:c,shell:!0});fe.stdout&&fe.stdout.on("data",me=>{k+=me.toString()}),fe.stderr&&fe.stderr.on("data",me=>{J+=me.toString()}),fe.on("close",me=>{S({success:me!==null&&me!==127,stdout:k,stderr:J,duration:Date.now()-f,exitCode:me??1})}),fe.on("error",me=>{S({success:!1,stdout:k,stderr:J||me.message,duration:Date.now()-f,exitCode:1})})}):Promise.resolve({success:!1,stdout:"",stderr:`No npx command defined for lens: ${_}`,duration:Date.now()-f,exitCode:1})}async function Fpt(_){let c=await kpt(_,"");return new $oe().build({files:c,rootPath:_})}async function kpt(_,c){let f=[],g=await MT.readdir(_,{withFileTypes:!0});for(let S of g){if(vfr(S.name))continue;let k=dE.join(_,S.name),J=c?`${c}/${S.name}`:S.name;if(S.isDirectory()){let ee=await kpt(k,J);f.push(...ee)}else S.isFile()&&f.push(J)}return f}function vfr(_){return["node_modules",".git",".next",".nuxt","dist","build","coverage",".turbo",".cache"].includes(_)||_.startsWith(".")}async function Dfr(_){let c=new h$,f=new Joe,g=new qoe,S=new Voe;try{let k=dE.resolve(_.path);console.log(`Scanning repository: ${k}`);let J=await Fpt(k);g.setFileTree(J);let ee=await c.extractPackages(J,k);ee.length===0&&(console.warn("No packages found in repository"),process.exit(1)),console.log(`Found ${ee.length} package(s)`);let fe=_.lenses?_.lenses.split(",").map(Ie=>Ie.trim()):null,me=[];for(let Ie of ee){let X=Ie.packageData.availableCommands?.filter(We=>!(!We.isLensCommand||fe&&!fe.includes(We.lensId||"")||We.name.includes("watch")||We.name.includes(":dev")));if(!X||X.length===0){console.log(`Skipping ${Ie.packageData.name} (no lens commands)`);continue}console.log(`
1107
1107
  Running lenses for ${Ie.packageData.name}...`);let rt=Ie.packageData.path||"",Ue=rt?dE.join(k,rt):k;for(let We of X){let At=We.lensId||"unknown";console.log(` - ${At}: ${We.name}`);try{let Vt;if(_.install&&(h6e[At]||Goe[At])){let Ir=h6e[At],qr=Ir?await hfr(Ue,Ir.bin):!1,ui,Li;qr&&Ir?(console.log(` [local] Using installed ${Ir.bin}`),ui=await gfr(At,Ue),Li=`node_modules/.bin/${Ir.bin} ${Ir.args.join(" ")}`):Goe[At]?(console.log(" [npx] Tool not installed locally, using npx"),ui=await yfr(At,Ue),Li=Goe[At].join(" ")):(ui={success:!1,stdout:"",stderr:`No command available for lens: ${At}`,duration:0,exitCode:1},Li="none");let Ln=dfr(At,ui.stdout,ui.stderr,ui.exitCode,Ue);Vt={success:ui.success,toolName:At,command:Li,packagePath:rt,exitCode:ui.exitCode,duration:ui.duration,stdout:ui.stdout,stderr:ui.stderr,lensResult:Ln}}else Vt=await f.executeTool({repoPath:k,packageLayer:Ie,packageCommand:We});me.push({package:Ie.packageData.name,packagePath:Ie.packageData.path,lens:At,command:We.name,result:Vt,timestamp:Date.now()}),console.log(` ${Vt.success?"\u2713":"\u2717"} ${Vt.success?"Success":"Failed"} (${Vt.duration}ms)`)}catch(Vt){let Ir=Vt instanceof Error?Vt.message:String(Vt);console.error(` \u2717 Error: ${Ir}`),me.push({package:Ie.packageData.name,packagePath:Ie.packageData.path,lens:At,command:We.name,error:Ir,timestamp:Date.now()})}}}if(_.format==="json"){let Ie=g.format(me);_.output?(await MT.writeFile(_.output,Ie,"utf-8"),console.log(`
1108
1108
  Results written to: ${_.output}`)):console.log(`
1109
1109
  `+Ie)}else S.report(me);let be=me.some(Ie=>Ie.error||!Ie.result?.success);process.exit(be?1:0)}catch(k){let J=k instanceof Error?k.message:String(k);console.error("Fatal error:",J),process.exit(1)}}jKe(sxe(process.argv)).command("run [path]","Run quality lenses on repository",_=>_.positional("path",{describe:"Repository path",type:"string",default:process.cwd()}).option("output",{alias:"o",describe:"Output file for results",type:"string"}).option("lenses",{describe:"Specific lenses to run (comma-separated)",type:"string",example:"eslint,jest,typescript"}).option("format",{describe:"Output format",choices:["json","console"],default:"console"}).option("install",{alias:"i",describe:"Run tools via npx (no local dependencies required)",type:"boolean",default:!1}),_=>Dfr(_)).command("list [path]","List available lenses in repository",_=>_.positional("path",{describe:"Repository path",type:"string",default:process.cwd()}),async _=>{let c=dE.resolve(_.path??process.cwd()),f=new h$;console.log(`Scanning repository: ${c}`);let g=await Fpt(c);(await f.extractPackages(g,c)).forEach(k=>{console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/quality-lens-cli",
3
- "version": "0.1.41",
3
+ "version": "0.1.42",
4
4
  "description": "CLI tool for running quality lenses on codebases in CI/CD pipelines",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",