@veylqorix/cli 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/dist/cli-args.d.ts +34 -0
- package/dist/cli-args.d.ts.map +1 -0
- package/dist/cli-args.js +206 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +394 -0
- package/dist/index.js.map +1 -0
- package/package.json +31 -3
- package/README.md +0 -3
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Veylqorix
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Policy } from '@veylqorix/core';
|
|
2
|
+
export type HooksSubcommand = 'install' | 'uninstall';
|
|
3
|
+
export interface ParsedArgs {
|
|
4
|
+
command: string;
|
|
5
|
+
root: string;
|
|
6
|
+
offline: boolean;
|
|
7
|
+
json: boolean;
|
|
8
|
+
format?: 'json' | 'markdown' | 'sarif';
|
|
9
|
+
reportOut?: string;
|
|
10
|
+
sarifOut?: string;
|
|
11
|
+
noTests: boolean;
|
|
12
|
+
scanners?: string[];
|
|
13
|
+
staged: boolean;
|
|
14
|
+
strict: boolean;
|
|
15
|
+
policyFile?: string;
|
|
16
|
+
policy?: Partial<Policy>;
|
|
17
|
+
prePush: boolean;
|
|
18
|
+
force: boolean;
|
|
19
|
+
yes: boolean;
|
|
20
|
+
hooksSub: HooksSubcommand;
|
|
21
|
+
}
|
|
22
|
+
export declare const KNOWN_COMMANDS: Set<string>;
|
|
23
|
+
export declare function isKnownCommand(word: string): boolean;
|
|
24
|
+
/** Scanner names the audit engine knows how to dispatch (`--scanners` values). */
|
|
25
|
+
export declare const VALID_SCANNERS: string[];
|
|
26
|
+
/** Severity tokens accepted by `--block-on`. */
|
|
27
|
+
export declare const VALID_SEVERITIES: string[];
|
|
28
|
+
/** Normalize legacy aliases to modern verbs. */
|
|
29
|
+
export declare function normalizeCommand(command: string): string;
|
|
30
|
+
/** Parse CLI argv (post-executable) into a structured command description. */
|
|
31
|
+
export declare function parseArgs(argv: string[], cwd?: string): ParsedArgs;
|
|
32
|
+
/** True when `-h` / `--help` was requested. */
|
|
33
|
+
export declare function wantsHelp(argv: string[]): boolean;
|
|
34
|
+
//# sourceMappingURL=cli-args.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC;AAEtD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAEzB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,eAAO,MAAM,cAAc,aAWzB,CAAC;AAEH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,kFAAkF;AAClF,eAAO,MAAM,cAAc,UAA0C,CAAC;AAEtE,gDAAgD;AAChD,eAAO,MAAM,gBAAgB,UAAgD,CAAC;AAE9E,gDAAgD;AAChD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAYxD;AAID,8EAA8E;AAC9E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAsB,GAAG,UAAU,CAwJjF;AAED,+CAA+C;AAC/C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAMjD"}
|
package/dist/cli-args.js
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Argument parsing for the Veylqorix CLI, isolated from the executable entry
|
|
3
|
+
* point so tests can exercise dispatch and flag handling without spawning a
|
|
4
|
+
* process. `index.ts` re-uses these definitions verbatim.
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
export const KNOWN_COMMANDS = new Set([
|
|
8
|
+
'scan',
|
|
9
|
+
'check',
|
|
10
|
+
'report',
|
|
11
|
+
'config',
|
|
12
|
+
'hooks',
|
|
13
|
+
'audit',
|
|
14
|
+
'deps',
|
|
15
|
+
'secrets',
|
|
16
|
+
'checks',
|
|
17
|
+
'gate',
|
|
18
|
+
]);
|
|
19
|
+
export function isKnownCommand(word) {
|
|
20
|
+
return KNOWN_COMMANDS.has(word);
|
|
21
|
+
}
|
|
22
|
+
/** Scanner names the audit engine knows how to dispatch (`--scanners` values). */
|
|
23
|
+
export const VALID_SCANNERS = ['dependencies', 'secrets', 'licenses'];
|
|
24
|
+
/** Severity tokens accepted by `--block-on`. */
|
|
25
|
+
export const VALID_SEVERITIES = ['INFO', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'];
|
|
26
|
+
/** Normalize legacy aliases to modern verbs. */
|
|
27
|
+
export function normalizeCommand(command) {
|
|
28
|
+
switch (command) {
|
|
29
|
+
case 'audit':
|
|
30
|
+
case 'deps':
|
|
31
|
+
case 'secrets':
|
|
32
|
+
case 'gate':
|
|
33
|
+
return 'scan';
|
|
34
|
+
case 'checks':
|
|
35
|
+
return 'check';
|
|
36
|
+
default:
|
|
37
|
+
return command;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const HOOK_SUBCOMMANDS = new Set(['install', 'uninstall', 'remove']);
|
|
41
|
+
/** Parse CLI argv (post-executable) into a structured command description. */
|
|
42
|
+
export function parseArgs(argv, cwd = process.cwd()) {
|
|
43
|
+
const first = argv[0];
|
|
44
|
+
const isConfig = first === 'config' && argv[1] === 'validate';
|
|
45
|
+
const isHooks = first === 'hooks' && (argv[1] === 'install' || argv[1] === 'uninstall' || argv[1] === 'remove');
|
|
46
|
+
const command = isConfig ? 'config' : isHooks ? 'hooks' : (first ?? 'scan');
|
|
47
|
+
// For `config validate`, the positional after `validate` is the policy file.
|
|
48
|
+
// For everything else, the positional after the command is the root.
|
|
49
|
+
// `config validate <file>`: positional is the policy file.
|
|
50
|
+
// `hooks install|uninstall`: no positional root.
|
|
51
|
+
// Everything else: the positional after the command is the root.
|
|
52
|
+
let flags;
|
|
53
|
+
if (isConfig)
|
|
54
|
+
flags = argv.slice(2);
|
|
55
|
+
else if (isHooks)
|
|
56
|
+
flags = argv.slice(2);
|
|
57
|
+
else
|
|
58
|
+
flags = argv.slice(1);
|
|
59
|
+
const parsed = {
|
|
60
|
+
command,
|
|
61
|
+
root: cwd,
|
|
62
|
+
offline: false,
|
|
63
|
+
json: false,
|
|
64
|
+
noTests: false,
|
|
65
|
+
staged: false,
|
|
66
|
+
strict: false,
|
|
67
|
+
prePush: false,
|
|
68
|
+
force: false,
|
|
69
|
+
yes: false,
|
|
70
|
+
hooksSub: 'install',
|
|
71
|
+
};
|
|
72
|
+
const valueFlag = new Set([
|
|
73
|
+
'--report-out',
|
|
74
|
+
'--sarif-out',
|
|
75
|
+
'--scanners',
|
|
76
|
+
'--block-on',
|
|
77
|
+
'--root',
|
|
78
|
+
'--path',
|
|
79
|
+
'--policy',
|
|
80
|
+
'--config',
|
|
81
|
+
]);
|
|
82
|
+
for (let i = 0; i < flags.length; i++) {
|
|
83
|
+
const flag = flags[i];
|
|
84
|
+
if (!flag)
|
|
85
|
+
continue;
|
|
86
|
+
if (valueFlag.has(flag)) {
|
|
87
|
+
const value = flags[++i];
|
|
88
|
+
if (value === undefined)
|
|
89
|
+
throw new Error(`${flag} requires a value`);
|
|
90
|
+
switch (flag) {
|
|
91
|
+
case '--root':
|
|
92
|
+
case '--path':
|
|
93
|
+
parsed.root = path.resolve(value);
|
|
94
|
+
break;
|
|
95
|
+
case '--report-out':
|
|
96
|
+
parsed.reportOut = path.resolve(value);
|
|
97
|
+
break;
|
|
98
|
+
case '--sarif-out':
|
|
99
|
+
parsed.sarifOut = path.resolve(value);
|
|
100
|
+
break;
|
|
101
|
+
case '--policy':
|
|
102
|
+
case '--config':
|
|
103
|
+
parsed.policyFile = path.resolve(value);
|
|
104
|
+
break;
|
|
105
|
+
case '--scanners': {
|
|
106
|
+
const names = value
|
|
107
|
+
.split(',')
|
|
108
|
+
.map((s) => s.trim())
|
|
109
|
+
.filter(Boolean);
|
|
110
|
+
const unknown = names.filter((name) => !VALID_SCANNERS.includes(name));
|
|
111
|
+
if (unknown.length > 0) {
|
|
112
|
+
throw new Error(`--scanners: '${unknown.join(`, `)}' is not a known scanner (expected: ${VALID_SCANNERS.join(', ')})`);
|
|
113
|
+
}
|
|
114
|
+
parsed.scanners = names;
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
case '--block-on': {
|
|
118
|
+
const severities = value.split(',').map((s) => s.trim().toUpperCase());
|
|
119
|
+
const unknown = severities.filter((s) => !VALID_SEVERITIES.includes(s));
|
|
120
|
+
if (unknown.length > 0) {
|
|
121
|
+
throw new Error(`--block-on: '${unknown.join(`, `)}' is not a valid severity (expected: ${VALID_SEVERITIES.join(', ')})`);
|
|
122
|
+
}
|
|
123
|
+
parsed.policy = {
|
|
124
|
+
...parsed.policy,
|
|
125
|
+
blockOnSeverity: severities,
|
|
126
|
+
};
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
switch (flag) {
|
|
133
|
+
case '--offline':
|
|
134
|
+
parsed.offline = true;
|
|
135
|
+
break;
|
|
136
|
+
case '--json':
|
|
137
|
+
parsed.json = true;
|
|
138
|
+
parsed.format = 'json';
|
|
139
|
+
break;
|
|
140
|
+
case '--format': {
|
|
141
|
+
const value = flags[++i];
|
|
142
|
+
if (value !== 'json' && value !== 'markdown' && value !== 'sarif')
|
|
143
|
+
throw new Error(`--format must be json, markdown, or sarif (got '${value}')`);
|
|
144
|
+
parsed.format = value;
|
|
145
|
+
if (value === 'json')
|
|
146
|
+
parsed.json = true;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case '--no-tests':
|
|
150
|
+
parsed.noTests = true;
|
|
151
|
+
break;
|
|
152
|
+
case '--staged':
|
|
153
|
+
parsed.staged = true;
|
|
154
|
+
break;
|
|
155
|
+
case '--strict':
|
|
156
|
+
parsed.strict = true;
|
|
157
|
+
break;
|
|
158
|
+
case '--pre-push':
|
|
159
|
+
parsed.prePush = true;
|
|
160
|
+
break;
|
|
161
|
+
case '--force':
|
|
162
|
+
parsed.force = true;
|
|
163
|
+
break;
|
|
164
|
+
case '-y':
|
|
165
|
+
case '--yes':
|
|
166
|
+
parsed.yes = true;
|
|
167
|
+
break;
|
|
168
|
+
case '-h':
|
|
169
|
+
case '--help':
|
|
170
|
+
return parsed;
|
|
171
|
+
default:
|
|
172
|
+
if (flag.startsWith('--'))
|
|
173
|
+
throw new Error(`Unknown option: ${flag}`);
|
|
174
|
+
if (command === 'config') {
|
|
175
|
+
// `veylqorix config validate <policy-file>`: the positional is the file.
|
|
176
|
+
parsed.policyFile = path.resolve(flag);
|
|
177
|
+
}
|
|
178
|
+
else if (command === 'hooks') {
|
|
179
|
+
// Any bare positional after `hooks install|uninstall` is the root.
|
|
180
|
+
if (parsed.root === cwd)
|
|
181
|
+
parsed.root = path.resolve(flag);
|
|
182
|
+
}
|
|
183
|
+
else if (parsed.root === cwd && !isKnownCommand(flag)) {
|
|
184
|
+
// A bare positional is the root for scan/check/report.
|
|
185
|
+
parsed.root = path.resolve(flag);
|
|
186
|
+
}
|
|
187
|
+
else if (isKnownCommand(flag)) {
|
|
188
|
+
// Legacy single-word subcommands after the main one are ignored.
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (command === 'hooks') {
|
|
193
|
+
parsed.hooksSub = isHooks && argv[1] === 'remove' ? 'uninstall' : 'install';
|
|
194
|
+
}
|
|
195
|
+
parsed.root = path.resolve(parsed.root);
|
|
196
|
+
return parsed;
|
|
197
|
+
}
|
|
198
|
+
/** True when `-h` / `--help` was requested. */
|
|
199
|
+
export function wantsHelp(argv) {
|
|
200
|
+
const first = argv[0];
|
|
201
|
+
const isConfig = first === 'config' && argv[1] === 'validate';
|
|
202
|
+
const isHooks = first === 'hooks' && HOOK_SUBCOMMANDS.has(argv[1] ?? '');
|
|
203
|
+
const flags = isConfig || isHooks ? argv.slice(2) : argv.slice(1);
|
|
204
|
+
return flags.includes('-h') || flags.includes('--help');
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=cli-args.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../src/cli-args.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Veylqorix CLI.
|
|
4
|
+
*
|
|
5
|
+
* Commands:
|
|
6
|
+
* veylqorix scan [root] Run the full security audit + quality gate.
|
|
7
|
+
* veylqorix check [root] Run only the quality checks (type, lint, tests).
|
|
8
|
+
* No scanners run: the gate reports INCOMPLETE
|
|
9
|
+
* (exit 2, secrets unverified). Use `scan` for
|
|
10
|
+
* secret coverage.
|
|
11
|
+
* veylqorix report [root] Emit a human-readable Markdown report.
|
|
12
|
+
* veylqorix config validate [policy-file] Validate a policy JSON file.
|
|
13
|
+
* Legacy aliases: audit, deps, secrets, checks, gate.
|
|
14
|
+
*
|
|
15
|
+
* Options (scan / check / report):
|
|
16
|
+
* --root PATH Audit this directory (default: current working dir).
|
|
17
|
+
* --offline Do not call external scanners (npm audit / pip-audit).
|
|
18
|
+
* --json Emit machine-readable JSON instead of a human summary.
|
|
19
|
+
* --format json|markdown|sarif Force a report format.
|
|
20
|
+
* --report-out PATH Also write a Markdown report to this file.
|
|
21
|
+
* --sarif-out PATH Also write a SARIF report to this file.
|
|
22
|
+
* --no-tests Skip test/build quality checks.
|
|
23
|
+
* --scanners a,b Run only the listed scanners.
|
|
24
|
+
* --staged Scope the secret scan to Git-staged files (git repos only).
|
|
25
|
+
* --block-on a,b Severities that block the gate.
|
|
26
|
+
* --policy FILE Load a policy JSON file for the audit.
|
|
27
|
+
*
|
|
28
|
+
* Exit codes:
|
|
29
|
+
* 0 PASS 1 FAIL (blocking findings) 2 INCOMPLETE (coverage degraded)
|
|
30
|
+
* 64 usage error 65 root not found 70 unexpected error
|
|
31
|
+
*/
|
|
32
|
+
import fs from 'node:fs';
|
|
33
|
+
import path from 'node:path';
|
|
34
|
+
import { runAudit, toJson, toMarkdown, renderAllReports, listStagedFiles, validatePolicyFile, findPolicyFile, installHooks, uninstallHooks, } from '@veylqorix/core';
|
|
35
|
+
import { fileURLToPath } from 'node:url';
|
|
36
|
+
const USAGE = `Veylqorix CLI
|
|
37
|
+
|
|
38
|
+
Usage:
|
|
39
|
+
veylqorix <command> [root] [options]
|
|
40
|
+
|
|
41
|
+
Commands:
|
|
42
|
+
scan Run the full security audit + quality gate (default)
|
|
43
|
+
check Run only the quality checks (no scanners; gate is
|
|
44
|
+
INCOMPLETE / exit 2 - secrets unverified, run scan)
|
|
45
|
+
report Emit a Markdown report
|
|
46
|
+
config validate Validate a policy JSON file
|
|
47
|
+
|
|
48
|
+
Options:
|
|
49
|
+
--root PATH Audit this directory (default: current working dir)
|
|
50
|
+
--offline Do not call external scanners
|
|
51
|
+
--json / --format json Machine-readable output
|
|
52
|
+
--format sarif Emit SARIF
|
|
53
|
+
--report-out PATH Write a Markdown report to PATH
|
|
54
|
+
--sarif-out PATH Write a SARIF report to PATH
|
|
55
|
+
--no-tests Skip test/build quality checks
|
|
56
|
+
--scanners a,b Run only the listed scanners
|
|
57
|
+
--staged Scope the secret scan to Git-staged files
|
|
58
|
+
--block-on a,b Severities that block the gate
|
|
59
|
+
--policy FILE Load a policy JSON file
|
|
60
|
+
|
|
61
|
+
Exit codes: 0=PASS 1=FAIL 2=INCOMPLETE 64=usage 65=bad root 70=error`;
|
|
62
|
+
function parseArgs(argv) {
|
|
63
|
+
const first = argv[0];
|
|
64
|
+
if (first === '-h' || first === '--help') {
|
|
65
|
+
// Bare `veylqorix --help` (or `-h`): print usage, do not start a scan.
|
|
66
|
+
console.log(USAGE);
|
|
67
|
+
process.exit(0);
|
|
68
|
+
}
|
|
69
|
+
const isConfig = first === 'config' && argv[1] === 'validate';
|
|
70
|
+
const isHooks = first === 'hooks' && (argv[1] === 'install' || argv[1] === 'uninstall');
|
|
71
|
+
const command = isConfig ? 'config' : isHooks ? 'hooks' : (first ?? 'scan');
|
|
72
|
+
// For `config validate`, the positional after `validate` is the policy file.
|
|
73
|
+
// For everything else, the positional after the command is the root.
|
|
74
|
+
// `config validate <file>`: positional is the policy file.
|
|
75
|
+
// `hooks install|uninstall`: no positional root.
|
|
76
|
+
// Everything else: the positional after the command is the root.
|
|
77
|
+
let flags;
|
|
78
|
+
if (isConfig)
|
|
79
|
+
flags = argv.slice(2);
|
|
80
|
+
else if (isHooks)
|
|
81
|
+
flags = argv.slice(2);
|
|
82
|
+
else
|
|
83
|
+
flags = argv.slice(1);
|
|
84
|
+
const parsed = {
|
|
85
|
+
command,
|
|
86
|
+
root: process.cwd(),
|
|
87
|
+
offline: false,
|
|
88
|
+
json: false,
|
|
89
|
+
noTests: false,
|
|
90
|
+
staged: false,
|
|
91
|
+
prePush: false,
|
|
92
|
+
force: false,
|
|
93
|
+
yes: false,
|
|
94
|
+
};
|
|
95
|
+
const valueFlag = new Set(['--report-out', '--sarif-out', '--scanners', '--block-on', '--root', '--policy']);
|
|
96
|
+
for (let i = 0; i < flags.length; i++) {
|
|
97
|
+
const flag = flags[i];
|
|
98
|
+
if (!flag)
|
|
99
|
+
continue;
|
|
100
|
+
if (valueFlag.has(flag)) {
|
|
101
|
+
const value = flags[++i];
|
|
102
|
+
if (value === undefined)
|
|
103
|
+
throw new Error(`${flag} requires a value`);
|
|
104
|
+
switch (flag) {
|
|
105
|
+
case '--root':
|
|
106
|
+
parsed.root = value;
|
|
107
|
+
break;
|
|
108
|
+
case '--report-out':
|
|
109
|
+
parsed.reportOut = path.resolve(value);
|
|
110
|
+
break;
|
|
111
|
+
case '--sarif-out':
|
|
112
|
+
parsed.sarifOut = path.resolve(value);
|
|
113
|
+
break;
|
|
114
|
+
case '--policy':
|
|
115
|
+
parsed.policyFile = path.resolve(value);
|
|
116
|
+
break;
|
|
117
|
+
case '--scanners':
|
|
118
|
+
parsed.scanners = value.split(',').map((s) => s.trim()).filter(Boolean);
|
|
119
|
+
break;
|
|
120
|
+
case '--block-on':
|
|
121
|
+
parsed.policy = { ...parsed.policy, blockOnSeverity: value.split(',').map((s) => s.trim().toUpperCase()) };
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
switch (flag) {
|
|
127
|
+
case '--offline':
|
|
128
|
+
parsed.offline = true;
|
|
129
|
+
break;
|
|
130
|
+
case '--json':
|
|
131
|
+
parsed.json = true;
|
|
132
|
+
parsed.format = 'json';
|
|
133
|
+
break;
|
|
134
|
+
case '--format': {
|
|
135
|
+
const value = flags[++i];
|
|
136
|
+
if (value !== 'json' && value !== 'markdown' && value !== 'sarif')
|
|
137
|
+
throw new Error(`--format must be json, markdown, or sarif (got '${value}')`);
|
|
138
|
+
parsed.format = value;
|
|
139
|
+
if (value === 'json')
|
|
140
|
+
parsed.json = true;
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case '--no-tests':
|
|
144
|
+
parsed.noTests = true;
|
|
145
|
+
break;
|
|
146
|
+
case '--staged':
|
|
147
|
+
parsed.staged = true;
|
|
148
|
+
break;
|
|
149
|
+
case '--pre-push':
|
|
150
|
+
parsed.prePush = true;
|
|
151
|
+
break;
|
|
152
|
+
case '--force':
|
|
153
|
+
parsed.force = true;
|
|
154
|
+
break;
|
|
155
|
+
case '-y':
|
|
156
|
+
case '--yes':
|
|
157
|
+
parsed.yes = true;
|
|
158
|
+
break;
|
|
159
|
+
case '-h':
|
|
160
|
+
case '--help':
|
|
161
|
+
console.log(USAGE);
|
|
162
|
+
process.exit(0);
|
|
163
|
+
break;
|
|
164
|
+
default:
|
|
165
|
+
if (flag.startsWith('--'))
|
|
166
|
+
throw new Error(`Unknown option: ${flag}`);
|
|
167
|
+
if (command.startsWith('config')) {
|
|
168
|
+
// `veylqorix config validate <policy-file>`: the positional is the file.
|
|
169
|
+
parsed.policyFile = path.resolve(flag);
|
|
170
|
+
}
|
|
171
|
+
else if (parsed.root === process.cwd() && !isKnownCommand(flag)) {
|
|
172
|
+
// A bare positional is the root for scan/check/report.
|
|
173
|
+
parsed.root = path.resolve(flag);
|
|
174
|
+
}
|
|
175
|
+
else if (isKnownCommand(flag)) {
|
|
176
|
+
// Legacy single-word subcommands after the main one are ignored.
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
parsed.root = path.resolve(parsed.root);
|
|
181
|
+
return parsed;
|
|
182
|
+
}
|
|
183
|
+
const KNOWN_COMMANDS = new Set(['scan', 'check', 'report', 'config', 'hooks', 'audit', 'deps', 'secrets', 'checks', 'gate']);
|
|
184
|
+
function isKnownCommand(word) {
|
|
185
|
+
return KNOWN_COMMANDS.has(word);
|
|
186
|
+
}
|
|
187
|
+
/** Normalize legacy aliases to modern verbs. */
|
|
188
|
+
function normalizeCommand(command) {
|
|
189
|
+
switch (command) {
|
|
190
|
+
case 'audit':
|
|
191
|
+
case 'deps':
|
|
192
|
+
case 'secrets':
|
|
193
|
+
case 'gate':
|
|
194
|
+
return 'scan';
|
|
195
|
+
case 'checks':
|
|
196
|
+
return 'check';
|
|
197
|
+
default:
|
|
198
|
+
return command;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function severityIcon(status) {
|
|
202
|
+
switch (status) {
|
|
203
|
+
case 'PASS': return '✅';
|
|
204
|
+
case 'FAIL': return '❌';
|
|
205
|
+
case 'SKIPPED': return '⏭️';
|
|
206
|
+
default: return '⚠️';
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function summarize(result) {
|
|
210
|
+
const gate = result.gate;
|
|
211
|
+
const lines = [];
|
|
212
|
+
lines.push(`${severityIcon(gate.result)} Gate result: ${gate.result} (coverage ${result.coverage}, exit code ${result.exitCode})`);
|
|
213
|
+
lines.push('');
|
|
214
|
+
lines.push('Scanners:');
|
|
215
|
+
for (const s of result.scanners) {
|
|
216
|
+
lines.push(` ${severityIcon(s.status)} ${s.scanner.padEnd(16)} ${s.status.padEnd(8)} ${s.findings.length} finding(s)`);
|
|
217
|
+
}
|
|
218
|
+
if (result.checks.length > 0) {
|
|
219
|
+
lines.push('');
|
|
220
|
+
lines.push('Checks:');
|
|
221
|
+
for (const c of result.checks) {
|
|
222
|
+
lines.push(` ${severityIcon(c.status)} ${c.id.padEnd(16)} ${c.status}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
if (gate.blockingReasons.length > 0) {
|
|
226
|
+
lines.push('');
|
|
227
|
+
lines.push('Blocking reasons:');
|
|
228
|
+
for (const r of gate.blockingReasons)
|
|
229
|
+
lines.push(` - ${r}`);
|
|
230
|
+
}
|
|
231
|
+
if (gate.incompleteReasons.length > 0) {
|
|
232
|
+
lines.push('');
|
|
233
|
+
lines.push('Incomplete coverage:');
|
|
234
|
+
for (const r of gate.incompleteReasons)
|
|
235
|
+
lines.push(` - ${r}`);
|
|
236
|
+
}
|
|
237
|
+
if (result.findings.length > 0) {
|
|
238
|
+
lines.push('');
|
|
239
|
+
lines.push(`Findings: ${result.findings.length} total (use --json / --format markdown for details)`);
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
lines.push('');
|
|
243
|
+
lines.push('Findings: 0');
|
|
244
|
+
}
|
|
245
|
+
return lines.join('\n');
|
|
246
|
+
}
|
|
247
|
+
function loadPolicy(parsed) {
|
|
248
|
+
let file = parsed.policyFile;
|
|
249
|
+
if (!file && findPolicyFile(parsed.root))
|
|
250
|
+
file = findPolicyFile(parsed.root);
|
|
251
|
+
let policy = parsed.policy;
|
|
252
|
+
if (file) {
|
|
253
|
+
const result = validatePolicyFile(file);
|
|
254
|
+
if (!result.valid) {
|
|
255
|
+
console.error(`Policy file ${file} is invalid:`);
|
|
256
|
+
for (const issue of result.issues)
|
|
257
|
+
console.error(` [${issue.level}] ${issue.field}: ${issue.message}`);
|
|
258
|
+
process.exit(64);
|
|
259
|
+
}
|
|
260
|
+
const resolved = result.resolved?.policy;
|
|
261
|
+
policy = { ...policy, ...resolved };
|
|
262
|
+
}
|
|
263
|
+
return policy;
|
|
264
|
+
}
|
|
265
|
+
async function main() {
|
|
266
|
+
let parsed;
|
|
267
|
+
try {
|
|
268
|
+
parsed = parseArgs(process.argv.slice(2));
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
console.error(error.message);
|
|
272
|
+
process.exit(64);
|
|
273
|
+
}
|
|
274
|
+
const command = normalizeCommand(parsed.command);
|
|
275
|
+
if (command === 'hooks') {
|
|
276
|
+
const sub = process.argv[3] === 'uninstall' ? 'uninstall' : 'install';
|
|
277
|
+
const cliPath = path.resolve(fileURLToPath(import.meta.url));
|
|
278
|
+
if (!parsed.yes) {
|
|
279
|
+
// Dry run: print the exact hook scripts; nothing is written without --yes.
|
|
280
|
+
const gitDir = path.join(parsed.root, '.git');
|
|
281
|
+
console.log('Dry run: Veylqorix will write the following hooks (git config is never touched).');
|
|
282
|
+
for (const kind of parsed.prePush ? ['pre-commit', 'pre-push'] : ['pre-commit']) {
|
|
283
|
+
console.log(`--- ${gitDir}/hooks/${kind} ---`);
|
|
284
|
+
const scanArgs = kind === 'pre-commit' ? 'scan --staged --no-tests --scanners secrets' : 'scan --no-tests';
|
|
285
|
+
console.log('#!/bin/sh\n# VeylqORIX-HOOK:v1\n' +
|
|
286
|
+
`# ${kind}: local convenience gate; GitHub-side enforcement is the authoritative boundary.\n` +
|
|
287
|
+
'if [ "$VEYLQORIX_OVERRIDE" = "1" ]; then echo "veylqorix: VeyLQORIX_OVERRIDE=1; skipping ' + kind + '" >&2; exit 0; fi\n' +
|
|
288
|
+
'DIR=$(git rev-parse --show-toplevel) || exit 0\n' +
|
|
289
|
+
`exec node ${JSON.stringify(cliPath)} ${scanArgs} --root "$DIR"\n` +
|
|
290
|
+
'exit $?\n');
|
|
291
|
+
}
|
|
292
|
+
console.log('\nRe-run with --yes to install. Emergency override: VeyLQORIX_OVERRIDE=1 <git command>.');
|
|
293
|
+
process.exit(0);
|
|
294
|
+
}
|
|
295
|
+
const outcome = sub === 'install'
|
|
296
|
+
? await installHooks({
|
|
297
|
+
repoRoot: parsed.root,
|
|
298
|
+
cliPath,
|
|
299
|
+
prePush: parsed.prePush,
|
|
300
|
+
force: parsed.force,
|
|
301
|
+
extraFlags: parsed.offline ? ['--offline'] : [],
|
|
302
|
+
})
|
|
303
|
+
: await uninstallHooks(parsed.root, parsed.prePush);
|
|
304
|
+
for (const msg of outcome.installed)
|
|
305
|
+
console.log(` installed: ${msg}`);
|
|
306
|
+
for (const msg of outcome.backedUp)
|
|
307
|
+
console.log(` backed up: ${msg}`);
|
|
308
|
+
for (const msg of outcome.skipped)
|
|
309
|
+
console.log(` skipped: ${msg}`);
|
|
310
|
+
for (const msg of outcome.errors)
|
|
311
|
+
console.error(` error: ${msg}`);
|
|
312
|
+
if (sub === 'install' && outcome.installed.length > 0 && outcome.errors.length === 0) {
|
|
313
|
+
console.log('\nManual alternative and testing steps:');
|
|
314
|
+
for (const line of outcome.manualInstructions)
|
|
315
|
+
console.log(` ${line}`);
|
|
316
|
+
}
|
|
317
|
+
process.exit(outcome.errors.length > 0 ? 64 : 0);
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
if (command === 'config') {
|
|
321
|
+
const target = parsed.policyFile;
|
|
322
|
+
if (!target || !fs.existsSync(target)) {
|
|
323
|
+
console.error(`Policy file not found: ${target ?? '(none)'}`);
|
|
324
|
+
console.error('Usage: veylqorix config validate <policy.json>');
|
|
325
|
+
process.exit(65);
|
|
326
|
+
}
|
|
327
|
+
const result = validatePolicyFile(path.resolve(target));
|
|
328
|
+
if (result.valid) {
|
|
329
|
+
console.log(`✅ Policy valid: ${path.resolve(target)}`);
|
|
330
|
+
if (result.issues.length > 0) {
|
|
331
|
+
for (const issue of result.issues)
|
|
332
|
+
console.log(` [${issue.level}] ${issue.field}: ${issue.message}`);
|
|
333
|
+
}
|
|
334
|
+
process.exit(0);
|
|
335
|
+
}
|
|
336
|
+
console.error(`❌ Policy invalid: ${path.resolve(target)}`);
|
|
337
|
+
for (const issue of result.issues)
|
|
338
|
+
console.error(` [${issue.level}] ${issue.field}: ${issue.message}`);
|
|
339
|
+
process.exit(64);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (!fs.existsSync(parsed.root)) {
|
|
343
|
+
console.error(`Root directory does not exist: ${parsed.root}`);
|
|
344
|
+
process.exit(65);
|
|
345
|
+
}
|
|
346
|
+
let stagedFiles;
|
|
347
|
+
if (parsed.staged) {
|
|
348
|
+
stagedFiles = await listStagedFiles(parsed.root);
|
|
349
|
+
if (stagedFiles.length === 0) {
|
|
350
|
+
console.error('No staged files found; run `git add` first. --staged requires a Git repository with staged changes.');
|
|
351
|
+
process.exit(65);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
const options = {
|
|
355
|
+
root: parsed.root,
|
|
356
|
+
online: !parsed.offline,
|
|
357
|
+
includeTests: !parsed.noTests,
|
|
358
|
+
onlyScanners: command === 'check' ? [] : parsed.scanners,
|
|
359
|
+
skipQualityChecks: command === 'check' ? false : undefined,
|
|
360
|
+
policy: loadPolicy(parsed),
|
|
361
|
+
stagedFiles,
|
|
362
|
+
};
|
|
363
|
+
const result = await runAudit(options);
|
|
364
|
+
// Write report files when requested — all derived from the same scan result
|
|
365
|
+
// via the shared rendering path, so a file-write failure here is a visible
|
|
366
|
+
// scan failure, never a silently swallowed gap.
|
|
367
|
+
if (parsed.reportOut || parsed.sarifOut) {
|
|
368
|
+
const written = renderAllReports(result, {
|
|
369
|
+
markdownPath: parsed.reportOut,
|
|
370
|
+
sarifPath: parsed.sarifOut,
|
|
371
|
+
});
|
|
372
|
+
if (written.markdownPath && parsed.format !== 'json' && parsed.format !== 'sarif')
|
|
373
|
+
console.log(`Markdown report written to ${written.markdownPath}`);
|
|
374
|
+
if (written.sarifPath && parsed.format !== 'json' && parsed.format !== 'markdown')
|
|
375
|
+
console.log(`SARIF report written to ${written.sarifPath}`);
|
|
376
|
+
}
|
|
377
|
+
// Decide the stdout shape: --json/--format json wins, then markdown
|
|
378
|
+
// (--format markdown or the `report` command), then a short summary.
|
|
379
|
+
if (parsed.format === 'json' || parsed.json) {
|
|
380
|
+
console.log(toJson(result));
|
|
381
|
+
}
|
|
382
|
+
else if (command === 'report' || parsed.format === 'markdown') {
|
|
383
|
+
console.log(toMarkdown(result));
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
console.log(summarize(result));
|
|
387
|
+
}
|
|
388
|
+
process.exit(result.exitCode);
|
|
389
|
+
}
|
|
390
|
+
main().catch((error) => {
|
|
391
|
+
console.error('veylqorix: unexpected error:', error instanceof Error ? error.message : error);
|
|
392
|
+
process.exit(70);
|
|
393
|
+
});
|
|
394
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@veylqorix/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Veylqorix command-line interface: run security audits and quality gates from the terminal or CI.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/soumyachk101/Veylqorix.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/soumyachk101/Veylqorix#readme",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=20.18"
|
|
14
|
+
},
|
|
15
|
+
"main": "dist/index.js",
|
|
16
|
+
"bin": {
|
|
17
|
+
"veylqorix": "dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"LICENSE"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public",
|
|
25
|
+
"provenance": true
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@veylqorix/core": "0.1.1"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "tsc -p tsconfig.json",
|
|
32
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
33
|
+
}
|
|
6
34
|
}
|
package/README.md
DELETED