check-my-toolkit 0.16.0 → 0.17.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.
@@ -1,23 +1,30 @@
1
1
  import { type CheckResult } from "../../types/index.js";
2
2
  import { BaseToolRunner } from "./base.js";
3
3
  /**
4
- * npm audit tool runner for detecting dependency vulnerabilities
4
+ * Dependency audit tool runner for detecting vulnerabilities.
5
+ * Supports npm and pnpm (auto-detected based on lock file).
5
6
  */
6
7
  export declare class NpmAuditRunner extends BaseToolRunner {
7
8
  readonly name = "npmaudit";
8
9
  readonly rule = "code.security";
9
10
  readonly toolId = "npmaudit";
10
11
  readonly configFiles: string[];
12
+ /**
13
+ * Detect which package manager is being used
14
+ */
15
+ private detectPackageManager;
11
16
  run(projectRoot: string): Promise<CheckResult>;
12
17
  private processAuditResult;
13
18
  private handleRunError;
14
19
  private parseOutput;
20
+ private parseNpmOutput;
21
+ private parsePnpmOutput;
15
22
  private mapSeverity;
16
- private getVulnerabilityTitle;
17
- private getFixInfo;
23
+ private getNpmVulnerabilityTitle;
24
+ private getNpmFixInfo;
18
25
  private createErrorViolation;
19
26
  /**
20
- * Audit - check if package-lock.json exists
27
+ * Audit - check if a lock file exists (npm or pnpm)
21
28
  */
22
29
  audit(projectRoot: string): Promise<CheckResult>;
23
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"npmaudit.d.ts","sourceRoot":"","sources":["../../../src/code/tools/npmaudit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AA6B3C;;GAEG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,MAAM,cAAc;IAC7B,QAAQ,CAAC,WAAW,WAAyB;IAEvC,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAqBpD,OAAO,CAAC,kBAAkB;IAoB1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAiBvD"}
1
+ {"version":3,"file":"npmaudit.d.ts","sourceRoot":"","sources":["../../../src/code/tools/npmaudit.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAqE3C;;;GAGG;AACH,qBAAa,cAAe,SAAQ,cAAc;IAChD,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,MAAM,cAAc;IAC7B,QAAQ,CAAC,WAAW,WAA2C;IAE/D;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAStB,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyBpD,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,oBAAoB;IAS5B;;OAEG;IACG,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAkBvD"}
@@ -1,74 +1,120 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
1
3
  import { execa } from "execa";
2
4
  import { BaseToolRunner } from "./base.js";
5
+ /** Package manager configurations */
6
+ const PACKAGE_MANAGERS = [
7
+ { name: "pnpm", lockFile: "pnpm-lock.yaml", command: "pnpm", args: ["audit", "--json"] },
8
+ { name: "npm", lockFile: "package-lock.json", command: "npm", args: ["audit", "--json"] },
9
+ ];
3
10
  /**
4
- * npm audit tool runner for detecting dependency vulnerabilities
11
+ * Dependency audit tool runner for detecting vulnerabilities.
12
+ * Supports npm and pnpm (auto-detected based on lock file).
5
13
  */
6
14
  export class NpmAuditRunner extends BaseToolRunner {
7
15
  name = "npmaudit";
8
16
  rule = "code.security";
9
17
  toolId = "npmaudit";
10
- configFiles = ["package-lock.json"];
18
+ configFiles = ["package-lock.json", "pnpm-lock.yaml"];
19
+ /**
20
+ * Detect which package manager is being used
21
+ */
22
+ detectPackageManager(projectRoot) {
23
+ for (const pm of PACKAGE_MANAGERS) {
24
+ if (fs.existsSync(path.join(projectRoot, pm.lockFile))) {
25
+ return pm;
26
+ }
27
+ }
28
+ return null;
29
+ }
11
30
  async run(projectRoot) {
12
31
  const startTime = Date.now();
13
32
  const elapsed = () => Date.now() - startTime;
14
- if (!this.hasConfig(projectRoot)) {
15
- return this.failNoConfig(elapsed());
33
+ const pm = this.detectPackageManager(projectRoot);
34
+ if (!pm) {
35
+ return this.fail([this.createErrorViolation("No lock file found (package-lock.json or pnpm-lock.yaml)")], elapsed());
16
36
  }
17
37
  try {
18
- const result = await execa("npm", ["audit", "--json"], {
38
+ const result = await execa(pm.command, pm.args, {
19
39
  cwd: projectRoot,
20
40
  reject: false,
21
41
  timeout: 5 * 60 * 1000,
22
42
  });
23
- return this.processAuditResult(result, elapsed);
43
+ return this.processAuditResult(result, pm, elapsed);
24
44
  }
25
45
  catch (error) {
26
- return this.handleRunError(error, elapsed);
46
+ return this.handleRunError(error, pm, elapsed);
27
47
  }
28
48
  }
29
- processAuditResult(result, elapsed) {
49
+ processAuditResult(result, pm, elapsed) {
30
50
  const output = String(result.stdout ?? result.stderr ?? "");
31
- const violations = this.parseOutput(output);
51
+ const violations = this.parseOutput(output, pm);
32
52
  if (violations === null) {
33
53
  if (result.exitCode !== 0) {
34
- return this.fail([this.createErrorViolation(`npm audit error: ${result.stderr ?? "Unknown error"}`)], elapsed());
54
+ return this.fail([this.createErrorViolation(`${pm.name} audit error: ${result.stderr ?? "Unknown error"}`)], elapsed());
35
55
  }
36
56
  return this.pass(elapsed());
37
57
  }
38
58
  return this.fromViolations(violations, elapsed());
39
59
  }
40
- handleRunError(error, elapsed) {
60
+ handleRunError(error, pm, elapsed) {
41
61
  if (this.isNotInstalledError(error)) {
42
62
  return this.skipNotInstalled(elapsed());
43
63
  }
44
64
  const message = error instanceof Error ? error.message : "Unknown error";
45
- return this.fail([this.createErrorViolation(`npm audit error: ${message}`)], elapsed());
65
+ return this.fail([this.createErrorViolation(`${pm.name} audit error: ${message}`)], elapsed());
46
66
  }
47
- parseOutput(output) {
67
+ parseOutput(output, pm) {
48
68
  try {
49
- const result = JSON.parse(output);
50
- const violations = [];
51
- for (const [pkgName, vuln] of Object.entries(result.vulnerabilities)) {
52
- const severity = this.mapSeverity(vuln.severity);
53
- const title = this.getVulnerabilityTitle(vuln);
54
- const fixInfo = this.getFixInfo(vuln);
55
- violations.push({
56
- rule: `${this.rule}.${this.toolId}`,
57
- tool: this.toolId,
58
- file: "package-lock.json",
59
- message: `${pkgName}: ${title}${fixInfo}`,
60
- code: vuln.severity,
61
- severity,
62
- });
69
+ if (pm.name === "pnpm") {
70
+ return this.parsePnpmOutput(output, pm);
63
71
  }
64
- return violations;
72
+ return this.parseNpmOutput(output, pm);
65
73
  }
66
74
  catch {
67
75
  return null;
68
76
  }
69
77
  }
70
- mapSeverity(npmSeverity) {
71
- switch (npmSeverity) {
78
+ parseNpmOutput(output, pm) {
79
+ const result = JSON.parse(output);
80
+ const violations = [];
81
+ for (const [pkgName, vuln] of Object.entries(result.vulnerabilities)) {
82
+ const severity = this.mapSeverity(vuln.severity);
83
+ const title = this.getNpmVulnerabilityTitle(vuln);
84
+ const fixInfo = this.getNpmFixInfo(vuln);
85
+ violations.push({
86
+ rule: `${this.rule}.${this.toolId}`,
87
+ tool: this.toolId,
88
+ file: pm.lockFile,
89
+ message: `${pkgName}: ${title}${fixInfo}`,
90
+ code: vuln.severity,
91
+ severity,
92
+ });
93
+ }
94
+ return violations;
95
+ }
96
+ parsePnpmOutput(output, pm) {
97
+ const result = JSON.parse(output);
98
+ const violations = [];
99
+ // pnpm audit uses "advisories" instead of "vulnerabilities"
100
+ if (!result.advisories) {
101
+ return violations;
102
+ }
103
+ for (const [, advisory] of Object.entries(result.advisories)) {
104
+ const severity = this.mapSeverity(advisory.severity);
105
+ violations.push({
106
+ rule: `${this.rule}.${this.toolId}`,
107
+ tool: this.toolId,
108
+ file: pm.lockFile,
109
+ message: `${advisory.module_name}: ${advisory.title}`,
110
+ code: advisory.severity,
111
+ severity,
112
+ });
113
+ }
114
+ return violations;
115
+ }
116
+ mapSeverity(auditSeverity) {
117
+ switch (auditSeverity) {
72
118
  case "critical":
73
119
  case "high":
74
120
  return "error";
@@ -79,8 +125,7 @@ export class NpmAuditRunner extends BaseToolRunner {
79
125
  return "warning";
80
126
  }
81
127
  }
82
- getVulnerabilityTitle(vuln) {
83
- // Try to get a descriptive title from the via field
128
+ getNpmVulnerabilityTitle(vuln) {
84
129
  for (const v of vuln.via) {
85
130
  if (typeof v === "object" && v.title) {
86
131
  return v.title;
@@ -88,7 +133,7 @@ export class NpmAuditRunner extends BaseToolRunner {
88
133
  }
89
134
  return `${vuln.severity} severity vulnerability`;
90
135
  }
91
- getFixInfo(vuln) {
136
+ getNpmFixInfo(vuln) {
92
137
  if (vuln.fixAvailable === false) {
93
138
  return " (no fix available)";
94
139
  }
@@ -107,15 +152,16 @@ export class NpmAuditRunner extends BaseToolRunner {
107
152
  };
108
153
  }
109
154
  /**
110
- * Audit - check if package-lock.json exists
155
+ * Audit - check if a lock file exists (npm or pnpm)
111
156
  */
112
157
  async audit(projectRoot) {
113
158
  const startTime = Date.now();
114
- if (!this.hasConfig(projectRoot)) {
159
+ const pm = this.detectPackageManager(projectRoot);
160
+ if (!pm) {
115
161
  return this.fail([{
116
162
  rule: `${this.rule}.${this.toolId}`,
117
163
  tool: "audit",
118
- message: "package-lock.json not found (required for npm audit)",
164
+ message: "No lock file found (package-lock.json or pnpm-lock.yaml required)",
119
165
  severity: "error",
120
166
  }], Date.now() - startTime);
121
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"npmaudit.js","sourceRoot":"","sources":["../../../src/code/tools/npmaudit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"npmaudit.js","sourceRoot":"","sources":["../../../src/code/tools/npmaudit.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "check-my-toolkit",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Unified project health checks - code, process, and stack",
5
5
  "type": "module",
6
6
  "bin": {