driftdetect 0.7.1 → 0.8.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.d.ts +11 -0
- package/dist/bin/drift.js +26 -1
- package/dist/bin/drift.js.map +1 -1
- package/dist/commands/approve.d.ts +2 -0
- package/dist/commands/approve.d.ts.map +1 -1
- package/dist/commands/approve.js +92 -1
- package/dist/commands/approve.js.map +1 -1
- package/dist/commands/boundaries.d.ts +20 -0
- package/dist/commands/callgraph.d.ts.map +1 -1
- package/dist/commands/callgraph.js +42 -52
- package/dist/commands/callgraph.js.map +1 -1
- package/dist/commands/context.d.ts +19 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +301 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/cpp.d.ts +22 -0
- package/dist/commands/cpp.d.ts.map +1 -0
- package/dist/commands/cpp.js +485 -0
- package/dist/commands/cpp.js.map +1 -0
- package/dist/commands/dashboard.d.ts +16 -0
- package/dist/commands/dashboard.d.ts.map +1 -1
- package/dist/commands/dashboard.js +3 -1
- package/dist/commands/dashboard.js.map +1 -1
- package/dist/commands/dna/export.d.ts +6 -0
- package/dist/commands/dna/gene.d.ts +6 -0
- package/dist/commands/dna/index.d.ts +8 -0
- package/dist/commands/dna/mutations.d.ts +6 -0
- package/dist/commands/dna/playbook.d.ts +6 -0
- package/dist/commands/dna/scan.d.ts +6 -0
- package/dist/commands/dna/status.d.ts +6 -0
- package/dist/commands/gate.d.ts +33 -0
- package/dist/commands/gate.d.ts.map +1 -0
- package/dist/commands/gate.js +199 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/ignore.d.ts.map +1 -1
- package/dist/commands/ignore.js +36 -0
- package/dist/commands/ignore.js.map +1 -1
- package/dist/commands/index.d.ts +6 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +12 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/init.d.ts +19 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +41 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/license.d.ts +12 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +133 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/parser.d.ts +20 -0
- package/dist/commands/rust.d.ts +21 -0
- package/dist/commands/rust.d.ts.map +1 -0
- package/dist/commands/rust.js +526 -0
- package/dist/commands/rust.js.map +1 -0
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +69 -1
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/simulate.d.ts.map +1 -1
- package/dist/commands/simulate.js +22 -1
- package/dist/commands/simulate.js.map +1 -1
- package/dist/commands/telemetry.d.ts +9 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +289 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/trends.d.ts +12 -0
- package/dist/commands/watch.d.ts +13 -0
- package/dist/git/hooks.d.ts +108 -0
- package/dist/git/index.d.ts +6 -0
- package/dist/git/staged-files.d.ts +41 -0
- package/dist/reporters/github-reporter.d.ts +13 -0
- package/dist/reporters/gitlab-reporter.d.ts +16 -0
- package/dist/reporters/index.d.ts +9 -0
- package/dist/reporters/json-reporter.d.ts +13 -0
- package/dist/reporters/text-reporter.d.ts +13 -0
- package/dist/reporters/types.d.ts +42 -0
- package/dist/services/boundary-scanner.d.ts +21 -0
- package/dist/services/contract-scanner.d.ts +35 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/progress.d.ts +115 -0
- package/dist/ui/prompts.d.ts +91 -0
- package/dist/ui/spinner.d.ts +109 -0
- package/dist/ui/table.d.ts +118 -0
- package/package.json +17 -17
- package/LICENSE +0 -21
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License Command - drift license
|
|
3
|
+
*
|
|
4
|
+
* Display license status and available features.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { getLicenseManager, getLicenseStatus, FEATURE_TIERS, TIER_HIERARCHY, } from 'driftdetect-core';
|
|
9
|
+
/**
|
|
10
|
+
* Format tier with color
|
|
11
|
+
*/
|
|
12
|
+
function formatTier(tier) {
|
|
13
|
+
switch (tier) {
|
|
14
|
+
case 'enterprise':
|
|
15
|
+
return chalk.magenta.bold(tier);
|
|
16
|
+
case 'team':
|
|
17
|
+
return chalk.blue.bold(tier);
|
|
18
|
+
case 'community':
|
|
19
|
+
default:
|
|
20
|
+
return chalk.green.bold(tier);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Group features by tier
|
|
25
|
+
*/
|
|
26
|
+
function groupFeaturesByTier() {
|
|
27
|
+
const grouped = {
|
|
28
|
+
community: [],
|
|
29
|
+
team: [],
|
|
30
|
+
enterprise: [],
|
|
31
|
+
};
|
|
32
|
+
for (const [feature, tier] of Object.entries(FEATURE_TIERS)) {
|
|
33
|
+
grouped[tier].push(feature);
|
|
34
|
+
}
|
|
35
|
+
return grouped;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* License command implementation
|
|
39
|
+
*/
|
|
40
|
+
async function licenseAction(options) {
|
|
41
|
+
const rootDir = process.cwd();
|
|
42
|
+
const format = options.format ?? 'text';
|
|
43
|
+
try {
|
|
44
|
+
const status = await getLicenseStatus(rootDir);
|
|
45
|
+
const manager = getLicenseManager(rootDir);
|
|
46
|
+
const source = manager.getSource();
|
|
47
|
+
if (format === 'json') {
|
|
48
|
+
console.log(JSON.stringify({
|
|
49
|
+
...status,
|
|
50
|
+
source,
|
|
51
|
+
allFeatures: groupFeaturesByTier(),
|
|
52
|
+
}, null, 2));
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Text output
|
|
56
|
+
console.log();
|
|
57
|
+
console.log(chalk.bold('🔑 Drift License Status'));
|
|
58
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
59
|
+
console.log();
|
|
60
|
+
// Current tier
|
|
61
|
+
console.log(` Tier: ${formatTier(status.tier)}`);
|
|
62
|
+
// License source
|
|
63
|
+
const sourceLabel = {
|
|
64
|
+
environment: 'DRIFT_LICENSE_KEY env var',
|
|
65
|
+
file: '.drift/license.key file',
|
|
66
|
+
config: '.drift/config.json',
|
|
67
|
+
none: 'No license (Community)',
|
|
68
|
+
}[source];
|
|
69
|
+
console.log(` Source: ${chalk.gray(sourceLabel)}`);
|
|
70
|
+
// Organization (if licensed)
|
|
71
|
+
if (status.organization) {
|
|
72
|
+
console.log(` Organization: ${chalk.cyan(status.organization)}`);
|
|
73
|
+
}
|
|
74
|
+
// Expiration
|
|
75
|
+
if (status.expiresAt) {
|
|
76
|
+
const daysLabel = status.daysRemaining !== null
|
|
77
|
+
? status.daysRemaining > 0
|
|
78
|
+
? chalk.yellow(`(${status.daysRemaining} days remaining)`)
|
|
79
|
+
: chalk.red('(EXPIRED)')
|
|
80
|
+
: '';
|
|
81
|
+
console.log(` Expires: ${status.expiresAt} ${daysLabel}`);
|
|
82
|
+
}
|
|
83
|
+
// Warnings
|
|
84
|
+
if (status.warnings.length > 0) {
|
|
85
|
+
console.log();
|
|
86
|
+
console.log(chalk.yellow(' ⚠️ Warnings:'));
|
|
87
|
+
for (const warning of status.warnings) {
|
|
88
|
+
console.log(chalk.yellow(` • ${warning}`));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Available features
|
|
92
|
+
console.log();
|
|
93
|
+
console.log(chalk.bold(' Available Features:'));
|
|
94
|
+
console.log();
|
|
95
|
+
const grouped = groupFeaturesByTier();
|
|
96
|
+
const currentLevel = TIER_HIERARCHY[status.tier];
|
|
97
|
+
for (const tier of ['community', 'team', 'enterprise']) {
|
|
98
|
+
const tierLevel = TIER_HIERARCHY[tier];
|
|
99
|
+
const isAvailable = tierLevel <= currentLevel;
|
|
100
|
+
const features = grouped[tier];
|
|
101
|
+
if (features.length === 0)
|
|
102
|
+
continue;
|
|
103
|
+
const tierLabel = isAvailable
|
|
104
|
+
? chalk.green(`✓ ${tier.toUpperCase()}`)
|
|
105
|
+
: chalk.gray(`○ ${tier.toUpperCase()}`);
|
|
106
|
+
console.log(` ${tierLabel}`);
|
|
107
|
+
for (const feature of features) {
|
|
108
|
+
const featureLabel = isAvailable
|
|
109
|
+
? chalk.green(` ✓ ${feature}`)
|
|
110
|
+
: chalk.gray(` ○ ${feature}`);
|
|
111
|
+
console.log(featureLabel);
|
|
112
|
+
}
|
|
113
|
+
console.log();
|
|
114
|
+
}
|
|
115
|
+
// Upgrade prompt for non-enterprise
|
|
116
|
+
if (status.tier !== 'enterprise') {
|
|
117
|
+
console.log(chalk.gray('─'.repeat(50)));
|
|
118
|
+
console.log();
|
|
119
|
+
console.log(` ${chalk.cyan('Upgrade to unlock more features:')}`);
|
|
120
|
+
console.log(` ${chalk.underline('https://driftscan.dev/pricing')}`);
|
|
121
|
+
console.log();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error(chalk.red(`Error: ${error.message}`));
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
export const licenseCommand = new Command('license')
|
|
130
|
+
.description('Display license status and available features')
|
|
131
|
+
.option('-f, --format <format>', 'Output format (text, json)', 'text')
|
|
132
|
+
.action(licenseAction);
|
|
133
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/commands/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser Command - drift parser
|
|
3
|
+
*
|
|
4
|
+
* Show parser information and diagnostics for drift's language parsers.
|
|
5
|
+
* Displays which parsers are available, their capabilities, and allows
|
|
6
|
+
* testing parsing on specific files.
|
|
7
|
+
*
|
|
8
|
+
* @requirements Phase 4 - CLI Integration
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from 'commander';
|
|
11
|
+
export interface ParserOptions {
|
|
12
|
+
/** Test parsing a specific file */
|
|
13
|
+
test?: string;
|
|
14
|
+
/** Output format */
|
|
15
|
+
format?: 'text' | 'json';
|
|
16
|
+
/** Show verbose output */
|
|
17
|
+
verbose?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare const parserCommand: Command;
|
|
20
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rust Command - drift rust
|
|
3
|
+
*
|
|
4
|
+
* Analyze Rust projects: routes, error handling, traits, data access.
|
|
5
|
+
*
|
|
6
|
+
* @requirements Rust Language Support
|
|
7
|
+
*/
|
|
8
|
+
import { Command } from 'commander';
|
|
9
|
+
export interface RustOptions {
|
|
10
|
+
/** Output format */
|
|
11
|
+
format?: 'text' | 'json';
|
|
12
|
+
/** Enable verbose output */
|
|
13
|
+
verbose?: boolean;
|
|
14
|
+
/** Filter by framework */
|
|
15
|
+
framework?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create the Rust command
|
|
19
|
+
*/
|
|
20
|
+
export declare function createRustCommand(): Command;
|
|
21
|
+
//# sourceMappingURL=rust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rust.d.ts","sourceRoot":"","sources":["../../src/commands/rust.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,MAAM,WAAW,WAAW;IAC1B,oBAAoB;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAkE3C"}
|