driftdetect 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/bin/drift.d.ts +11 -0
- package/dist/bin/drift.d.ts.map +1 -0
- package/dist/bin/drift.js +83 -0
- package/dist/bin/drift.js.map +1 -0
- package/dist/commands/approve.d.ts +18 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +271 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/check.d.ts +39 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +268 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/export.d.ts +14 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +109 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/files.d.ts +13 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +88 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/ignore.d.ts +18 -0
- package/dist/commands/ignore.d.ts.map +1 -0
- package/dist/commands/ignore.js +200 -0
- package/dist/commands/ignore.js.map +1 -0
- package/dist/commands/index.d.ts +16 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +16 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +320 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/report.d.ts +20 -0
- package/dist/commands/report.d.ts.map +1 -0
- package/dist/commands/report.js +202 -0
- package/dist/commands/report.js.map +1 -0
- package/dist/commands/scan.d.ts +27 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +444 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +199 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/where.d.ts +13 -0
- package/dist/commands/where.d.ts.map +1 -0
- package/dist/commands/where.js +80 -0
- package/dist/commands/where.js.map +1 -0
- package/dist/git/hooks.d.ts +108 -0
- package/dist/git/hooks.d.ts.map +1 -0
- package/dist/git/hooks.js +389 -0
- package/dist/git/hooks.js.map +1 -0
- package/dist/git/index.d.ts +6 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +6 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/staged-files.d.ts +41 -0
- package/dist/git/staged-files.d.ts.map +1 -0
- package/dist/git/staged-files.js +118 -0
- package/dist/git/staged-files.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/reporters/github-reporter.d.ts +13 -0
- package/dist/reporters/github-reporter.d.ts.map +1 -0
- package/dist/reporters/github-reporter.js +59 -0
- package/dist/reporters/github-reporter.js.map +1 -0
- package/dist/reporters/gitlab-reporter.d.ts +16 -0
- package/dist/reporters/gitlab-reporter.d.ts.map +1 -0
- package/dist/reporters/gitlab-reporter.js +62 -0
- package/dist/reporters/gitlab-reporter.js.map +1 -0
- package/dist/reporters/index.d.ts +9 -0
- package/dist/reporters/index.d.ts.map +1 -0
- package/dist/reporters/index.js +9 -0
- package/dist/reporters/index.js.map +1 -0
- package/dist/reporters/json-reporter.d.ts +13 -0
- package/dist/reporters/json-reporter.d.ts.map +1 -0
- package/dist/reporters/json-reporter.js +44 -0
- package/dist/reporters/json-reporter.js.map +1 -0
- package/dist/reporters/text-reporter.d.ts +13 -0
- package/dist/reporters/text-reporter.d.ts.map +1 -0
- package/dist/reporters/text-reporter.js +96 -0
- package/dist/reporters/text-reporter.js.map +1 -0
- package/dist/reporters/types.d.ts +42 -0
- package/dist/reporters/types.d.ts.map +1 -0
- package/dist/reporters/types.js +5 -0
- package/dist/reporters/types.js.map +1 -0
- package/dist/services/scanner-service.d.ts +166 -0
- package/dist/services/scanner-service.d.ts.map +1 -0
- package/dist/services/scanner-service.js +453 -0
- package/dist/services/scanner-service.js.map +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +15 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/progress.d.ts +115 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +232 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/prompts.d.ts +91 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +160 -0
- package/dist/ui/prompts.js.map +1 -0
- package/dist/ui/spinner.d.ts +109 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +179 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/ui/table.d.ts +118 -0
- package/dist/ui/table.d.ts.map +1 -0
- package/dist/ui/table.js +235 -0
- package/dist/ui/table.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check Command - drift check
|
|
3
|
+
*
|
|
4
|
+
* Check for violations against approved patterns.
|
|
5
|
+
*
|
|
6
|
+
* @requirements 29.3
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
import * as fs from 'node:fs/promises';
|
|
10
|
+
import * as path from 'node:path';
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { PatternStore, } from 'driftdetect-core';
|
|
13
|
+
import { createSpinner, status } from '../ui/spinner.js';
|
|
14
|
+
import { getStagedFiles } from '../git/staged-files.js';
|
|
15
|
+
import { TextReporter, JsonReporter, GitHubReporter, GitLabReporter, } from '../reporters/index.js';
|
|
16
|
+
/** Directory name for drift configuration */
|
|
17
|
+
const DRIFT_DIR = '.drift';
|
|
18
|
+
/** Severity order for comparison */
|
|
19
|
+
const SEVERITY_ORDER = {
|
|
20
|
+
error: 4,
|
|
21
|
+
warning: 3,
|
|
22
|
+
info: 2,
|
|
23
|
+
hint: 1,
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Check if drift is initialized
|
|
27
|
+
*/
|
|
28
|
+
async function isDriftInitialized(rootDir) {
|
|
29
|
+
try {
|
|
30
|
+
await fs.access(path.join(rootDir, DRIFT_DIR));
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get reporter based on format
|
|
39
|
+
*/
|
|
40
|
+
function getReporter(format) {
|
|
41
|
+
switch (format) {
|
|
42
|
+
case 'json':
|
|
43
|
+
return new JsonReporter();
|
|
44
|
+
case 'github':
|
|
45
|
+
return new GitHubReporter();
|
|
46
|
+
case 'gitlab':
|
|
47
|
+
return new GitLabReporter();
|
|
48
|
+
case 'text':
|
|
49
|
+
default:
|
|
50
|
+
return new TextReporter();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Determine exit code based on violations and threshold
|
|
55
|
+
*/
|
|
56
|
+
export function getExitCode(violations, failOn) {
|
|
57
|
+
if (failOn === 'none') {
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
const threshold = SEVERITY_ORDER[failOn];
|
|
61
|
+
const hasViolationsAboveThreshold = violations.some((v) => SEVERITY_ORDER[v.severity] >= threshold);
|
|
62
|
+
return hasViolationsAboveThreshold ? 1 : 0;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Check command implementation
|
|
66
|
+
*/
|
|
67
|
+
async function checkAction(options) {
|
|
68
|
+
const rootDir = process.cwd();
|
|
69
|
+
const isCi = options.ci ?? !!process.env['CI'];
|
|
70
|
+
const format = options.format ?? (isCi ? 'json' : 'text');
|
|
71
|
+
const failOn = options.failOn ?? 'error';
|
|
72
|
+
// In CI mode, suppress decorative output
|
|
73
|
+
const showProgress = !isCi && format === 'text';
|
|
74
|
+
if (showProgress) {
|
|
75
|
+
console.log();
|
|
76
|
+
console.log(chalk.bold('🔍 Drift - Checking for Violations'));
|
|
77
|
+
console.log();
|
|
78
|
+
}
|
|
79
|
+
// Check if initialized
|
|
80
|
+
if (!(await isDriftInitialized(rootDir))) {
|
|
81
|
+
if (isCi) {
|
|
82
|
+
console.error(JSON.stringify({ error: 'Drift is not initialized' }));
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
status.error('Drift is not initialized. Run `drift init` first.');
|
|
86
|
+
}
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
// Initialize pattern store
|
|
90
|
+
const store = new PatternStore({ rootDir });
|
|
91
|
+
await store.initialize();
|
|
92
|
+
// Get approved patterns
|
|
93
|
+
const approvedPatterns = store.getApproved();
|
|
94
|
+
if (approvedPatterns.length === 0) {
|
|
95
|
+
if (showProgress) {
|
|
96
|
+
status.info('No approved patterns to check against.');
|
|
97
|
+
console.log(chalk.gray('Run `drift scan` to discover patterns, then `drift approve` to approve them.'));
|
|
98
|
+
}
|
|
99
|
+
else if (isCi) {
|
|
100
|
+
console.log(JSON.stringify({ violations: [], summary: { total: 0, errors: 0, warnings: 0 } }));
|
|
101
|
+
}
|
|
102
|
+
process.exit(0);
|
|
103
|
+
}
|
|
104
|
+
// Determine files to check
|
|
105
|
+
let filesToCheck = [];
|
|
106
|
+
if (options.staged) {
|
|
107
|
+
const spinner = showProgress ? createSpinner('Getting staged files...') : null;
|
|
108
|
+
spinner?.start();
|
|
109
|
+
try {
|
|
110
|
+
filesToCheck = await getStagedFiles(rootDir);
|
|
111
|
+
spinner?.succeed(`Found ${filesToCheck.length} staged files`);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
spinner?.fail('Failed to get staged files');
|
|
115
|
+
if (!isCi) {
|
|
116
|
+
console.error(chalk.red(error.message));
|
|
117
|
+
}
|
|
118
|
+
process.exit(1);
|
|
119
|
+
}
|
|
120
|
+
if (filesToCheck.length === 0) {
|
|
121
|
+
if (showProgress) {
|
|
122
|
+
status.info('No staged files to check.');
|
|
123
|
+
}
|
|
124
|
+
else if (isCi) {
|
|
125
|
+
console.log(JSON.stringify({ violations: [], summary: { total: 0, errors: 0, warnings: 0 } }));
|
|
126
|
+
}
|
|
127
|
+
process.exit(0);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
// Get all files from pattern locations
|
|
132
|
+
const allFiles = new Set();
|
|
133
|
+
for (const pattern of approvedPatterns) {
|
|
134
|
+
for (const location of pattern.locations) {
|
|
135
|
+
allFiles.add(location.file);
|
|
136
|
+
}
|
|
137
|
+
for (const outlier of pattern.outliers) {
|
|
138
|
+
allFiles.add(outlier.file);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
filesToCheck = Array.from(allFiles);
|
|
142
|
+
}
|
|
143
|
+
// Run evaluation
|
|
144
|
+
const spinner = showProgress ? createSpinner('Checking for violations...') : null;
|
|
145
|
+
spinner?.start();
|
|
146
|
+
const violations = [];
|
|
147
|
+
try {
|
|
148
|
+
for (const file of filesToCheck) {
|
|
149
|
+
const filePath = path.join(rootDir, file);
|
|
150
|
+
// Check if file exists
|
|
151
|
+
try {
|
|
152
|
+
await fs.access(filePath);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
continue; // File doesn't exist, skip
|
|
156
|
+
}
|
|
157
|
+
// Check against each approved pattern
|
|
158
|
+
for (const pattern of approvedPatterns) {
|
|
159
|
+
// Check if this file has outliers for this pattern
|
|
160
|
+
const outliers = pattern.outliers.filter((o) => o.file === file);
|
|
161
|
+
for (const outlier of outliers) {
|
|
162
|
+
// Create violation for each outlier
|
|
163
|
+
const violation = {
|
|
164
|
+
id: `${pattern.id}-${file}-${outlier.line}`,
|
|
165
|
+
patternId: pattern.id,
|
|
166
|
+
severity: pattern.severity,
|
|
167
|
+
file,
|
|
168
|
+
range: {
|
|
169
|
+
start: { line: outlier.line, character: outlier.column },
|
|
170
|
+
end: { line: outlier.endLine ?? outlier.line, character: outlier.endColumn ?? outlier.column },
|
|
171
|
+
},
|
|
172
|
+
message: `Deviation from pattern: ${pattern.name}`,
|
|
173
|
+
explanation: outlier.reason,
|
|
174
|
+
expected: pattern.description,
|
|
175
|
+
actual: `Code at line ${outlier.line} deviates from the established pattern`,
|
|
176
|
+
aiExplainAvailable: true,
|
|
177
|
+
aiFixAvailable: pattern.autoFixable,
|
|
178
|
+
firstSeen: new Date(),
|
|
179
|
+
occurrences: 1,
|
|
180
|
+
};
|
|
181
|
+
violations.push(violation);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
spinner?.succeed(`Checked ${filesToCheck.length} files`);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
spinner?.fail('Check failed');
|
|
189
|
+
if (!isCi) {
|
|
190
|
+
console.error(chalk.red(error.message));
|
|
191
|
+
}
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
// Calculate summary
|
|
195
|
+
const errorCount = violations.filter((v) => v.severity === 'error').length;
|
|
196
|
+
const warningCount = violations.filter((v) => v.severity === 'warning').length;
|
|
197
|
+
const infoCount = violations.filter((v) => v.severity === 'info').length;
|
|
198
|
+
const hintCount = violations.filter((v) => v.severity === 'hint').length;
|
|
199
|
+
// Prepare report data
|
|
200
|
+
const reportData = {
|
|
201
|
+
violations,
|
|
202
|
+
summary: {
|
|
203
|
+
total: violations.length,
|
|
204
|
+
errors: errorCount,
|
|
205
|
+
warnings: warningCount,
|
|
206
|
+
infos: infoCount,
|
|
207
|
+
hints: hintCount,
|
|
208
|
+
},
|
|
209
|
+
patterns: approvedPatterns,
|
|
210
|
+
timestamp: new Date().toISOString(),
|
|
211
|
+
rootDir,
|
|
212
|
+
};
|
|
213
|
+
// Generate report
|
|
214
|
+
const reporter = getReporter(format);
|
|
215
|
+
const report = reporter.generate(reportData);
|
|
216
|
+
// Output report
|
|
217
|
+
console.log(report);
|
|
218
|
+
// Save report to file in CI mode
|
|
219
|
+
if (isCi) {
|
|
220
|
+
const reportsDir = path.join(rootDir, DRIFT_DIR, 'reports');
|
|
221
|
+
await fs.mkdir(reportsDir, { recursive: true });
|
|
222
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
223
|
+
const reportPath = path.join(reportsDir, `check-${timestamp}.${format === 'json' ? 'json' : 'txt'}`);
|
|
224
|
+
await fs.writeFile(reportPath, report);
|
|
225
|
+
}
|
|
226
|
+
// Show summary in text mode
|
|
227
|
+
if (showProgress && violations.length > 0) {
|
|
228
|
+
console.log();
|
|
229
|
+
console.log(chalk.bold('Summary'));
|
|
230
|
+
console.log(chalk.gray('─'.repeat(40)));
|
|
231
|
+
console.log(` Total violations: ${chalk.cyan(violations.length)}`);
|
|
232
|
+
if (errorCount > 0)
|
|
233
|
+
console.log(` Errors: ${chalk.red(errorCount)}`);
|
|
234
|
+
if (warningCount > 0)
|
|
235
|
+
console.log(` Warnings: ${chalk.yellow(warningCount)}`);
|
|
236
|
+
if (infoCount > 0)
|
|
237
|
+
console.log(` Info: ${chalk.blue(infoCount)}`);
|
|
238
|
+
if (hintCount > 0)
|
|
239
|
+
console.log(` Hints: ${chalk.gray(hintCount)}`);
|
|
240
|
+
console.log();
|
|
241
|
+
}
|
|
242
|
+
// Determine exit code
|
|
243
|
+
const exitCode = getExitCode(violations, failOn);
|
|
244
|
+
if (showProgress) {
|
|
245
|
+
if (exitCode === 0) {
|
|
246
|
+
if (violations.length === 0) {
|
|
247
|
+
status.success('No violations found!');
|
|
248
|
+
}
|
|
249
|
+
else {
|
|
250
|
+
status.success(`Check passed (${violations.length} violations below threshold)`);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
status.error(`Check failed with ${errorCount} errors`);
|
|
255
|
+
}
|
|
256
|
+
console.log();
|
|
257
|
+
}
|
|
258
|
+
process.exit(exitCode);
|
|
259
|
+
}
|
|
260
|
+
export const checkCommand = new Command('check')
|
|
261
|
+
.description('Check for violations')
|
|
262
|
+
.option('--staged', 'Check only staged files')
|
|
263
|
+
.option('--ci', 'Run in CI mode with machine-readable output')
|
|
264
|
+
.option('-f, --format <format>', 'Output format (text, json, github, gitlab)', 'text')
|
|
265
|
+
.option('--fail-on <level>', 'Fail threshold (error, warning, none)', 'error')
|
|
266
|
+
.option('--verbose', 'Enable verbose output')
|
|
267
|
+
.action(checkAction);
|
|
268
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export Command - Export manifest in various formats
|
|
3
|
+
*
|
|
4
|
+
* Exports the pattern manifest for AI consumption or reporting.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* drift export # Export as JSON to stdout
|
|
8
|
+
* drift export --format ai-context # Export optimized for LLMs
|
|
9
|
+
* drift export --format summary # Human-readable summary
|
|
10
|
+
* drift export -o report.md # Write to file
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare const exportCommand: Command;
|
|
14
|
+
//# sourceMappingURL=export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,eAAO,MAAM,aAAa,SA8FtB,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Export Command - Export manifest in various formats
|
|
3
|
+
*
|
|
4
|
+
* Exports the pattern manifest for AI consumption or reporting.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* drift export # Export as JSON to stdout
|
|
8
|
+
* drift export --format ai-context # Export optimized for LLMs
|
|
9
|
+
* drift export --format summary # Human-readable summary
|
|
10
|
+
* drift export -o report.md # Write to file
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
import * as fs from 'node:fs/promises';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
import chalk from 'chalk';
|
|
16
|
+
import { ManifestStore, exportManifest, estimateTokens, } from 'driftdetect-core';
|
|
17
|
+
const VALID_FORMATS = ['json', 'ai-context', 'summary', 'markdown'];
|
|
18
|
+
const VALID_CATEGORIES = [
|
|
19
|
+
'api', 'auth', 'security', 'errors', 'logging', 'testing',
|
|
20
|
+
'data-access', 'config', 'types', 'structural', 'components',
|
|
21
|
+
'styling', 'accessibility', 'documentation', 'performance',
|
|
22
|
+
];
|
|
23
|
+
export const exportCommand = new Command('export')
|
|
24
|
+
.description('Export manifest in various formats')
|
|
25
|
+
.option('-f, --format <format>', `Output format: ${VALID_FORMATS.join(', ')}`, 'json')
|
|
26
|
+
.option('-o, --output <file>', 'Output file (stdout if not specified)')
|
|
27
|
+
.option('-c, --categories <categories>', 'Categories to include (comma-separated)')
|
|
28
|
+
.option('--status <status>', 'Filter by status: discovered, approved, ignored')
|
|
29
|
+
.option('--min-confidence <number>', 'Minimum confidence threshold (0.0-1.0)')
|
|
30
|
+
.option('--compact', 'Compact output (fewer details)')
|
|
31
|
+
.option('--max-tokens <number>', 'Maximum tokens for AI context format')
|
|
32
|
+
.option('--snippets', 'Include code snippets')
|
|
33
|
+
.action(async (options) => {
|
|
34
|
+
const cwd = process.cwd();
|
|
35
|
+
// Validate format
|
|
36
|
+
if (!VALID_FORMATS.includes(options.format)) {
|
|
37
|
+
console.error(chalk.red(`Invalid format: ${options.format}`));
|
|
38
|
+
console.error(`Valid formats: ${VALID_FORMATS.join(', ')}`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
// Load manifest
|
|
42
|
+
const manifestStore = new ManifestStore(cwd);
|
|
43
|
+
const manifest = await manifestStore.load();
|
|
44
|
+
if (!manifest) {
|
|
45
|
+
console.error(chalk.red('No manifest found. Run `drift scan` first.'));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
// Parse categories
|
|
49
|
+
let categories;
|
|
50
|
+
if (options.categories) {
|
|
51
|
+
categories = options.categories.split(',').map((c) => c.trim());
|
|
52
|
+
const invalid = categories.filter(c => !VALID_CATEGORIES.includes(c));
|
|
53
|
+
if (invalid.length > 0) {
|
|
54
|
+
console.error(chalk.red(`Invalid categories: ${invalid.join(', ')}`));
|
|
55
|
+
console.error(`Valid categories: ${VALID_CATEGORIES.join(', ')}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Parse status
|
|
60
|
+
let statuses;
|
|
61
|
+
if (options.status) {
|
|
62
|
+
statuses = options.status.split(',').map((s) => s.trim());
|
|
63
|
+
}
|
|
64
|
+
// Build export options
|
|
65
|
+
const exportOptions = {
|
|
66
|
+
format: options.format,
|
|
67
|
+
};
|
|
68
|
+
if (options.output) {
|
|
69
|
+
exportOptions.output = options.output;
|
|
70
|
+
}
|
|
71
|
+
if (categories) {
|
|
72
|
+
exportOptions.categories = categories;
|
|
73
|
+
}
|
|
74
|
+
if (statuses) {
|
|
75
|
+
exportOptions.statuses = statuses;
|
|
76
|
+
}
|
|
77
|
+
if (options.minConfidence) {
|
|
78
|
+
exportOptions.minConfidence = parseFloat(options.minConfidence);
|
|
79
|
+
}
|
|
80
|
+
if (options.compact) {
|
|
81
|
+
exportOptions.compact = options.compact;
|
|
82
|
+
}
|
|
83
|
+
if (options.maxTokens) {
|
|
84
|
+
exportOptions.maxTokens = parseInt(options.maxTokens, 10);
|
|
85
|
+
}
|
|
86
|
+
if (options.snippets) {
|
|
87
|
+
exportOptions.includeSnippets = options.snippets;
|
|
88
|
+
}
|
|
89
|
+
// Export
|
|
90
|
+
const output = exportManifest(manifest, exportOptions);
|
|
91
|
+
// Estimate tokens for AI context
|
|
92
|
+
if (options.format === 'ai-context') {
|
|
93
|
+
const estimate = estimateTokens(output);
|
|
94
|
+
if (estimate.warning) {
|
|
95
|
+
console.error(chalk.yellow(`⚠️ ${estimate.warning}`));
|
|
96
|
+
}
|
|
97
|
+
console.error(chalk.dim(`Estimated tokens: ~${estimate.tokens}`));
|
|
98
|
+
}
|
|
99
|
+
// Write output
|
|
100
|
+
if (options.output) {
|
|
101
|
+
const outputPath = path.resolve(cwd, options.output);
|
|
102
|
+
await fs.writeFile(outputPath, output, 'utf-8');
|
|
103
|
+
console.error(chalk.green(`✔ Exported to ${options.output}`));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
console.log(output);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files Command - Show patterns in a file
|
|
3
|
+
*
|
|
4
|
+
* Show what patterns are found in a specific file.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* drift files src/auth/middleware.py
|
|
8
|
+
* drift files 'src/api/*.ts'
|
|
9
|
+
* drift files --json src/api/
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
export declare const filesCommand: Command;
|
|
13
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SAqFrB,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Files Command - Show patterns in a file
|
|
3
|
+
*
|
|
4
|
+
* Show what patterns are found in a specific file.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* drift files src/auth/middleware.py
|
|
8
|
+
* drift files 'src/api/*.ts'
|
|
9
|
+
* drift files --json src/api/
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { ManifestStore, } from 'driftdetect-core';
|
|
14
|
+
export const filesCommand = new Command('files')
|
|
15
|
+
.description('Show patterns in a file')
|
|
16
|
+
.argument('<path>', 'File path (supports glob patterns)')
|
|
17
|
+
.option('-c, --category <category>', 'Filter by category')
|
|
18
|
+
.option('--json', 'Output as JSON')
|
|
19
|
+
.action(async (filePath, options) => {
|
|
20
|
+
const cwd = process.cwd();
|
|
21
|
+
// Load manifest
|
|
22
|
+
const manifestStore = new ManifestStore(cwd);
|
|
23
|
+
const manifest = await manifestStore.load();
|
|
24
|
+
if (!manifest) {
|
|
25
|
+
console.error(chalk.red('No manifest found. Run `drift scan` first.'));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
// Build query
|
|
29
|
+
const query = {
|
|
30
|
+
path: filePath,
|
|
31
|
+
};
|
|
32
|
+
if (options.category) {
|
|
33
|
+
query.category = options.category;
|
|
34
|
+
}
|
|
35
|
+
// Query file
|
|
36
|
+
const result = manifestStore.queryFile(query);
|
|
37
|
+
if (!result) {
|
|
38
|
+
console.log(chalk.yellow(`No patterns found in "${filePath}"`));
|
|
39
|
+
// Show available files
|
|
40
|
+
const allFiles = Object.keys(manifest.files).slice(0, 10);
|
|
41
|
+
if (allFiles.length > 0) {
|
|
42
|
+
console.log(chalk.dim('\nAvailable files:'));
|
|
43
|
+
for (const f of allFiles) {
|
|
44
|
+
console.log(chalk.dim(` ${f}`));
|
|
45
|
+
}
|
|
46
|
+
if (Object.keys(manifest.files).length > 10) {
|
|
47
|
+
console.log(chalk.dim(` ... and ${Object.keys(manifest.files).length - 10} more`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
process.exit(0);
|
|
51
|
+
}
|
|
52
|
+
// Output
|
|
53
|
+
if (options.json) {
|
|
54
|
+
console.log(JSON.stringify(result, null, 2));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log(chalk.bold(`\n📄 Patterns in ${result.file}:\n`));
|
|
58
|
+
console.log(chalk.dim(` Hash: ${result.metadata.hash}`));
|
|
59
|
+
console.log(chalk.dim(` Last scanned: ${result.metadata.lastScanned}`));
|
|
60
|
+
console.log('');
|
|
61
|
+
if (result.patterns.length === 0) {
|
|
62
|
+
console.log(chalk.yellow(' No patterns found'));
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
// Group by category
|
|
66
|
+
const byCategory = new Map();
|
|
67
|
+
for (const p of result.patterns) {
|
|
68
|
+
if (!byCategory.has(p.category)) {
|
|
69
|
+
byCategory.set(p.category, []);
|
|
70
|
+
}
|
|
71
|
+
byCategory.get(p.category).push(p);
|
|
72
|
+
}
|
|
73
|
+
for (const [category, patterns] of byCategory) {
|
|
74
|
+
console.log(chalk.cyan(` ${category.toUpperCase()}`));
|
|
75
|
+
for (const p of patterns) {
|
|
76
|
+
console.log(` • ${chalk.white(p.name)}`);
|
|
77
|
+
for (const loc of p.locations) {
|
|
78
|
+
const range = `${loc.range.start}-${loc.range.end}`;
|
|
79
|
+
console.log(` ${chalk.dim('lines')} ${chalk.yellow(range)}: ${loc.type} ${chalk.green(loc.name)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
console.log('');
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
console.log(chalk.dim(`Total: ${result.patterns.length} patterns`));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ignore Command - drift ignore
|
|
3
|
+
*
|
|
4
|
+
* Ignore a pattern to stop tracking it.
|
|
5
|
+
*
|
|
6
|
+
* @requirements 29.6
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
export interface IgnoreOptions {
|
|
10
|
+
/** Reason for ignoring */
|
|
11
|
+
reason?: string;
|
|
12
|
+
/** Skip confirmation prompt */
|
|
13
|
+
yes?: boolean;
|
|
14
|
+
/** Enable verbose output */
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const ignoreCommand: Command;
|
|
18
|
+
//# sourceMappingURL=ignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/commands/ignore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,MAAM,WAAW,aAAa;IAC5B,0BAA0B;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAiND,eAAO,MAAM,aAAa,SAMH,CAAC"}
|