@liendev/core 0.19.5
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/README.md +336 -0
- package/dist/config/loader.d.ts +12 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +46 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/merge.d.ts +20 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +71 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/migration-manager.d.ts +46 -0
- package/dist/config/migration-manager.d.ts.map +1 -0
- package/dist/config/migration-manager.js +119 -0
- package/dist/config/migration-manager.js.map +1 -0
- package/dist/config/migration.d.ts +20 -0
- package/dist/config/migration.d.ts.map +1 -0
- package/dist/config/migration.js +155 -0
- package/dist/config/migration.js.map +1 -0
- package/dist/config/schema.d.ts +101 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +58 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/service.d.ts +122 -0
- package/dist/config/service.d.ts.map +1 -0
- package/dist/config/service.js +477 -0
- package/dist/config/service.js.map +1 -0
- package/dist/constants.d.ts +20 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +43 -0
- package/dist/constants.js.map +1 -0
- package/dist/embeddings/cache.d.ts +45 -0
- package/dist/embeddings/cache.d.ts.map +1 -0
- package/dist/embeddings/cache.js +109 -0
- package/dist/embeddings/cache.js.map +1 -0
- package/dist/embeddings/local.d.ts +10 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +63 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/embeddings/types.d.ts +9 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +5 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/errors/codes.d.ts +18 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +25 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/index.d.ts +85 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +134 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/frameworks/detector-service.d.ts +59 -0
- package/dist/frameworks/detector-service.d.ts.map +1 -0
- package/dist/frameworks/detector-service.js +219 -0
- package/dist/frameworks/detector-service.js.map +1 -0
- package/dist/frameworks/laravel/config.d.ts +6 -0
- package/dist/frameworks/laravel/config.d.ts.map +1 -0
- package/dist/frameworks/laravel/config.js +68 -0
- package/dist/frameworks/laravel/config.js.map +1 -0
- package/dist/frameworks/laravel/detector.d.ts +6 -0
- package/dist/frameworks/laravel/detector.d.ts.map +1 -0
- package/dist/frameworks/laravel/detector.js +96 -0
- package/dist/frameworks/laravel/detector.js.map +1 -0
- package/dist/frameworks/nodejs/config.d.ts +6 -0
- package/dist/frameworks/nodejs/config.d.ts.map +1 -0
- package/dist/frameworks/nodejs/config.js +57 -0
- package/dist/frameworks/nodejs/config.js.map +1 -0
- package/dist/frameworks/nodejs/detector.d.ts +6 -0
- package/dist/frameworks/nodejs/detector.d.ts.map +1 -0
- package/dist/frameworks/nodejs/detector.js +77 -0
- package/dist/frameworks/nodejs/detector.js.map +1 -0
- package/dist/frameworks/php/config.d.ts +6 -0
- package/dist/frameworks/php/config.d.ts.map +1 -0
- package/dist/frameworks/php/config.js +53 -0
- package/dist/frameworks/php/config.js.map +1 -0
- package/dist/frameworks/php/detector.d.ts +7 -0
- package/dist/frameworks/php/detector.d.ts.map +1 -0
- package/dist/frameworks/php/detector.js +101 -0
- package/dist/frameworks/php/detector.js.map +1 -0
- package/dist/frameworks/registry.d.ts +20 -0
- package/dist/frameworks/registry.d.ts.map +1 -0
- package/dist/frameworks/registry.js +38 -0
- package/dist/frameworks/registry.js.map +1 -0
- package/dist/frameworks/shopify/config.d.ts +6 -0
- package/dist/frameworks/shopify/config.d.ts.map +1 -0
- package/dist/frameworks/shopify/config.js +50 -0
- package/dist/frameworks/shopify/config.js.map +1 -0
- package/dist/frameworks/shopify/detector.d.ts +6 -0
- package/dist/frameworks/shopify/detector.d.ts.map +1 -0
- package/dist/frameworks/shopify/detector.js +103 -0
- package/dist/frameworks/shopify/detector.js.map +1 -0
- package/dist/frameworks/types.d.ts +51 -0
- package/dist/frameworks/types.d.ts.map +1 -0
- package/dist/frameworks/types.js +21 -0
- package/dist/frameworks/types.js.map +1 -0
- package/dist/git/tracker.d.ts +56 -0
- package/dist/git/tracker.d.ts.map +1 -0
- package/dist/git/tracker.js +189 -0
- package/dist/git/tracker.js.map +1 -0
- package/dist/git/utils.d.ts +60 -0
- package/dist/git/utils.d.ts.map +1 -0
- package/dist/git/utils.js +152 -0
- package/dist/git/utils.js.map +1 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/ast/chunker.d.ts +28 -0
- package/dist/indexer/ast/chunker.d.ts.map +1 -0
- package/dist/indexer/ast/chunker.js +268 -0
- package/dist/indexer/ast/chunker.js.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts +16 -0
- package/dist/indexer/ast/complexity/cognitive.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cognitive.js +106 -0
- package/dist/indexer/ast/complexity/cognitive.js.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts +12 -0
- package/dist/indexer/ast/complexity/cyclomatic.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/cyclomatic.js +61 -0
- package/dist/indexer/ast/complexity/cyclomatic.js.map +1 -0
- package/dist/indexer/ast/complexity/halstead.d.ts +55 -0
- package/dist/indexer/ast/complexity/halstead.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/halstead.js +290 -0
- package/dist/indexer/ast/complexity/halstead.js.map +1 -0
- package/dist/indexer/ast/complexity/index.d.ts +13 -0
- package/dist/indexer/ast/complexity/index.d.ts.map +1 -0
- package/dist/indexer/ast/complexity/index.js +12 -0
- package/dist/indexer/ast/complexity/index.js.map +1 -0
- package/dist/indexer/ast/parser.d.ts +27 -0
- package/dist/indexer/ast/parser.d.ts.map +1 -0
- package/dist/indexer/ast/parser.js +103 -0
- package/dist/indexer/ast/parser.js.map +1 -0
- package/dist/indexer/ast/symbols.d.ts +17 -0
- package/dist/indexer/ast/symbols.d.ts.map +1 -0
- package/dist/indexer/ast/symbols.js +265 -0
- package/dist/indexer/ast/symbols.js.map +1 -0
- package/dist/indexer/ast/traversers/index.d.ts +19 -0
- package/dist/indexer/ast/traversers/index.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/index.js +42 -0
- package/dist/indexer/ast/traversers/index.js.map +1 -0
- package/dist/indexer/ast/traversers/php.d.ts +21 -0
- package/dist/indexer/ast/traversers/php.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/php.js +67 -0
- package/dist/indexer/ast/traversers/php.js.map +1 -0
- package/dist/indexer/ast/traversers/python.d.ts +28 -0
- package/dist/indexer/ast/traversers/python.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/python.js +67 -0
- package/dist/indexer/ast/traversers/python.js.map +1 -0
- package/dist/indexer/ast/traversers/types.d.ts +98 -0
- package/dist/indexer/ast/traversers/types.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/types.js +2 -0
- package/dist/indexer/ast/traversers/types.js.map +1 -0
- package/dist/indexer/ast/traversers/typescript.d.ts +29 -0
- package/dist/indexer/ast/traversers/typescript.d.ts.map +1 -0
- package/dist/indexer/ast/traversers/typescript.js +88 -0
- package/dist/indexer/ast/traversers/typescript.js.map +1 -0
- package/dist/indexer/ast/types.d.ts +59 -0
- package/dist/indexer/ast/types.d.ts.map +1 -0
- package/dist/indexer/ast/types.js +2 -0
- package/dist/indexer/ast/types.js.map +1 -0
- package/dist/indexer/change-detector.d.ts +17 -0
- package/dist/indexer/change-detector.d.ts.map +1 -0
- package/dist/indexer/change-detector.js +207 -0
- package/dist/indexer/change-detector.js.map +1 -0
- package/dist/indexer/chunk-batch-processor.d.ts +103 -0
- package/dist/indexer/chunk-batch-processor.d.ts.map +1 -0
- package/dist/indexer/chunk-batch-processor.js +179 -0
- package/dist/indexer/chunk-batch-processor.js.map +1 -0
- package/dist/indexer/chunker.d.ts +10 -0
- package/dist/indexer/chunker.d.ts.map +1 -0
- package/dist/indexer/chunker.js +96 -0
- package/dist/indexer/chunker.js.map +1 -0
- package/dist/indexer/dependency-analyzer.d.ts +60 -0
- package/dist/indexer/dependency-analyzer.d.ts.map +1 -0
- package/dist/indexer/dependency-analyzer.js +261 -0
- package/dist/indexer/dependency-analyzer.js.map +1 -0
- package/dist/indexer/incremental.d.ts +47 -0
- package/dist/indexer/incremental.d.ts.map +1 -0
- package/dist/indexer/incremental.js +284 -0
- package/dist/indexer/incremental.js.map +1 -0
- package/dist/indexer/index.d.ts +80 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +364 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/indexer/json-template-chunker.d.ts +9 -0
- package/dist/indexer/json-template-chunker.d.ts.map +1 -0
- package/dist/indexer/json-template-chunker.js +83 -0
- package/dist/indexer/json-template-chunker.js.map +1 -0
- package/dist/indexer/liquid-chunker.d.ts +13 -0
- package/dist/indexer/liquid-chunker.d.ts.map +1 -0
- package/dist/indexer/liquid-chunker.js +272 -0
- package/dist/indexer/liquid-chunker.js.map +1 -0
- package/dist/indexer/manifest.d.ts +122 -0
- package/dist/indexer/manifest.d.ts.map +1 -0
- package/dist/indexer/manifest.js +262 -0
- package/dist/indexer/manifest.js.map +1 -0
- package/dist/indexer/progress-tracker.d.ts +35 -0
- package/dist/indexer/progress-tracker.d.ts.map +1 -0
- package/dist/indexer/progress-tracker.js +33 -0
- package/dist/indexer/progress-tracker.js.map +1 -0
- package/dist/indexer/scanner.d.ts +16 -0
- package/dist/indexer/scanner.d.ts.map +1 -0
- package/dist/indexer/scanner.js +159 -0
- package/dist/indexer/scanner.js.map +1 -0
- package/dist/indexer/symbol-extractor.d.ts +18 -0
- package/dist/indexer/symbol-extractor.d.ts.map +1 -0
- package/dist/indexer/symbol-extractor.js +351 -0
- package/dist/indexer/symbol-extractor.js.map +1 -0
- package/dist/indexer/types.d.ts +34 -0
- package/dist/indexer/types.d.ts.map +1 -0
- package/dist/indexer/types.js +2 -0
- package/dist/indexer/types.js.map +1 -0
- package/dist/insights/complexity-analyzer.d.ts +82 -0
- package/dist/insights/complexity-analyzer.d.ts.map +1 -0
- package/dist/insights/complexity-analyzer.js +356 -0
- package/dist/insights/complexity-analyzer.js.map +1 -0
- package/dist/insights/formatters/index.d.ts +11 -0
- package/dist/insights/formatters/index.d.ts.map +1 -0
- package/dist/insights/formatters/index.js +20 -0
- package/dist/insights/formatters/index.js.map +1 -0
- package/dist/insights/formatters/json.d.ts +7 -0
- package/dist/insights/formatters/json.d.ts.map +1 -0
- package/dist/insights/formatters/json.js +14 -0
- package/dist/insights/formatters/json.js.map +1 -0
- package/dist/insights/formatters/sarif.d.ts +6 -0
- package/dist/insights/formatters/sarif.d.ts.map +1 -0
- package/dist/insights/formatters/sarif.js +113 -0
- package/dist/insights/formatters/sarif.js.map +1 -0
- package/dist/insights/formatters/text.d.ts +6 -0
- package/dist/insights/formatters/text.d.ts.map +1 -0
- package/dist/insights/formatters/text.js +154 -0
- package/dist/insights/formatters/text.js.map +1 -0
- package/dist/insights/types.d.ts +73 -0
- package/dist/insights/types.d.ts.map +1 -0
- package/dist/insights/types.js +9 -0
- package/dist/insights/types.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/path-matching.d.ts +69 -0
- package/dist/utils/path-matching.d.ts.map +1 -0
- package/dist/utils/path-matching.js +123 -0
- package/dist/utils/path-matching.js.map +1 -0
- package/dist/utils/result.d.ts +65 -0
- package/dist/utils/result.d.ts.map +1 -0
- package/dist/utils/result.js +67 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/version.d.ts +22 -0
- package/dist/utils/version.d.ts.map +1 -0
- package/dist/utils/version.js +28 -0
- package/dist/utils/version.js.map +1 -0
- package/dist/vectordb/batch-insert.d.ts +14 -0
- package/dist/vectordb/batch-insert.d.ts.map +1 -0
- package/dist/vectordb/batch-insert.js +185 -0
- package/dist/vectordb/batch-insert.js.map +1 -0
- package/dist/vectordb/boosting/composer.d.ts +51 -0
- package/dist/vectordb/boosting/composer.d.ts.map +1 -0
- package/dist/vectordb/boosting/composer.js +65 -0
- package/dist/vectordb/boosting/composer.js.map +1 -0
- package/dist/vectordb/boosting/index.d.ts +22 -0
- package/dist/vectordb/boosting/index.d.ts.map +1 -0
- package/dist/vectordb/boosting/index.js +22 -0
- package/dist/vectordb/boosting/index.js.map +1 -0
- package/dist/vectordb/boosting/strategies.d.ts +40 -0
- package/dist/vectordb/boosting/strategies.d.ts.map +1 -0
- package/dist/vectordb/boosting/strategies.js +174 -0
- package/dist/vectordb/boosting/strategies.js.map +1 -0
- package/dist/vectordb/boosting/types.d.ts +20 -0
- package/dist/vectordb/boosting/types.d.ts.map +1 -0
- package/dist/vectordb/boosting/types.js +2 -0
- package/dist/vectordb/boosting/types.js.map +1 -0
- package/dist/vectordb/intent-classifier.d.ts +99 -0
- package/dist/vectordb/intent-classifier.d.ts.map +1 -0
- package/dist/vectordb/intent-classifier.js +193 -0
- package/dist/vectordb/intent-classifier.js.map +1 -0
- package/dist/vectordb/lancedb.d.ts +45 -0
- package/dist/vectordb/lancedb.d.ts.map +1 -0
- package/dist/vectordb/lancedb.js +203 -0
- package/dist/vectordb/lancedb.js.map +1 -0
- package/dist/vectordb/maintenance.d.ts +18 -0
- package/dist/vectordb/maintenance.d.ts.map +1 -0
- package/dist/vectordb/maintenance.js +87 -0
- package/dist/vectordb/maintenance.js.map +1 -0
- package/dist/vectordb/query.d.ts +34 -0
- package/dist/vectordb/query.d.ts.map +1 -0
- package/dist/vectordb/query.js +303 -0
- package/dist/vectordb/query.js.map +1 -0
- package/dist/vectordb/relevance.d.ts +15 -0
- package/dist/vectordb/relevance.d.ts.map +1 -0
- package/dist/vectordb/relevance.js +19 -0
- package/dist/vectordb/relevance.js.map +1 -0
- package/dist/vectordb/types.d.ts +29 -0
- package/dist/vectordb/types.d.ts.map +1 -0
- package/dist/vectordb/types.js +2 -0
- package/dist/vectordb/types.js.map +1 -0
- package/dist/vectordb/version.d.ts +16 -0
- package/dist/vectordb/version.d.ts.map +1 -0
- package/dist/vectordb/version.js +40 -0
- package/dist/vectordb/version.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { defaultDetectionOptions } from './types.js';
|
|
4
|
+
import { frameworkDetectors } from './registry.js';
|
|
5
|
+
/**
|
|
6
|
+
* Strip the internal priority property from a detection result.
|
|
7
|
+
*/
|
|
8
|
+
function stripPriority(detection) {
|
|
9
|
+
const { priority, ...result } = detection;
|
|
10
|
+
return result;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Log skipped frameworks when lower confidence detections are ignored.
|
|
14
|
+
*/
|
|
15
|
+
function logSkippedFrameworks(skipped, context) {
|
|
16
|
+
if (skipped.length === 0)
|
|
17
|
+
return;
|
|
18
|
+
const names = skipped.map(d => d.name).join(', ');
|
|
19
|
+
if (context) {
|
|
20
|
+
console.log(` → Skipping ${names} at ${context.relativePath} (${context.winnerName} takes precedence)`);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
console.log(` → Skipping lower confidence detections: ${names}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Group detections by confidence level.
|
|
28
|
+
*/
|
|
29
|
+
export function groupByConfidence(detections) {
|
|
30
|
+
return {
|
|
31
|
+
high: detections.filter(d => d.confidence === 'high'),
|
|
32
|
+
medium: detections.filter(d => d.confidence === 'medium'),
|
|
33
|
+
low: detections.filter(d => d.confidence === 'low'),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Select the winner from a list using priority (highest priority wins).
|
|
38
|
+
* Returns the winner and the remaining (skipped) detections.
|
|
39
|
+
*
|
|
40
|
+
* @throws Error if detections array is empty
|
|
41
|
+
*/
|
|
42
|
+
export function selectByPriority(detections) {
|
|
43
|
+
if (detections.length === 0) {
|
|
44
|
+
throw new Error('selectByPriority requires at least one detection');
|
|
45
|
+
}
|
|
46
|
+
const sorted = [...detections].sort((a, b) => b.priority - a.priority);
|
|
47
|
+
return {
|
|
48
|
+
winner: sorted[0],
|
|
49
|
+
skipped: sorted.slice(1),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Resolve conflicts when multiple frameworks are detected at the same path.
|
|
54
|
+
*
|
|
55
|
+
* Resolution rules (applied in order):
|
|
56
|
+
* 1. Multiple HIGH confidence → keep ALL (hybrid project support)
|
|
57
|
+
* 2. Single HIGH confidence → keep it, skip lower confidence
|
|
58
|
+
* 3. No HIGH but have MEDIUM → use priority to select winner
|
|
59
|
+
* 4. Only LOW confidence → use priority to select winner
|
|
60
|
+
*
|
|
61
|
+
* @param detections - All detected frameworks with their priorities
|
|
62
|
+
* @param relativePath - Path being analyzed (for logging)
|
|
63
|
+
* @returns Array of resolved detection results
|
|
64
|
+
*/
|
|
65
|
+
export function resolveFrameworkConflicts(detections, relativePath) {
|
|
66
|
+
// No detections
|
|
67
|
+
if (detections.length === 0) {
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
// Single detection - no conflict
|
|
71
|
+
if (detections.length === 1) {
|
|
72
|
+
return [stripPriority(detections[0])];
|
|
73
|
+
}
|
|
74
|
+
// Multiple detections - apply resolution rules
|
|
75
|
+
const grouped = groupByConfidence(detections);
|
|
76
|
+
// Rule 1: Multiple HIGH confidence → hybrid project (keep all)
|
|
77
|
+
if (grouped.high.length > 1) {
|
|
78
|
+
const names = grouped.high.map(d => d.name).join(' + ');
|
|
79
|
+
console.log(` → Detected hybrid project: ${names}`);
|
|
80
|
+
logSkippedFrameworks([...grouped.medium, ...grouped.low]);
|
|
81
|
+
return grouped.high.map(stripPriority);
|
|
82
|
+
}
|
|
83
|
+
// Rule 2: Single HIGH confidence → keep it
|
|
84
|
+
if (grouped.high.length === 1) {
|
|
85
|
+
logSkippedFrameworks([...grouped.medium, ...grouped.low]);
|
|
86
|
+
return [stripPriority(grouped.high[0])];
|
|
87
|
+
}
|
|
88
|
+
// Rule 3: No HIGH but have MEDIUM → use priority
|
|
89
|
+
if (grouped.medium.length > 0) {
|
|
90
|
+
const { winner, skipped } = selectByPriority(grouped.medium);
|
|
91
|
+
logSkippedFrameworks([...skipped, ...grouped.low], {
|
|
92
|
+
relativePath,
|
|
93
|
+
winnerName: winner.name,
|
|
94
|
+
});
|
|
95
|
+
return [stripPriority(winner)];
|
|
96
|
+
}
|
|
97
|
+
// Rule 4: Only LOW confidence → use priority
|
|
98
|
+
const { winner, skipped } = selectByPriority(grouped.low);
|
|
99
|
+
if (skipped.length > 0) {
|
|
100
|
+
logSkippedFrameworks(skipped, { relativePath, winnerName: winner.name });
|
|
101
|
+
}
|
|
102
|
+
return [stripPriority(winner)];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Run all framework detectors at a path and collect results.
|
|
106
|
+
*
|
|
107
|
+
* @param rootDir - Project root directory
|
|
108
|
+
* @param relativePath - Path relative to root being scanned
|
|
109
|
+
* @returns Array of detection results with priorities
|
|
110
|
+
*/
|
|
111
|
+
export async function runAllDetectors(rootDir, relativePath) {
|
|
112
|
+
const results = [];
|
|
113
|
+
for (const detector of frameworkDetectors) {
|
|
114
|
+
try {
|
|
115
|
+
const result = await detector.detect(rootDir, relativePath);
|
|
116
|
+
if (result.detected) {
|
|
117
|
+
results.push({
|
|
118
|
+
...result,
|
|
119
|
+
priority: detector.priority ?? 0,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
console.error(`Error running detector '${detector.name}' at ${relativePath}:`, error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return results;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Detect all frameworks in a monorepo by recursively scanning subdirectories
|
|
131
|
+
* @param rootDir - Absolute path to project root
|
|
132
|
+
* @param options - Detection options (max depth, skip dirs)
|
|
133
|
+
* @returns Array of detected frameworks with their paths
|
|
134
|
+
*/
|
|
135
|
+
export async function detectAllFrameworks(rootDir, options = {}) {
|
|
136
|
+
const opts = { ...defaultDetectionOptions, ...options };
|
|
137
|
+
const results = [];
|
|
138
|
+
const visited = new Set();
|
|
139
|
+
// Detect at root first
|
|
140
|
+
await detectAtPath(rootDir, '.', results, visited);
|
|
141
|
+
// Recursively scan subdirectories
|
|
142
|
+
await scanSubdirectories(rootDir, '.', results, visited, 0, opts);
|
|
143
|
+
return results;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Detect frameworks at a specific path.
|
|
147
|
+
*
|
|
148
|
+
* Runs all detectors and resolves conflicts using confidence-based rules.
|
|
149
|
+
* Now delegates to focused helper functions for better testability.
|
|
150
|
+
*/
|
|
151
|
+
async function detectAtPath(rootDir, relativePath, results, visited) {
|
|
152
|
+
// Guard: already visited
|
|
153
|
+
const fullPath = path.join(rootDir, relativePath);
|
|
154
|
+
if (visited.has(fullPath)) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
visited.add(fullPath);
|
|
158
|
+
// Run detectors
|
|
159
|
+
const detections = await runAllDetectors(rootDir, relativePath);
|
|
160
|
+
// Resolve conflicts and add to results
|
|
161
|
+
const resolved = resolveFrameworkConflicts(detections, relativePath);
|
|
162
|
+
results.push(...resolved);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Recursively scan subdirectories for frameworks
|
|
166
|
+
*/
|
|
167
|
+
async function scanSubdirectories(rootDir, relativePath, results, visited, depth, options) {
|
|
168
|
+
// Check depth limit
|
|
169
|
+
if (depth >= options.maxDepth) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
const fullPath = path.join(rootDir, relativePath);
|
|
173
|
+
try {
|
|
174
|
+
const entries = await fs.readdir(fullPath, { withFileTypes: true });
|
|
175
|
+
// Process only directories
|
|
176
|
+
const dirs = entries.filter(e => e.isDirectory());
|
|
177
|
+
for (const dir of dirs) {
|
|
178
|
+
// Skip directories in the skip list
|
|
179
|
+
if (options.skipDirs.includes(dir.name)) {
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
// Skip hidden directories (except .git, .github which are already in skipDirs)
|
|
183
|
+
if (dir.name.startsWith('.')) {
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
const subPath = relativePath === '.'
|
|
187
|
+
? dir.name
|
|
188
|
+
: path.join(relativePath, dir.name);
|
|
189
|
+
// Detect at this subdirectory
|
|
190
|
+
await detectAtPath(rootDir, subPath, results, visited);
|
|
191
|
+
// Recurse deeper
|
|
192
|
+
await scanSubdirectories(rootDir, subPath, results, visited, depth + 1, options);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
// Silently skip directories we can't read (permission errors, etc.)
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get a human-readable summary of detected frameworks
|
|
202
|
+
*/
|
|
203
|
+
export function getDetectionSummary(results) {
|
|
204
|
+
if (results.length === 0) {
|
|
205
|
+
return 'No frameworks detected';
|
|
206
|
+
}
|
|
207
|
+
const lines = [];
|
|
208
|
+
for (const result of results) {
|
|
209
|
+
const pathDisplay = result.path === '.' ? 'root' : result.path;
|
|
210
|
+
lines.push(`${result.name} at ${pathDisplay} (${result.confidence} confidence)`);
|
|
211
|
+
if (result.evidence.length > 0) {
|
|
212
|
+
result.evidence.forEach(e => {
|
|
213
|
+
lines.push(` - ${e}`);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
return lines.join('\n');
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=detector-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector-service.js","sourceRoot":"","sources":["../../src/frameworks/detector-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/frameworks/laravel/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAuE1B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Laravel framework configuration
|
|
3
|
+
*/
|
|
4
|
+
export async function generateLaravelConfig(_rootDir, _relativePath) {
|
|
5
|
+
return {
|
|
6
|
+
include: [
|
|
7
|
+
// PHP backend
|
|
8
|
+
'app/**/*.php',
|
|
9
|
+
'routes/**/*.php',
|
|
10
|
+
'config/**/*.php',
|
|
11
|
+
'database/**/*.php',
|
|
12
|
+
'resources/**/*.php',
|
|
13
|
+
'tests/**/*.php',
|
|
14
|
+
'*.php',
|
|
15
|
+
// Frontend assets (Vue/React/Inertia) - Scoped to resources/ to avoid build output
|
|
16
|
+
'resources/**/*.js',
|
|
17
|
+
'resources/**/*.ts',
|
|
18
|
+
'resources/**/*.jsx',
|
|
19
|
+
'resources/**/*.tsx',
|
|
20
|
+
'resources/**/*.vue',
|
|
21
|
+
// Blade templates
|
|
22
|
+
'resources/views/**/*.blade.php',
|
|
23
|
+
// Documentation
|
|
24
|
+
'docs/**/*.md',
|
|
25
|
+
'README.md',
|
|
26
|
+
'CHANGELOG.md',
|
|
27
|
+
],
|
|
28
|
+
exclude: [
|
|
29
|
+
// Composer dependencies (CRITICAL: exclude before any include patterns)
|
|
30
|
+
'**/vendor/**',
|
|
31
|
+
'vendor/**',
|
|
32
|
+
// Build outputs (Vite/Mix compiled assets)
|
|
33
|
+
'**/public/build/**',
|
|
34
|
+
'public/build/**',
|
|
35
|
+
'public/hot',
|
|
36
|
+
'**/dist/**',
|
|
37
|
+
'dist/**',
|
|
38
|
+
'**/build/**',
|
|
39
|
+
'build/**',
|
|
40
|
+
// Laravel system directories
|
|
41
|
+
'storage/**',
|
|
42
|
+
'bootstrap/cache/**',
|
|
43
|
+
'public/**/*.js', // Compiled JS in public
|
|
44
|
+
'public/**/*.css', // Compiled CSS in public
|
|
45
|
+
// Database boilerplate (not useful for semantic search)
|
|
46
|
+
'database/migrations/**',
|
|
47
|
+
'database/seeders/**',
|
|
48
|
+
'database/factories/**',
|
|
49
|
+
// Node.js dependencies
|
|
50
|
+
'**/node_modules/**',
|
|
51
|
+
'node_modules/**',
|
|
52
|
+
// Test artifacts
|
|
53
|
+
'playwright-report/**',
|
|
54
|
+
'test-results/**',
|
|
55
|
+
'coverage/**',
|
|
56
|
+
// Build/generated artifacts
|
|
57
|
+
'__generated__/**',
|
|
58
|
+
// Frontend build outputs
|
|
59
|
+
'.vite/**',
|
|
60
|
+
'.nuxt/**',
|
|
61
|
+
'.next/**',
|
|
62
|
+
// Minified files
|
|
63
|
+
'**/*.min.js',
|
|
64
|
+
'**/*.min.css',
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/frameworks/laravel/config.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,aAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,cAAc;YACd,cAAc;YACd,iBAAiB;YACjB,iBAAiB;YACjB,mBAAmB;YACnB,oBAAoB;YACpB,gBAAgB;YAChB,OAAO;YACP,mFAAmF;YACnF,mBAAmB;YACnB,mBAAmB;YACnB,oBAAoB;YACpB,oBAAoB;YACpB,oBAAoB;YACpB,kBAAkB;YAClB,gCAAgC;YAChC,gBAAgB;YAChB,cAAc;YACd,WAAW;YACX,cAAc;SACf;QACD,OAAO,EAAE;YACP,wEAAwE;YACxE,cAAc;YACd,WAAW;YAEX,2CAA2C;YAC3C,oBAAoB;YACpB,iBAAiB;YACjB,YAAY;YACZ,YAAY;YACZ,SAAS;YACT,aAAa;YACb,UAAU;YAEV,6BAA6B;YAC7B,YAAY;YACZ,oBAAoB;YACpB,gBAAgB,EAAG,wBAAwB;YAC3C,iBAAiB,EAAE,yBAAyB;YAE5C,wDAAwD;YACxD,wBAAwB;YACxB,qBAAqB;YACrB,uBAAuB;YAEvB,uBAAuB;YACvB,oBAAoB;YACpB,iBAAiB;YAEjB,iBAAiB;YACjB,sBAAsB;YACtB,iBAAiB;YACjB,aAAa;YAEb,4BAA4B;YAC5B,kBAAkB;YAElB,yBAAyB;YACzB,UAAU;YACV,UAAU;YACV,UAAU;YAEV,iBAAiB;YACjB,aAAa;YACb,cAAc;SACf;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/frameworks/laravel/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,iBAoG7B,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { generateLaravelConfig } from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Laravel/PHP framework detector
|
|
6
|
+
*/
|
|
7
|
+
export const laravelDetector = {
|
|
8
|
+
name: 'laravel',
|
|
9
|
+
priority: 100, // Laravel takes precedence over Node.js
|
|
10
|
+
async detect(rootDir, relativePath) {
|
|
11
|
+
const fullPath = path.join(rootDir, relativePath);
|
|
12
|
+
const result = {
|
|
13
|
+
detected: false,
|
|
14
|
+
name: 'laravel',
|
|
15
|
+
path: relativePath,
|
|
16
|
+
confidence: 'low',
|
|
17
|
+
evidence: [],
|
|
18
|
+
};
|
|
19
|
+
// Check for composer.json with Laravel
|
|
20
|
+
const composerJsonPath = path.join(fullPath, 'composer.json');
|
|
21
|
+
let composerJson = null;
|
|
22
|
+
try {
|
|
23
|
+
const content = await fs.readFile(composerJsonPath, 'utf-8');
|
|
24
|
+
composerJson = JSON.parse(content);
|
|
25
|
+
result.evidence.push('Found composer.json');
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// No composer.json, not a Laravel project
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
// Check if Laravel framework is in dependencies
|
|
32
|
+
const hasLaravel = composerJson.require?.['laravel/framework'] ||
|
|
33
|
+
composerJson['require-dev']?.['laravel/framework'];
|
|
34
|
+
if (!hasLaravel) {
|
|
35
|
+
// Has composer.json but not Laravel
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
result.evidence.push('Laravel framework detected in composer.json');
|
|
39
|
+
// Check for artisan file (strong indicator of Laravel)
|
|
40
|
+
const artisanPath = path.join(fullPath, 'artisan');
|
|
41
|
+
try {
|
|
42
|
+
await fs.access(artisanPath);
|
|
43
|
+
result.evidence.push('Found artisan file');
|
|
44
|
+
result.confidence = 'high';
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
result.confidence = 'medium';
|
|
48
|
+
}
|
|
49
|
+
// Check for typical Laravel directory structure
|
|
50
|
+
const laravelDirs = ['app', 'routes', 'config', 'database'];
|
|
51
|
+
let foundDirs = 0;
|
|
52
|
+
for (const dir of laravelDirs) {
|
|
53
|
+
try {
|
|
54
|
+
const dirPath = path.join(fullPath, dir);
|
|
55
|
+
const stats = await fs.stat(dirPath);
|
|
56
|
+
if (stats.isDirectory()) {
|
|
57
|
+
foundDirs++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Directory doesn't exist
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (foundDirs >= 2) {
|
|
65
|
+
result.evidence.push(`Laravel directory structure detected (${foundDirs}/${laravelDirs.length} dirs)`);
|
|
66
|
+
result.confidence = 'high';
|
|
67
|
+
}
|
|
68
|
+
// Check for test directories
|
|
69
|
+
const testDirsToCheck = [
|
|
70
|
+
path.join(fullPath, 'tests', 'Feature'),
|
|
71
|
+
path.join(fullPath, 'tests', 'Unit'),
|
|
72
|
+
];
|
|
73
|
+
for (const testDir of testDirsToCheck) {
|
|
74
|
+
try {
|
|
75
|
+
const stats = await fs.stat(testDir);
|
|
76
|
+
if (stats.isDirectory()) {
|
|
77
|
+
const dirName = path.basename(path.dirname(testDir)) + '/' + path.basename(testDir);
|
|
78
|
+
result.evidence.push(`Found ${dirName} test directory`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Test directory doesn't exist
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Extract Laravel version if available
|
|
86
|
+
if (composerJson.require?.['laravel/framework']) {
|
|
87
|
+
result.version = composerJson.require['laravel/framework'];
|
|
88
|
+
}
|
|
89
|
+
result.detected = true;
|
|
90
|
+
return result;
|
|
91
|
+
},
|
|
92
|
+
async generateConfig(rootDir, relativePath) {
|
|
93
|
+
return generateLaravelConfig(rootDir, relativePath);
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/frameworks/laravel/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/frameworks/nodejs/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CA2D1B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate Node.js framework configuration
|
|
3
|
+
*/
|
|
4
|
+
export async function generateNodeJsConfig(_rootDir, _relativePath) {
|
|
5
|
+
return {
|
|
6
|
+
include: [
|
|
7
|
+
// Broader patterns to catch all common project structures
|
|
8
|
+
// (frontend/, src/, lib/, app/, components/, etc.)
|
|
9
|
+
'**/*.ts',
|
|
10
|
+
'**/*.tsx',
|
|
11
|
+
'**/*.js',
|
|
12
|
+
'**/*.jsx',
|
|
13
|
+
'**/*.vue',
|
|
14
|
+
'**/*.mjs',
|
|
15
|
+
'**/*.cjs',
|
|
16
|
+
'**/*.md',
|
|
17
|
+
'**/*.mdx',
|
|
18
|
+
],
|
|
19
|
+
exclude: [
|
|
20
|
+
// Node.js dependencies (with ** prefix for nested projects)
|
|
21
|
+
'**/node_modules/**',
|
|
22
|
+
'node_modules/**',
|
|
23
|
+
// PHP/Composer dependencies (for monorepos with PHP)
|
|
24
|
+
'**/vendor/**',
|
|
25
|
+
'vendor/**',
|
|
26
|
+
// Build outputs
|
|
27
|
+
'**/dist/**',
|
|
28
|
+
'dist/**',
|
|
29
|
+
'**/build/**',
|
|
30
|
+
'build/**',
|
|
31
|
+
'**/public/build/**',
|
|
32
|
+
'public/build/**',
|
|
33
|
+
'out/**',
|
|
34
|
+
// Framework build caches
|
|
35
|
+
'.next/**',
|
|
36
|
+
'.nuxt/**',
|
|
37
|
+
'.vite/**',
|
|
38
|
+
'.lien/**',
|
|
39
|
+
// Test artifacts
|
|
40
|
+
'coverage/**',
|
|
41
|
+
'playwright-report/**',
|
|
42
|
+
'test-results/**',
|
|
43
|
+
// Build/generated artifacts
|
|
44
|
+
'__generated__/**',
|
|
45
|
+
// Common build/cache directories
|
|
46
|
+
'.cache/**',
|
|
47
|
+
'.turbo/**',
|
|
48
|
+
'.vercel/**',
|
|
49
|
+
'.netlify/**',
|
|
50
|
+
// Minified/bundled files
|
|
51
|
+
'**/*.min.js',
|
|
52
|
+
'**/*.min.css',
|
|
53
|
+
'**/*.bundle.js',
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/frameworks/nodejs/config.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAgB,EAChB,aAAqB;IAErB,OAAO;QACL,OAAO,EAAE;YACP,0DAA0D;YAC1D,mDAAmD;YACnD,SAAS;YACT,UAAU;YACV,SAAS;YACT,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YACV,SAAS;YACT,UAAU;SACX;QACD,OAAO,EAAE;YACP,4DAA4D;YAC5D,oBAAoB;YACpB,iBAAiB;YAEjB,qDAAqD;YACrD,cAAc;YACd,WAAW;YAEX,gBAAgB;YAChB,YAAY;YACZ,SAAS;YACT,aAAa;YACb,UAAU;YACV,oBAAoB;YACpB,iBAAiB;YACjB,QAAQ;YAER,yBAAyB;YACzB,UAAU;YACV,UAAU;YACV,UAAU;YACV,UAAU;YAEV,iBAAiB;YACjB,aAAa;YACb,sBAAsB;YACtB,iBAAiB;YAEjB,4BAA4B;YAC5B,kBAAkB;YAElB,iCAAiC;YACjC,WAAW;YACX,WAAW;YACX,YAAY;YACZ,aAAa;YAEb,yBAAyB;YACzB,aAAa;YACb,cAAc;YACd,gBAAgB;SACjB;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/frameworks/nodejs/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAGjE;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,iBAkF5B,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import fs from 'fs/promises';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { generateNodeJsConfig } from './config.js';
|
|
4
|
+
/**
|
|
5
|
+
* Node.js/TypeScript/JavaScript framework detector
|
|
6
|
+
*/
|
|
7
|
+
export const nodejsDetector = {
|
|
8
|
+
name: 'nodejs',
|
|
9
|
+
priority: 50, // Generic, yields to specific frameworks like Laravel
|
|
10
|
+
async detect(rootDir, relativePath) {
|
|
11
|
+
const fullPath = path.join(rootDir, relativePath);
|
|
12
|
+
const result = {
|
|
13
|
+
detected: false,
|
|
14
|
+
name: 'nodejs',
|
|
15
|
+
path: relativePath,
|
|
16
|
+
confidence: 'low',
|
|
17
|
+
evidence: [],
|
|
18
|
+
};
|
|
19
|
+
// Check for package.json
|
|
20
|
+
const packageJsonPath = path.join(fullPath, 'package.json');
|
|
21
|
+
let packageJson = null;
|
|
22
|
+
try {
|
|
23
|
+
const content = await fs.readFile(packageJsonPath, 'utf-8');
|
|
24
|
+
packageJson = JSON.parse(content);
|
|
25
|
+
result.evidence.push('Found package.json');
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
// No package.json, not a Node.js project
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
// At this point, we know it's a Node.js project
|
|
32
|
+
result.detected = true;
|
|
33
|
+
result.confidence = 'high';
|
|
34
|
+
// Check for TypeScript
|
|
35
|
+
if (packageJson.devDependencies?.typescript || packageJson.dependencies?.typescript) {
|
|
36
|
+
result.evidence.push('TypeScript detected');
|
|
37
|
+
}
|
|
38
|
+
// Check for testing frameworks
|
|
39
|
+
const testFrameworks = [
|
|
40
|
+
{ name: 'jest', display: 'Jest' },
|
|
41
|
+
{ name: 'vitest', display: 'Vitest' },
|
|
42
|
+
{ name: 'mocha', display: 'Mocha' },
|
|
43
|
+
{ name: 'ava', display: 'AVA' },
|
|
44
|
+
{ name: '@playwright/test', display: 'Playwright' },
|
|
45
|
+
];
|
|
46
|
+
for (const framework of testFrameworks) {
|
|
47
|
+
if (packageJson.devDependencies?.[framework.name] ||
|
|
48
|
+
packageJson.dependencies?.[framework.name]) {
|
|
49
|
+
result.evidence.push(`${framework.display} test framework detected`);
|
|
50
|
+
break; // Only mention first test framework found
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Check for common frameworks/libraries
|
|
54
|
+
const frameworks = [
|
|
55
|
+
{ name: 'next', display: 'Next.js' },
|
|
56
|
+
{ name: 'react', display: 'React' },
|
|
57
|
+
{ name: 'vue', display: 'Vue' },
|
|
58
|
+
{ name: 'express', display: 'Express' },
|
|
59
|
+
{ name: '@nestjs/core', display: 'NestJS' },
|
|
60
|
+
];
|
|
61
|
+
for (const fw of frameworks) {
|
|
62
|
+
if (packageJson.dependencies?.[fw.name]) {
|
|
63
|
+
result.evidence.push(`${fw.display} detected`);
|
|
64
|
+
break; // Only mention first framework found
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Try to detect version from package.json engines or node version
|
|
68
|
+
if (packageJson.engines?.node) {
|
|
69
|
+
result.version = packageJson.engines.node;
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
},
|
|
73
|
+
async generateConfig(rootDir, relativePath) {
|
|
74
|
+
return generateNodeJsConfig(rootDir, relativePath);
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/frameworks/nodejs/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/frameworks/php/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,eAAe,CAAC,CAwD1B"}
|