driftdetect 0.1.7 → 0.2.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/dist/bin/drift.js +4 -1
- package/dist/bin/drift.js.map +1 -1
- package/dist/commands/dashboard.d.ts +16 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +99 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +114 -5
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/files.d.ts +2 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +103 -20
- package/dist/commands/files.js.map +1 -1
- package/dist/commands/index.d.ts +1 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/scan.d.ts +2 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +98 -14
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/watch.d.ts +6 -5
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +555 -126
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/where.d.ts +2 -0
- package/dist/commands/where.d.ts.map +1 -1
- package/dist/commands/where.js +79 -5
- package/dist/commands/where.js.map +1 -1
- package/dist/services/contract-scanner.d.ts +35 -0
- package/dist/services/contract-scanner.d.ts.map +1 -0
- package/dist/services/contract-scanner.js +183 -0
- package/dist/services/contract-scanner.js.map +1 -0
- package/dist/services/scanner-service.d.ts.map +1 -1
- package/dist/services/scanner-service.js +34 -1
- package/dist/services/scanner-service.js.map +1 -1
- package/package.json +3 -2
package/dist/bin/drift.js
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import { Command } from 'commander';
|
|
11
11
|
import { VERSION } from '../index.js';
|
|
12
|
-
import { initCommand, scanCommand, checkCommand, statusCommand, approveCommand, ignoreCommand, reportCommand, exportCommand, whereCommand, filesCommand, watchCommand, } from '../commands/index.js';
|
|
12
|
+
import { initCommand, scanCommand, checkCommand, statusCommand, approveCommand, ignoreCommand, reportCommand, exportCommand, whereCommand, filesCommand, watchCommand, dashboardCommand, } from '../commands/index.js';
|
|
13
13
|
/**
|
|
14
14
|
* Create and configure the main CLI program
|
|
15
15
|
*/
|
|
@@ -33,6 +33,7 @@ function createProgram() {
|
|
|
33
33
|
program.addCommand(whereCommand);
|
|
34
34
|
program.addCommand(filesCommand);
|
|
35
35
|
program.addCommand(watchCommand);
|
|
36
|
+
program.addCommand(dashboardCommand);
|
|
36
37
|
// Add help examples
|
|
37
38
|
program.addHelpText('after', `
|
|
38
39
|
Examples:
|
|
@@ -55,6 +56,8 @@ Examples:
|
|
|
55
56
|
$ drift watch Watch for changes in real-time
|
|
56
57
|
$ drift watch --verbose Watch with detailed output
|
|
57
58
|
$ drift watch --context .drift-context.md Auto-update AI context file
|
|
59
|
+
$ drift dashboard Launch the web dashboard
|
|
60
|
+
$ drift dashboard --port 8080 Launch on a custom port
|
|
58
61
|
|
|
59
62
|
Documentation:
|
|
60
63
|
https://github.com/drift/drift
|
package/dist/bin/drift.js.map
CHANGED
|
@@ -1 +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,EACZ,YAAY,
|
|
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,EACZ,YAAY,EACZ,gBAAgB,GACjB,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;IACjC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAErC,oBAAoB;IACpB,OAAO,CAAC,WAAW,CACjB,OAAO,EACP;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BH,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,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard Command - drift dashboard
|
|
3
|
+
*
|
|
4
|
+
* Launch the local web dashboard for visualizing patterns and violations.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
export interface DashboardOptions {
|
|
8
|
+
/** Port to run the server on */
|
|
9
|
+
port?: number;
|
|
10
|
+
/** Don't open browser automatically */
|
|
11
|
+
noBrowser?: boolean;
|
|
12
|
+
/** Enable verbose output */
|
|
13
|
+
verbose?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare const dashboardCommand: Command;
|
|
16
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,MAAM,WAAW,gBAAgB;IAC/B,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AA0FD,eAAO,MAAM,gBAAgB,SAUzB,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dashboard Command - drift dashboard
|
|
3
|
+
*
|
|
4
|
+
* Launch the local web dashboard for visualizing patterns and violations.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import * as fs from 'node:fs/promises';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { createSpinner } from '../ui/spinner.js';
|
|
11
|
+
/** Directory name for drift configuration */
|
|
12
|
+
const DRIFT_DIR = '.drift';
|
|
13
|
+
/**
|
|
14
|
+
* Check if drift is initialized
|
|
15
|
+
*/
|
|
16
|
+
async function isDriftInitialized(rootDir) {
|
|
17
|
+
try {
|
|
18
|
+
await fs.access(path.join(rootDir, DRIFT_DIR));
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Dashboard command implementation
|
|
27
|
+
*/
|
|
28
|
+
async function dashboardAction(options) {
|
|
29
|
+
const rootDir = process.cwd();
|
|
30
|
+
const port = options.port ?? 3000;
|
|
31
|
+
const openBrowser = !options.noBrowser;
|
|
32
|
+
console.log();
|
|
33
|
+
console.log(chalk.bold('📊 Drift Dashboard'));
|
|
34
|
+
console.log();
|
|
35
|
+
// Check if initialized
|
|
36
|
+
if (!(await isDriftInitialized(rootDir))) {
|
|
37
|
+
console.log(chalk.red('✖ Drift is not initialized. Run `drift init` first.'));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const spinner = createSpinner('Starting dashboard server...');
|
|
41
|
+
spinner.start();
|
|
42
|
+
try {
|
|
43
|
+
// Dynamic import to avoid loading dashboard package unless needed
|
|
44
|
+
const { DashboardServer } = await import('driftdetect-dashboard');
|
|
45
|
+
const server = new DashboardServer({
|
|
46
|
+
driftDir: path.join(rootDir, DRIFT_DIR),
|
|
47
|
+
port,
|
|
48
|
+
openBrowser,
|
|
49
|
+
});
|
|
50
|
+
await server.start();
|
|
51
|
+
spinner.succeed(`Dashboard running at ${chalk.cyan(`http://localhost:${port}`)}`);
|
|
52
|
+
console.log();
|
|
53
|
+
console.log(chalk.gray('Press Ctrl+C to stop the server'));
|
|
54
|
+
console.log();
|
|
55
|
+
// Handle graceful shutdown
|
|
56
|
+
const shutdown = async () => {
|
|
57
|
+
console.log();
|
|
58
|
+
console.log(chalk.gray('Shutting down...'));
|
|
59
|
+
await server.stop();
|
|
60
|
+
process.exit(0);
|
|
61
|
+
};
|
|
62
|
+
process.on('SIGINT', shutdown);
|
|
63
|
+
process.on('SIGTERM', shutdown);
|
|
64
|
+
// Keep the process running
|
|
65
|
+
await new Promise(() => { });
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
spinner.fail('Failed to start dashboard');
|
|
69
|
+
if (error instanceof Error) {
|
|
70
|
+
if (error.message.includes('EADDRINUSE')) {
|
|
71
|
+
console.log(chalk.red(`Port ${port} is already in use.`));
|
|
72
|
+
console.log(chalk.gray(`Try: drift dashboard --port ${port + 1}`));
|
|
73
|
+
}
|
|
74
|
+
else if (error.message.includes('Cannot find module')) {
|
|
75
|
+
console.log(chalk.red('Dashboard package not found.'));
|
|
76
|
+
console.log(chalk.gray('Make sure driftdetect-dashboard is installed.'));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
console.log(chalk.red(error.message));
|
|
80
|
+
if (options.verbose) {
|
|
81
|
+
console.log(chalk.gray(error.stack || ''));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
export const dashboardCommand = new Command('dashboard')
|
|
89
|
+
.description('Launch the local web dashboard')
|
|
90
|
+
.option('-p, --port <port>', 'Port to run the server on', '3847')
|
|
91
|
+
.option('--no-browser', "Don't open browser automatically")
|
|
92
|
+
.option('--verbose', 'Enable verbose output')
|
|
93
|
+
.action(async (options) => {
|
|
94
|
+
await dashboardAction({
|
|
95
|
+
...options,
|
|
96
|
+
port: parseInt(options.port, 10),
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Export Command - Export manifest in various formats
|
|
3
3
|
*
|
|
4
4
|
* Exports the pattern manifest for AI consumption or reporting.
|
|
5
|
+
* Now reads from BOTH ManifestStore and PatternStore to ensure
|
|
6
|
+
* all 15 categories are available.
|
|
5
7
|
*
|
|
6
8
|
* Usage:
|
|
7
9
|
* drift export # Export as JSON to stdout
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsBpC,eAAO,MAAM,aAAa,SA8LtB,CAAC"}
|
package/dist/commands/export.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Export Command - Export manifest in various formats
|
|
3
3
|
*
|
|
4
4
|
* Exports the pattern manifest for AI consumption or reporting.
|
|
5
|
+
* Now reads from BOTH ManifestStore and PatternStore to ensure
|
|
6
|
+
* all 15 categories are available.
|
|
5
7
|
*
|
|
6
8
|
* Usage:
|
|
7
9
|
* drift export # Export as JSON to stdout
|
|
@@ -13,7 +15,7 @@ import { Command } from 'commander';
|
|
|
13
15
|
import * as fs from 'node:fs/promises';
|
|
14
16
|
import * as path from 'node:path';
|
|
15
17
|
import chalk from 'chalk';
|
|
16
|
-
import { ManifestStore, exportManifest, estimateTokens, } from 'driftdetect-core';
|
|
18
|
+
import { ManifestStore, PatternStore, exportManifest, estimateTokens, } from 'driftdetect-core';
|
|
17
19
|
const VALID_FORMATS = ['json', 'ai-context', 'summary', 'markdown'];
|
|
18
20
|
const VALID_CATEGORIES = [
|
|
19
21
|
'api', 'auth', 'security', 'errors', 'logging', 'testing',
|
|
@@ -38,13 +40,100 @@ export const exportCommand = new Command('export')
|
|
|
38
40
|
console.error(`Valid formats: ${VALID_FORMATS.join(', ')}`);
|
|
39
41
|
process.exit(1);
|
|
40
42
|
}
|
|
41
|
-
// Load manifest
|
|
43
|
+
// Load manifest from ManifestStore
|
|
42
44
|
const manifestStore = new ManifestStore(cwd);
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
let manifest = await manifestStore.load();
|
|
46
|
+
// Also load from PatternStore to get ALL 15 categories
|
|
47
|
+
// The PatternStore has the complete data, ManifestStore may be incomplete
|
|
48
|
+
const patternStore = new PatternStore({ rootDir: cwd });
|
|
49
|
+
await patternStore.initialize();
|
|
50
|
+
const allPatterns = patternStore.getAll();
|
|
51
|
+
// If no manifest exists but we have patterns, create a synthetic manifest
|
|
52
|
+
if (!manifest && allPatterns.length === 0) {
|
|
53
|
+
console.error(chalk.red('No patterns found. Run `drift scan` first.'));
|
|
46
54
|
process.exit(1);
|
|
47
55
|
}
|
|
56
|
+
// Create or enhance manifest with PatternStore data
|
|
57
|
+
if (!manifest) {
|
|
58
|
+
manifest = {
|
|
59
|
+
version: '2.0.0',
|
|
60
|
+
generated: new Date().toISOString(),
|
|
61
|
+
codebaseHash: '',
|
|
62
|
+
projectRoot: cwd,
|
|
63
|
+
summary: {
|
|
64
|
+
totalPatterns: 0,
|
|
65
|
+
patternsByStatus: { discovered: 0, approved: 0, ignored: 0 },
|
|
66
|
+
patternsByCategory: {},
|
|
67
|
+
totalFiles: 0,
|
|
68
|
+
totalLocations: 0,
|
|
69
|
+
totalOutliers: 0,
|
|
70
|
+
},
|
|
71
|
+
patterns: {},
|
|
72
|
+
files: {},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// Merge PatternStore patterns into manifest
|
|
76
|
+
// This ensures all 15 categories are available for export
|
|
77
|
+
for (const pattern of allPatterns) {
|
|
78
|
+
const manifestKey = `${pattern.category}/${pattern.subcategory}/${pattern.id}`;
|
|
79
|
+
// Skip if already in manifest with same or more data
|
|
80
|
+
if (manifest.patterns[manifestKey]) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
// Convert Pattern to ManifestPattern format
|
|
84
|
+
const manifestPattern = {
|
|
85
|
+
id: manifestKey,
|
|
86
|
+
name: pattern.name,
|
|
87
|
+
category: pattern.category,
|
|
88
|
+
subcategory: pattern.subcategory,
|
|
89
|
+
status: pattern.status,
|
|
90
|
+
confidence: pattern.confidence.score,
|
|
91
|
+
locations: pattern.locations.map(loc => ({
|
|
92
|
+
file: loc.file,
|
|
93
|
+
hash: '',
|
|
94
|
+
range: { start: loc.line, end: loc.endLine || loc.line },
|
|
95
|
+
type: 'block',
|
|
96
|
+
name: `line-${loc.line}`,
|
|
97
|
+
confidence: 0.9,
|
|
98
|
+
snippet: '',
|
|
99
|
+
language: getLanguageFromFile(loc.file),
|
|
100
|
+
})),
|
|
101
|
+
outliers: pattern.outliers.map(outlier => ({
|
|
102
|
+
file: outlier.file,
|
|
103
|
+
hash: '',
|
|
104
|
+
range: { start: outlier.line, end: outlier.endLine || outlier.line },
|
|
105
|
+
type: 'block',
|
|
106
|
+
name: outlier.reason,
|
|
107
|
+
confidence: 0.5,
|
|
108
|
+
snippet: '',
|
|
109
|
+
language: getLanguageFromFile(outlier.file),
|
|
110
|
+
})),
|
|
111
|
+
description: pattern.description,
|
|
112
|
+
firstSeen: pattern.metadata.firstSeen,
|
|
113
|
+
lastSeen: pattern.metadata.lastSeen,
|
|
114
|
+
};
|
|
115
|
+
manifest.patterns[manifestKey] = manifestPattern;
|
|
116
|
+
}
|
|
117
|
+
// Recalculate summary
|
|
118
|
+
const patterns = Object.values(manifest.patterns);
|
|
119
|
+
const patternsByStatus = { discovered: 0, approved: 0, ignored: 0 };
|
|
120
|
+
const patternsByCategory = {};
|
|
121
|
+
let totalLocations = 0;
|
|
122
|
+
let totalOutliers = 0;
|
|
123
|
+
for (const pattern of patterns) {
|
|
124
|
+
patternsByStatus[pattern.status]++;
|
|
125
|
+
patternsByCategory[pattern.category] = (patternsByCategory[pattern.category] || 0) + 1;
|
|
126
|
+
totalLocations += pattern.locations.length;
|
|
127
|
+
totalOutliers += pattern.outliers.length;
|
|
128
|
+
}
|
|
129
|
+
manifest.summary = {
|
|
130
|
+
totalPatterns: patterns.length,
|
|
131
|
+
patternsByStatus,
|
|
132
|
+
patternsByCategory,
|
|
133
|
+
totalFiles: Object.keys(manifest.files).length || new Set(patterns.flatMap(p => p.locations.map(l => l.file))).size,
|
|
134
|
+
totalLocations,
|
|
135
|
+
totalOutliers,
|
|
136
|
+
};
|
|
48
137
|
// Parse categories
|
|
49
138
|
let categories;
|
|
50
139
|
if (options.categories) {
|
|
@@ -106,4 +195,24 @@ export const exportCommand = new Command('export')
|
|
|
106
195
|
console.log(output);
|
|
107
196
|
}
|
|
108
197
|
});
|
|
198
|
+
/**
|
|
199
|
+
* Get language from file extension
|
|
200
|
+
*/
|
|
201
|
+
function getLanguageFromFile(file) {
|
|
202
|
+
const ext = path.extname(file).slice(1).toLowerCase();
|
|
203
|
+
const langMap = {
|
|
204
|
+
ts: 'typescript',
|
|
205
|
+
tsx: 'typescript',
|
|
206
|
+
js: 'javascript',
|
|
207
|
+
jsx: 'javascript',
|
|
208
|
+
py: 'python',
|
|
209
|
+
css: 'css',
|
|
210
|
+
scss: 'css',
|
|
211
|
+
json: 'json',
|
|
212
|
+
yaml: 'yaml',
|
|
213
|
+
yml: 'yaml',
|
|
214
|
+
md: 'markdown',
|
|
215
|
+
};
|
|
216
|
+
return langMap[ext] || 'unknown';
|
|
217
|
+
}
|
|
109
218
|
//# sourceMappingURL=export.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/files.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,YAAY,SAwLrB,CAAC"}
|
package/dist/commands/files.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Files Command - Show patterns in a file
|
|
3
3
|
*
|
|
4
4
|
* Show what patterns are found in a specific file.
|
|
5
|
+
* Now reads from BOTH ManifestStore and PatternStore to ensure
|
|
6
|
+
* all 15 categories are available.
|
|
5
7
|
*
|
|
6
8
|
* Usage:
|
|
7
9
|
* drift files src/auth/middleware.py
|
|
@@ -10,7 +12,7 @@
|
|
|
10
12
|
*/
|
|
11
13
|
import { Command } from 'commander';
|
|
12
14
|
import chalk from 'chalk';
|
|
13
|
-
import { ManifestStore, } from 'driftdetect-core';
|
|
15
|
+
import { ManifestStore, PatternStore, } from 'driftdetect-core';
|
|
14
16
|
export const filesCommand = new Command('files')
|
|
15
17
|
.description('Show patterns in a file')
|
|
16
18
|
.argument('<path>', 'File path (supports glob patterns)')
|
|
@@ -21,8 +23,12 @@ export const filesCommand = new Command('files')
|
|
|
21
23
|
// Load manifest
|
|
22
24
|
const manifestStore = new ManifestStore(cwd);
|
|
23
25
|
const manifest = await manifestStore.load();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
// Also load from PatternStore to get ALL 15 categories
|
|
27
|
+
const patternStore = new PatternStore({ rootDir: cwd });
|
|
28
|
+
await patternStore.initialize();
|
|
29
|
+
const allPatterns = patternStore.getAll();
|
|
30
|
+
if (!manifest && allPatterns.length === 0) {
|
|
31
|
+
console.error(chalk.red('No patterns found. Run `drift scan` first.'));
|
|
26
32
|
process.exit(1);
|
|
27
33
|
}
|
|
28
34
|
// Build query
|
|
@@ -32,39 +38,104 @@ export const filesCommand = new Command('files')
|
|
|
32
38
|
if (options.category) {
|
|
33
39
|
query.category = options.category;
|
|
34
40
|
}
|
|
35
|
-
// Query file
|
|
36
|
-
|
|
37
|
-
|
|
41
|
+
// Query file from manifest
|
|
42
|
+
let result = manifest ? manifestStore.queryFile(query) : null;
|
|
43
|
+
// Also search in PatternStore for patterns in this file
|
|
44
|
+
// This ensures all 15 categories are searched
|
|
45
|
+
const patternStoreResults = [];
|
|
46
|
+
// Match file path (supports glob-like patterns)
|
|
47
|
+
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
48
|
+
const isGlob = normalizedPath.includes('*');
|
|
49
|
+
for (const pattern of allPatterns) {
|
|
50
|
+
// Filter by category if specified
|
|
51
|
+
if (options.category && pattern.category !== options.category) {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
// Find locations in this file
|
|
55
|
+
const matchingLocations = pattern.locations.filter(loc => {
|
|
56
|
+
const locPath = loc.file.replace(/\\/g, '/');
|
|
57
|
+
if (isGlob) {
|
|
58
|
+
return matchGlob(locPath, normalizedPath);
|
|
59
|
+
}
|
|
60
|
+
return locPath === normalizedPath || locPath.endsWith(normalizedPath) || locPath.includes(normalizedPath);
|
|
61
|
+
});
|
|
62
|
+
if (matchingLocations.length > 0) {
|
|
63
|
+
patternStoreResults.push({
|
|
64
|
+
id: pattern.id,
|
|
65
|
+
name: pattern.name,
|
|
66
|
+
category: pattern.category,
|
|
67
|
+
locations: matchingLocations.map(loc => ({
|
|
68
|
+
range: { start: loc.line, end: loc.endLine || loc.line },
|
|
69
|
+
type: 'block',
|
|
70
|
+
name: `line-${loc.line}`,
|
|
71
|
+
})),
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Merge results
|
|
76
|
+
const mergedPatterns = new Map();
|
|
77
|
+
// Add manifest results
|
|
78
|
+
if (result) {
|
|
79
|
+
for (const p of result.patterns) {
|
|
80
|
+
mergedPatterns.set(p.id, p);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// Add PatternStore results (may add new categories)
|
|
84
|
+
for (const p of patternStoreResults) {
|
|
85
|
+
if (!mergedPatterns.has(p.id)) {
|
|
86
|
+
mergedPatterns.set(p.id, p);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const finalPatterns = Array.from(mergedPatterns.values());
|
|
90
|
+
if (finalPatterns.length === 0) {
|
|
38
91
|
console.log(chalk.yellow(`No patterns found in "${filePath}"`));
|
|
39
|
-
// Show available files
|
|
40
|
-
const allFiles =
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
92
|
+
// Show available files from PatternStore
|
|
93
|
+
const allFiles = new Set();
|
|
94
|
+
for (const pattern of allPatterns) {
|
|
95
|
+
for (const loc of pattern.locations) {
|
|
96
|
+
allFiles.add(loc.file);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const fileList = Array.from(allFiles).slice(0, 10);
|
|
100
|
+
if (fileList.length > 0) {
|
|
101
|
+
console.log(chalk.dim('\nFiles with patterns:'));
|
|
102
|
+
for (const f of fileList) {
|
|
44
103
|
console.log(chalk.dim(` ${f}`));
|
|
45
104
|
}
|
|
46
|
-
if (
|
|
47
|
-
console.log(chalk.dim(` ... and ${
|
|
105
|
+
if (allFiles.size > 10) {
|
|
106
|
+
console.log(chalk.dim(` ... and ${allFiles.size - 10} more`));
|
|
48
107
|
}
|
|
49
108
|
}
|
|
50
109
|
process.exit(0);
|
|
51
110
|
}
|
|
111
|
+
// Build final result
|
|
112
|
+
const finalResult = {
|
|
113
|
+
file: result?.file || filePath,
|
|
114
|
+
patterns: finalPatterns,
|
|
115
|
+
metadata: result?.metadata || {
|
|
116
|
+
hash: '',
|
|
117
|
+
patterns: finalPatterns.map(p => p.id),
|
|
118
|
+
lastScanned: new Date().toISOString(),
|
|
119
|
+
},
|
|
120
|
+
};
|
|
52
121
|
// Output
|
|
53
122
|
if (options.json) {
|
|
54
|
-
console.log(JSON.stringify(
|
|
123
|
+
console.log(JSON.stringify(finalResult, null, 2));
|
|
55
124
|
}
|
|
56
125
|
else {
|
|
57
|
-
console.log(chalk.bold(`\n📄 Patterns in ${
|
|
58
|
-
|
|
59
|
-
|
|
126
|
+
console.log(chalk.bold(`\n📄 Patterns in ${finalResult.file}:\n`));
|
|
127
|
+
if (finalResult.metadata.hash) {
|
|
128
|
+
console.log(chalk.dim(` Hash: ${finalResult.metadata.hash}`));
|
|
129
|
+
}
|
|
130
|
+
console.log(chalk.dim(` Last scanned: ${finalResult.metadata.lastScanned}`));
|
|
60
131
|
console.log('');
|
|
61
|
-
if (
|
|
132
|
+
if (finalResult.patterns.length === 0) {
|
|
62
133
|
console.log(chalk.yellow(' No patterns found'));
|
|
63
134
|
}
|
|
64
135
|
else {
|
|
65
136
|
// Group by category
|
|
66
137
|
const byCategory = new Map();
|
|
67
|
-
for (const p of
|
|
138
|
+
for (const p of finalResult.patterns) {
|
|
68
139
|
if (!byCategory.has(p.category)) {
|
|
69
140
|
byCategory.set(p.category, []);
|
|
70
141
|
}
|
|
@@ -82,7 +153,19 @@ export const filesCommand = new Command('files')
|
|
|
82
153
|
console.log('');
|
|
83
154
|
}
|
|
84
155
|
}
|
|
85
|
-
console.log(chalk.dim(`Total: ${
|
|
156
|
+
console.log(chalk.dim(`Total: ${finalResult.patterns.length} patterns`));
|
|
86
157
|
}
|
|
87
158
|
});
|
|
159
|
+
/**
|
|
160
|
+
* Simple glob matching
|
|
161
|
+
*/
|
|
162
|
+
function matchGlob(filePath, pattern) {
|
|
163
|
+
const regexPattern = pattern
|
|
164
|
+
.replace(/\*\*/g, '{{GLOBSTAR}}')
|
|
165
|
+
.replace(/\*/g, '[^/]*')
|
|
166
|
+
.replace(/{{GLOBSTAR}}/g, '.*')
|
|
167
|
+
.replace(/\?/g, '.');
|
|
168
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
169
|
+
return regex.test(filePath);
|
|
170
|
+
}
|
|
88
171
|
//# sourceMappingURL=files.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/commands/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,aAAa,EACb,YAAY,GAGb,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,QAAQ,EAAE,oCAAoC,CAAC;KACxD,MAAM,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;KACzD,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,gBAAgB;IAChB,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;IAE5C,uDAAuD;IACvD,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACxD,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAE1C,IAAI,CAAC,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,cAAc;IACd,MAAM,KAAK,GAAc;QACvB,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAA2B,CAAC;IACvD,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9D,wDAAwD;IACxD,8CAA8C;IAC9C,MAAM,mBAAmB,GASpB,EAAE,CAAC;IAER,gDAAgD;IAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,kCAAkC;QAClC,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,8BAA8B;QAC9B,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACvD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,SAAS,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;YAC5C,CAAC;YACD,OAAO,OAAO,KAAK,cAAc,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC5G,CAAC,CAAC,CAAC;QAEH,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,mBAAmB,CAAC,IAAI,CAAC;gBACvB,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,SAAS,EAAE,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACvC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE;oBACxD,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,QAAQ,GAAG,CAAC,IAAI,EAAE;iBACzB,CAAC,CAAC;aACJ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,cAAc,GAAG,IAAI,GAAG,EAS1B,CAAC;IAEL,uBAAuB;IACvB,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAChC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,KAAK,MAAM,CAAC,IAAI,mBAAmB,EAAE,CAAC;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YAC9B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IAE1D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,QAAQ,GAAG,CAAC,CAAC,CAAC;QAEhE,yCAAyC;QACzC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;YAClC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qBAAqB;IACrB,MAAM,WAAW,GAAG;QAClB,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,QAAQ;QAC9B,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI;YAC5B,IAAI,EAAE,EAAE;YACR,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC;KACF,CAAC;IAEF,SAAS;IACT,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACnE,IAAI,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,oBAAoB;YACpB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAuC,CAAC;YAClE,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAChC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBACjC,CAAC;gBACD,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YAED,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;gBAEvD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAE5C,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;wBAC9B,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;wBACpD,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC1G,CAAC;gBACH,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,WAAW,CAAC,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;GAEG;AACH,SAAS,SAAS,CAAC,QAAgB,EAAE,OAAe;IAClD,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;SAC9B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC;IAC9C,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
|
package/dist/commands/index.d.ts
CHANGED
|
@@ -14,4 +14,5 @@ export { exportCommand } from './export.js';
|
|
|
14
14
|
export { whereCommand } from './where.js';
|
|
15
15
|
export { filesCommand } from './files.js';
|
|
16
16
|
export { watchCommandDef as watchCommand } from './watch.js';
|
|
17
|
+
export { dashboardCommand } from './dashboard.js';
|
|
17
18
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/commands/index.js
CHANGED
|
@@ -14,4 +14,5 @@ export { exportCommand } from './export.js';
|
|
|
14
14
|
export { whereCommand } from './where.js';
|
|
15
15
|
export { filesCommand } from './files.js';
|
|
16
16
|
export { watchCommandDef as watchCommand } from './watch.js';
|
|
17
|
+
export { dashboardCommand } from './dashboard.js';
|
|
17
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/commands/scan.d.ts
CHANGED
|
@@ -22,6 +22,8 @@ export interface ScanCommandOptions {
|
|
|
22
22
|
manifest?: boolean;
|
|
23
23
|
/** Incremental scan (only changed files) */
|
|
24
24
|
incremental?: boolean;
|
|
25
|
+
/** Skip BE↔FE contract scanning (contracts enabled by default) */
|
|
26
|
+
contracts?: boolean;
|
|
25
27
|
}
|
|
26
28
|
export declare const scanCommand: Command;
|
|
27
29
|
//# sourceMappingURL=scan.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAkkBD,eAAO,MAAM,WAAW,SAUH,CAAC"}
|