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 @@
|
|
|
1
|
+
{"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../src/bin/drift.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Drift CLI Entry Point
|
|
4
|
+
*
|
|
5
|
+
* Main entry point for the Drift command-line interface.
|
|
6
|
+
* Sets up Commander.js with all available commands.
|
|
7
|
+
*
|
|
8
|
+
* @requirements 29.1
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
import { VERSION } from '../index.js';
|
|
12
|
+
import { initCommand, scanCommand, checkCommand, statusCommand, approveCommand, ignoreCommand, reportCommand, exportCommand, whereCommand, filesCommand, } from '../commands/index.js';
|
|
13
|
+
/**
|
|
14
|
+
* Create and configure the main CLI program
|
|
15
|
+
*/
|
|
16
|
+
function createProgram() {
|
|
17
|
+
const program = new Command();
|
|
18
|
+
program
|
|
19
|
+
.name('drift')
|
|
20
|
+
.description('Architectural drift detection - learn and enforce codebase patterns')
|
|
21
|
+
.version(VERSION, '-v, --version', 'Output the current version')
|
|
22
|
+
.option('--verbose', 'Enable verbose output')
|
|
23
|
+
.option('--no-color', 'Disable colored output');
|
|
24
|
+
// Register all commands
|
|
25
|
+
program.addCommand(initCommand);
|
|
26
|
+
program.addCommand(scanCommand);
|
|
27
|
+
program.addCommand(checkCommand);
|
|
28
|
+
program.addCommand(statusCommand);
|
|
29
|
+
program.addCommand(approveCommand);
|
|
30
|
+
program.addCommand(ignoreCommand);
|
|
31
|
+
program.addCommand(reportCommand);
|
|
32
|
+
program.addCommand(exportCommand);
|
|
33
|
+
program.addCommand(whereCommand);
|
|
34
|
+
program.addCommand(filesCommand);
|
|
35
|
+
// Add help examples
|
|
36
|
+
program.addHelpText('after', `
|
|
37
|
+
Examples:
|
|
38
|
+
$ drift init Initialize Drift in current directory
|
|
39
|
+
$ drift init --from-scaffold Initialize with Cheatcode2026 presets
|
|
40
|
+
$ drift scan Scan codebase for patterns
|
|
41
|
+
$ drift scan --manifest Generate manifest with semantic locations
|
|
42
|
+
$ drift check Check for violations
|
|
43
|
+
$ drift check --staged Check only staged files
|
|
44
|
+
$ drift check --ci Run in CI mode
|
|
45
|
+
$ drift status Show current drift status
|
|
46
|
+
$ drift approve <pattern-id> Approve a discovered pattern
|
|
47
|
+
$ drift ignore <pattern-id> Ignore a pattern
|
|
48
|
+
$ drift report Generate a report
|
|
49
|
+
$ drift report --format json Generate JSON report
|
|
50
|
+
$ drift export Export manifest as JSON
|
|
51
|
+
$ drift export --format ai-context Export for AI consumption
|
|
52
|
+
$ drift where <pattern> Find pattern locations
|
|
53
|
+
$ drift files <path> Show patterns in a file
|
|
54
|
+
|
|
55
|
+
Documentation:
|
|
56
|
+
https://github.com/drift/drift
|
|
57
|
+
`);
|
|
58
|
+
return program;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Main entry point
|
|
62
|
+
*/
|
|
63
|
+
async function main() {
|
|
64
|
+
const program = createProgram();
|
|
65
|
+
try {
|
|
66
|
+
await program.parseAsync(process.argv);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
if (error instanceof Error) {
|
|
70
|
+
console.error(`Error: ${error.message}`);
|
|
71
|
+
if (process.env['DEBUG']) {
|
|
72
|
+
console.error(error.stack);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.error('An unexpected error occurred');
|
|
77
|
+
}
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// Run the CLI
|
|
82
|
+
main();
|
|
83
|
+
//# sourceMappingURL=drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift.js","sourceRoot":"","sources":["../../src/bin/drift.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,SAAS,aAAa;IACpB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,qEAAqE,CAAC;SAClF,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC;SAC/D,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;SAC5C,MAAM,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAElD,wBAAwB;IACxB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAEjC,oBAAoB;IACpB,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;CAqBH,CACE,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAEhC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,cAAc;AACd,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approve Command - drift approve
|
|
3
|
+
*
|
|
4
|
+
* Approve a discovered pattern to enforce it.
|
|
5
|
+
*
|
|
6
|
+
* @requirements 29.5
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
export interface ApproveOptions {
|
|
10
|
+
/** Approve all patterns matching a category */
|
|
11
|
+
category?: string;
|
|
12
|
+
/** Skip confirmation prompt */
|
|
13
|
+
yes?: boolean;
|
|
14
|
+
/** Enable verbose output */
|
|
15
|
+
verbose?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const approveCommand: Command;
|
|
18
|
+
//# sourceMappingURL=approve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAoSD,eAAO,MAAM,cAAc,SAMH,CAAC"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approve Command - drift approve
|
|
3
|
+
*
|
|
4
|
+
* Approve a discovered pattern to enforce it.
|
|
5
|
+
*
|
|
6
|
+
* @requirements 29.5
|
|
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, InvalidStateTransitionError, } from 'driftdetect-core';
|
|
13
|
+
import { createSpinner, status } from '../ui/spinner.js';
|
|
14
|
+
import { confirmPrompt, promptBatchPatternApproval } from '../ui/prompts.js';
|
|
15
|
+
import { createPatternsTable } from '../ui/table.js';
|
|
16
|
+
/** Directory name for drift configuration */
|
|
17
|
+
const DRIFT_DIR = '.drift';
|
|
18
|
+
/**
|
|
19
|
+
* Check if drift is initialized
|
|
20
|
+
*/
|
|
21
|
+
async function isDriftInitialized(rootDir) {
|
|
22
|
+
try {
|
|
23
|
+
await fs.access(path.join(rootDir, DRIFT_DIR));
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Approve command implementation
|
|
32
|
+
*/
|
|
33
|
+
async function approveAction(patternId, options) {
|
|
34
|
+
const rootDir = process.cwd();
|
|
35
|
+
const verbose = options.verbose ?? false;
|
|
36
|
+
console.log();
|
|
37
|
+
console.log(chalk.bold('🔍 Drift - Approve Pattern'));
|
|
38
|
+
console.log();
|
|
39
|
+
// Check if initialized
|
|
40
|
+
if (!(await isDriftInitialized(rootDir))) {
|
|
41
|
+
status.error('Drift is not initialized. Run `drift init` first.');
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
// Initialize pattern store
|
|
45
|
+
const spinner = createSpinner('Loading patterns...');
|
|
46
|
+
spinner.start();
|
|
47
|
+
const store = new PatternStore({ rootDir });
|
|
48
|
+
await store.initialize();
|
|
49
|
+
spinner.succeed('Patterns loaded');
|
|
50
|
+
// Handle category-based approval
|
|
51
|
+
if (options.category) {
|
|
52
|
+
const category = options.category;
|
|
53
|
+
const discovered = store.getDiscovered().filter((p) => p.category === category);
|
|
54
|
+
if (discovered.length === 0) {
|
|
55
|
+
status.info(`No discovered patterns in category: ${category}`);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(chalk.bold(`Discovered patterns in ${category}:`));
|
|
60
|
+
console.log();
|
|
61
|
+
const rows = discovered.map((p) => ({
|
|
62
|
+
id: p.id.slice(0, 13),
|
|
63
|
+
name: p.name.slice(0, 28),
|
|
64
|
+
category: p.category,
|
|
65
|
+
confidence: p.confidence.score,
|
|
66
|
+
locations: p.locations.length,
|
|
67
|
+
outliers: p.outliers.length,
|
|
68
|
+
}));
|
|
69
|
+
console.log(createPatternsTable(rows));
|
|
70
|
+
console.log();
|
|
71
|
+
// Confirm approval
|
|
72
|
+
if (!options.yes) {
|
|
73
|
+
const confirm = await confirmPrompt(`Approve all ${discovered.length} patterns in ${category}?`, false);
|
|
74
|
+
if (!confirm) {
|
|
75
|
+
status.info('Approval cancelled');
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Approve all patterns in category
|
|
80
|
+
const approveSpinner = createSpinner('Approving patterns...');
|
|
81
|
+
approveSpinner.start();
|
|
82
|
+
let approvedCount = 0;
|
|
83
|
+
for (const pattern of discovered) {
|
|
84
|
+
try {
|
|
85
|
+
store.approve(pattern.id);
|
|
86
|
+
approvedCount++;
|
|
87
|
+
if (verbose) {
|
|
88
|
+
console.log(chalk.gray(` Approved: ${pattern.name}`));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
if (error instanceof InvalidStateTransitionError) {
|
|
93
|
+
if (verbose) {
|
|
94
|
+
console.log(chalk.yellow(` Skipped (already approved): ${pattern.name}`));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
await store.saveAll();
|
|
103
|
+
approveSpinner.succeed(`Approved ${approvedCount} patterns`);
|
|
104
|
+
console.log();
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
// Handle single pattern approval
|
|
108
|
+
// Check for special pattern IDs
|
|
109
|
+
if (patternId === 'all') {
|
|
110
|
+
const discovered = store.getDiscovered();
|
|
111
|
+
if (discovered.length === 0) {
|
|
112
|
+
status.info('No discovered patterns to approve');
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
// Interactive batch approval
|
|
116
|
+
if (!options.yes) {
|
|
117
|
+
const choices = discovered.map((p) => ({
|
|
118
|
+
id: p.id,
|
|
119
|
+
name: p.name,
|
|
120
|
+
category: p.category,
|
|
121
|
+
confidence: p.confidence.score,
|
|
122
|
+
}));
|
|
123
|
+
const selectedIds = await promptBatchPatternApproval(choices);
|
|
124
|
+
if (selectedIds.length === 0) {
|
|
125
|
+
status.info('No patterns selected');
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const approveSpinner = createSpinner('Approving patterns...');
|
|
129
|
+
approveSpinner.start();
|
|
130
|
+
let approvedCount = 0;
|
|
131
|
+
for (const id of selectedIds) {
|
|
132
|
+
try {
|
|
133
|
+
store.approve(id);
|
|
134
|
+
approvedCount++;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Skip errors
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
await store.saveAll();
|
|
141
|
+
approveSpinner.succeed(`Approved ${approvedCount} patterns`);
|
|
142
|
+
console.log();
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
// Non-interactive: approve all
|
|
146
|
+
const approveSpinner = createSpinner('Approving all patterns...');
|
|
147
|
+
approveSpinner.start();
|
|
148
|
+
let approvedCount = 0;
|
|
149
|
+
for (const pattern of discovered) {
|
|
150
|
+
try {
|
|
151
|
+
store.approve(pattern.id);
|
|
152
|
+
approvedCount++;
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Skip errors
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
await store.saveAll();
|
|
159
|
+
approveSpinner.succeed(`Approved ${approvedCount} patterns`);
|
|
160
|
+
console.log();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// Approve single pattern by ID
|
|
164
|
+
const pattern = store.get(patternId);
|
|
165
|
+
if (!pattern) {
|
|
166
|
+
// Try to find by partial ID match
|
|
167
|
+
const allPatterns = store.getAll();
|
|
168
|
+
const matches = allPatterns.filter((p) => p.id.includes(patternId) || p.name.toLowerCase().includes(patternId.toLowerCase()));
|
|
169
|
+
if (matches.length === 0) {
|
|
170
|
+
status.error(`Pattern not found: ${patternId}`);
|
|
171
|
+
console.log();
|
|
172
|
+
console.log(chalk.gray('Use `drift status -d` to see available patterns'));
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
if (matches.length === 1) {
|
|
176
|
+
// Single match, use it
|
|
177
|
+
const match = matches[0];
|
|
178
|
+
console.log(chalk.gray(`Found pattern: ${match.id}`));
|
|
179
|
+
console.log();
|
|
180
|
+
if (!options.yes) {
|
|
181
|
+
const confirm = await confirmPrompt(`Approve pattern "${match.name}"?`, true);
|
|
182
|
+
if (!confirm) {
|
|
183
|
+
status.info('Approval cancelled');
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
store.approve(match.id);
|
|
189
|
+
await store.saveAll();
|
|
190
|
+
status.success(`Approved pattern: ${match.name}`);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
if (error instanceof InvalidStateTransitionError) {
|
|
194
|
+
status.warning(`Pattern is already approved: ${match.name}`);
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
throw error;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
console.log();
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// Multiple matches, show them
|
|
204
|
+
console.log(chalk.yellow(`Multiple patterns match "${patternId}":`));
|
|
205
|
+
console.log();
|
|
206
|
+
const rows = matches.slice(0, 10).map((p) => ({
|
|
207
|
+
id: p.id.slice(0, 13),
|
|
208
|
+
name: p.name.slice(0, 28),
|
|
209
|
+
category: p.category,
|
|
210
|
+
confidence: p.confidence.score,
|
|
211
|
+
locations: p.locations.length,
|
|
212
|
+
outliers: p.outliers.length,
|
|
213
|
+
}));
|
|
214
|
+
console.log(createPatternsTable(rows));
|
|
215
|
+
if (matches.length > 10) {
|
|
216
|
+
console.log(chalk.gray(` ... and ${matches.length - 10} more`));
|
|
217
|
+
}
|
|
218
|
+
console.log();
|
|
219
|
+
console.log(chalk.gray('Please specify a more specific pattern ID'));
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
// Show pattern details
|
|
223
|
+
console.log(chalk.bold('Pattern Details'));
|
|
224
|
+
console.log(chalk.gray('─'.repeat(40)));
|
|
225
|
+
console.log(` ID: ${pattern.id}`);
|
|
226
|
+
console.log(` Name: ${pattern.name}`);
|
|
227
|
+
console.log(` Category: ${pattern.category}`);
|
|
228
|
+
console.log(` Status: ${pattern.status}`);
|
|
229
|
+
console.log(` Confidence: ${(pattern.confidence.score * 100).toFixed(0)}% (${pattern.confidence.level})`);
|
|
230
|
+
console.log(` Locations: ${pattern.locations.length}`);
|
|
231
|
+
console.log(` Outliers: ${pattern.outliers.length}`);
|
|
232
|
+
console.log(` Severity: ${pattern.severity}`);
|
|
233
|
+
console.log();
|
|
234
|
+
// Check if already approved
|
|
235
|
+
if (pattern.status === 'approved') {
|
|
236
|
+
status.warning('Pattern is already approved');
|
|
237
|
+
console.log();
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
// Confirm approval
|
|
241
|
+
if (!options.yes) {
|
|
242
|
+
const confirm = await confirmPrompt(`Approve pattern "${pattern.name}"?`, true);
|
|
243
|
+
if (!confirm) {
|
|
244
|
+
status.info('Approval cancelled');
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Approve the pattern
|
|
249
|
+
try {
|
|
250
|
+
store.approve(patternId);
|
|
251
|
+
await store.saveAll();
|
|
252
|
+
status.success(`Approved pattern: ${pattern.name}`);
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
if (error instanceof InvalidStateTransitionError) {
|
|
256
|
+
status.error(`Cannot approve pattern from status: ${pattern.status}`);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
console.log();
|
|
263
|
+
}
|
|
264
|
+
export const approveCommand = new Command('approve')
|
|
265
|
+
.description('Approve a pattern by ID')
|
|
266
|
+
.argument('<pattern-id>', 'Pattern ID to approve (or "all" for batch approval)')
|
|
267
|
+
.option('-c, --category <category>', 'Approve all patterns in category')
|
|
268
|
+
.option('-y, --yes', 'Skip confirmation prompt')
|
|
269
|
+
.option('--verbose', 'Enable verbose output')
|
|
270
|
+
.action(approveAction);
|
|
271
|
+
//# sourceMappingURL=approve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../../src/commands/approve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
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 { type Violation } from 'driftdetect-core';
|
|
10
|
+
export interface CheckOptions {
|
|
11
|
+
/** Check only staged files */
|
|
12
|
+
staged?: boolean;
|
|
13
|
+
/** Run in CI mode */
|
|
14
|
+
ci?: boolean;
|
|
15
|
+
/** Output format */
|
|
16
|
+
format?: 'text' | 'json' | 'github' | 'gitlab';
|
|
17
|
+
/** Fail threshold (error, warning, none) */
|
|
18
|
+
failOn?: 'error' | 'warning' | 'none';
|
|
19
|
+
/** Enable verbose output */
|
|
20
|
+
verbose?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface CheckResult {
|
|
23
|
+
/** Number of violations */
|
|
24
|
+
violationCount: number;
|
|
25
|
+
/** Number of errors */
|
|
26
|
+
errorCount: number;
|
|
27
|
+
/** Number of warnings */
|
|
28
|
+
warningCount: number;
|
|
29
|
+
/** Exit code */
|
|
30
|
+
exitCode: number;
|
|
31
|
+
/** Violations found */
|
|
32
|
+
violations: Violation[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Determine exit code based on violations and threshold
|
|
36
|
+
*/
|
|
37
|
+
export declare function getExitCode(violations: Violation[], failOn: 'error' | 'warning' | 'none'): number;
|
|
38
|
+
export declare const checkCommand: Command;
|
|
39
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAY1B,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC/C,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACtC,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AA0CD;;GAEG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,SAAS,EAAE,EACvB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GACnC,MAAM,CAWR;AAqND,eAAO,MAAM,YAAY,SAOH,CAAC"}
|