@ale0aranda/conform 0.1.0

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.
package/dist/cli.js ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import {resolve,join}from'path';import {access,readFile}from'fs/promises';import o from'picocolors';var i=async({cwd:e})=>{try{return await access(join(e,"biome.json")),{name:"Biome",status:"pass",message:"Biome configuration detected"}}catch{return {name:"Biome",status:"fail",message:"Biome configuration is missing"}}};var m=async({cwd:e})=>{let s=join(e,"package.json");try{return await access(s),{name:"package.json",status:"pass",message:"Project manifest detected"}}catch{return {name:"package.json",status:"fail",message:"Project manifest is missing"}}};var l=async({cwd:e})=>{try{return await access(join(e,"pnpm-lock.yaml")),{name:"pnpm",status:"pass",message:"pnpm workspace detected"}}catch{return {name:"pnpm",status:"fail",message:"pnpm lockfile is missing"}}};var p=async({cwd:e})=>{try{let s=await readFile(join(e,"package.json"),"utf8"),n=JSON.parse(s);return "@ale0aranda/rules"in{...n.dependencies,...n.devDependencies,...n.peerDependencies}?{name:"@ale0aranda/rules",status:"pass",message:"Shared development standards installed"}:{name:"@ale0aranda/rules",status:"fail",message:"Shared development standards are not installed"}}catch{return {name:"@ale0aranda/rules",status:"fail",message:"Unable to read package.json"}}};var d=async({cwd:e})=>{try{return await access(join(e,"tsconfig.json")),{name:"TypeScript",status:"pass",message:"TypeScript configuration detected"}}catch{return {name:"TypeScript",status:"fail",message:"TypeScript configuration is missing"}}};var S=[m,l,p,i,d];async function g(e){return Promise.all(S.map(s=>s({cwd:e})))}var r={brand:"\u2726",pass:"\u2713",warn:"!",fail:"\xD7"},x={pass:{symbol:r.pass,color:o.green},warn:{symbol:r.warn,color:o.yellow},fail:{symbol:r.fail,color:o.red}};function a(e,s,n=`${s}s`){return e===1?s:n}function P(){console.log(),console.log(`${o.magenta(r.brand)} ${o.bold(o.magenta("conform"))}`),console.log(o.dim("Repository standards")),console.log();}function B(e){let s=x[e.status];console.log(`${s.color(s.symbol)} ${o.bold(e.name)}`),console.log(` ${o.dim(e.message)}`),console.log();}function T(e){console.log(o.green(o.bold(`${e} ${a(e,"check")} passed`))),console.log(),console.log(`${o.magenta(r.brand)} ${o.bold(o.green("Repository conforms"))}`),console.log(` ${o.dim("Everything looks good.")}`),console.log();}function J(e,s){console.log(`${o.green(`${e} ${a(e,"check")} passed`)} ${o.dim("\xB7")} ${o.yellow(`${s} ${a(s,"warning")}`)}`),console.log(),console.log(`${o.yellow(r.warn)} ${o.bold(o.yellow("Repository conforms with warnings"))}`),console.log(` ${o.dim("Review the warnings above.")}`),console.log();}function F(e,s,n){let c=[o.green(`${e} ${a(e,"check")} passed`),s>0?o.yellow(`${s} ${a(s,"warning")}`):void 0,o.red(`${n} ${a(n,"check")} failed`)].filter(t=>t!==void 0).join(` ${o.dim("\xB7")} `);console.log(c),console.log(),console.log(`${o.red(r.fail)} ${o.bold(o.red("Repository does not conform"))}`),console.log(` ${o.dim("Fix the failed checks and run conform again.")}`),console.log();}function D(e){let s=e.filter(t=>t.status==="pass").length,n=e.filter(t=>t.status==="warn").length,c=e.filter(t=>t.status==="fail").length;if(c>0){F(s,n,c);return}if(n>0){J(s,n);return}T(s);}function f(e){P();for(let s of e)B(s);D(e);}var z=resolve(process.argv[2]??process.cwd()),u=await g(z);f(u);u.some(e=>e.status==="fail")&&(process.exitCode=1);//# sourceMappingURL=cli.js.map
3
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/checks/biome.ts","../src/checks/package-json.ts","../src/checks/package-manager.ts","../src/checks/rules.ts","../src/checks/typescript.ts","../src/index.ts","../src/reporter.ts","../src/cli.ts"],"names":["checkBiome","cwd","access","join","checkPackageJson","packageJsonPath","checkPackageManager","checkRules","content","readFile","packageJson","checkTypeScript","checks","runChecks","check","symbols","statusStyle","pc","pluralize","count","singular","plural","renderHeader","renderCheck","result","style","renderSuccess","passed","renderWarning","warned","renderFailure","failed","summary","value","renderSummary","results","reportResults","resolve"],"mappings":"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","file":"cli.js","sourcesContent":["import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { Check } from \"../types.js\";\n\nexport const checkBiome: Check = async ({ cwd }) => {\n\ttry {\n\t\tawait access(join(cwd, \"biome.json\"));\n\n\t\treturn {\n\t\t\tname: \"Biome\",\n\t\t\tstatus: \"pass\",\n\t\t\tmessage: \"Biome configuration detected\",\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tname: \"Biome\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: \"Biome configuration is missing\",\n\t\t};\n\t}\n};\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { Check } from \"../types.js\";\n\nexport const checkPackageJson: Check = async ({ cwd }) => {\n\tconst packageJsonPath = join(cwd, \"package.json\");\n\n\ttry {\n\t\tawait access(packageJsonPath);\n\n\t\treturn {\n\t\t\tname: \"package.json\",\n\t\t\tstatus: \"pass\",\n\t\t\tmessage: \"Project manifest detected\",\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tname: \"package.json\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: \"Project manifest is missing\",\n\t\t};\n\t}\n};\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { Check } from \"../types.js\";\n\nexport const checkPackageManager: Check = async ({ cwd }) => {\n\ttry {\n\t\tawait access(join(cwd, \"pnpm-lock.yaml\"));\n\n\t\treturn {\n\t\t\tname: \"pnpm\",\n\t\t\tstatus: \"pass\",\n\t\t\tmessage: \"pnpm workspace detected\",\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tname: \"pnpm\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: \"pnpm lockfile is missing\",\n\t\t};\n\t}\n};\n","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { Check } from \"../types.js\";\n\nexport const checkRules: Check = async ({ cwd }) => {\n\ttry {\n\t\tconst content = await readFile(join(cwd, \"package.json\"), \"utf8\");\n\t\tconst packageJson = JSON.parse(content);\n\n\t\tconst dependencies = {\n\t\t\t...packageJson.dependencies,\n\t\t\t...packageJson.devDependencies,\n\t\t\t...packageJson.peerDependencies,\n\t\t};\n\n\t\tif (\"@ale0aranda/rules\" in dependencies) {\n\t\t\treturn {\n\t\t\t\tname: \"@ale0aranda/rules\",\n\t\t\t\tstatus: \"pass\",\n\t\t\t\tmessage: \"Shared development standards installed\",\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\tname: \"@ale0aranda/rules\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: \"Shared development standards are not installed\",\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tname: \"@ale0aranda/rules\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: \"Unable to read package.json\",\n\t\t};\n\t}\n};\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { Check } from \"../types.js\";\n\nexport const checkTypeScript: Check = async ({ cwd }) => {\n\ttry {\n\t\tawait access(join(cwd, \"tsconfig.json\"));\n\n\t\treturn {\n\t\t\tname: \"TypeScript\",\n\t\t\tstatus: \"pass\",\n\t\t\tmessage: \"TypeScript configuration detected\",\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tname: \"TypeScript\",\n\t\t\tstatus: \"fail\",\n\t\t\tmessage: \"TypeScript configuration is missing\",\n\t\t};\n\t}\n};\n","import { checkBiome } from \"./checks/biome.js\";\nimport { checkPackageJson } from \"./checks/package-json.js\";\nimport { checkPackageManager } from \"./checks/package-manager.js\";\nimport { checkRules } from \"./checks/rules.js\";\nimport { checkTypeScript } from \"./checks/typescript.js\";\n\nimport type { CheckResult } from \"./types.js\";\n\nconst checks = [\n\tcheckPackageJson,\n\tcheckPackageManager,\n\tcheckRules,\n\tcheckBiome,\n\tcheckTypeScript,\n];\n\nexport async function runChecks(cwd: string): Promise<CheckResult[]> {\n\treturn Promise.all(checks.map((check) => check({ cwd })));\n}\n\nexport type {\n\tCheck,\n\tCheckContext,\n\tCheckResult,\n\tCheckStatus,\n} from \"./types.js\";\n","import pc from \"picocolors\";\n\nimport type { CheckResult } from \"./types.js\";\n\nconst symbols = {\n\tbrand: \"✦\",\n\tpass: \"✓\",\n\twarn: \"!\",\n\tfail: \"×\",\n} as const;\n\nconst statusStyle = {\n\tpass: {\n\t\tsymbol: symbols.pass,\n\t\tcolor: pc.green,\n\t},\n\twarn: {\n\t\tsymbol: symbols.warn,\n\t\tcolor: pc.yellow,\n\t},\n\tfail: {\n\t\tsymbol: symbols.fail,\n\t\tcolor: pc.red,\n\t},\n} as const;\n\nfunction pluralize(\n\tcount: number,\n\tsingular: string,\n\tplural = `${singular}s`,\n): string {\n\treturn count === 1 ? singular : plural;\n}\n\nfunction renderHeader(): void {\n\tconsole.log();\n\n\tconsole.log(`${pc.magenta(symbols.brand)} ${pc.bold(pc.magenta(\"conform\"))}`);\n\n\tconsole.log(pc.dim(\"Repository standards\"));\n\n\tconsole.log();\n}\n\nfunction renderCheck(result: CheckResult): void {\n\tconst style = statusStyle[result.status];\n\n\tconsole.log(`${style.color(style.symbol)} ${pc.bold(result.name)}`);\n\n\tconsole.log(` ${pc.dim(result.message)}`);\n\n\tconsole.log();\n}\n\nfunction renderSuccess(passed: number): void {\n\tconsole.log(\n\t\tpc.green(pc.bold(`${passed} ${pluralize(passed, \"check\")} passed`)),\n\t);\n\n\tconsole.log();\n\n\tconsole.log(\n\t\t`${pc.magenta(symbols.brand)} ${pc.bold(pc.green(\"Repository conforms\"))}`,\n\t);\n\n\tconsole.log(` ${pc.dim(\"Everything looks good.\")}`);\n\n\tconsole.log();\n}\n\nfunction renderWarning(passed: number, warned: number): void {\n\tconsole.log(\n\t\t`${pc.green(\n\t\t\t`${passed} ${pluralize(passed, \"check\")} passed`,\n\t\t)} ${pc.dim(\"·\")} ${pc.yellow(\n\t\t\t`${warned} ${pluralize(warned, \"warning\")}`,\n\t\t)}`,\n\t);\n\n\tconsole.log();\n\n\tconsole.log(\n\t\t`${pc.yellow(symbols.warn)} ${pc.bold(\n\t\t\tpc.yellow(\"Repository conforms with warnings\"),\n\t\t)}`,\n\t);\n\n\tconsole.log(` ${pc.dim(\"Review the warnings above.\")}`);\n\n\tconsole.log();\n}\n\nfunction renderFailure(passed: number, warned: number, failed: number): void {\n\tconst summary = [\n\t\tpc.green(`${passed} ${pluralize(passed, \"check\")} passed`),\n\t\twarned > 0\n\t\t\t? pc.yellow(`${warned} ${pluralize(warned, \"warning\")}`)\n\t\t\t: undefined,\n\t\tpc.red(`${failed} ${pluralize(failed, \"check\")} failed`),\n\t]\n\t\t.filter((value): value is string => value !== undefined)\n\t\t.join(` ${pc.dim(\"·\")} `);\n\n\tconsole.log(summary);\n\n\tconsole.log();\n\n\tconsole.log(\n\t\t`${pc.red(symbols.fail)} ${pc.bold(pc.red(\"Repository does not conform\"))}`,\n\t);\n\n\tconsole.log(` ${pc.dim(\"Fix the failed checks and run conform again.\")}`);\n\n\tconsole.log();\n}\n\nfunction renderSummary(results: CheckResult[]): void {\n\tconst passed = results.filter((result) => result.status === \"pass\").length;\n\n\tconst warned = results.filter((result) => result.status === \"warn\").length;\n\n\tconst failed = results.filter((result) => result.status === \"fail\").length;\n\n\tif (failed > 0) {\n\t\trenderFailure(passed, warned, failed);\n\t\treturn;\n\t}\n\n\tif (warned > 0) {\n\t\trenderWarning(passed, warned);\n\t\treturn;\n\t}\n\n\trenderSuccess(passed);\n}\n\nexport function reportResults(results: CheckResult[]): void {\n\trenderHeader();\n\n\tfor (const result of results) {\n\t\trenderCheck(result);\n\t}\n\n\trenderSummary(results);\n}\n","import { resolve } from \"node:path\";\n\nimport { runChecks } from \"./index.js\";\nimport { reportResults } from \"./reporter.js\";\n\nconst cwd = resolve(process.argv[2] ?? process.cwd());\n\nconst results = await runChecks(cwd);\n\nreportResults(results);\n\nif (results.some((result) => result.status === \"fail\")) {\n\tprocess.exitCode = 1;\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@ale0aranda/conform",
3
+ "version": "0.1.0",
4
+ "description": "CLI to verify whether a project conforms to Alejandro Aranda's development standards.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Alejandro Aranda",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/ale0aranda/conform.git"
11
+ },
12
+ "bugs": {
13
+ "url": "https://github.com/ale0aranda/conform/issues"
14
+ },
15
+ "homepage": "https://github.com/ale0aranda/conform#readme",
16
+ "keywords": [
17
+ "cli",
18
+ "code-quality",
19
+ "conventions",
20
+ "developer-tools",
21
+ "repository",
22
+ "standards"
23
+ ],
24
+ "bin": {
25
+ "conform": "./dist/cli.js"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "LICENSE",
30
+ "README.md"
31
+ ],
32
+ "engines": {
33
+ "node": ">=22.13.0"
34
+ },
35
+ "publishConfig": {
36
+ "access": "public"
37
+ },
38
+ "devDependencies": {
39
+ "@biomejs/biome": "^2.5.12",
40
+ "@types/node": "^26.4.1",
41
+ "tsup": "^8.5.1",
42
+ "typescript": "^7.0.2",
43
+ "vitest": "^5.0.0"
44
+ },
45
+ "dependencies": {
46
+ "@ale0aranda/rules": "^0.6.2",
47
+ "picocolors": "^1.1.1"
48
+ },
49
+ "scripts": {
50
+ "build": "tsup",
51
+ "check": "pnpm check:biome && pnpm check:types && pnpm test",
52
+ "check:biome": "biome ci .",
53
+ "check:types": "tsc --noEmit",
54
+ "dev": "tsup --watch",
55
+ "format": "biome check --write .",
56
+ "test": "vitest run --passWithNoTests",
57
+ "test:watch": "vitest"
58
+ }
59
+ }