pr-checkmate 1.22.8 → 1.23.1
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/README.md +101 -333
- package/cspell.json +24 -1
- package/dist/cli.js +40 -2
- package/dist/config/constants.d.ts +9 -0
- package/dist/config/constants.js +68 -1
- package/dist/core/checks/dependencies/banned-imports.d.ts +2 -0
- package/dist/core/checks/dependencies/banned-imports.js +71 -0
- package/dist/core/checks/{circular-deps.d.ts → dependencies/circular-deps.d.ts} +1 -1
- package/dist/core/checks/{circular-deps.js → dependencies/circular-deps.js} +5 -5
- package/dist/core/checks/{dependency-check.d.ts → dependencies/dependency-check.d.ts} +1 -1
- package/dist/core/checks/{dependency-check.js → dependencies/dependency-check.js} +3 -3
- package/dist/core/checks/{license-check.d.ts → dependencies/license-check.d.ts} +1 -1
- package/dist/core/checks/{license-check.js → dependencies/license-check.js} +3 -3
- package/dist/core/checks/{npm-audit.d.ts → dependencies/npm-audit.d.ts} +1 -1
- package/dist/core/checks/{npm-audit.js → dependencies/npm-audit.js} +3 -3
- package/dist/core/checks/{outdated-deps.d.ts → dependencies/outdated-deps.d.ts} +1 -1
- package/dist/core/checks/{outdated-deps.js → dependencies/outdated-deps.js} +17 -4
- package/dist/core/checks/dependencies/vuln-scan.d.ts +9 -0
- package/dist/core/checks/dependencies/vuln-scan.js +41 -0
- package/dist/core/checks/findings.d.ts +37 -1
- package/dist/core/checks/findings.js +80 -3
- package/dist/core/checks/git/custom-rules.d.ts +2 -0
- package/dist/core/checks/git/custom-rules.js +102 -0
- package/dist/core/checks/{diff-smell.d.ts → git/diff-smell.d.ts} +1 -1
- package/dist/core/checks/{diff-smell.js → git/diff-smell.js} +3 -3
- package/dist/core/checks/git/large-files.d.ts +2 -0
- package/dist/core/checks/git/large-files.js +106 -0
- package/dist/core/checks/git/leftover-debug.d.ts +2 -0
- package/dist/core/checks/git/leftover-debug.js +77 -0
- package/dist/core/checks/git/lockfile-drift.d.ts +2 -0
- package/dist/core/checks/git/lockfile-drift.js +114 -0
- package/dist/core/checks/git/merge-conflict.d.ts +2 -0
- package/dist/core/checks/git/merge-conflict.js +109 -0
- package/dist/core/checks/git/missing-tests.d.ts +2 -0
- package/dist/core/checks/git/missing-tests.js +92 -0
- package/dist/core/checks/git/todo-fixme.d.ts +7 -0
- package/dist/core/checks/git/todo-fixme.js +74 -0
- package/dist/core/checks/{cpp-format.d.ts → languages/cpp-format.d.ts} +1 -1
- package/dist/core/checks/{cpp-format.js → languages/cpp-format.js} +3 -3
- package/dist/core/checks/languages/csharp-format.d.ts +13 -0
- package/dist/core/checks/languages/csharp-format.js +52 -0
- package/dist/core/checks/languages/go-format.d.ts +8 -0
- package/dist/core/checks/languages/go-format.js +48 -0
- package/dist/core/checks/languages/go-lint.d.ts +8 -0
- package/dist/core/checks/languages/go-lint.js +48 -0
- package/dist/core/checks/{kotlin-lint.d.ts → languages/kotlin-lint.d.ts} +1 -1
- package/dist/core/checks/{kotlin-lint.js → languages/kotlin-lint.js} +13 -17
- package/dist/core/checks/{lint.d.ts → languages/lint.d.ts} +1 -1
- package/dist/core/checks/{lint.js → languages/lint.js} +5 -5
- package/dist/core/checks/languages/php-format.d.ts +9 -0
- package/dist/core/checks/languages/php-format.js +49 -0
- package/dist/core/checks/{prettier.d.ts → languages/prettier.d.ts} +1 -1
- package/dist/core/checks/{prettier.js → languages/prettier.js} +5 -5
- package/dist/core/checks/{python-format.d.ts → languages/python-format.d.ts} +1 -1
- package/dist/core/checks/{python-format.js → languages/python-format.js} +3 -3
- package/dist/core/checks/{python-lint.d.ts → languages/python-lint.d.ts} +1 -1
- package/dist/core/checks/{python-lint.js → languages/python-lint.js} +3 -3
- package/dist/core/checks/languages/python-typecheck.d.ts +9 -0
- package/dist/core/checks/languages/python-typecheck.js +66 -0
- package/dist/core/checks/languages/ruby-lint.d.ts +8 -0
- package/dist/core/checks/languages/ruby-lint.js +50 -0
- package/dist/core/checks/languages/rust-format.d.ts +9 -0
- package/dist/core/checks/languages/rust-format.js +45 -0
- package/dist/core/checks/languages/rust-lint.d.ts +8 -0
- package/dist/core/checks/languages/rust-lint.js +50 -0
- package/dist/core/checks/{swift-lint.d.ts → languages/swift-lint.d.ts} +1 -1
- package/dist/core/checks/{swift-lint.js → languages/swift-lint.js} +13 -17
- package/dist/core/checks/{typecheck.d.ts → languages/typecheck.d.ts} +1 -1
- package/dist/core/checks/{typecheck.js → languages/typecheck.js} +3 -3
- package/dist/core/checks/{commitlint.d.ts → pr/commitlint.d.ts} +1 -1
- package/dist/core/checks/{commitlint.js → pr/commitlint.js} +4 -4
- package/dist/core/checks/{pr-body.d.ts → pr/pr-body.d.ts} +1 -1
- package/dist/core/checks/{pr-body.js → pr/pr-body.js} +2 -2
- package/dist/core/checks/{pr-size-check.d.ts → pr/pr-size-check.d.ts} +1 -1
- package/dist/core/checks/{pr-size-check.js → pr/pr-size-check.js} +13 -11
- package/dist/core/checks/{pr-title-lint.d.ts → pr/pr-title-lint.d.ts} +1 -1
- package/dist/core/checks/{pr-title-lint.js → pr/pr-title-lint.js} +2 -2
- package/dist/core/checks/quality/case-collision.d.ts +8 -0
- package/dist/core/checks/quality/case-collision.js +40 -0
- package/dist/core/checks/quality/config-validation.d.ts +8 -0
- package/dist/core/checks/quality/config-validation.js +63 -0
- package/dist/core/checks/quality/coverage.d.ts +2 -0
- package/dist/core/checks/quality/coverage.js +63 -0
- package/dist/core/checks/{dead-code.d.ts → quality/dead-code.d.ts} +1 -1
- package/dist/core/checks/{dead-code.js → quality/dead-code.js} +4 -4
- package/dist/core/checks/{duplicate-check.d.ts → quality/duplicate-check.d.ts} +1 -1
- package/dist/core/checks/{duplicate-check.js → quality/duplicate-check.js} +6 -6
- package/dist/core/checks/quality/license-header.d.ts +7 -0
- package/dist/core/checks/quality/license-header.js +74 -0
- package/dist/core/checks/{markdown-lint.d.ts → quality/markdown-lint.d.ts} +1 -1
- package/dist/core/checks/{markdown-lint.js → quality/markdown-lint.js} +5 -5
- package/dist/core/checks/{spellcheck.d.ts → quality/spellcheck.d.ts} +1 -1
- package/dist/core/checks/{spellcheck.js → quality/spellcheck.js} +5 -5
- package/dist/core/checks/{diff-security.d.ts → security/diff-security.d.ts} +1 -1
- package/dist/core/checks/security/diff-security.js +262 -0
- package/dist/core/checks/security/dockerfile-security.d.ts +2 -0
- package/dist/core/checks/security/dockerfile-security.js +92 -0
- package/dist/core/checks/security/migration-safety.d.ts +2 -0
- package/dist/core/checks/security/migration-safety.js +110 -0
- package/dist/core/checks/{security.d.ts → security/security.d.ts} +1 -1
- package/dist/core/checks/{security.js → security/security.js} +10 -5
- package/dist/core/checks/{sensitive-file-guard.d.ts → security/sensitive-file-guard.d.ts} +1 -1
- package/dist/core/checks/{sensitive-file-guard.js → security/sensitive-file-guard.js} +4 -4
- package/dist/core/checks/security/workflow-security.d.ts +2 -0
- package/dist/core/checks/security/workflow-security.js +75 -0
- package/dist/core/context.js +14 -0
- package/dist/core/registry.js +73 -28
- package/dist/core/reporters.d.ts +4 -3
- package/dist/core/reporters.js +106 -4
- package/dist/core/run-checks.js +21 -3
- package/dist/core/targets.d.ts +4 -1
- package/dist/core/targets.js +16 -3
- package/dist/core/types.d.ts +13 -1
- package/dist/init.js +82 -0
- package/dist/interfaces/index.d.ts +101 -0
- package/dist/scripts/copy-configs.js +1 -0
- package/dist/utils/detect-language.d.ts +1 -1
- package/dist/utils/detect-language.js +32 -3
- package/dist/utils/glob.d.ts +10 -0
- package/dist/utils/glob.js +25 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/update-notifier.d.ts +10 -0
- package/dist/utils/update-notifier.js +60 -0
- package/package.json +2 -1
- package/pr-checkmate.schema.json +166 -0
- package/src/config/cspell.json +24 -1
- package/src/config/pr-checkmate.schema.json +166 -0
- package/dist/core/checks/diff-security.js +0 -145
- /package/dist/core/checks/{ruff-shared.d.ts → languages/ruff-shared.d.ts} +0 -0
- /package/dist/core/checks/{ruff-shared.js → languages/ruff-shared.js} +0 -0
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.diffSecurityCheck = void 0;
|
|
4
|
-
const utils_1 = require("../../utils");
|
|
5
|
-
const types_1 = require("../types");
|
|
6
|
-
const findings_1 = require("./findings");
|
|
7
|
-
const SECURITY_PATTERNS = [
|
|
8
|
-
{
|
|
9
|
-
pattern: /^\+(?!\+).*dangerouslySetInnerHTML\s*=/,
|
|
10
|
-
label: 'dangerouslySetInnerHTML (XSS risk)',
|
|
11
|
-
severity: 'error',
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
pattern: /^\+(?!\+).*\.innerHTML\s*=/,
|
|
15
|
-
label: 'innerHTML assignment (XSS risk)',
|
|
16
|
-
severity: 'warn',
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
pattern: /^\+(?!\+).*document\.write\s*\(/,
|
|
20
|
-
label: 'document.write() (XSS risk)',
|
|
21
|
-
severity: 'error',
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
pattern: /^\+(?!\+)(?![^'"`]*['"`]).*\beval\s*\(/,
|
|
25
|
-
label: 'eval() (code injection risk)',
|
|
26
|
-
severity: 'error',
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
pattern: /^\+(?!\+).*\bnew\s+Function\s*\(/,
|
|
30
|
-
label: 'new Function() (code injection risk)',
|
|
31
|
-
severity: 'error',
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
pattern: /^\+(?!\+).*__proto__\s*[=:[]/,
|
|
35
|
-
label: '__proto__ mutation (prototype pollution)',
|
|
36
|
-
severity: 'error',
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
pattern: /^\+(?!\+).*\.constructor\.prototype\b/,
|
|
40
|
-
label: 'constructor.prototype access (prototype pollution)',
|
|
41
|
-
severity: 'warn',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
pattern: /^\+(?!\+).*createHash\s*\(\s*['"]md5['"]/,
|
|
45
|
-
label: 'MD5 (weak hash — use sha256 or stronger)',
|
|
46
|
-
severity: 'warn',
|
|
47
|
-
},
|
|
48
|
-
{
|
|
49
|
-
pattern: /^\+(?!\+).*createHash\s*\(\s*['"]sha1['"]/,
|
|
50
|
-
label: 'SHA-1 (weak hash — use sha256 or stronger)',
|
|
51
|
-
severity: 'warn',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
pattern: /^\+(?!\+).*\bcreateDecipher\s*\(/,
|
|
55
|
-
label: 'deprecated createDecipher() — use createDecipheriv()',
|
|
56
|
-
severity: 'warn',
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
pattern: /^\+(?!\+).*\bcreateCipher\s*\(/,
|
|
60
|
-
label: 'deprecated createCipher() — use createCipheriv()',
|
|
61
|
-
severity: 'warn',
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
pattern: /^\+(?!\+).*cors\s*\(\s*\{[^}]*origin\s*:\s*['"]\*['"]/,
|
|
65
|
-
label: "CORS wildcard origin: '*' (allows any domain)",
|
|
66
|
-
severity: 'warn',
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
pattern: /^\+(?!\+).*['"]Access-Control-Allow-Origin['"]\s*[,:]\s*['"]\*['"]/,
|
|
70
|
-
label: "Access-Control-Allow-Origin: '*' header (CORS wildcard)",
|
|
71
|
-
severity: 'warn',
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
pattern: /^\+(?!\+).*(fetch|axios\.get|axios\.post|axios\.put|axios\.delete|http\.get|http\.request)\s*\(\s*['"]http:\/\//,
|
|
75
|
-
label: 'Insecure HTTP (non-HTTPS) in external call',
|
|
76
|
-
severity: 'warn',
|
|
77
|
-
},
|
|
78
|
-
{
|
|
79
|
-
pattern: /^\+(?!\+).*(exec|execSync|spawn|spawnSync)\s*\(\s*`[^`]*\$\{/,
|
|
80
|
-
label: 'exec/spawn with template literal (command injection risk)',
|
|
81
|
-
severity: 'error',
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
pattern: /^\+(?!\+).*(exec|execSync)\s*\(\s*['"][^'"]*['"\s]*\+/,
|
|
85
|
-
label: 'exec/spawn with string concatenation (command injection risk)',
|
|
86
|
-
severity: 'error',
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
pattern: /^\+(?!\+).*\b(query|execute|raw)\s*\(\s*`[^`]*\$\{/,
|
|
90
|
-
label: 'SQL query with template literal interpolation (SQL injection risk)',
|
|
91
|
-
severity: 'error',
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
// A quoted string that contains a whole SQL keyword, concatenated with a
|
|
95
|
-
// variable — the real injection shape. Word boundaries + the quote context
|
|
96
|
-
// stop identifiers like `insertions + deletions` from false-positiving.
|
|
97
|
-
pattern: /^\+(?!\+).*['"`][^'"`]*\b(SELECT|INSERT|UPDATE|DELETE|WHERE)\b[^'"`]*['"`]\s*\+\s*\w/i,
|
|
98
|
-
label: 'SQL string concatenation (SQL injection risk)',
|
|
99
|
-
severity: 'error',
|
|
100
|
-
},
|
|
101
|
-
];
|
|
102
|
-
/** Bucket added-line matches by severity, keyed by pattern label. */
|
|
103
|
-
function scanDiff(stdout) {
|
|
104
|
-
const errors = {};
|
|
105
|
-
const warnings = {};
|
|
106
|
-
for (const line of stdout.split('\n')) {
|
|
107
|
-
for (const { pattern, label, severity } of SECURITY_PATTERNS) {
|
|
108
|
-
if (pattern.test(line)) {
|
|
109
|
-
const bucket = severity === 'error' ? errors : warnings;
|
|
110
|
-
(bucket[label] ?? (bucket[label] = [])).push(line.slice(1).trim().substring(0, 120));
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return { errors, warnings };
|
|
115
|
-
}
|
|
116
|
-
exports.diffSecurityCheck = {
|
|
117
|
-
name: 'Diff Security',
|
|
118
|
-
phase: 'informational',
|
|
119
|
-
applies(ctx) {
|
|
120
|
-
return ctx.config.diffSecurity?.enabled !== false && Boolean(ctx.baseSha);
|
|
121
|
-
},
|
|
122
|
-
async run(ctx) {
|
|
123
|
-
try {
|
|
124
|
-
const stdout = await (0, findings_1.diffAddedLines)(ctx, [
|
|
125
|
-
'*.ts',
|
|
126
|
-
'*.tsx',
|
|
127
|
-
'*.js',
|
|
128
|
-
'*.jsx',
|
|
129
|
-
'*.mjs',
|
|
130
|
-
'*.cjs',
|
|
131
|
-
]);
|
|
132
|
-
const { errors, warnings } = scanDiff(stdout);
|
|
133
|
-
return (0, findings_1.reportSeverityBuckets)(errors, warnings, {
|
|
134
|
-
prefix: 'Diff Security',
|
|
135
|
-
errorSummary: n => `${n} issue(s)`,
|
|
136
|
-
warningSummary: n => `${n} warning(s)`,
|
|
137
|
-
sampleLimit: 3,
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
catch (err) {
|
|
141
|
-
utils_1.logger.warn(`[Diff Security]: ⚠️ Could not analyze diff\n${err}`);
|
|
142
|
-
return (0, types_1.skip)('diff unavailable');
|
|
143
|
-
}
|
|
144
|
-
},
|
|
145
|
-
};
|
|
File without changes
|
|
File without changes
|