avana-cli 2.11.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/CHANGELOG.md +32 -0
- package/LICENSE +21 -0
- package/README.md +584 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +153 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +101 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/scan.d.ts +19 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +383 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/uninstall.d.ts +6 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +80 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/index.d.ts +97 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +475 -0
- package/dist/index.js.map +1 -0
- package/dist/rules/additional-patterns.d.ts +12 -0
- package/dist/rules/additional-patterns.d.ts.map +1 -0
- package/dist/rules/additional-patterns.js +170 -0
- package/dist/rules/additional-patterns.js.map +1 -0
- package/dist/rules/code-patterns.d.ts +26 -0
- package/dist/rules/code-patterns.d.ts.map +1 -0
- package/dist/rules/code-patterns.js +220 -0
- package/dist/rules/code-patterns.js.map +1 -0
- package/dist/rules/secret-patterns.d.ts +28 -0
- package/dist/rules/secret-patterns.d.ts.map +1 -0
- package/dist/rules/secret-patterns.js +1729 -0
- package/dist/rules/secret-patterns.js.map +1 -0
- package/dist/scanners/secret-scanner.d.ts +34 -0
- package/dist/scanners/secret-scanner.d.ts.map +1 -0
- package/dist/scanners/secret-scanner.js +281 -0
- package/dist/scanners/secret-scanner.js.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/error-handler.d.ts +126 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +222 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/exit-codes.d.ts +52 -0
- package/dist/utils/exit-codes.d.ts.map +1 -0
- package/dist/utils/exit-codes.js +89 -0
- package/dist/utils/exit-codes.js.map +1 -0
- package/dist/utils/file-stream-scanner.d.ts +31 -0
- package/dist/utils/file-stream-scanner.d.ts.map +1 -0
- package/dist/utils/file-stream-scanner.js +159 -0
- package/dist/utils/file-stream-scanner.js.map +1 -0
- package/dist/utils/file-type-detector.d.ts +45 -0
- package/dist/utils/file-type-detector.d.ts.map +1 -0
- package/dist/utils/file-type-detector.js +237 -0
- package/dist/utils/file-type-detector.js.map +1 -0
- package/dist/utils/ignore-pattern-manager.d.ts +61 -0
- package/dist/utils/ignore-pattern-manager.d.ts.map +1 -0
- package/dist/utils/ignore-pattern-manager.js +204 -0
- package/dist/utils/ignore-pattern-manager.js.map +1 -0
- package/dist/utils/json-output-formatter.d.ts +232 -0
- package/dist/utils/json-output-formatter.d.ts.map +1 -0
- package/dist/utils/json-output-formatter.js +367 -0
- package/dist/utils/json-output-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +181 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +414 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown-output-formatter.d.ts +65 -0
- package/dist/utils/markdown-output-formatter.d.ts.map +1 -0
- package/dist/utils/markdown-output-formatter.js +316 -0
- package/dist/utils/markdown-output-formatter.js.map +1 -0
- package/dist/utils/memory-manager.d.ts +77 -0
- package/dist/utils/memory-manager.d.ts.map +1 -0
- package/dist/utils/memory-manager.js +157 -0
- package/dist/utils/memory-manager.js.map +1 -0
- package/dist/utils/parallel-scanner-worker.d.ts +19 -0
- package/dist/utils/parallel-scanner-worker.d.ts.map +1 -0
- package/dist/utils/parallel-scanner-worker.js +51 -0
- package/dist/utils/parallel-scanner-worker.js.map +1 -0
- package/dist/utils/parallel-scanner.d.ts +82 -0
- package/dist/utils/parallel-scanner.d.ts.map +1 -0
- package/dist/utils/parallel-scanner.js +229 -0
- package/dist/utils/parallel-scanner.js.map +1 -0
- package/dist/utils/pattern-validator.d.ts +108 -0
- package/dist/utils/pattern-validator.d.ts.map +1 -0
- package/dist/utils/pattern-validator.js +315 -0
- package/dist/utils/pattern-validator.js.map +1 -0
- package/dist/utils/progress-reporter.d.ts +68 -0
- package/dist/utils/progress-reporter.d.ts.map +1 -0
- package/dist/utils/progress-reporter.js +194 -0
- package/dist/utils/progress-reporter.js.map +1 -0
- package/dist/utils/result-cache.d.ts +99 -0
- package/dist/utils/result-cache.d.ts.map +1 -0
- package/dist/utils/result-cache.js +335 -0
- package/dist/utils/result-cache.js.map +1 -0
- package/package.json +80 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* Avana CLI
|
|
5
|
+
* Command-line interface for security scanning
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const scan_1 = require("./commands/scan");
|
|
9
|
+
const install_1 = require("./commands/install");
|
|
10
|
+
const uninstall_1 = require("./commands/uninstall");
|
|
11
|
+
const exit_codes_1 = require("./utils/exit-codes");
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
const command = args[0];
|
|
14
|
+
async function main() {
|
|
15
|
+
try {
|
|
16
|
+
if (!command || command === 'scan') {
|
|
17
|
+
// Parse CLI arguments
|
|
18
|
+
const verbose = args.includes('--verbose') || args.includes('-v');
|
|
19
|
+
const debug = args.includes('--debug');
|
|
20
|
+
const quiet = args.includes('--quiet');
|
|
21
|
+
const staged = args.includes('--staged');
|
|
22
|
+
const outputJson = args.includes('--output-json') || args.includes('--json');
|
|
23
|
+
const outputMd = args.includes('--output-md');
|
|
24
|
+
const noProgress = args.includes('--no-progress');
|
|
25
|
+
const failOnHigh = args.includes('--fail-on-high');
|
|
26
|
+
// Parse path argument
|
|
27
|
+
const pathIndex = args.indexOf('--path');
|
|
28
|
+
const path = pathIndex >= 0 ? args[pathIndex + 1] : undefined;
|
|
29
|
+
// Validate path argument
|
|
30
|
+
if (pathIndex >= 0 && !path) {
|
|
31
|
+
(0, exit_codes_1.handleInvalidArguments)('--path flag requires a value');
|
|
32
|
+
}
|
|
33
|
+
// Parse max-memory argument
|
|
34
|
+
const maxMemoryIndex = args.indexOf('--max-memory');
|
|
35
|
+
let maxMemory;
|
|
36
|
+
if (maxMemoryIndex >= 0) {
|
|
37
|
+
const maxMemoryStr = args[maxMemoryIndex + 1];
|
|
38
|
+
if (!maxMemoryStr) {
|
|
39
|
+
(0, exit_codes_1.handleInvalidArguments)('--max-memory flag requires a value');
|
|
40
|
+
}
|
|
41
|
+
maxMemory = parseInt(maxMemoryStr, 10);
|
|
42
|
+
if (isNaN(maxMemory) || maxMemory <= 0) {
|
|
43
|
+
(0, exit_codes_1.handleInvalidArguments)('--max-memory must be a positive number');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Parse workers argument
|
|
47
|
+
const workersIndex = args.indexOf('--workers');
|
|
48
|
+
let workers;
|
|
49
|
+
if (workersIndex >= 0) {
|
|
50
|
+
const workersStr = args[workersIndex + 1];
|
|
51
|
+
if (!workersStr) {
|
|
52
|
+
(0, exit_codes_1.handleInvalidArguments)('--workers flag requires a value');
|
|
53
|
+
}
|
|
54
|
+
workers = parseInt(workersStr, 10);
|
|
55
|
+
if (isNaN(workers) || workers <= 0) {
|
|
56
|
+
(0, exit_codes_1.handleInvalidArguments)('--workers must be a positive number');
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Parse ignore patterns
|
|
60
|
+
const ignorePatterns = [];
|
|
61
|
+
let i = 0;
|
|
62
|
+
while (i < args.length) {
|
|
63
|
+
if (args[i] === '--ignore' && i + 1 < args.length) {
|
|
64
|
+
ignorePatterns.push(args[i + 1]);
|
|
65
|
+
i += 2;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
i++;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
await (0, scan_1.scanCommand)({
|
|
72
|
+
path,
|
|
73
|
+
verbose,
|
|
74
|
+
debug,
|
|
75
|
+
quiet,
|
|
76
|
+
staged,
|
|
77
|
+
outputJson,
|
|
78
|
+
outputMd,
|
|
79
|
+
ignorePatterns,
|
|
80
|
+
noProgress,
|
|
81
|
+
failOnHigh,
|
|
82
|
+
maxMemory,
|
|
83
|
+
workers
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
else if (command === 'install') {
|
|
87
|
+
await (0, install_1.installCommand)();
|
|
88
|
+
}
|
|
89
|
+
else if (command === 'uninstall') {
|
|
90
|
+
await (0, uninstall_1.uninstallCommand)();
|
|
91
|
+
}
|
|
92
|
+
else if (command === '--help' || command === '-h') {
|
|
93
|
+
console.log(`
|
|
94
|
+
š Avana CLI
|
|
95
|
+
|
|
96
|
+
Usage:
|
|
97
|
+
avana scan [options] Scan project for security issues
|
|
98
|
+
avana install Install Git pre-commit hooks
|
|
99
|
+
avana uninstall Remove Git pre-commit hooks
|
|
100
|
+
avana --help Show this help message
|
|
101
|
+
|
|
102
|
+
Scan Options:
|
|
103
|
+
--path <path> Path to scan (default: current directory)
|
|
104
|
+
--staged Scan only Git staged files (for pre-commit hooks)
|
|
105
|
+
--verbose, -v Show detailed output
|
|
106
|
+
--debug Show debug information
|
|
107
|
+
--quiet Show minimal output
|
|
108
|
+
--json Save results to JSON file
|
|
109
|
+
--output-json Save results to JSON file (alias for --json)
|
|
110
|
+
--output-md Save results to Markdown file
|
|
111
|
+
--no-progress Disable progress bar
|
|
112
|
+
--fail-on-high Exit with code 1 on high severity issues
|
|
113
|
+
--max-memory <mb> Set memory limit in MB (default: 500)
|
|
114
|
+
--workers <count> Set number of worker threads (default: CPU count - 1)
|
|
115
|
+
--ignore <pattern> Ignore files matching pattern (can be used multiple times)
|
|
116
|
+
|
|
117
|
+
Exit Codes:
|
|
118
|
+
0 No critical or high severity issues found
|
|
119
|
+
1 Critical or high severity issues found
|
|
120
|
+
2 Invalid arguments or configuration
|
|
121
|
+
3 Unexpected error occurred
|
|
122
|
+
|
|
123
|
+
Examples:
|
|
124
|
+
avana scan
|
|
125
|
+
avana scan --path ./my-project
|
|
126
|
+
avana scan --staged
|
|
127
|
+
avana scan --verbose --debug
|
|
128
|
+
avana scan --json --output-md
|
|
129
|
+
avana scan --fail-on-high
|
|
130
|
+
avana scan --max-memory 1000 --workers 4
|
|
131
|
+
avana scan --ignore "**/*.md" --ignore "tests/**"
|
|
132
|
+
avana install
|
|
133
|
+
avana uninstall
|
|
134
|
+
`);
|
|
135
|
+
process.exit(exit_codes_1.ExitCode.SUCCESS);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
(0, exit_codes_1.handleInvalidArguments)(`Unknown command: ${command}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (error instanceof Error) {
|
|
143
|
+
(0, exit_codes_1.handleUnexpectedError)(error);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
(0, exit_codes_1.handleUnexpectedError)(new Error(String(error)));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
main().catch(error => {
|
|
151
|
+
(0, exit_codes_1.handleUnexpectedError)(error instanceof Error ? error : new Error(String(error)));
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DpD"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Avana CLI - Install Command
|
|
4
|
+
* Installs Git hooks for automatic pre-commit scanning
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.installCommand = installCommand;
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const child_process_1 = require("child_process");
|
|
44
|
+
const exit_codes_1 = require("../utils/exit-codes");
|
|
45
|
+
async function installCommand() {
|
|
46
|
+
console.log('š Installing Avana Git hooks...\n');
|
|
47
|
+
try {
|
|
48
|
+
// Check if we're in a Git repository
|
|
49
|
+
if (!fs.existsSync('.git')) {
|
|
50
|
+
console.error('ā Error: Not a Git repository');
|
|
51
|
+
console.log(' Run this command from the root of your Git repository\n');
|
|
52
|
+
process.exit(exit_codes_1.ExitCode.INVALID_ARGUMENTS);
|
|
53
|
+
}
|
|
54
|
+
// Check if Husky is installed
|
|
55
|
+
try {
|
|
56
|
+
require.resolve('husky');
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
console.log('š¦ Installing Husky...');
|
|
60
|
+
(0, child_process_1.execSync)('npm install --save-dev husky', { stdio: 'inherit' });
|
|
61
|
+
}
|
|
62
|
+
// Initialize Husky
|
|
63
|
+
console.log('āļø Initializing Husky...');
|
|
64
|
+
(0, child_process_1.execSync)('npx husky init', { stdio: 'inherit' });
|
|
65
|
+
// Create .husky directory if it doesn't exist
|
|
66
|
+
const huskyDir = path.join(process.cwd(), '.husky');
|
|
67
|
+
if (!fs.existsSync(huskyDir)) {
|
|
68
|
+
fs.mkdirSync(huskyDir, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
// Create pre-commit hook
|
|
71
|
+
const preCommitPath = path.join(huskyDir, 'pre-commit');
|
|
72
|
+
const preCommitContent = `#!/usr/bin/env sh
|
|
73
|
+
. "$(dirname -- "$0")/_/husky.sh"
|
|
74
|
+
|
|
75
|
+
# Run Avana security scan
|
|
76
|
+
echo "š Running Avana security scan..."
|
|
77
|
+
npx avana scan --staged
|
|
78
|
+
|
|
79
|
+
# Exit code 1 will block the commit
|
|
80
|
+
`;
|
|
81
|
+
fs.writeFileSync(preCommitPath, preCommitContent, { mode: 0o755 });
|
|
82
|
+
// Make the hook executable (Unix-like systems)
|
|
83
|
+
if (process.platform !== 'win32') {
|
|
84
|
+
fs.chmodSync(preCommitPath, 0o755);
|
|
85
|
+
}
|
|
86
|
+
console.log('\nā
Avana Git hooks installed successfully!\n');
|
|
87
|
+
console.log('š What happens now:');
|
|
88
|
+
console.log(' ⢠Before each commit, Avana will scan your staged files');
|
|
89
|
+
console.log(' ⢠Commits with critical/high severity issues will be blocked');
|
|
90
|
+
console.log(' ⢠You\'ll see clear error messages with fix suggestions\n');
|
|
91
|
+
console.log('š” Tips:');
|
|
92
|
+
console.log(' ⢠To bypass the hook: git commit --no-verify');
|
|
93
|
+
console.log(' ⢠To uninstall: avana uninstall\n');
|
|
94
|
+
process.exit(exit_codes_1.ExitCode.SUCCESS);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error('ā Error installing Git hooks:', error.message);
|
|
98
|
+
(0, exit_codes_1.handleUnexpectedError)(error instanceof Error ? error : new Error(String(error)));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOH,wCA8DC;AAnED,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAyC;AACzC,oDAA8F;AAEvF,KAAK,UAAU,cAAc;IAClC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,qCAAqC;QACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;YAC1E,OAAO,CAAC,IAAI,CAAC,qBAAQ,CAAC,iBAAiB,CAAC,CAAC;QAC3C,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,IAAA,wBAAQ,EAAC,8BAA8B,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QACjE,CAAC;QAED,mBAAmB;QACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjD,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,yBAAyB;QACzB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACxD,MAAM,gBAAgB,GAAG;;;;;;;;CAQ5B,CAAC;QAEE,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,gBAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnE,+CAA+C;QAC/C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAEpD,OAAO,CAAC,IAAI,CAAC,qBAAQ,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAA,kCAAqB,EAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Avana CLI - Scan Command
|
|
3
|
+
* Scans project for security issues
|
|
4
|
+
*/
|
|
5
|
+
export declare function scanCommand(options: {
|
|
6
|
+
path?: string;
|
|
7
|
+
verbose?: boolean;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
quiet?: boolean;
|
|
10
|
+
staged?: boolean;
|
|
11
|
+
outputJson?: boolean;
|
|
12
|
+
outputMd?: boolean;
|
|
13
|
+
ignorePatterns?: string[];
|
|
14
|
+
noProgress?: boolean;
|
|
15
|
+
failOnHigh?: boolean;
|
|
16
|
+
maxMemory?: number;
|
|
17
|
+
workers?: number;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2GH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,iBAoOA"}
|