@oalacea/daemon 0.5.0 → 0.6.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/LICENSE +23 -23
- package/README.md +147 -141
- package/bin/Dockerfile +75 -74
- package/dist/cli/cli.d.ts +42 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +89 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/detect.command.d.ts +39 -0
- package/dist/cli/commands/detect.command.d.ts.map +1 -0
- package/dist/cli/commands/detect.command.js +111 -0
- package/dist/cli/commands/detect.command.js.map +1 -0
- package/dist/cli/commands/index.d.ts +14 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +11 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.command.d.ts +41 -0
- package/dist/cli/commands/init.command.d.ts.map +1 -0
- package/dist/cli/commands/init.command.js +111 -0
- package/dist/cli/commands/init.command.js.map +1 -0
- package/dist/cli/commands/test.command.d.ts +58 -0
- package/dist/cli/commands/test.command.d.ts.map +1 -0
- package/dist/cli/commands/test.command.js +180 -0
- package/dist/cli/commands/test.command.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config/daemon.config.d.ts +32 -0
- package/dist/core/config/daemon.config.d.ts.map +1 -0
- package/dist/core/config/daemon.config.js +83 -0
- package/dist/core/config/daemon.config.js.map +1 -0
- package/dist/core/config/index.d.ts +5 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +5 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/constants.d.ts +36 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +56 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/types/common.types.d.ts +250 -0
- package/dist/core/types/common.types.d.ts.map +1 -0
- package/dist/core/types/common.types.js +7 -0
- package/dist/core/types/common.types.js.map +1 -0
- package/dist/core/types/detection.types.d.ts +232 -0
- package/dist/core/types/detection.types.d.ts.map +1 -0
- package/dist/core/types/detection.types.js +22 -0
- package/dist/core/types/detection.types.js.map +1 -0
- package/dist/core/types/docker.types.d.ts +322 -0
- package/dist/core/types/docker.types.d.ts.map +1 -0
- package/dist/core/types/docker.types.js +7 -0
- package/dist/core/types/docker.types.js.map +1 -0
- package/dist/core/types/index.d.ts +11 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +7 -0
- package/dist/core/types/index.js.map +1 -0
- package/dist/core/types/project.types.d.ts +74 -0
- package/dist/core/types/project.types.d.ts.map +1 -0
- package/dist/core/types/project.types.js +7 -0
- package/dist/core/types/project.types.js.map +1 -0
- package/dist/core/types/shared.types.d.ts +118 -0
- package/dist/core/types/shared.types.d.ts.map +1 -0
- package/dist/core/types/shared.types.js +7 -0
- package/dist/core/types/shared.types.js.map +1 -0
- package/dist/core/types/test.types.d.ts +230 -0
- package/dist/core/types/test.types.d.ts.map +1 -0
- package/dist/core/types/test.types.js +7 -0
- package/dist/core/types/test.types.js.map +1 -0
- package/dist/services/detection/__tests__/framework-detector.test.d.ts +5 -0
- package/dist/services/detection/__tests__/framework-detector.test.d.ts.map +1 -0
- package/dist/services/detection/__tests__/framework-detector.test.js +52 -0
- package/dist/services/detection/__tests__/framework-detector.test.js.map +1 -0
- package/dist/services/detection/framework-detector.d.ts +179 -0
- package/dist/services/detection/framework-detector.d.ts.map +1 -0
- package/dist/services/detection/framework-detector.js +636 -0
- package/dist/services/detection/framework-detector.js.map +1 -0
- package/dist/services/detection/index.d.ts +10 -0
- package/dist/services/detection/index.d.ts.map +1 -0
- package/dist/services/detection/index.js +7 -0
- package/dist/services/detection/index.js.map +1 -0
- package/dist/services/docker/__tests__/docker-manager.test.d.ts +5 -0
- package/dist/services/docker/__tests__/docker-manager.test.d.ts.map +1 -0
- package/dist/services/docker/__tests__/docker-manager.test.js +67 -0
- package/dist/services/docker/__tests__/docker-manager.test.js.map +1 -0
- package/dist/services/docker/docker-manager.d.ts +157 -0
- package/dist/services/docker/docker-manager.d.ts.map +1 -0
- package/dist/services/docker/docker-manager.js +516 -0
- package/dist/services/docker/docker-manager.js.map +1 -0
- package/dist/services/docker/index.d.ts +9 -0
- package/dist/services/docker/index.d.ts.map +1 -0
- package/dist/services/docker/index.js +9 -0
- package/dist/services/docker/index.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +8 -0
- package/dist/services/index.js.map +1 -0
- package/dist/shared/errors/__tests__/base.error.test.d.ts +5 -0
- package/dist/shared/errors/__tests__/base.error.test.d.ts.map +1 -0
- package/dist/shared/errors/__tests__/base.error.test.js +61 -0
- package/dist/shared/errors/__tests__/base.error.test.js.map +1 -0
- package/dist/shared/errors/__tests__/command.error.test.d.ts +5 -0
- package/dist/shared/errors/__tests__/command.error.test.d.ts.map +1 -0
- package/dist/shared/errors/__tests__/command.error.test.js +62 -0
- package/dist/shared/errors/__tests__/command.error.test.js.map +1 -0
- package/dist/shared/errors/__tests__/file.error.test.d.ts +5 -0
- package/dist/shared/errors/__tests__/file.error.test.d.ts.map +1 -0
- package/dist/shared/errors/__tests__/file.error.test.js +75 -0
- package/dist/shared/errors/__tests__/file.error.test.js.map +1 -0
- package/dist/shared/errors/__tests__/index.test.d.ts +5 -0
- package/dist/shared/errors/__tests__/index.test.d.ts.map +1 -0
- package/dist/shared/errors/__tests__/index.test.js +62 -0
- package/dist/shared/errors/__tests__/index.test.js.map +1 -0
- package/dist/shared/errors/__tests__/validation.error.test.d.ts +5 -0
- package/dist/shared/errors/__tests__/validation.error.test.d.ts.map +1 -0
- package/dist/shared/errors/__tests__/validation.error.test.js +79 -0
- package/dist/shared/errors/__tests__/validation.error.test.js.map +1 -0
- package/dist/shared/errors/base.error.d.ts +54 -0
- package/dist/shared/errors/base.error.d.ts.map +1 -0
- package/dist/shared/errors/base.error.js +85 -0
- package/dist/shared/errors/base.error.js.map +1 -0
- package/dist/shared/errors/command.error.d.ts +58 -0
- package/dist/shared/errors/command.error.d.ts.map +1 -0
- package/dist/shared/errors/command.error.js +102 -0
- package/dist/shared/errors/command.error.js.map +1 -0
- package/dist/shared/errors/detection.error.d.ts +42 -0
- package/dist/shared/errors/detection.error.d.ts.map +1 -0
- package/dist/shared/errors/detection.error.js +82 -0
- package/dist/shared/errors/detection.error.js.map +1 -0
- package/dist/shared/errors/docker.error.d.ts +142 -0
- package/dist/shared/errors/docker.error.d.ts.map +1 -0
- package/dist/shared/errors/docker.error.js +172 -0
- package/dist/shared/errors/docker.error.js.map +1 -0
- package/dist/shared/errors/file.error.d.ts +66 -0
- package/dist/shared/errors/file.error.d.ts.map +1 -0
- package/dist/shared/errors/file.error.js +93 -0
- package/dist/shared/errors/file.error.js.map +1 -0
- package/dist/shared/errors/index.d.ts +56 -0
- package/dist/shared/errors/index.d.ts.map +1 -0
- package/dist/shared/errors/index.js +86 -0
- package/dist/shared/errors/index.js.map +1 -0
- package/dist/shared/errors/validation.error.d.ts +67 -0
- package/dist/shared/errors/validation.error.d.ts.map +1 -0
- package/dist/shared/errors/validation.error.js +97 -0
- package/dist/shared/errors/validation.error.js.map +1 -0
- package/dist/shared/templates/index.d.ts +2 -0
- package/dist/shared/templates/index.d.ts.map +1 -0
- package/dist/shared/templates/index.js +2 -0
- package/dist/shared/templates/index.js.map +1 -0
- package/dist/shared/templates/prompt-builder.d.ts +2 -0
- package/dist/shared/templates/prompt-builder.d.ts.map +1 -0
- package/dist/shared/templates/prompt-builder.js +2 -0
- package/dist/shared/templates/prompt-builder.js.map +1 -0
- package/dist/shared/templates/template-engine.d.ts +2 -0
- package/dist/shared/templates/template-engine.d.ts.map +1 -0
- package/dist/shared/templates/template-engine.js +2 -0
- package/dist/shared/templates/template-engine.js.map +1 -0
- package/dist/shared/utils/__tests__/command-executor.test.d.ts +5 -0
- package/dist/shared/utils/__tests__/command-executor.test.d.ts.map +1 -0
- package/dist/shared/utils/__tests__/command-executor.test.js +45 -0
- package/dist/shared/utils/__tests__/command-executor.test.js.map +1 -0
- package/dist/shared/utils/__tests__/file-helper.test.d.ts +5 -0
- package/dist/shared/utils/__tests__/file-helper.test.d.ts.map +1 -0
- package/dist/shared/utils/__tests__/file-helper.test.js +71 -0
- package/dist/shared/utils/__tests__/file-helper.test.js.map +1 -0
- package/dist/shared/utils/__tests__/logger.test.d.ts +5 -0
- package/dist/shared/utils/__tests__/logger.test.d.ts.map +1 -0
- package/dist/shared/utils/__tests__/logger.test.js +83 -0
- package/dist/shared/utils/__tests__/logger.test.js.map +1 -0
- package/dist/shared/utils/command-executer.d.ts +2 -0
- package/dist/shared/utils/command-executer.d.ts.map +1 -0
- package/dist/shared/utils/command-executer.js +2 -0
- package/dist/shared/utils/command-executer.js.map +1 -0
- package/dist/shared/utils/command-executor.d.ts +255 -0
- package/dist/shared/utils/command-executor.d.ts.map +1 -0
- package/dist/shared/utils/command-executor.js +287 -0
- package/dist/shared/utils/command-executor.js.map +1 -0
- package/dist/shared/utils/file-helper.d.ts +86 -0
- package/dist/shared/utils/file-helper.d.ts.map +1 -0
- package/dist/shared/utils/file-helper.js +323 -0
- package/dist/shared/utils/file-helper.js.map +1 -0
- package/dist/shared/utils/index.d.ts +9 -0
- package/dist/shared/utils/index.d.ts.map +1 -0
- package/dist/shared/utils/index.js +9 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/logger.d.ts +163 -0
- package/dist/shared/utils/logger.d.ts.map +1 -0
- package/dist/shared/utils/logger.js +389 -0
- package/dist/shared/utils/logger.js.map +1 -0
- package/package.json +53 -34
- package/prompts/DEPS_EFFICIENCY.md +558 -558
- package/prompts/E2E.md +491 -491
- package/prompts/EXECUTE.md +1060 -1060
- package/prompts/INTEGRATION_API.md +484 -484
- package/prompts/INTEGRATION_DB.md +425 -425
- package/prompts/PERF_API.md +433 -433
- package/prompts/PERF_DB.md +430 -430
- package/prompts/PERF_FRONT.md +357 -357
- package/prompts/REMEDIATION.md +482 -482
- package/prompts/UNIT.md +260 -260
- package/templates/README.md +38 -38
- package/templates/k6/load-test.js +54 -54
- package/templates/playwright/e2e.spec.ts +61 -61
- package/templates/vitest/angular-component.test.ts +38 -38
- package/templates/vitest/api.test.ts +51 -51
- package/templates/vitest/component.test.ts +27 -27
- package/templates/vitest/hook.test.ts +36 -36
- package/templates/vitest/solid-component.test.ts +34 -34
- package/templates/vitest/svelte-component.test.ts +33 -33
- package/templates/vitest/vue-component.test.ts +39 -39
- package/CHANGELOG.md +0 -38
- package/agents/deps-analyzer.js +0 -366
- package/agents/detector.js +0 -570
- package/agents/fix-engine.js +0 -305
- package/agents/lighthouse-scanner.js +0 -405
- package/agents/perf-analyzer.js +0 -294
- package/agents/perf-front-analyzer.js +0 -229
- package/agents/test-generator.js +0 -387
- package/agents/test-runner.js +0 -318
- package/bin/cli.js +0 -449
- package/lib/config.js +0 -250
- package/lib/docker.js +0 -207
- package/lib/reporter.js +0 -297
- package/scripts/dev.js +0 -106
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect Command
|
|
3
|
+
*
|
|
4
|
+
* Detects and displays project framework and tools.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/detect
|
|
7
|
+
*/
|
|
8
|
+
export interface DetectOptions {
|
|
9
|
+
/** Output format (text, json) */
|
|
10
|
+
format?: 'text' | 'json';
|
|
11
|
+
/** Verbose output */
|
|
12
|
+
verbose?: boolean;
|
|
13
|
+
/** Include alternatives */
|
|
14
|
+
includeAlternatives?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Detect command for Daemon
|
|
18
|
+
*/
|
|
19
|
+
export declare class DetectCommand {
|
|
20
|
+
private readonly detector;
|
|
21
|
+
constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Execute the detect command
|
|
24
|
+
*/
|
|
25
|
+
execute(args: string[]): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Parse command line arguments
|
|
28
|
+
*/
|
|
29
|
+
private parseArgs;
|
|
30
|
+
/**
|
|
31
|
+
* Display detection results in text format
|
|
32
|
+
*/
|
|
33
|
+
private displayResults;
|
|
34
|
+
/**
|
|
35
|
+
* Format a detection result with confidence indicator
|
|
36
|
+
*/
|
|
37
|
+
private formatResult;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=detect.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/detect.command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAQH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;;IAM7C;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5C;;OAEG;IACH,OAAO,CAAC,SAAS;IAyBjB;;OAEG;IACH,OAAO,CAAC,cAAc;IA0CtB;;OAEG;IACH,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Detect Command
|
|
3
|
+
*
|
|
4
|
+
* Detects and displays project framework and tools.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/detect
|
|
7
|
+
*/
|
|
8
|
+
import { createLogger } from '../../shared/utils/logger.js';
|
|
9
|
+
import { FrameworkDetector } from '../../services/detection/framework-detector.js';
|
|
10
|
+
const logger = createLogger('DetectCommand');
|
|
11
|
+
/**
|
|
12
|
+
* Detect command for Daemon
|
|
13
|
+
*/
|
|
14
|
+
export class DetectCommand {
|
|
15
|
+
detector;
|
|
16
|
+
constructor() {
|
|
17
|
+
this.detector = new FrameworkDetector();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Execute the detect command
|
|
21
|
+
*/
|
|
22
|
+
async execute(args) {
|
|
23
|
+
const options = this.parseArgs(args);
|
|
24
|
+
try {
|
|
25
|
+
const results = await this.detector.detectAll(process.cwd(), options);
|
|
26
|
+
if (options.format === 'json') {
|
|
27
|
+
console.log(JSON.stringify(results, null, 2));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
this.displayResults(results, options);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
logger.error('Detection failed', error);
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Parse command line arguments
|
|
40
|
+
*/
|
|
41
|
+
parseArgs(args) {
|
|
42
|
+
const options = {
|
|
43
|
+
format: 'text',
|
|
44
|
+
verbose: false,
|
|
45
|
+
includeAlternatives: false,
|
|
46
|
+
};
|
|
47
|
+
for (const arg of args) {
|
|
48
|
+
switch (arg) {
|
|
49
|
+
case '--json':
|
|
50
|
+
options.format = 'json';
|
|
51
|
+
break;
|
|
52
|
+
case '--verbose':
|
|
53
|
+
case '-v':
|
|
54
|
+
options.verbose = true;
|
|
55
|
+
break;
|
|
56
|
+
case '--alternatives':
|
|
57
|
+
options.includeAlternatives = true;
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return options;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Display detection results in text format
|
|
65
|
+
*/
|
|
66
|
+
displayResults(results, options) {
|
|
67
|
+
console.log('\n🔍 Project Detection Results\n');
|
|
68
|
+
// Framework
|
|
69
|
+
console.log(`Framework: ${this.formatResult(results.framework.value, results.framework.confidence)}`);
|
|
70
|
+
if (results.framework.alternatives && options.includeAlternatives) {
|
|
71
|
+
for (const alt of results.framework.alternatives) {
|
|
72
|
+
console.log(` └─ Alternative: ${alt.value} (${Math.round(alt.confidence * 100)}%)`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Language
|
|
76
|
+
console.log(`Language: ${this.formatResult(results.language.value, results.language.confidence)}`);
|
|
77
|
+
// Test Runner
|
|
78
|
+
console.log(`Test Runner: ${this.formatResult(results.testRunner.value, results.testRunner.confidence)}`);
|
|
79
|
+
// Database
|
|
80
|
+
if (results.database.value) {
|
|
81
|
+
console.log(`Database: ${this.formatResult(results.database.value, results.database.confidence)}`);
|
|
82
|
+
}
|
|
83
|
+
// Test counts
|
|
84
|
+
console.log(`\nExisting Tests: ${results.testCounts.total}`);
|
|
85
|
+
if (options.verbose && results.testCounts.total > 0) {
|
|
86
|
+
console.log(` - In src/: ${results.testCounts.inSrc}`);
|
|
87
|
+
console.log(` - Outside src/: ${results.testCounts.outsideSrc}`);
|
|
88
|
+
}
|
|
89
|
+
// Coverage
|
|
90
|
+
if (results.coverage) {
|
|
91
|
+
console.log(`\nCoverage: ${results.coverage.total.toFixed(1)}%`);
|
|
92
|
+
if (options.verbose) {
|
|
93
|
+
console.log(` - Lines: ${results.coverage.lines.toFixed(1)}%`);
|
|
94
|
+
console.log(` - Branches: ${results.coverage.branches.toFixed(1)}%`);
|
|
95
|
+
console.log(` - Functions: ${results.coverage.functions.toFixed(1)}%`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
console.log(`\nAnalysis completed in ${results.duration}ms`);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Format a detection result with confidence indicator
|
|
102
|
+
*/
|
|
103
|
+
formatResult(value, confidence) {
|
|
104
|
+
if (!value)
|
|
105
|
+
return 'Not detected';
|
|
106
|
+
const percentage = Math.round(confidence * 100);
|
|
107
|
+
const indicator = percentage >= 90 ? '✓' : percentage >= 70 ? '~' : '?';
|
|
108
|
+
return `${value} ${indicator} (${percentage}%)`;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=detect.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.command.js","sourceRoot":"","sources":["../../../src/cli/commands/detect.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all CLI commands for the Daemon toolkit.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands
|
|
7
|
+
*/
|
|
8
|
+
export { InitCommand } from './init.command.js';
|
|
9
|
+
export type { InitOptions } from './init.command.js';
|
|
10
|
+
export { DetectCommand } from './detect.command.js';
|
|
11
|
+
export type { DetectOptions } from './detect.command.js';
|
|
12
|
+
export { TestCommand } from './test.command.js';
|
|
13
|
+
export type { TestOptions } from './test.command.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Commands Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all CLI commands for the Daemon toolkit.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands
|
|
7
|
+
*/
|
|
8
|
+
export { InitCommand } from './init.command.js';
|
|
9
|
+
export { DetectCommand } from './detect.command.js';
|
|
10
|
+
export { TestCommand } from './test.command.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
3
|
+
*
|
|
4
|
+
* Initializes a project with Daemon testing toolkit.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/init
|
|
7
|
+
*/
|
|
8
|
+
export interface InitOptions {
|
|
9
|
+
/** Force overwrite existing files */
|
|
10
|
+
force?: boolean;
|
|
11
|
+
/** Skip framework detection */
|
|
12
|
+
skipDetection?: boolean;
|
|
13
|
+
/** Custom output directory */
|
|
14
|
+
output?: string;
|
|
15
|
+
/** Verbose output */
|
|
16
|
+
verbose?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Initialize command for Daemon
|
|
20
|
+
*/
|
|
21
|
+
export declare class InitCommand {
|
|
22
|
+
private readonly detector;
|
|
23
|
+
constructor();
|
|
24
|
+
/**
|
|
25
|
+
* Execute the init command
|
|
26
|
+
*/
|
|
27
|
+
execute(args: string[]): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Parse command line arguments
|
|
30
|
+
*/
|
|
31
|
+
private parseArgs;
|
|
32
|
+
/**
|
|
33
|
+
* Create Daemon configuration
|
|
34
|
+
*/
|
|
35
|
+
private createConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Create test directories
|
|
38
|
+
*/
|
|
39
|
+
private createDirectories;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=init.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+BAA+B;IAC/B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;;IAM7C;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B5C;;OAEG;IACH,OAAO,CAAC,SAAS;IA+BjB;;OAEG;YACW,YAAY;IAoB1B;;OAEG;YACW,iBAAiB;CAUhC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init Command
|
|
3
|
+
*
|
|
4
|
+
* Initializes a project with Daemon testing toolkit.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/init
|
|
7
|
+
*/
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { createLogger } from '../../shared/utils/logger.js';
|
|
10
|
+
import { fileHelper } from '../../shared/utils/file-helper.js';
|
|
11
|
+
import { FrameworkDetector } from '../../services/detection/framework-detector.js';
|
|
12
|
+
const logger = createLogger('InitCommand');
|
|
13
|
+
/**
|
|
14
|
+
* Initialize command for Daemon
|
|
15
|
+
*/
|
|
16
|
+
export class InitCommand {
|
|
17
|
+
detector;
|
|
18
|
+
constructor() {
|
|
19
|
+
this.detector = new FrameworkDetector();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Execute the init command
|
|
23
|
+
*/
|
|
24
|
+
async execute(args) {
|
|
25
|
+
logger.info('Initializing Daemon...');
|
|
26
|
+
const options = this.parseArgs(args);
|
|
27
|
+
try {
|
|
28
|
+
// Detect framework
|
|
29
|
+
let framework = 'Unknown';
|
|
30
|
+
if (!options.skipDetection) {
|
|
31
|
+
const result = await this.detector.detect(process.cwd());
|
|
32
|
+
framework = result.value ?? 'Unknown';
|
|
33
|
+
logger.info(`Detected framework: ${framework}`);
|
|
34
|
+
}
|
|
35
|
+
// Create daemon config
|
|
36
|
+
await this.createConfig(options);
|
|
37
|
+
// Create test directories
|
|
38
|
+
await this.createDirectories(options);
|
|
39
|
+
logger.success('Daemon initialized successfully!');
|
|
40
|
+
logger.info('Run "daemon detect" to see project details');
|
|
41
|
+
logger.info('Run "daemon test" to generate tests');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger.error('Failed to initialize Daemon', error);
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Parse command line arguments
|
|
50
|
+
*/
|
|
51
|
+
parseArgs(args) {
|
|
52
|
+
const options = {
|
|
53
|
+
force: false,
|
|
54
|
+
skipDetection: false,
|
|
55
|
+
verbose: false,
|
|
56
|
+
};
|
|
57
|
+
for (const arg of args) {
|
|
58
|
+
switch (arg) {
|
|
59
|
+
case '--force':
|
|
60
|
+
case '-f':
|
|
61
|
+
options.force = true;
|
|
62
|
+
break;
|
|
63
|
+
case '--skip-detection':
|
|
64
|
+
options.skipDetection = true;
|
|
65
|
+
break;
|
|
66
|
+
case '--verbose':
|
|
67
|
+
case '-v':
|
|
68
|
+
options.verbose = true;
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
if (arg.startsWith('--output=')) {
|
|
72
|
+
const value = arg.split('=')[1];
|
|
73
|
+
if (value)
|
|
74
|
+
options.output = value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return options;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create Daemon configuration
|
|
82
|
+
*/
|
|
83
|
+
async createConfig(options) {
|
|
84
|
+
const configPath = path.join(process.cwd(), 'daemon.config.json');
|
|
85
|
+
if (await fileHelper.exists(configPath) && !options.force) {
|
|
86
|
+
logger.warn('Daemon config already exists. Use --force to overwrite.');
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const config = {
|
|
90
|
+
version: '0.6.0',
|
|
91
|
+
testRunner: 'vitest',
|
|
92
|
+
e2eRunner: 'playwright',
|
|
93
|
+
performanceTool: 'k6',
|
|
94
|
+
generatedAt: new Date().toISOString(),
|
|
95
|
+
};
|
|
96
|
+
await fileHelper.writeJson(configPath, config);
|
|
97
|
+
logger.debug(`Created config: ${configPath}`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create test directories
|
|
101
|
+
*/
|
|
102
|
+
async createDirectories(options) {
|
|
103
|
+
const baseDir = options.output ?? path.join(process.cwd(), 'tests');
|
|
104
|
+
await fileHelper.ensureDir(baseDir);
|
|
105
|
+
await fileHelper.ensureDir(path.join(baseDir, 'unit'));
|
|
106
|
+
await fileHelper.ensureDir(path.join(baseDir, 'integration'));
|
|
107
|
+
await fileHelper.ensureDir(path.join(baseDir, 'e2e'));
|
|
108
|
+
logger.debug(`Created test directories in: ${baseDir}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=init.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.command.js","sourceRoot":"","sources":["../../../src/cli/commands/init.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Command
|
|
3
|
+
*
|
|
4
|
+
* Generates and runs tests for the project.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/test
|
|
7
|
+
*/
|
|
8
|
+
export interface TestOptions {
|
|
9
|
+
/** Generate tests only (don't run) */
|
|
10
|
+
generateOnly?: boolean;
|
|
11
|
+
/** Run existing tests only (don't generate) */
|
|
12
|
+
runOnly?: boolean;
|
|
13
|
+
/** Include coverage report */
|
|
14
|
+
coverage?: boolean;
|
|
15
|
+
/** Watch mode */
|
|
16
|
+
watch?: boolean;
|
|
17
|
+
/** Specific test file pattern */
|
|
18
|
+
pattern?: string;
|
|
19
|
+
/** Verbose output */
|
|
20
|
+
verbose?: boolean;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Test command for Daemon
|
|
24
|
+
*/
|
|
25
|
+
export declare class TestCommand {
|
|
26
|
+
private readonly detector;
|
|
27
|
+
private readonly docker;
|
|
28
|
+
constructor();
|
|
29
|
+
/**
|
|
30
|
+
* Execute the test command
|
|
31
|
+
*/
|
|
32
|
+
execute(args: string[]): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Parse command line arguments
|
|
35
|
+
*/
|
|
36
|
+
private parseArgs;
|
|
37
|
+
/**
|
|
38
|
+
* Setup Docker container for testing
|
|
39
|
+
*/
|
|
40
|
+
private setupDocker;
|
|
41
|
+
/**
|
|
42
|
+
* Generate tests for the project
|
|
43
|
+
*/
|
|
44
|
+
private generateTests;
|
|
45
|
+
/**
|
|
46
|
+
* Run tests for the project
|
|
47
|
+
*/
|
|
48
|
+
private runTests;
|
|
49
|
+
/**
|
|
50
|
+
* Get the test runner for the framework
|
|
51
|
+
*/
|
|
52
|
+
private getTestRunner;
|
|
53
|
+
/**
|
|
54
|
+
* Build the test command
|
|
55
|
+
*/
|
|
56
|
+
private buildTestCommand;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=test.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.command.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AASH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iBAAiB;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;;IAOvC;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B5C;;OAEG;IACH,OAAO,CAAC,SAAS;IA0CjB;;OAEG;YACW,WAAW;IAazB;;OAEG;YACW,aAAa;IAS3B;;OAEG;YACW,QAAQ;IAwBtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAqBzB"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Command
|
|
3
|
+
*
|
|
4
|
+
* Generates and runs tests for the project.
|
|
5
|
+
*
|
|
6
|
+
* @module cli/commands/test
|
|
7
|
+
*/
|
|
8
|
+
import { createLogger } from '../../shared/utils/logger.js';
|
|
9
|
+
import { FrameworkDetector } from '../../services/detection/framework-detector.js';
|
|
10
|
+
import { DockerManager } from '../../services/docker/docker-manager.js';
|
|
11
|
+
const logger = createLogger('TestCommand');
|
|
12
|
+
/**
|
|
13
|
+
* Test command for Daemon
|
|
14
|
+
*/
|
|
15
|
+
export class TestCommand {
|
|
16
|
+
detector;
|
|
17
|
+
docker;
|
|
18
|
+
constructor() {
|
|
19
|
+
this.detector = new FrameworkDetector();
|
|
20
|
+
this.docker = new DockerManager();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Execute the test command
|
|
24
|
+
*/
|
|
25
|
+
async execute(args) {
|
|
26
|
+
const options = this.parseArgs(args);
|
|
27
|
+
try {
|
|
28
|
+
// Detect framework first
|
|
29
|
+
const detection = await this.detector.detect(process.cwd());
|
|
30
|
+
const framework = detection.value ?? 'Unknown';
|
|
31
|
+
logger.info(`Framework detected: ${framework}`);
|
|
32
|
+
// Setup Docker if needed
|
|
33
|
+
if (!options.runOnly) {
|
|
34
|
+
await this.setupDocker();
|
|
35
|
+
}
|
|
36
|
+
// Generate tests if needed
|
|
37
|
+
if (!options.runOnly) {
|
|
38
|
+
await this.generateTests(framework, options);
|
|
39
|
+
}
|
|
40
|
+
// Run tests
|
|
41
|
+
if (!options.generateOnly) {
|
|
42
|
+
await this.runTests(framework, options);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
logger.error('Test execution failed', error);
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse command line arguments
|
|
52
|
+
*/
|
|
53
|
+
parseArgs(args) {
|
|
54
|
+
const options = {
|
|
55
|
+
generateOnly: false,
|
|
56
|
+
runOnly: false,
|
|
57
|
+
coverage: false,
|
|
58
|
+
watch: false,
|
|
59
|
+
verbose: false,
|
|
60
|
+
};
|
|
61
|
+
for (const arg of args) {
|
|
62
|
+
switch (arg) {
|
|
63
|
+
case '--generate-only':
|
|
64
|
+
case '-g':
|
|
65
|
+
options.generateOnly = true;
|
|
66
|
+
break;
|
|
67
|
+
case '--run-only':
|
|
68
|
+
case '-r':
|
|
69
|
+
options.runOnly = true;
|
|
70
|
+
break;
|
|
71
|
+
case '--coverage':
|
|
72
|
+
case '-c':
|
|
73
|
+
options.coverage = true;
|
|
74
|
+
break;
|
|
75
|
+
case '--watch':
|
|
76
|
+
case '-w':
|
|
77
|
+
options.watch = true;
|
|
78
|
+
break;
|
|
79
|
+
case '--verbose':
|
|
80
|
+
case '-v':
|
|
81
|
+
options.verbose = true;
|
|
82
|
+
break;
|
|
83
|
+
default:
|
|
84
|
+
if (arg.startsWith('--pattern=')) {
|
|
85
|
+
const value = arg.split('=')[1];
|
|
86
|
+
if (value)
|
|
87
|
+
options.pattern = value;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return options;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Setup Docker container for testing
|
|
95
|
+
*/
|
|
96
|
+
async setupDocker() {
|
|
97
|
+
logger.info('Setting up Docker container...');
|
|
98
|
+
const result = await this.docker.setup({
|
|
99
|
+
silent: false,
|
|
100
|
+
onBuildStart: () => logger.info('Building Docker image...'),
|
|
101
|
+
onBuildComplete: () => logger.success('Docker image built'),
|
|
102
|
+
onBuildError: (err) => logger.error('Docker build failed', err),
|
|
103
|
+
});
|
|
104
|
+
logger.debug(`Docker status: ${result.status} (${result.duration}ms)`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate tests for the project
|
|
108
|
+
*/
|
|
109
|
+
async generateTests(_framework, _options) {
|
|
110
|
+
logger.info('Generating tests...');
|
|
111
|
+
// TODO: Implement test generation logic
|
|
112
|
+
// This will use the TestGenerator service
|
|
113
|
+
logger.success('Tests generated');
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Run tests for the project
|
|
117
|
+
*/
|
|
118
|
+
async runTests(framework, options) {
|
|
119
|
+
logger.info('Running tests...');
|
|
120
|
+
const testRunner = this.getTestRunner(framework);
|
|
121
|
+
const command = this.buildTestCommand(testRunner, options);
|
|
122
|
+
const result = await this.docker.exec(command, {
|
|
123
|
+
timeout: 300000, // 5 minutes
|
|
124
|
+
});
|
|
125
|
+
if (result.success) {
|
|
126
|
+
logger.success('Tests passed');
|
|
127
|
+
if (options.verbose && result.stdout) {
|
|
128
|
+
console.log(result.stdout);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
logger.error('Tests failed');
|
|
133
|
+
if (result.stderr) {
|
|
134
|
+
console.error(result.stderr);
|
|
135
|
+
}
|
|
136
|
+
throw new Error('Test execution failed');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get the test runner for the framework
|
|
141
|
+
*/
|
|
142
|
+
getTestRunner(framework) {
|
|
143
|
+
switch (framework) {
|
|
144
|
+
case 'Next.js':
|
|
145
|
+
case 'Remix':
|
|
146
|
+
case 'SvelteKit':
|
|
147
|
+
case 'Vite + React':
|
|
148
|
+
case 'Vite + Vue':
|
|
149
|
+
case 'React':
|
|
150
|
+
case 'Vue':
|
|
151
|
+
case 'Svelte':
|
|
152
|
+
case 'Angular':
|
|
153
|
+
return 'vitest';
|
|
154
|
+
case 'NestJS':
|
|
155
|
+
return 'jest';
|
|
156
|
+
default:
|
|
157
|
+
return 'vitest';
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Build the test command
|
|
162
|
+
*/
|
|
163
|
+
buildTestCommand(runner, options) {
|
|
164
|
+
const parts = ['npx', runner, 'run'];
|
|
165
|
+
if (options.coverage) {
|
|
166
|
+
parts.push('--coverage');
|
|
167
|
+
}
|
|
168
|
+
if (options.watch) {
|
|
169
|
+
parts.push('--watch');
|
|
170
|
+
}
|
|
171
|
+
if (options.pattern) {
|
|
172
|
+
parts.push('--pattern', options.pattern);
|
|
173
|
+
}
|
|
174
|
+
if (options.verbose) {
|
|
175
|
+
parts.push('--verbose');
|
|
176
|
+
}
|
|
177
|
+
return parts.join(' ');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=test.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.command.js","sourceRoot":"","sources":["../../../src/cli/commands/test.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;AAC5B,MAAM,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|