viberadar 0.2.1 → 0.3.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/dist/init/prompt-builder.d.ts +1 -0
- package/dist/init/prompt-builder.d.ts.map +1 -1
- package/dist/init/prompt-builder.js +81 -30
- package/dist/init/prompt-builder.js.map +1 -1
- package/dist/scanner/index.d.ts +23 -0
- package/dist/scanner/index.d.ts.map +1 -1
- package/dist/scanner/index.js +70 -6
- package/dist/scanner/index.js.map +1 -1
- package/dist/ui/dashboard.html +571 -402
- package/package.json +1 -1
|
@@ -9,6 +9,7 @@ export interface ProjectSnapshot {
|
|
|
9
9
|
testFiles: string[];
|
|
10
10
|
totalFiles: number;
|
|
11
11
|
techStack: string[];
|
|
12
|
+
existingConfig: string | null;
|
|
12
13
|
}
|
|
13
14
|
export declare function buildSnapshot(projectRoot: string): ProjectSnapshot;
|
|
14
15
|
export declare function buildPrompt(snap: ProjectSnapshot): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAyHD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAqClE;AAwCD,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAyIzD"}
|
|
@@ -174,6 +174,13 @@ function buildSnapshot(projectRoot) {
|
|
|
174
174
|
const testFiles = collectFiles(projectRoot, /\.(test|spec)\.(tsx?|jsx?)$/)
|
|
175
175
|
.map(f => path.relative(projectRoot, f));
|
|
176
176
|
const allFiles = collectFiles(projectRoot, /\.(tsx?|jsx?)$/, 500);
|
|
177
|
+
// Читаем существующий конфиг если есть
|
|
178
|
+
let existingConfig = null;
|
|
179
|
+
const configPath = path.join(projectRoot, 'viberadar.config.json');
|
|
180
|
+
try {
|
|
181
|
+
existingConfig = fs.readFileSync(configPath, 'utf-8');
|
|
182
|
+
}
|
|
183
|
+
catch { }
|
|
177
184
|
return {
|
|
178
185
|
name: resolveProjectName(packageJson, projectRoot),
|
|
179
186
|
projectRoot,
|
|
@@ -185,6 +192,7 @@ function buildSnapshot(projectRoot) {
|
|
|
185
192
|
testFiles: testFiles.slice(0, 30),
|
|
186
193
|
totalFiles: allFiles.length,
|
|
187
194
|
techStack: detectTechStack(packageJson),
|
|
195
|
+
existingConfig,
|
|
188
196
|
};
|
|
189
197
|
}
|
|
190
198
|
// ─── Шаблон промпта ────────────────────────────────────────────────────────────
|
|
@@ -227,16 +235,8 @@ function buildPrompt(snap) {
|
|
|
227
235
|
const scripts = snap.packageJson.scripts
|
|
228
236
|
? filterScripts(snap.packageJson.scripts)
|
|
229
237
|
: {};
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
## Контекст
|
|
233
|
-
|
|
234
|
-
VibeRadar — инструмент для визуализации архитектуры проекта и тест-покрытия по фичам.
|
|
235
|
-
Тебе нужно проанализировать проект **${snap.name}** и создать файл \`viberadar.config.json\`
|
|
236
|
-
с описанием бизнес-фич и паттернами файлов, которые к ним относятся.
|
|
237
|
-
|
|
238
|
-
---
|
|
239
|
-
|
|
238
|
+
const isUpdate = snap.existingConfig !== null;
|
|
239
|
+
const projectData = `
|
|
240
240
|
## Данные о проекте
|
|
241
241
|
|
|
242
242
|
**Название:** ${snap.name}
|
|
@@ -259,7 +259,72 @@ ${snap.testFiles.map(f => `- ${f}`).join('\n')}
|
|
|
259
259
|
` : ''}
|
|
260
260
|
${Object.keys(scripts).length > 0 ? `### Ключевые скрипты:
|
|
261
261
|
${Object.entries(scripts).map(([k, v]) => `- \`${k}\`: ${v}`).join('\n')}
|
|
262
|
-
` : ''}
|
|
262
|
+
` : ''}`;
|
|
263
|
+
const configRules = `**Правила конфига:**
|
|
264
|
+
- Оптимально **10–20 фич** — не дроби слишком мелко, не объединяй несвязанное
|
|
265
|
+
- Каждая фича — понятное бизнес-название на русском или английском
|
|
266
|
+
- Паттерны в \`include\` — glob относительно корня проекта, учитывай и клиент и сервер
|
|
267
|
+
- Один файл может попадать в несколько фич — это нормально
|
|
268
|
+
- Не создавай фичу "other" или "misc"
|
|
269
|
+
|
|
270
|
+
**Цвета** (используй разные для каждой фичи):
|
|
271
|
+
\`#58a6ff\` синий · \`#3fb950\` зелёный · \`#d2a8ff\` фиолетовый · \`#ffa657\` оранжевый
|
|
272
|
+
\`#f85149\` красный · \`#e3b341\` жёлтый · \`#39d353\` лайм · \`#79c0ff\` голубой · \`#ff7b72\` коралловый · \`#a371f7\` лаванда · \`#ff7b72\` коралловый`;
|
|
273
|
+
if (isUpdate) {
|
|
274
|
+
// ── Режим обновления ──────────────────────────────────────────────────────
|
|
275
|
+
return `# VibeRadar — Обновление карты фич проекта
|
|
276
|
+
|
|
277
|
+
## Контекст
|
|
278
|
+
|
|
279
|
+
VibeRadar — инструмент для визуализации архитектуры проекта и тест-покрытия по фичам.
|
|
280
|
+
Конфиг для проекта **${snap.name}** уже существует. Твоя задача — **обновить** его
|
|
281
|
+
согласно пожеланиям пользователя.
|
|
282
|
+
${projectData}
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Текущий конфиг (viberadar.config.json):
|
|
287
|
+
|
|
288
|
+
\`\`\`json
|
|
289
|
+
${snap.existingConfig}
|
|
290
|
+
\`\`\`
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## Твоя задача
|
|
295
|
+
|
|
296
|
+
Пользователь хочет изменить конфиг. Выслушай его пожелания и внеси изменения.
|
|
297
|
+
|
|
298
|
+
**Что можно делать:**
|
|
299
|
+
- Разбить одну фичу на несколько (например, "admin" → "admin-users" + "admin-workspaces")
|
|
300
|
+
- Объединить несколько фич в одну
|
|
301
|
+
- Переименовать фичу
|
|
302
|
+
- Добавить новую фичу
|
|
303
|
+
- Изменить паттерны \`include\` чтобы точнее покрывать файлы
|
|
304
|
+
- Изменить цвет фичи
|
|
305
|
+
|
|
306
|
+
${configRules}
|
|
307
|
+
|
|
308
|
+
---
|
|
309
|
+
|
|
310
|
+
## Порядок ответа
|
|
311
|
+
|
|
312
|
+
1. **Уточни** что именно пользователь хочет изменить (если непонятно)
|
|
313
|
+
2. **Внеси изменения** в конфиг — покажи только изменённые фичи или весь файл целиком
|
|
314
|
+
3. **Сохрани** обновлённый \`viberadar.config.json\` в корне проекта
|
|
315
|
+
|
|
316
|
+
Спроси: "Что хочешь изменить в текущем конфиге?"
|
|
317
|
+
`;
|
|
318
|
+
}
|
|
319
|
+
// ── Режим создания ────────────────────────────────────────────────────────
|
|
320
|
+
return `# VibeRadar — Настройка карты фич проекта
|
|
321
|
+
|
|
322
|
+
## Контекст
|
|
323
|
+
|
|
324
|
+
VibeRadar — инструмент для визуализации архитектуры проекта и тест-покрытия по фичам.
|
|
325
|
+
Тебе нужно проанализировать проект **${snap.name}** и создать файл \`viberadar.config.json\`
|
|
326
|
+
с описанием бизнес-фич и паттернами файлов, которые к ним относятся.
|
|
327
|
+
${projectData}
|
|
263
328
|
|
|
264
329
|
---
|
|
265
330
|
|
|
@@ -278,37 +343,23 @@ ${Object.entries(scripts).map(([k, v]) => `- \`${k}\`: ${v}`).join('\n')}
|
|
|
278
343
|
**ОБЯЗАТЕЛЬНО** задай вопросы по неочевидным модулям прежде чем генерировать конфиг.
|
|
279
344
|
Не угадывай назначение — лучше 3–5 вопросов, чем неточный результат.
|
|
280
345
|
|
|
281
|
-
Спрашивай если видишь:
|
|
282
|
-
- Папки с неочевидным названием (например \`actions/\`, \`canvas/\`, \`guards/\`)
|
|
283
|
-
- Модули которые могут быть как фичей, так и внутренней системой
|
|
284
|
-
- Несколько похожих папок (например \`skills/\` и \`agents/\`)
|
|
285
|
-
|
|
286
346
|
### Шаг 3 — Генерация конфига
|
|
287
|
-
После
|
|
347
|
+
После ответов создай \`viberadar.config.json\` в корне проекта.
|
|
288
348
|
|
|
289
|
-
|
|
290
|
-
- Оптимально **10–20 фич** — не дроби слишком мелко, не объединяй несвязанное
|
|
291
|
-
- Каждая фича — понятное бизнес-название на русском или английском
|
|
292
|
-
- Паттерны в \`include\` — glob относительно корня проекта, учитывай и клиент и сервер
|
|
293
|
-
- Один файл может попадать в несколько фич — это нормально
|
|
294
|
-
- Не создавай фичу "other" или "misc"
|
|
349
|
+
${configRules}
|
|
295
350
|
|
|
296
|
-
**Пример готового
|
|
351
|
+
**Пример готового конфига:**
|
|
297
352
|
\`\`\`json
|
|
298
353
|
${CONFIG_EXAMPLE}
|
|
299
354
|
\`\`\`
|
|
300
355
|
|
|
301
|
-
**Цвета** (используй разные для каждой фичи):
|
|
302
|
-
\`#58a6ff\` синий · \`#3fb950\` зелёный · \`#d2a8ff\` фиолетовый · \`#ffa657\` оранжевый
|
|
303
|
-
\`#f85149\` красный · \`#e3b341\` жёлтый · \`#39d353\` лайм · \`#79c0ff\` голубой · \`#ff7b72\` коралловый
|
|
304
|
-
|
|
305
356
|
---
|
|
306
357
|
|
|
307
358
|
## Порядок ответа
|
|
308
359
|
|
|
309
|
-
1. **Сначала** — уточняющие вопросы
|
|
360
|
+
1. **Сначала** — уточняющие вопросы
|
|
310
361
|
2. **После ответов** — создай \`viberadar.config.json\`
|
|
311
|
-
3. **Кратко** — объясни логику разбивки
|
|
362
|
+
3. **Кратко** — объясни логику разбивки
|
|
312
363
|
|
|
313
364
|
Начинай с вопросов.
|
|
314
365
|
`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/init/prompt-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface ModuleInfo {
|
|
|
9
9
|
coverage?: CoverageInfo;
|
|
10
10
|
size: number;
|
|
11
11
|
dependencies: string[];
|
|
12
|
+
featureKeys: string[];
|
|
12
13
|
}
|
|
13
14
|
export interface CoverageInfo {
|
|
14
15
|
lines: number;
|
|
@@ -16,12 +17,34 @@ export interface CoverageInfo {
|
|
|
16
17
|
functions: number;
|
|
17
18
|
branches: number;
|
|
18
19
|
}
|
|
20
|
+
export interface FeatureConfig {
|
|
21
|
+
label: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
include: string[];
|
|
24
|
+
color: string;
|
|
25
|
+
}
|
|
26
|
+
export interface VibeRadarConfig {
|
|
27
|
+
version: string;
|
|
28
|
+
features: Record<string, FeatureConfig>;
|
|
29
|
+
}
|
|
30
|
+
export interface FeatureResult {
|
|
31
|
+
key: string;
|
|
32
|
+
label: string;
|
|
33
|
+
description: string;
|
|
34
|
+
color: string;
|
|
35
|
+
fileCount: number;
|
|
36
|
+
testFileCount: number;
|
|
37
|
+
testedCount: number;
|
|
38
|
+
coveragePct?: number;
|
|
39
|
+
}
|
|
19
40
|
export interface ScanResult {
|
|
20
41
|
projectRoot: string;
|
|
21
42
|
projectName: string;
|
|
22
43
|
scannedAt: string;
|
|
23
44
|
modules: ModuleInfo[];
|
|
24
45
|
totalCoverage?: CoverageInfo;
|
|
46
|
+
features: FeatureResult[] | null;
|
|
47
|
+
hasConfig: boolean;
|
|
25
48
|
}
|
|
26
49
|
export declare function scanProject(projectRoot: string): Promise<ScanResult>;
|
|
27
50
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAID,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,OAAO,CAAC;CACpB;AA0FD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiH1E"}
|
package/dist/scanner/index.js
CHANGED
|
@@ -37,12 +37,38 @@ exports.scanProject = scanProject;
|
|
|
37
37
|
const fs = __importStar(require("fs"));
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const glob_1 = require("glob");
|
|
40
|
+
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
40
41
|
const IGNORE_DIRS = [
|
|
41
42
|
'node_modules', 'dist', 'build', '.git', '.next',
|
|
42
43
|
'coverage', '.nyc_output', '__pycache__', '.venv',
|
|
43
44
|
];
|
|
44
45
|
const SOURCE_EXTENSIONS = ['.ts', '.tsx', '.js', '.jsx', '.vue', '.svelte'];
|
|
45
46
|
const TEST_PATTERNS = ['.test.', '.spec.', '__tests__'];
|
|
47
|
+
// ─── Glob pattern matcher ─────────────────────────────────────────────────────
|
|
48
|
+
/**
|
|
49
|
+
* Converts a glob pattern (relative to project root) to a RegExp and tests relPath.
|
|
50
|
+
* Supports: **, *, exact paths.
|
|
51
|
+
*/
|
|
52
|
+
function fileMatchesGlob(relPath, pattern) {
|
|
53
|
+
const normalPath = relPath.replace(/\\/g, '/');
|
|
54
|
+
let regexStr = pattern
|
|
55
|
+
.replace(/\\/g, '/')
|
|
56
|
+
.replace(/[.+^${}()|[\]]/g, '\\$&') // escape regex special chars (not *)
|
|
57
|
+
.replace(/\*\*/g, '\x00') // placeholder for **
|
|
58
|
+
.replace(/\*/g, '[^/]*') // * = anything except /
|
|
59
|
+
.replace(/\x00\//g, '(.+/)?') // **/ = zero or more directory segments
|
|
60
|
+
.replace(/\x00/g, '.*'); // ** alone = anything
|
|
61
|
+
try {
|
|
62
|
+
return new RegExp('^' + regexStr + '$').test(normalPath);
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function fileMatchesFeature(relPath, include) {
|
|
69
|
+
return include.some(p => fileMatchesGlob(relPath, p));
|
|
70
|
+
}
|
|
71
|
+
// ─── Module detection helpers ─────────────────────────────────────────────────
|
|
46
72
|
function detectType(filePath) {
|
|
47
73
|
const p = filePath.toLowerCase();
|
|
48
74
|
if (TEST_PATTERNS.some((t) => p.includes(t)))
|
|
@@ -74,11 +100,8 @@ function extractDependencies(filePath) {
|
|
|
74
100
|
return [];
|
|
75
101
|
}
|
|
76
102
|
}
|
|
77
|
-
function
|
|
103
|
+
function loadCoverageMap(projectRoot) {
|
|
78
104
|
const coverageMap = new Map();
|
|
79
|
-
// Try Playwright JSON report
|
|
80
|
-
const playwrightReport = path.join(projectRoot, 'playwright-report', 'results.json');
|
|
81
|
-
// Try V8/Istanbul coverage
|
|
82
105
|
const v8Coverage = path.join(projectRoot, 'coverage', 'coverage-summary.json');
|
|
83
106
|
if (fs.existsSync(v8Coverage)) {
|
|
84
107
|
try {
|
|
@@ -100,6 +123,7 @@ function loadPlaywrightCoverage(projectRoot) {
|
|
|
100
123
|
}
|
|
101
124
|
return coverageMap;
|
|
102
125
|
}
|
|
126
|
+
// ─── Main scan function ───────────────────────────────────────────────────────
|
|
103
127
|
async function scanProject(projectRoot) {
|
|
104
128
|
const pkgPath = path.join(projectRoot, 'package.json');
|
|
105
129
|
let projectName = path.basename(projectRoot);
|
|
@@ -117,13 +141,12 @@ async function scanProject(projectRoot) {
|
|
|
117
141
|
ignore: ignorePattern,
|
|
118
142
|
absolute: true,
|
|
119
143
|
});
|
|
120
|
-
const coverageMap =
|
|
144
|
+
const coverageMap = loadCoverageMap(projectRoot);
|
|
121
145
|
const testFiles = new Set(files.filter((f) => TEST_PATTERNS.some((t) => f.includes(t))));
|
|
122
146
|
const modules = files.map((filePath) => {
|
|
123
147
|
const relativePath = path.relative(projectRoot, filePath);
|
|
124
148
|
const name = path.basename(filePath, path.extname(filePath));
|
|
125
149
|
const isTest = TEST_PATTERNS.some((t) => filePath.includes(t));
|
|
126
|
-
// Try to find test file for non-test modules
|
|
127
150
|
let testFile;
|
|
128
151
|
if (!isTest) {
|
|
129
152
|
const base = filePath.replace(/\.[^.]+$/, '');
|
|
@@ -151,13 +174,54 @@ async function scanProject(projectRoot) {
|
|
|
151
174
|
coverage: coverageMap.get(filePath),
|
|
152
175
|
size,
|
|
153
176
|
dependencies: extractDependencies(filePath),
|
|
177
|
+
featureKeys: [], // filled below
|
|
154
178
|
};
|
|
155
179
|
});
|
|
180
|
+
// ─── Load viberadar.config.json ──────────────────────────────────────────────
|
|
181
|
+
let config = null;
|
|
182
|
+
const configPath = path.join(projectRoot, 'viberadar.config.json');
|
|
183
|
+
try {
|
|
184
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
185
|
+
}
|
|
186
|
+
catch { }
|
|
187
|
+
let features = null;
|
|
188
|
+
if (config) {
|
|
189
|
+
const featureEntries = Object.entries(config.features);
|
|
190
|
+
// Assign feature keys to each module
|
|
191
|
+
for (const m of modules) {
|
|
192
|
+
m.featureKeys = featureEntries
|
|
193
|
+
.filter(([, f]) => fileMatchesFeature(m.relativePath, f.include))
|
|
194
|
+
.map(([key]) => key);
|
|
195
|
+
}
|
|
196
|
+
const sourceModules = modules.filter(m => m.type !== 'test');
|
|
197
|
+
const testModules = modules.filter(m => m.type === 'test');
|
|
198
|
+
features = featureEntries.map(([key, feat]) => {
|
|
199
|
+
const srcFiles = sourceModules.filter(m => fileMatchesFeature(m.relativePath, feat.include));
|
|
200
|
+
const tstFiles = testModules.filter(m => fileMatchesFeature(m.relativePath, feat.include));
|
|
201
|
+
const testedCount = srcFiles.filter(m => m.hasTests).length;
|
|
202
|
+
const covFiles = srcFiles.filter(m => m.coverage?.lines !== undefined);
|
|
203
|
+
const coveragePct = covFiles.length > 0
|
|
204
|
+
? covFiles.reduce((s, m) => s + m.coverage.lines, 0) / covFiles.length
|
|
205
|
+
: undefined;
|
|
206
|
+
return {
|
|
207
|
+
key,
|
|
208
|
+
label: feat.label,
|
|
209
|
+
description: feat.description || '',
|
|
210
|
+
color: feat.color,
|
|
211
|
+
fileCount: srcFiles.length,
|
|
212
|
+
testFileCount: tstFiles.length,
|
|
213
|
+
testedCount,
|
|
214
|
+
coveragePct,
|
|
215
|
+
};
|
|
216
|
+
});
|
|
217
|
+
}
|
|
156
218
|
return {
|
|
157
219
|
projectRoot,
|
|
158
220
|
projectName,
|
|
159
221
|
scannedAt: new Date().toISOString(),
|
|
160
222
|
modules,
|
|
223
|
+
features,
|
|
224
|
+
hasConfig: config !== null,
|
|
161
225
|
};
|
|
162
226
|
}
|
|
163
227
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanner/index.ts"],"names":[],"mappings":"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"}
|