@vee-stack/delta-cli 2.0.7 → 2.0.9

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.
Files changed (109) hide show
  1. package/dist/adapters/analysis.adapter.js +42 -0
  2. package/dist/analyzer/commands/analyze.js +74 -114
  3. package/dist/auth/device-auth.js +261 -0
  4. package/dist/auth/secure-auth.js +45 -16
  5. package/dist/commands/analyze.js +30 -27
  6. package/dist/commands/auth.js +13 -16
  7. package/dist/commands/status.js +2 -2
  8. package/dist/commands/whoami.js +6 -6
  9. package/dist/components/Dashboard.js +3 -5
  10. package/dist/components/DeltaApp.js +1 -1
  11. package/dist/components/UnifiedManager.js +48 -20
  12. package/dist/core/completion.js +14 -3
  13. package/dist/core/engine.js +10 -4
  14. package/dist/core/exit-codes.js +12 -4
  15. package/dist/core/wizard.js +1 -1
  16. package/dist/index.js +21 -5
  17. package/dist/providers/remote-provider.js +2 -2
  18. package/dist/telemetry/wrapper.js +114 -0
  19. package/dist/ui.js +9 -2
  20. package/dist/welcome.js +14 -4
  21. package/package.json +3 -1
  22. package/dist/apps/cli/src/analyzer/commands/analyze.js +0 -256
  23. package/dist/apps/cli/src/analyzer/commands/config.js +0 -83
  24. package/dist/apps/cli/src/analyzer/commands/report.js +0 -38
  25. package/dist/apps/cli/src/analyzer/generators/report.generator.js +0 -123
  26. package/dist/apps/cli/src/analyzer/index.js +0 -44
  27. package/dist/apps/cli/src/analyzer/scanners/project.scanner.js +0 -92
  28. package/dist/apps/cli/src/analyzer/validators/contracts.validator.js +0 -42
  29. package/dist/apps/cli/src/analyzer/validators/maintainability.validator.js +0 -40
  30. package/dist/apps/cli/src/analyzer/validators/observability.validator.js +0 -39
  31. package/dist/apps/cli/src/analyzer/validators/performance.validator.js +0 -42
  32. package/dist/apps/cli/src/analyzer/validators/security.validator.js +0 -66
  33. package/dist/apps/cli/src/analyzer/validators/soc.validator.js +0 -75
  34. package/dist/apps/cli/src/auth/secure-auth.js +0 -312
  35. package/dist/apps/cli/src/commands/analyze.js +0 -286
  36. package/dist/apps/cli/src/commands/auth-new.js +0 -37
  37. package/dist/apps/cli/src/commands/auth.js +0 -122
  38. package/dist/apps/cli/src/commands/config.js +0 -49
  39. package/dist/apps/cli/src/commands/deploy.js +0 -6
  40. package/dist/apps/cli/src/commands/init.js +0 -47
  41. package/dist/apps/cli/src/commands/logout.js +0 -23
  42. package/dist/apps/cli/src/commands/plugins.js +0 -21
  43. package/dist/apps/cli/src/commands/status.js +0 -80
  44. package/dist/apps/cli/src/commands/sync.js +0 -6
  45. package/dist/apps/cli/src/commands/whoami.js +0 -115
  46. package/dist/apps/cli/src/components/Dashboard.js +0 -168
  47. package/dist/apps/cli/src/components/DeltaApp.js +0 -56
  48. package/dist/apps/cli/src/components/UnifiedManager.js +0 -324
  49. package/dist/apps/cli/src/core/audit.js +0 -184
  50. package/dist/apps/cli/src/core/completion.js +0 -294
  51. package/dist/apps/cli/src/core/contracts.js +0 -6
  52. package/dist/apps/cli/src/core/engine.js +0 -124
  53. package/dist/apps/cli/src/core/exit-codes.js +0 -71
  54. package/dist/apps/cli/src/core/hooks.js +0 -181
  55. package/dist/apps/cli/src/core/index.js +0 -7
  56. package/dist/apps/cli/src/core/policy.js +0 -115
  57. package/dist/apps/cli/src/core/profiles.js +0 -161
  58. package/dist/apps/cli/src/core/wizard.js +0 -203
  59. package/dist/apps/cli/src/index.js +0 -636
  60. package/dist/apps/cli/src/interactive/index.js +0 -11
  61. package/dist/apps/cli/src/plugins/GitStatusPlugin.js +0 -99
  62. package/dist/apps/cli/src/providers/ai-provider.js +0 -74
  63. package/dist/apps/cli/src/providers/local-provider.js +0 -302
  64. package/dist/apps/cli/src/providers/remote-provider.js +0 -100
  65. package/dist/apps/cli/src/types/api.js +0 -3
  66. package/dist/apps/cli/src/ui.js +0 -219
  67. package/dist/apps/cli/src/welcome.js +0 -81
  68. package/dist/bundle.js +0 -504
  69. package/dist/packages/domain/src/constitution/contracts/index.js +0 -43
  70. package/dist/packages/domain/src/constitution/contracts/ts.rules.js +0 -268
  71. package/dist/packages/domain/src/constitution/index.js +0 -139
  72. package/dist/packages/domain/src/constitution/maintainability/index.js +0 -43
  73. package/dist/packages/domain/src/constitution/maintainability/ts.rules.js +0 -344
  74. package/dist/packages/domain/src/constitution/observability/index.js +0 -43
  75. package/dist/packages/domain/src/constitution/observability/ts.rules.js +0 -307
  76. package/dist/packages/domain/src/constitution/performance/index.js +0 -43
  77. package/dist/packages/domain/src/constitution/performance/ts.rules.js +0 -325
  78. package/dist/packages/domain/src/constitution/security/index.js +0 -50
  79. package/dist/packages/domain/src/constitution/security/ts.rules.js +0 -267
  80. package/dist/packages/domain/src/constitution/soc/index.js +0 -43
  81. package/dist/packages/domain/src/constitution/soc/ts.rules.js +0 -360
  82. package/dist/packages/domain/src/contracts/analysis.contract.js +0 -18
  83. package/dist/packages/domain/src/contracts/index.js +0 -7
  84. package/dist/packages/domain/src/contracts/projects.contract.js +0 -18
  85. package/dist/packages/domain/src/control/registry/rules.registry.js +0 -29
  86. package/dist/packages/domain/src/control/schemas/policies.js +0 -6
  87. package/dist/packages/domain/src/core/analysis/discovery.js +0 -163
  88. package/dist/packages/domain/src/core/analysis/engine.contract.js +0 -298
  89. package/dist/packages/domain/src/core/analysis/engine.js +0 -77
  90. package/dist/packages/domain/src/core/analysis/index.js +0 -14
  91. package/dist/packages/domain/src/core/analysis/orchestrator.js +0 -242
  92. package/dist/packages/domain/src/core/comparison/engine.js +0 -29
  93. package/dist/packages/domain/src/core/comparison/index.js +0 -5
  94. package/dist/packages/domain/src/core/documentation/index.js +0 -5
  95. package/dist/packages/domain/src/core/documentation/pipeline.js +0 -41
  96. package/dist/packages/domain/src/core/fs/adapter.js +0 -111
  97. package/dist/packages/domain/src/core/fs/index.js +0 -5
  98. package/dist/packages/domain/src/core/parser/unified-parser.js +0 -166
  99. package/dist/packages/domain/src/index.js +0 -33
  100. package/dist/packages/domain/src/plugin/registry.js +0 -195
  101. package/dist/packages/domain/src/plugin/types.js +0 -6
  102. package/dist/packages/domain/src/ports/analysis.engine.js +0 -7
  103. package/dist/packages/domain/src/ports/audit.logger.js +0 -7
  104. package/dist/packages/domain/src/ports/project.repository.js +0 -7
  105. package/dist/packages/domain/src/rules/index.js +0 -134
  106. package/dist/packages/domain/src/types/analysis.js +0 -6
  107. package/dist/packages/domain/src/types/errors.js +0 -53
  108. package/dist/packages/domain/src/types/fs.js +0 -6
  109. package/dist/packages/domain/src/types/index.js +0 -7
