@principal-ai/quality-lens-cli 0.1.12 → 0.1.13

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
@@ -1030,7 +1030,7 @@ jobs:
1030
1030
  name: quality-lens-results-\${{ github.sha }}
1031
1031
  path: results.json
1032
1032
  if-no-files-found: warn
1033
- `,Hke={eslint:["npx","eslint",".","--ext",".ts,.tsx,.js,.jsx"],typescript:["npx","tsc","--noEmit"],jest:["npx","jest","--passWithNoTests"],prettier:["npx","prettier","--check","."],knip:["npx","knip"],alexandria:["npx","@principal-ai/alexandria-cli","lint"]};function Dlr(p,c){let _=Date.now(),g=Hke[p];return g?new Promise(S=>{let w="",z="",ie=g.join(" "),de=(0,$_t.spawn)(ie,[],{cwd:c,shell:!0});de.stdout&&de.stdout.on("data",be=>{w+=be.toString()}),de.stderr&&de.stderr.on("data",be=>{z+=be.toString()}),de.on("close",be=>{S({success:be===0,stdout:w,stderr:z,duration:Date.now()-_})}),de.on("error",be=>{S({success:!1,stdout:w,stderr:z||be.message,duration:Date.now()-_})})}):Promise.resolve({success:!1,stdout:"",stderr:`No npx command defined for lens: ${p}`,duration:Date.now()-_})}async function H_t(p){let c=await K_t(p,"");return new Roe().build({files:c,rootPath:p})}async function K_t(p,c){let _=[],g=await Ik.readdir(p,{withFileTypes:!0});for(let S of g){if(blr(S.name))continue;let w=kk.join(p,S.name),z=c?`${c}/${S.name}`:S.name;if(S.isDirectory()){let ie=await K_t(w,z);_.push(...ie)}else S.isFile()&&_.push(z)}return _}function blr(p){return["node_modules",".git",".next",".nuxt","dist","build","coverage",".turbo",".cache"].includes(p)||p.startsWith(".")}async function Clr(p){let c=new oG,_=new Ioe,g=new woe,S=new Loe;try{let w=kk.resolve(p.path);console.log(`Scanning repository: ${w}`);let z=await H_t(w),ie=await c.extractPackages(z,w);ie.length===0&&(console.warn("No packages found in repository"),process.exit(1)),console.log(`Found ${ie.length} package(s)`);let de=p.lenses?p.lenses.split(",").map(Oe=>Oe.trim()):null,be=[];for(let Oe of ie){let Y=Oe.packageData.availableCommands?.filter(We=>!(!We.isLensCommand||de&&!de.includes(We.lensId||"")));if(!Y||Y.length===0){console.log(`Skipping ${Oe.packageData.name} (no lens commands)`);continue}console.log(`
1033
+ `,Hke={eslint:["npx","--yes","eslint",".","--ext",".ts,.tsx,.js,.jsx"],lint:["npx","--yes","eslint",".","--ext",".ts,.tsx,.js,.jsx"],typescript:["npx","--yes","tsc","--noEmit"],typecheck:["npx","--yes","tsc","--noEmit"],jest:["npx","--yes","jest","--passWithNoTests"],test:["npx","--yes","jest","--passWithNoTests"],prettier:["npx","--yes","prettier","--check","."],format:["npx","--yes","prettier","--check","."],knip:["npx","--yes","knip"],alexandria:["npx","--yes","@principal-ai/alexandria-cli","lint"],docs:["npx","--yes","@principal-ai/alexandria-cli","lint"]};function Dlr(p,c){let _=Date.now(),g=Hke[p];return g?new Promise(S=>{let w="",z="",ie=g.join(" "),de=(0,$_t.spawn)(ie,[],{cwd:c,shell:!0});de.stdout&&de.stdout.on("data",be=>{w+=be.toString()}),de.stderr&&de.stderr.on("data",be=>{z+=be.toString()}),de.on("close",be=>{S({success:be===0,stdout:w,stderr:z,duration:Date.now()-_})}),de.on("error",be=>{S({success:!1,stdout:w,stderr:z||be.message,duration:Date.now()-_})})}):Promise.resolve({success:!1,stdout:"",stderr:`No npx command defined for lens: ${p}`,duration:Date.now()-_})}async function H_t(p){let c=await K_t(p,"");return new Roe().build({files:c,rootPath:p})}async function K_t(p,c){let _=[],g=await Ik.readdir(p,{withFileTypes:!0});for(let S of g){if(blr(S.name))continue;let w=kk.join(p,S.name),z=c?`${c}/${S.name}`:S.name;if(S.isDirectory()){let ie=await K_t(w,z);_.push(...ie)}else S.isFile()&&_.push(z)}return _}function blr(p){return["node_modules",".git",".next",".nuxt","dist","build","coverage",".turbo",".cache"].includes(p)||p.startsWith(".")}async function Clr(p){let c=new oG,_=new Ioe,g=new woe,S=new Loe;try{let w=kk.resolve(p.path);console.log(`Scanning repository: ${w}`);let z=await H_t(w),ie=await c.extractPackages(z,w);ie.length===0&&(console.warn("No packages found in repository"),process.exit(1)),console.log(`Found ${ie.length} package(s)`);let de=p.lenses?p.lenses.split(",").map(Oe=>Oe.trim()):null,be=[];for(let Oe of ie){let Y=Oe.packageData.availableCommands?.filter(We=>!(!We.isLensCommand||de&&!de.includes(We.lensId||"")));if(!Y||Y.length===0){console.log(`Skipping ${Oe.packageData.name} (no lens commands)`);continue}console.log(`
1034
1034
  Running lenses for ${Oe.packageData.name}...`);let ut=Oe.packageData.path||"",Ye=ut?kk.join(w,ut):w;for(let We of Y){let Ut=We.lensId||"unknown";console.log(` - ${Ut}: ${We.name}`);try{let _r;if(p.install&&Hke[Ut]){let Hr=await Dlr(Ut,Ye);_r={success:Hr.success,toolName:Ut,command:Hke[Ut].join(" "),packagePath:ut,exitCode:Hr.success?0:1,duration:Hr.duration,stdout:Hr.stdout,stderr:Hr.stderr}}else _r=await _.executeTool({repoPath:w,packageLayer:Oe,packageCommand:We});be.push({package:Oe.packageData.name,packagePath:Oe.packageData.path,lens:Ut,command:We.name,result:_r,timestamp:Date.now()}),console.log(` ${_r.success?"\u2713":"\u2717"} ${_r.success?"Success":"Failed"} (${_r.duration}ms)`)}catch(_r){console.error(` \u2717 Error: ${_r.message}`),be.push({package:Oe.packageData.name,packagePath:Oe.packageData.path,lens:Ut,command:We.name,error:_r.message,timestamp:Date.now()})}}}if(p.format==="json"){let Oe=g.format(be);p.output?(await Ik.writeFile(p.output,Oe,"utf-8"),console.log(`
1035
1035
  Results written to: ${p.output}`)):console.log(`
1036
1036
  `+Oe)}else S.report(be);let Ee=be.some(Oe=>Oe.error||!Oe.result?.success);process.exit(Ee?1:0)}catch(w){console.error("Fatal error:",w.message),process.exit(1)}}hKe(HEe(process.argv)).command("run [path]","Run quality lenses on repository",p=>p.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}),p=>Clr(p)).command("list [path]","List available lenses in repository",p=>p.positional("path",{describe:"Repository path",type:"string",default:process.cwd()}),async p=>{let c=kk.resolve(p.path),_=new oG;console.log(`Scanning repository: ${c}`);let g=await H_t(c);(await _.extractPackages(g,c)).forEach(w=>{console.log(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ai/quality-lens-cli",
3
- "version": "0.1.12",
3
+ "version": "0.1.13",
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",