@@ -1,83 +0,0 @@
1
- /**
2
- * Config Command
3
- * @description Manage analyzer configuration
4
- */
5
- import * as fs from 'fs/promises';
6
- import * as path from 'path';
7
- const DEFAULT_CONFIG = {
8
- version: '1.0.0',
9
- language: 'typescript',
10
- depth: 'standard',
11
- output: 'json',
12
- strict: false,
13
- rules: {
14
- security: { enabled: true, weight: 25 },
15
- performance: { enabled: true, weight: 20 },
16
- soc: { enabled: true, weight: 20 },
17
- contracts: { enabled: true, weight: 15 },
18
- maintainability: { enabled: true, weight: 10 },
19
- observability: { enabled: true, weight: 10 },
20
- },
21
- thresholds: {
22
- critical: 0,
23
- error: 5,
24
- warning: 20,
25
- },
26
- };
27
- export async function configCommand(options) {
28
- const configPath = path.join(process.cwd(), '.delta-analyzer.json');
29
- if (options.init) {
30
- try {
31
- await fs.writeFile(configPath, JSON.stringify(DEFAULT_CONFIG, null, 2));
32
- console.log('✅ Configuration file created: .delta-analyzer.json');
33
- console.log('\nEdit this file to customize analyzer settings.');
34
- }
35
- catch (error) {
36
- console.error('❌ Failed to create config:', error instanceof Error ? error.message : String(error));
37
- process.exit(1);
38
- }
39
- return;
40
- }
41
- if (options.show) {
42
- try {
43
- const content = await fs.readFile(configPath, 'utf-8');
44
- const config = JSON.parse(content);
45
- console.log('\n📋 Current Configuration:\n');
46
- console.log(JSON.stringify(config, null, 2));
47
- }
48
- catch {
49
- console.log('⚠️ No configuration file found. Run with --init to create one.');
50
- }
51
- return;
52
- }
53
- if (options.set) {
54
- const [key, value] = options.set.split('=');
55
- if (!key || !value) {
56
- console.error('❌ Invalid format. Use: --set key=value');
57
- process.exit(1);
58
- }
59
- try {
60
- const content = await fs.readFile(configPath, 'utf-8');
61
- const config = JSON.parse(content);
62
- // Simple nested key support (e.g., "rules.security.enabled")
63
- const keys = key.split('.');
64
- let current = config;
65
- for (let i = 0; i < keys.length - 1; i++) {
66
- current = current[keys[i]];
67
- }
68
- current[keys[keys.length - 1]] = value;
69
- await fs.writeFile(configPath, JSON.stringify(config, null, 2));
70
- console.log(`✅ Set ${key} = ${value}`);
71
- }
72
- catch {
73
- console.log('⚠️ No configuration file found. Run with --init to create one.');
74
- process.exit(1);
75
- }
76
- return;
77
- }
78
- console.log('Usage:');
79
- console.log(' delta-analyze config --init Create default configuration');
80
- console.log(' delta-analyze config --show Show current configuration');
81
- console.log(' delta-analyze config --set key=value Set configuration value');
82
- }
83
- //# sourceMappingURL=config.js.map
@@ -1,38 +0,0 @@
1
- /**
2
- * Report Command
3
- * @description Generate report from previous analysis
4
- */
5
- import * as fs from 'fs/promises';
6
- import { ReportGenerator } from '../generators/report.generator';
7
- export async function reportCommand(analysisFile, options) {
8
- try {
9
- // Read analysis file
10
- const content = await fs.readFile(analysisFile, 'utf-8');
11
- const analysis = JSON.parse(content);
12
- // Generate report
13
- let output;
14
- let extension;
15
- switch (options.template) {
16
- case 'html':
17
- output = ReportGenerator.generateHTML(analysis);
18
- extension = 'html';
19
- break;
20
- case 'markdown':
21
- output = ReportGenerator.generateMarkdown(analysis);
22
- extension = 'md';
23
- break;
24
- default:
25
- console.error(`Unknown template: ${options.template}`);
26
- process.exit(1);
27
- }
28
- // Write to file
29
- const outputPath = options.output || `${analysis.project.name}-report.${extension}`;
30
- await fs.writeFile(outputPath, output);
31
- console.log(`✅ Report generated: ${outputPath}`);
32
- }
33
- catch (error) {
34
- console.error('❌ Failed to generate report:', error instanceof Error ? error.message : String(error));
35
- process.exit(1);
36
- }
37
- }
38
- //# sourceMappingURL=report.js.map
@@ -1,123 +0,0 @@
1
- /**
2
- * Report Generator
3
- * @description Generates analysis reports in various formats
4
- */
5
- export class ReportGenerator {
6
- static generateHTML(result) {
7
- return `<!DOCTYPE html>
8
- <html>
9
- <head>
10
- <title>Delta Analysis - ${result.project.name}</title>
11
- <style>
12
- body { font-family: system-ui, sans-serif; max-width: 900px; margin: 0 auto; padding: 20px; }
13
- .header { background: #1a1a2e; color: white; padding: 30px; border-radius: 8px; margin-bottom: 20px; }
14
- .score { font-size: 48px; font-weight: bold; }
15
- .grade { font-size: 24px; opacity: 0.8; }
16
- .axis { background: #f5f5f5; padding: 15px; margin: 10px 0; border-radius: 6px; }
17
- .bar { background: #ddd; height: 20px; border-radius: 10px; overflow: hidden; }
18
- .bar-fill { background: #4CAF50; height: 100%; transition: width 0.3s; }
19
- .violation { padding: 10px; margin: 5px 0; border-left: 4px solid; }
20
- .critical { border-color: #f44336; background: #ffebee; }
21
- .error { border-color: #ff9800; background: #fff3e0; }
22
- .warning { border-color: #ffeb3b; background: #fffde7; }
23
- </style>
24
- </head>
25
- <body>
26
- <div class="header">
27
- <h1>📊 Delta Constitution Analysis</h1>
28
- <div class="score">${result.overall.percentage}%</div>
29
- <div class="grade">Grade: ${result.overall.grade}</div>
30
- <p>Project: ${result.project.name} | ${result.project.fileCount} files</p>
31
- </div>
32
-
33
- <h2>Axis Scores</h2>
34
- ${Object.entries(result.scores)
35
- .map(([name, score]) => `
36
- <div class="axis">
37
- <strong>${name}</strong>: ${score.percentage}%
38
- <div class="bar"><div class="bar-fill" style="width: ${score.percentage}%"></div></div>
39
- </div>
40
- `)
41
- .join('')}
42
-
43
- <h2>Violations (${result.violations.length})</h2>
44
- ${result.violations
45
- .slice(0, 20)
46
- .map(v => `
47
- <div class="violation ${v.severity}">
48
- <strong>[${v.axis}] ${v.id}</strong>: ${v.message}
49
- </div>
50
- `)
51
- .join('')}
52
-
53
- <h2>Recommendations</h2>
54
- ${result.recommendations
55
- .slice(0, 5)
56
- .map(r => `
57
- <div class="axis">
58
- <strong>[${r.axis}] ${r.priority}</strong>
59
- <p>${r.description}</p>
60
- <small>Action: ${r.action}</small>
61
- </div>
62
- `)
63
- .join('')}
64
-
65
- <footer style="margin-top: 40px; padding-top: 20px; border-top: 1px solid #ddd; color: #666;">
66
- Generated: ${result.timestamp} | Delta Constitution v1.0.0
67
- </footer>
68
- </body>
69
- </html>`;
70
- }
71
- static generateMarkdown(result) {
72
- return `# Delta Constitution Analysis Report
73
-
74
- ## Project: ${result.project.name}
75
-
76
- - **Path**: ${result.project.path}
77
- - **Language**: ${result.project.language}
78
- - **Files**: ${result.project.fileCount}
79
- - **Generated**: ${result.timestamp}
80
-
81
- ---
82
-
83
- ## Overall Score: ${result.overall.percentage}% (Grade: ${result.overall.grade})
84
-
85
- **Status**: ${result.overall.compliant ? '✅ Compliant' : '❌ Non-Compliant'}
86
-
87
- ---
88
-
89
- ## Axis Scores
90
-
91
- | Axis | Score | Weight | Status |
92
- |------|-------|--------|--------|
93
- ${Object.entries(result.scores)
94
- .map(([name, s]) => `| ${name} | ${s.percentage}% | ${s.weight}% | ${s.percentage >= 70 ? '✅' : '⚠️'} |`)
95
- .join('\n')}
96
-
97
- ---
98
-
99
- ## Violations (${result.violations.length})
100
-
101
- ${result.violations
102
- .slice(0, 30)
103
- .map(v => `- **[${v.axis}]** \`${v.id}\` (${v.severity}): ${v.message}`)
104
- .join('\n')}
105
-
106
- ---
107
-
108
- ## Top Recommendations
109
-
110
- ${result.recommendations
111
- .slice(0, 10)
112
- .map((r, i) => `${i + 1}. **[${r.axis}]** ${r.description}
113
- - Priority: ${r.priority}
114
- - Action: ${r.action}`)
115
- .join('\n\n')}
116
-
117
- ---
118
-
119
- *Report generated by Delta Analyzer v1.0.0*
120
- `;
121
- }
122
- }
123
- //# sourceMappingURL=report.generator.js.map
@@ -1,44 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Delta CLI Analyzer
4
- * @description Analyze projects against Delta Constitution
5
- * @version 1.0.0
6
- */
7
- import { Command } from 'commander';
8
- import { analyzeCommand } from './commands/analyze';
9
- import { reportCommand } from './commands/report';
10
- import { configCommand } from './commands/config';
11
- const program = new Command();
12
- program
13
- .name('delta-analyze')
14
- .description('Analyze projects against Delta Constitution')
15
- .version('1.0.0');
16
- // Analyze command
17
- program
18
- .command('analyze')
19
- .description('Analyze a project against Delta Constitution')
20
- .argument('<path>', 'Project path to analyze')
21
- .option('-l, --language <lang>', 'Project language', 'typescript')
22
- .option('-o, --output <format>', 'Output format (json|html|markdown)', 'json')
23
- .option('-d, --depth <level>', 'Analysis depth (quick|standard|deep)', 'standard')
24
- .option('--config <path>', 'Configuration file path')
25
- .option('--strict', 'Fail on any violation', false)
26
- .action(analyzeCommand);
27
- // Report command
28
- program
29
- .command('report')
30
- .description('Generate report from previous analysis')
31
- .argument('<analysis-file>', 'Previous analysis JSON file')
32
- .option('-t, --template <type>', 'Report template (html|markdown|pdf)', 'html')
33
- .option('-o, --output <path>', 'Output file path')
34
- .action(reportCommand);
35
- // Config command
36
- program
37
- .command('config')
38
- .description('Manage analyzer configuration')
39
- .option('--init', 'Initialize configuration file')
40
- .option('--show', 'Show current configuration')
41
- .option('--set <key=value>', 'Set configuration value')
42
- .action(configCommand);
43
- program.parse();
44
- //# sourceMappingURL=index.js.map
@@ -1,92 +0,0 @@
1
- /**
2
- * Project Scanner
3
- * @description Scans project structure and extracts metadata
4
- */
5
- import * as fs from 'fs/promises';
6
- import * as path from 'path';
7
- export class ProjectScanner {
8
- static async scan(projectPath, language) {
9
- const files = [];
10
- const directories = [];
11
- const totalSize = 0;
12
- // Scan directory recursively
13
- await this.scanDirectory(projectPath, '', files, directories, totalSize);
14
- // Detect project metadata
15
- const hasPackageJson = files.some(f => f.endsWith('package.json'));
16
- const hasTsConfig = files.some(f => f.endsWith('tsconfig.json'));
17
- const hasTests = files.some(f => f.includes('.test.') || f.includes('.spec.'));
18
- // Extract imports
19
- const imports = await this.extractImports(files, projectPath);
20
- return {
21
- path: projectPath,
22
- name: path.basename(projectPath),
23
- language,
24
- size: totalSize,
25
- fileCount: files.length,
26
- files,
27
- directories,
28
- imports,
29
- hasPackageJson,
30
- hasTsConfig,
31
- hasTests,
32
- };
33
- }
34
- static async scanDirectory(basePath, relativePath, files, directories, totalSize) {
35
- const fullPath = path.join(basePath, relativePath);
36
- try {
37
- const entries = await fs.readdir(fullPath, { withFileTypes: true });
38
- for (const entry of entries) {
39
- const entryRelativePath = path.join(relativePath, entry.name);
40
- // Skip node_modules and hidden directories
41
- if (entry.name === 'node_modules' || entry.name.startsWith('.')) {
42
- continue;
43
- }
44
- if (entry.isDirectory()) {
45
- directories.push(entryRelativePath);
46
- await this.scanDirectory(basePath, entryRelativePath, files, directories, totalSize);
47
- }
48
- else if (entry.isFile()) {
49
- // Only include source files
50
- if (this.isSourceFile(entry.name)) {
51
- files.push(entryRelativePath);
52
- const stats = await fs.stat(path.join(fullPath, entry.name));
53
- totalSize += stats.size;
54
- }
55
- }
56
- }
57
- }
58
- catch (error) {
59
- // Directory not accessible, skip
60
- }
61
- }
62
- static isSourceFile(filename) {
63
- const extensions = ['.ts', '.tsx', '.js', '.jsx', '.json', '.md'];
64
- return extensions.some(ext => filename.endsWith(ext));
65
- }
66
- static async extractImports(files, projectPath) {
67
- const imports = [];
68
- for (const file of files) {
69
- if (!file.endsWith('.ts') && !file.endsWith('.tsx'))
70
- continue;
71
- try {
72
- const content = await fs.readFile(path.join(projectPath, file), 'utf-8');
73
- const importMatches = content.match(/import\s+.*?\s+from\s+['"]([^'"]+)['"];?/g) || [];
74
- for (const match of importMatches) {
75
- const importPath = match.match(/from\s+['"]([^'"]+)['"]/)?.[1];
76
- if (importPath) {
77
- imports.push({
78
- source: file,
79
- target: importPath,
80
- type: importPath.startsWith('.') ? 'internal' : 'external',
81
- });
82
- }
83
- }
84
- }
85
- catch (error) {
86
- // Skip files that can't be read
87
- }
88
- }
89
- return imports;
90
- }
91
- }
92
- //# sourceMappingURL=project.scanner.js.map
@@ -1,42 +0,0 @@
1
- /**
2
- * Contracts Validator
3
- * @description Validates Contracts rules
4
- */
5
- export class ContractsValidator {
6
- static async validate(project, _options) {
7
- const violations = [];
8
- let score = 100;
9
- // Check for contract files
10
- const contractFiles = project.files.filter(f => f.includes('.contract.'));
11
- if (contractFiles.length === 0) {
12
- violations.push({
13
- id: 'CONTRACT-001',
14
- severity: 'error',
15
- message: 'No contract files found',
16
- rule: 'Contracts Required',
17
- });
18
- score -= 30;
19
- }
20
- // Check for required contracts
21
- const requiredContracts = ['auth', 'upload', 'projects', 'analysis'];
22
- for (const contract of requiredContracts) {
23
- const hasContract = contractFiles.some(f => f.includes(`${contract}.contract`));
24
- if (!hasContract) {
25
- violations.push({
26
- id: 'CONTRACT-002',
27
- severity: 'warning',
28
- message: `Missing ${contract}.contract.ts`,
29
- rule: 'Required Contracts',
30
- });
31
- score -= 10;
32
- }
33
- }
34
- return {
35
- score: Math.max(0, score),
36
- maxScore: 100,
37
- percentage: Math.max(0, score),
38
- violations,
39
- };
40
- }
41
- }
42
- //# sourceMappingURL=contracts.validator.js.map
@@ -1,40 +0,0 @@
1
- /**
2
- * Maintainability Validator
3
- * @description Validates Maintainability rules
4
- */
5
- export class MaintainabilityValidator {
6
- static async validate(project, _options) {
7
- const violations = [];
8
- let score = 100;
9
- // Check for tests
10
- const testFiles = project.files.filter(f => f.includes('.test.') || f.includes('.spec.'));
11
- const testRatio = testFiles.length / (project.fileCount || 1);
12
- if (testRatio < 0.1) {
13
- violations.push({
14
- id: 'MAINT-TEST-001',
15
- severity: 'warning',
16
- message: `Low test coverage: ${(testRatio * 100).toFixed(1)}% of files are tests`,
17
- rule: 'Testing Required',
18
- });
19
- score -= 20;
20
- }
21
- // Check for documentation
22
- const hasReadme = project.files.some(f => f.toLowerCase() === 'readme.md' || f.toLowerCase().endsWith('/readme.md'));
23
- if (!hasReadme) {
24
- violations.push({
25
- id: 'MAINT-DOC-001',
26
- severity: 'warning',
27
- message: 'No README.md found',
28
- rule: 'Documentation Required',
29
- });
30
- score -= 10;
31
- }
32
- return {
33
- score: Math.max(0, score),
34
- maxScore: 100,
35
- percentage: Math.max(0, score),
36
- violations,
37
- };
38
- }
39
- }
40
- //# sourceMappingURL=maintainability.validator.js.map
@@ -1,39 +0,0 @@
1
- /**
2
- * Observability Validator
3
- * @description Validates Observability rules
4
- */
5
- export class ObservabilityValidator {
6
- static async validate(project, _options) {
7
- const violations = [];
8
- let score = 100;
9
- // Check for health endpoint
10
- const hasHealthEndpoint = project.files.some(f => f.includes('health') || f.includes('ready') || f.includes('live'));
11
- if (!hasHealthEndpoint) {
12
- violations.push({
13
- id: 'OBS-HEALTH-001',
14
- severity: 'warning',
15
- message: 'No health check endpoint found',
16
- rule: 'Health Checks Required',
17
- });
18
- score -= 20;
19
- }
20
- // Check for logging
21
- const hasLogging = project.files.some(f => f.includes('logger') || f.includes('log'));
22
- if (!hasLogging) {
23
- violations.push({
24
- id: 'OBS-LOG-001',
25
- severity: 'warning',
26
- message: 'No logging implementation found',
27
- rule: 'Structured Logging Required',
28
- });
29
- score -= 20;
30
- }
31
- return {
32
- score: Math.max(0, score),
33
- maxScore: 100,
34
- percentage: Math.max(0, score),
35
- violations,
36
- };
37
- }
38
- }
39
- //# sourceMappingURL=observability.validator.js.map
@@ -1,42 +0,0 @@
1
- /**
2
- * Performance Validator
3
- * @description Validates performance rules
4
- */
5
- export class PerformanceValidator {
6
- static async validate(project, _options) {
7
- const violations = [];
8
- let score = 100;
9
- // Check for lazy loading patterns
10
- const hasDynamicImports = project.files.some(f => {
11
- // Would check file content for dynamic imports
12
- return f.includes('dynamic') || f.includes('lazy');
13
- });
14
- if (!hasDynamicImports && project.fileCount > 50) {
15
- violations.push({
16
- id: 'PERF-LAZY-001',
17
- severity: 'warning',
18
- message: 'No lazy loading patterns detected in large project',
19
- rule: 'Lazy Loading Recommended',
20
- });
21
- score -= 10;
22
- }
23
- // Check for caching implementation
24
- const hasCaching = project.files.some(f => f.includes('cache') || f.includes('redis') || f.includes('swr'));
25
- if (!hasCaching) {
26
- violations.push({
27
- id: 'PERF-CACHE-001',
28
- severity: 'warning',
29
- message: 'No caching implementation found',
30
- rule: 'Caching Layer Recommended',
31
- });
32
- score -= 15;
33
- }
34
- return {
35
- score: Math.max(0, score),
36
- maxScore: 100,
37
- percentage: Math.max(0, score),
38
- violations,
39
- };
40
- }
41
- }
42
- //# sourceMappingURL=performance.validator.js.map
@@ -1,66 +0,0 @@
1
- /**
2
- * Security Validator
3
- * @description Validates security rules against project
4
- */
5
- export class SecurityValidator {
6
- static async validate(project, options) {
7
- const violations = [];
8
- let score = 100;
9
- // Check 1: Policy Registry exists
10
- const hasPolicyRegistry = project.directories.some(d => d.includes('modules') && d.includes('policies'));
11
- if (!hasPolicyRegistry) {
12
- violations.push({
13
- id: 'SEC-POL-002',
14
- severity: 'error',
15
- message: 'Missing policies/ directory in modules',
16
- rule: 'Policy Registry Required',
17
- });
18
- score -= 15;
19
- }
20
- // Check 2: Audit logging
21
- const hasAuditFile = project.files.some(f => f.includes('audit') || f.includes('logger'));
22
- if (!hasAuditFile) {
23
- violations.push({
24
- id: 'SEC-AUDIT-001',
25
- severity: 'warning',
26
- message: 'No audit logging implementation found',
27
- rule: 'Audit Logging Required',
28
- });
29
- score -= 10;
30
- }
31
- // Check 3: Rate limiting
32
- const hasRateLimit = project.files.some(f => f.includes('rate') || f.includes('limit'));
33
- if (!hasRateLimit) {
34
- violations.push({
35
- id: 'SEC-RATE-001',
36
- severity: 'warning',
37
- message: 'No rate limiting implementation found',
38
- rule: 'Rate Limiting Required',
39
- });
40
- score -= 10;
41
- }
42
- // Check 4: Security directory
43
- const hasSecurityDir = project.directories.some(d => d.includes('security'));
44
- if (!hasSecurityDir) {
45
- violations.push({
46
- id: 'SEC-DIR-001',
47
- severity: 'error',
48
- message: 'Missing security/ directory',
49
- rule: 'Security Layer Required',
50
- });
51
- score -= 15;
52
- }
53
- // Deep scan for Fail-Open patterns (if requested)
54
- if (options.depth === 'deep') {
55
- // This would scan file contents for fail-open patterns
56
- // For now, just check structure
57
- }
58
- return {
59
- score: Math.max(0, score),
60
- maxScore: 100,
61
- percentage: Math.max(0, score),
62
- violations,
63
- };
64
- }
65
- }
66
- //# sourceMappingURL=security.validator.js.map